diff --git a/Bundle/Linux/scenes b/Bundle/Linux/scenes index e7616e6..cfa78d4 100644 Binary files a/Bundle/Linux/scenes and b/Bundle/Linux/scenes differ diff --git a/Bundle/OSX/scenes b/Bundle/OSX/scenes index 82973f7..87939f1 100644 Binary files a/Bundle/OSX/scenes and b/Bundle/OSX/scenes differ diff --git a/Bundle/Win64/scenes b/Bundle/Win64/scenes index 005dd1f..81d4425 100644 Binary files a/Bundle/Win64/scenes and b/Bundle/Win64/scenes differ diff --git a/Core/RenderManager.cs b/Core/RenderManager.cs index 71f0db0..06ca9ad 100644 --- a/Core/RenderManager.cs +++ b/Core/RenderManager.cs @@ -388,7 +388,7 @@ namespace ADOFAIRenderer.Core private IEnumerator SetupPlay() { - if (Configuration.RenderAudio && GetOutputExtension(Configuration.Codec) != ".mp4") + if (Configuration.RenderAudio && GetOutputExtension(Configuration.EncodingConfig!.Codec) != ".mp4") { Configuration.AudioSampleRate = 48000; } @@ -476,7 +476,7 @@ namespace ADOFAIRenderer.Core var renderFPS = Configuration.RenderFPS; var videoFPS = Configuration.VideoFPS; - var selectedCodec = Configuration.Codec; + var selectedCodec = Configuration.EncodingConfig?.Codec ?? Codec.H264; var ext = GetOutputExtension(selectedCodec); var startTime = DateTime.Now; diff --git a/Data/PresetManager.cs b/Data/PresetManager.cs index 76a9ce7..e406e48 100644 --- a/Data/PresetManager.cs +++ b/Data/PresetManager.cs @@ -5,6 +5,7 @@ using System.Linq; using MelonLoader; using MelonLoader.Utils; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; namespace ADOFAIRenderer.Data { @@ -68,10 +69,33 @@ namespace ADOFAIRenderer.Data try { string json = File.ReadAllText(file); - var preset = JsonConvert.DeserializeObject(json); - if (preset != null && !string.IsNullOrEmpty(preset.Name) && preset.Config != null) + var jObject = JsonConvert.DeserializeObject(json); + if (jObject != null) { - presets.Add(preset); + var configToken = jObject["Config"]; + if (configToken is JObject configObj) + { + var legacyCodecToken = configObj["Codec"]; + if (legacyCodecToken != null) + { + var encodingConfigToken = configObj["EncodingConfig"]; + if (encodingConfigToken == null) + { + configObj["EncodingConfig"] = new JObject(); + } + + var encodingConfigObj = (JObject)configObj["EncodingConfig"]!; + encodingConfigObj["Codec"] ??= legacyCodecToken; + + configObj.Remove("Codec"); + } + } + + var preset = jObject.ToObject(); + if (preset != null && !string.IsNullOrEmpty(preset.Name)) + { + presets.Add(preset); + } } } catch (Exception ex) diff --git a/Data/RenderConfig.cs b/Data/RenderConfig.cs index 5eae2eb..3007edd 100644 --- a/Data/RenderConfig.cs +++ b/Data/RenderConfig.cs @@ -10,7 +10,6 @@ namespace ADOFAIRenderer.Data public int RenderWidth { get; set; } public int RenderHeight { get; set; } - public Codec Codec { get; set; } public EncodingConfig? EncodingConfig { get; set; } public double DelayAfterLevelEnd { get; set; } @@ -26,6 +25,7 @@ namespace ADOFAIRenderer.Data public class EncodingConfig { + public Codec Codec { get; set; } = Codec.H264; public RateControlMode RateControlMode { get; set; } public int Bitrate { get; set; } diff --git a/UI/RenderConfigUIManager.cs b/UI/RenderConfigUIManager.cs index 4f9acab..2e09fd0 100644 --- a/UI/RenderConfigUIManager.cs +++ b/UI/RenderConfigUIManager.cs @@ -15,7 +15,6 @@ namespace ADOFAIRenderer.UI private VisualElement _root = null!; private IntegerInputValidator _intValidator = null!; private DoubleInputValidator _doubleValidator = null!; - private EnumDropdownBinder _codecBinder = null!; private Button _goRenderButton = null!; private Button _encodingConfigButton = null!; @@ -45,10 +44,6 @@ namespace ADOFAIRenderer.UI _intValidator.SetupValidation(); _doubleValidator.SetupValidation(); - // Init Enum Binders & Event Listeners - _codecBinder = new EnumDropdownBinder(_root, "CodecDropdown", Codec.H264); - _codecBinder.OnValueChanged(value => RenderManager.Instance.Configuration.Codec = value); - // Attach Button Event Listener _goRenderButton = _root.Q