From 5c8ac475ae09db2a3ae7fb7594d0491c17c6c879f751d01dbb6b0208d98d78da Mon Sep 17 00:00:00 2001 From: copecone Date: Sun, 14 Jun 2026 15:03:50 +0900 Subject: [PATCH] Add Keyframe Interval Config UI --- Data/RenderConfig.cs | 1 + UI/RenderConfigUIManager.cs | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Data/RenderConfig.cs b/Data/RenderConfig.cs index 0e1da91..ffbbcfd 100644 --- a/Data/RenderConfig.cs +++ b/Data/RenderConfig.cs @@ -27,5 +27,6 @@ namespace ADOFAIRenderer.Data public int Bitrate; public int MaxBitrate; public int QP; + public double KeyframeInterval; } } \ No newline at end of file diff --git a/UI/RenderConfigUIManager.cs b/UI/RenderConfigUIManager.cs index 1df6898..837df99 100644 --- a/UI/RenderConfigUIManager.cs +++ b/UI/RenderConfigUIManager.cs @@ -102,7 +102,8 @@ namespace ADOFAIRenderer.UI RateControlMode = config.EncodingConfig.RateControlMode, Bitrate = config.EncodingConfig.Bitrate, MaxBitrate = config.EncodingConfig.MaxBitrate, - QP = config.EncodingConfig.QP + QP = config.EncodingConfig.QP, + KeyframeInterval = config.EncodingConfig.KeyframeInterval }; if (_root.Contains(_encodingConfigContainer)) @@ -194,6 +195,14 @@ namespace ADOFAIRenderer.UI qpRow.Add(qpField); _encodingConfigContainer.Add(qpRow); + // 6.5. 키프레임 간격 로우 (라벨 + 입력) + var keyframeRow = CreateRow(); + var keyframeLabel = CreateFormLabel("키프레임 간격 (초)"); + var keyframeField = new DoubleField { name = "EncodingKeyframeInterval", label = "", value = tempConfig.KeyframeInterval }; + keyframeRow.Add(keyframeLabel); + keyframeRow.Add(keyframeField); + _encodingConfigContainer.Add(keyframeRow); + // 7. QP = 0 (무손실) 경고 라벨 로우 생성 (ui-row 클래스를 상속받아 NanumSquareNeo 폰트가 적용되도록 처리) var warningRow = CreateRow(); warningRow.style.height = StyleKeyword.Auto; @@ -221,6 +230,11 @@ namespace ADOFAIRenderer.UI .AddLimits("EncodingQP", new RangeIntegerLimit(0, 51)); encodingValidator.SetupValidation(); + var encodingDoubleValidator = new DoubleInputValidator(_encodingConfigContainer); + encodingDoubleValidator + .AddLimits("EncodingKeyframeInterval", new PositiveOnlyDoubleLimit(), new RangeDoubleLimit(0.01, 1000.0)); + encodingDoubleValidator.SetupValidation(); + // 가시성 필터링 업데이트 (행 단위로 보임/숨김 제어) void UpdateVisibility(string selectedModeStr) { @@ -277,6 +291,7 @@ namespace ADOFAIRenderer.UI tempConfig.Bitrate = bitrateField.value; tempConfig.MaxBitrate = maxBitrateField.value; tempConfig.QP = qpField.value; + tempConfig.KeyframeInterval = keyframeField.value; if (tempConfig.RateControlMode == RateControlMode.VBR && tempConfig.MaxBitrate < tempConfig.Bitrate) { @@ -347,7 +362,7 @@ namespace ADOFAIRenderer.UI { RateControlMode = RateControlMode.CBR, Bitrate = 30000, MaxBitrate = 50000, - QP = 18 + QP = 18, KeyframeInterval = 2.0 }; } }