Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }