Add Force Software Encoder Feature

This commit is contained in:
copecone committed 2026-06-23 09:22:55 +09:00
1 parent 5f463273c7
commit 33ddd6a3d3
5 files changed
+33 -10

No files matched your search

+17 -7
View File
@@ -1,4 +1,3 @@
using System.Text;
using ADOFAIRenderer.Core;
using ADOFAIRenderer.Data;
using ADOFAIRenderer.Util.FFmpeg;
@@ -103,7 +102,8 @@ namespace ADOFAIRenderer.UI
Bitrate = config.EncodingConfig.Bitrate,
MaxBitrate = config.EncodingConfig.MaxBitrate,
QP = config.EncodingConfig.QP,
KeyframeInterval = config.EncodingConfig.KeyframeInterval
KeyframeInterval = config.EncodingConfig.KeyframeInterval,
ForceSoftwareEncoder = config.EncodingConfig.ForceSoftwareEncoder
};
if (_root.Contains(_encodingConfigContainer))
@@ -203,6 +203,14 @@ namespace ADOFAIRenderer.UI
keyframeRow.Add(keyframeField);
_encodingConfigContainer.Add(keyframeRow);
// 6.75. 강제 소프트웨어 인코더 로우 (라벨 + 토글)
var forceSoftwareRow = CreateRow();
var forceSoftwareLabel = CreateFormLabel("소프트웨어 인코더");
var forceSoftwareToggle = new Toggle { name = "ForceSoftwareEncoder", label = "", value = tempConfig.ForceSoftwareEncoder };
forceSoftwareRow.Add(forceSoftwareLabel);
forceSoftwareRow.Add(forceSoftwareToggle);
_encodingConfigContainer.Add(forceSoftwareRow);
// 7. QP = 0 (무손실) 경고 라벨 로우 생성 (ui-row 클래스를 상속받아 NanumSquareNeo 폰트가 적용되도록 처리)
var warningRow = CreateRow();
warningRow.style.height = StyleKeyword.Auto;
@@ -240,10 +248,10 @@ namespace ADOFAIRenderer.UI
{
if (System.Enum.TryParse<RateControlMode>(selectedModeStr, out var mode))
{
bitrateRow.style.display = (mode == RateControlMode.CBR || mode == RateControlMode.VBR) ? DisplayStyle.Flex : DisplayStyle.None;
maxBitrateRow.style.display = (mode == RateControlMode.VBR) ? DisplayStyle.Flex : DisplayStyle.None;
qpRow.style.display = (mode == RateControlMode.CQP) ? DisplayStyle.Flex : DisplayStyle.None;
warningRow.style.display = (mode == RateControlMode.CQP && qpField.value == 0) ? DisplayStyle.Flex : DisplayStyle.None;
bitrateRow.style.display = mode is RateControlMode.CBR or RateControlMode.VBR ? DisplayStyle.Flex : DisplayStyle.None;
maxBitrateRow.style.display = mode == RateControlMode.VBR ? DisplayStyle.Flex : DisplayStyle.None;
qpRow.style.display = mode == RateControlMode.CQP ? DisplayStyle.Flex : DisplayStyle.None;
warningRow.style.display = mode == RateControlMode.CQP && qpField.value == 0 ? DisplayStyle.Flex : DisplayStyle.None;
}
}
@@ -292,6 +300,7 @@ namespace ADOFAIRenderer.UI
tempConfig.MaxBitrate = maxBitrateField.value;
tempConfig.QP = qpField.value;
tempConfig.KeyframeInterval = keyframeField.value;
tempConfig.ForceSoftwareEncoder = forceSoftwareToggle.value;
if (tempConfig.RateControlMode == RateControlMode.VBR && tempConfig.MaxBitrate < tempConfig.Bitrate)
{
@@ -362,7 +371,8 @@ namespace ADOFAIRenderer.UI
{
RateControlMode = RateControlMode.CBR,
Bitrate = 30000, MaxBitrate = 50000,
QP = 18, KeyframeInterval = 2.0
QP = 18, KeyframeInterval = 2.0,
ForceSoftwareEncoder = false
};
}
}