/// <summary> /// Add the encode settings to the preset /// </summary> /// <param name="xmlWriter"> /// The xml writer. /// </param> /// <param name="parsed"> /// The parsed. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="build"> /// The build. /// </param> private static void AddEncodeSettings(XmlTextWriter xmlWriter, EncodeTask parsed, Preset preset, string build) { AddEncodeElement(xmlWriter, "AudioAllowAACPass", "integer", getNullBoolValue(parsed.AllowedPassthruOptions.AudioAllowAACPass)); AddEncodeElement(xmlWriter, "AudioAllowAC3Pass", "integer", getNullBoolValue(parsed.AllowedPassthruOptions.AudioAllowAC3Pass)); AddEncodeElement(xmlWriter, "AudioAllowDTSHDPass", "integer", getNullBoolValue(parsed.AllowedPassthruOptions.AudioAllowDTSHDPass)); AddEncodeElement(xmlWriter, "AudioAllowDTSPass", "integer", getNullBoolValue(parsed.AllowedPassthruOptions.AudioAllowDTSPass)); AddEncodeElement(xmlWriter, "AudioAllowMP3Pass", "integer", getNullBoolValue(parsed.AllowedPassthruOptions.AudioAllowMP3Pass)); AddEncodeElement(xmlWriter, "AudioEncoderFallback", "string", EnumHelper <AudioEncoder> .GetDisplay(parsed.AllowedPassthruOptions.AudioEncoderFallback)); AddEncodeElement(xmlWriter, "ChapterMarkers", "integer", parsed.IncludeChapterMarkers ? "1" : "0"); AddEncodeElement(xmlWriter, "Default", "integer", "0"); AddEncodeElement(xmlWriter, "FileFormat", "string", (parsed.OutputFormat == OutputFormat.Mp4 || parsed.OutputFormat == OutputFormat.M4V) ? "MP4 file" : "MKV file"); AddBooleanElement(xmlWriter, "Folder", false); AddEncodeElement(xmlWriter, "Mp4HttpOptimize", "integer", parsed.OptimizeMP4 ? "1" : "0"); AddEncodeElement(xmlWriter, "Mp4iPodCompatible", "integer", parsed.IPod5GSupport ? "1" : "0"); AddEncodeElement(xmlWriter, "PictureAutoCrop", "integer", "1"); AddEncodeElement(xmlWriter, "PictureBottomCrop", "integer", parsed.Cropping.Bottom.ToString()); // Filters AddEncodeElement(xmlWriter, "PictureDeblock", "integer", parsed.Deblock.ToString()); switch (parsed.Decomb) { case Decomb.Off: AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "0"); AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", string.Empty); break; case Decomb.Default: AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "2"); AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", string.Empty); break; case Decomb.Fast: AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "3"); AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", string.Empty); break; case Decomb.Bob: AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "4"); AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", string.Empty); break; case Decomb.Custom: AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "1"); AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", parsed.CustomDecomb); break; } AddEncodeElement(xmlWriter, "PictureDecombDeinterlace", "integer", parsed.Decomb != Decomb.Off ? "0" : "1"); switch (parsed.Deinterlace) { case Deinterlace.Off: AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "0"); AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty); break; case Deinterlace.Fast: AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "2"); AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty); break; case Deinterlace.Slow: AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "3"); AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty); break; case Deinterlace.Slower: AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "4"); AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty); break; case Deinterlace.Bob: AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "5"); AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty); break; case Deinterlace.Custom: AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "1"); AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", parsed.CustomDeinterlace); break; } if (parsed.Denoise == Denoise.hqdn3d) { switch (parsed.DenoisePreset) { case DenoisePreset.Weak: AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "2"); AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty); break; case DenoisePreset.Medium: AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "3"); AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty); break; case DenoisePreset.Strong: AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "4"); AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty); break; case DenoisePreset.Custom: AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "1"); AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", parsed.CustomDenoise); break; } } // These keys are still TBD. TODO Update these if (parsed.Denoise == Denoise.NlMeans) { switch (parsed.DenoisePreset) { case DenoisePreset.Ultralight: AddEncodeElement(xmlWriter, "DenoisePreset", "integer", "1"); break; case DenoisePreset.Light: AddEncodeElement(xmlWriter, "DenoisePreset", "integer", "2"); break; case DenoisePreset.Medium: AddEncodeElement(xmlWriter, "DenoisePreset", "integer", "3"); break; case DenoisePreset.Strong: AddEncodeElement(xmlWriter, "DenoisePreset", "integer", "4"); break; } switch (parsed.DenoiseTune) { case DenoiseTune.None: AddEncodeElement(xmlWriter, "DenoiseTune", "integer", "0"); break; case DenoiseTune.Animation: AddEncodeElement(xmlWriter, "DenoiseTune", "integer", "1"); break; case DenoiseTune.Film: AddEncodeElement(xmlWriter, "DenoiseTune", "integer", "2"); break; case DenoiseTune.Grain: AddEncodeElement(xmlWriter, "DenoiseTune", "integer", "3"); break; case DenoiseTune.HighMotion: AddEncodeElement(xmlWriter, "DenoiseTune", "integer", "4"); break; } } int detelecine = 0; switch (parsed.Detelecine) { case Detelecine.Off: detelecine = 0; break; case Detelecine.Default: detelecine = 2; break; case Detelecine.Custom: detelecine = 1; break; } AddEncodeElement(xmlWriter, "PictureDetelecine", "integer", detelecine.ToString()); AddEncodeElement(xmlWriter, "PictureDetelecineCustom", "string", detelecine == 1 ? parsed.CustomDecomb : string.Empty); // Picture Settings AddEncodeElement(xmlWriter, "PictureHeight", "integer", parsed.Height.ToString()); AddEncodeElement(xmlWriter, "PictureKeepRatio", "integer", parsed.KeepDisplayAspect ? "1" : "0"); AddEncodeElement(xmlWriter, "PictureLeftCrop", "integer", parsed.Cropping.Left.ToString()); AddEncodeElement(xmlWriter, "PictureModulus", "integer", parsed.Modulus.ToString()); AddEncodeElement(xmlWriter, "PicturePAR", "integer", ((int)parsed.Anamorphic).ToString()); AddEncodeElement(xmlWriter, "PictureRightCrop", "integer", parsed.Cropping.Right.ToString()); AddEncodeElement(xmlWriter, "PictureTopCrop", "integer", parsed.Cropping.Top.ToString()); AddEncodeElement(xmlWriter, "PictureWidth", "integer", parsed.Width.ToString()); // Preset Information AddEncodeElement(xmlWriter, "PresetBuildNumber", "string", build); AddEncodeElement(xmlWriter, "PresetDescription", "string", "No Description"); AddEncodeElement(xmlWriter, "PresetName", "string", preset.Name); AddEncodeElement(xmlWriter, "Type", "integer", "1"); // 1 is user preset, 0 is built in // Preset Settings AddEncodeElement(xmlWriter, "UsesMaxPictureSettings", "integer", (parsed.MaxWidth != 0 || parsed.MaxHeight != 0) ? "1" : "0"); AddEncodeElement(xmlWriter, "UsesPictureFilters", "integer", "1"); AddEncodeElement(xmlWriter, "UsesPictureSettings", "integer", "2"); // Video Settings AddEncodeElement(xmlWriter, "VideoAvgBitrate", "string", parsed.VideoBitrate.ToString()); AddEncodeElement(xmlWriter, "VideoEncoder", "string", EnumHelper <VideoEncoder> .GetDisplay(parsed.VideoEncoder)); AddEncodeElement(xmlWriter, "VideoFramerate", "string", parsed.Framerate == null ? "Same as source" : parsed.Framerate.ToString()); AddEncodeElement(xmlWriter, "VideoFramerateMode", "string", parsed.FramerateMode.ToString().ToLower()); AddEncodeElement(xmlWriter, "VideoGrayScale", "integer", parsed.Grayscale ? "1" : "0"); AddEncodeElement(xmlWriter, "VideoQualitySlider", "real", parsed.Quality.ToString()); AddEncodeElement(xmlWriter, "h264Level", "string", parsed.H264Level); AddEncodeElement(xmlWriter, "x264OptionExtra", "string", parsed.AdvancedEncoderOptions); AddEncodeElement(xmlWriter, "x264Preset", "string", parsed.X264Preset.ToString().ToLower()); AddEncodeElement(xmlWriter, "h264Profile", "string", parsed.H264Profile.ToString().ToLower()); string tune = parsed.X264Tune.ToString().ToLower(); if (parsed.FastDecode) { tune = tune == "none" ? "fastdecode" : tune + ",fastdecode"; } AddEncodeElement(xmlWriter, "x264Tune", "string", tune); AddEncodeElement(xmlWriter, "x264UseAdvancedOptions", "integer", parsed.ShowAdvancedTab ? "1" : "0"); AddEncodeElement(xmlWriter, "qsvPreset", "string", parsed.QsvPreset.ToString().ToLower()); AddEncodeElement(xmlWriter, "h265Profile", "string", parsed.H265Profile.ToString().ToLower()); AddEncodeElement(xmlWriter, "x265Preset", "string", parsed.X265Preset.ToString().ToLower()); AddEncodeElement(xmlWriter, "x265Tune", "string", parsed.X265Tune.ToString().ToLower()); int videoQualityType = 0; if (parsed.VideoBitrate != null) { videoQualityType = 1; } else if (parsed.Quality != null) { videoQualityType = 2; } AddEncodeElement(xmlWriter, "VideoQualityType", "integer", videoQualityType.ToString()); AddEncodeElement(xmlWriter, "VideoTargetSize", "string", string.Empty); AddEncodeElement(xmlWriter, "VideoTurboTwoPass", "integer", parsed.TurboFirstPass ? "1" : "0"); AddEncodeElement(xmlWriter, "VideoTwoPass", "integer", parsed.TwoPass ? "1" : "0"); // x264 string AddEncodeElement(xmlWriter, "x264Option", "string", parsed.AdvancedEncoderOptions); }
/// <summary> /// Add the encode settings to the preset /// </summary> /// <param name="xmlWriter"> /// The xml writer. /// </param> /// <param name="parsed"> /// The parsed. /// </param> /// <param name="preset"> /// The preset. /// </param> private static void AddEncodeSettings(XmlTextWriter xmlWriter, EncodeTask parsed, Preset preset) { AddEncodeElement(xmlWriter, "ChapterMarkers", "integer", parsed.IncludeChapterMarkers ? "1" : "0"); AddEncodeElement(xmlWriter, "Default", "integer", "0"); AddEncodeElement(xmlWriter, "FileFormat", "string", Converters.GetFileFormat(parsed.OutputFormat) + " file"); AddBooleanElement(xmlWriter, "Folder", false); AddEncodeElement(xmlWriter, "Mp4HttpOptimize", "integer", parsed.OptimizeMP4 ? "1" : "0"); AddEncodeElement(xmlWriter, "Mp4LargeFile", "integer", parsed.LargeFile ? "1" : "0"); AddEncodeElement(xmlWriter, "Mp4iPodCompatible", "integer", parsed.IPod5GSupport ? "1" : "0"); AddEncodeElement(xmlWriter, "PictureAutoCrop", "integer", "1"); AddEncodeElement(xmlWriter, "PictureBottomCrop", "integer", parsed.Cropping.Bottom.ToString()); // Filters AddEncodeElement(xmlWriter, "PictureDeblock", "integer", parsed.Deblock.ToString()); switch (parsed.Decomb) { case Decomb.Off: AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "0"); AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", string.Empty); break; case Decomb.Default: AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "1"); AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", string.Empty); break; default: AddEncodeElement(xmlWriter, "PictureDecomb", "integer", "2"); AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", parsed.CustomDecomb); break; } AddEncodeElement(xmlWriter, "PictureDecombDeinterlace", "integer", parsed.Decomb != Decomb.Off ? "0" : "1"); switch (parsed.Deinterlace) { case Deinterlace.Off: AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "0"); AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty); break; case Deinterlace.Fast: AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "1"); AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty); break; case Deinterlace.Slow: AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "2"); AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty); break; case Deinterlace.Slower: AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "3"); AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", string.Empty); break; default: AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", "4"); AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", parsed.CustomDeinterlace); break; } switch (parsed.Denoise) { case Denoise.Off: AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "0"); AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty); break; case Denoise.Weak: AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "1"); AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty); break; case Denoise.Medium: AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "2"); AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty); break; case Denoise.Strong: AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "3"); AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty); break; default: AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "4"); AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", parsed.CustomDenoise); break; } int detelecine; switch (parsed.Detelecine) { case Detelecine.Off: detelecine = 0; break; case Detelecine.Default: detelecine = 2; break; default: detelecine = 1; break; } AddEncodeElement(xmlWriter, "PictureDetelecine", "integer", detelecine.ToString()); AddEncodeElement(xmlWriter, "PictureDetelecineCustom", "string", detelecine == 1 ? parsed.CustomDecomb : string.Empty); // Picture Settings AddEncodeElement(xmlWriter, "PictureHeight", "integer", parsed.Height.ToString()); AddEncodeElement(xmlWriter, "PictureKeepRatio", "integer", parsed.KeepDisplayAspect ? "1" : "0"); AddEncodeElement(xmlWriter, "PictureLeftCrop", "integer", parsed.Cropping.Left.ToString()); AddEncodeElement(xmlWriter, "PictureModulus", "integer", parsed.Modulus.ToString()); AddEncodeElement(xmlWriter, "PicturePAR", "integer", ((int)parsed.Anamorphic).ToString()); AddEncodeElement(xmlWriter, "PictureRightCrop", "integer", parsed.Cropping.Right.ToString()); AddEncodeElement(xmlWriter, "PictureTopCrop", "integer", parsed.Cropping.Top.ToString()); AddEncodeElement(xmlWriter, "PictureWidth", "integer", parsed.Width.ToString()); // Preset Information AddEncodeElement(xmlWriter, "PresetBuildNumber", "string", userSettingService.GetUserSetting <int>(ASUserSettingConstants.HandBrakeBuild).ToString()); AddEncodeElement(xmlWriter, "PresetDescription", "string", "No Description"); AddEncodeElement(xmlWriter, "PresetName", "string", preset.Name); AddEncodeElement(xmlWriter, "Type", "integer", "1"); // 1 is user preset, 0 is built in // Preset Settings AddEncodeElement(xmlWriter, "UsesMaxPictureSettings", "integer", (parsed.MaxWidth != 0 || parsed.MaxHeight != 0) ? "1" : "0"); AddEncodeElement(xmlWriter, "UsesPictureFilters", "integer", "1"); AddEncodeElement(xmlWriter, "UsesPictureSettings", "integer", "2"); // Video Settings AddEncodeElement(xmlWriter, "VideoAvgBitrate", "string", parsed.VideoBitrate.ToString()); AddEncodeElement(xmlWriter, "VideoEncoder", "string", EnumHelper <VideoEncoder> .GetDisplay(parsed.VideoEncoder)); AddEncodeElement(xmlWriter, "VideoFramerate", "string", parsed.Framerate.ToString()); AddEncodeElement(xmlWriter, "VideFrameratePFR", "integer", parsed.FramerateMode == FramerateMode.PFR ? "1" : "0"); AddEncodeElement(xmlWriter, "VideoGrayScale", "integer", parsed.Grayscale ? "1" : "0"); AddEncodeElement(xmlWriter, "VideoQualitySlider", "real", parsed.Quality.ToString()); int videoQualityType = 0; if (parsed.VideoBitrate != null) { videoQualityType = 1; } else if (parsed.Quality != null) { videoQualityType = 2; } AddEncodeElement(xmlWriter, "VideoQualityType", "integer", videoQualityType.ToString()); AddEncodeElement(xmlWriter, "VideoTargetSize", "string", string.Empty); AddEncodeElement(xmlWriter, "VideoTurboTwoPass", "integer", parsed.TurboFirstPass ? "1" : "0"); AddEncodeElement(xmlWriter, "VideoTwoPass", "integer", parsed.TwoPass ? "1" : "0"); // x264 string AddEncodeElement(xmlWriter, "x264Option", "string", parsed.AdvancedEncoderOptions); }