示例#1
0
        /// <summary>
        /// Prepare the Preset window to create a Preset Object later.
        /// </summary>
        /// <param name="task">
        /// The Encode Task.
        /// </param>
        /// <param name="title">
        /// The title.
        /// </param>
        public void Setup(EncodeTask task, Title title)
        {
            this.Preset.Task   = new EncodeTask(task);
            this.selectedTitle = title;

            switch (task.Anamorphic)
            {
            default:
                this.SelectedPictureSettingMode = PresetPictureSettingsMode.Custom;
                break;

            case Anamorphic.Strict:
                this.SelectedPictureSettingMode = PresetPictureSettingsMode.SourceMaximum;
                break;
            }
        }
示例#2
0
        /// <summary>
        /// Prepare the Preset window to create a Preset Object later.
        /// </summary>
        /// <param name="task">
        /// The Encode Task.
        /// </param>
        /// <param name="title">
        /// The title.
        /// </param>
        /// <param name="audioBehaviours">
        /// The audio Behaviours.
        /// </param>
        /// <param name="subtitleBehaviours">
        /// The subtitle Behaviours.
        /// </param>
        public void Setup(EncodeTask task, Title title, AudioBehaviours audioBehaviours, SubtitleBehaviours subtitleBehaviours)
        {
            this.Preset.Task = new EncodeTask(task);
            this.Preset.AudioTrackBehaviours    = audioBehaviours.Clone();
            this.Preset.SubtitleTrackBehaviours = subtitleBehaviours.Clone();
            this.selectedTitle = title;

            switch (task.Anamorphic)
            {
            default:
                this.SelectedPictureSettingMode = PresetPictureSettingsMode.Custom;
                break;

            case Anamorphic.Strict:
                this.SelectedPictureSettingMode = PresetPictureSettingsMode.SourceMaximum;
                break;
            }
        }
示例#3
0
        /// <summary>
        /// Import a Plist Preset
        /// </summary>
        /// <param name="filename">
        /// The filename.
        /// </param>
        /// <returns>
        /// A Preset Object
        /// </returns>
        public static Preset Import(string filename)
        {
            Preset preset = new Preset();

            XmlNode root = loadFile(filename);

            if (root == null)
            {
                return(null);
            }

            // We'll query a query parser object and use it's public var structures to store all the data.
            // This will allow the preset loader logic to be used instead of writing custom logic just for this file.
            EncodeTask parsed     = new EncodeTask();
            bool       useFilters = false;
            PresetPictureSettingsMode pictureSettingsMode = PresetPictureSettingsMode.None;
            string qualityMode = string.Empty;

            #region Get a List of Audio Track Objects

            // This is the main <dict> with all the values
            XmlNode mainDict      = root.ChildNodes[2].ChildNodes[0].FirstChild;
            XmlNode audioListDict = null;
            ObservableCollection <AudioTrack> audioTracks = new ObservableCollection <AudioTrack>();

            // Look for the AudioList key
            bool found = false;
            foreach (XmlNode node in mainDict.ChildNodes)
            {
                if (found)
                {
                    audioListDict = node;
                    break;
                }

                if (node.InnerText == "AudioList")
                {
                    found = true; // We want the next node, as it is the value object.
                }
            }

            for (int i = 0; i < audioListDict.ChildNodes.Count; i++)
            {
                XmlNode    audioChannel = audioListDict.ChildNodes[i];
                AudioTrack track        = new AudioTrack();

                for (int subi = 0; subi < audioChannel.ChildNodes.Count; subi += 2)
                {
                    // Audio Channel Information is here.
                    string key   = audioChannel.ChildNodes[subi].InnerText;
                    string value = audioChannel.ChildNodes[subi + 1].InnerText;
                    switch (key)
                    {
                    case "AudioBitrate":
                        track.Bitrate = int.Parse(value);
                        break;

                    case "AudioEncoder":
                        track.Encoder = Converters.GetAudioEncoder(value.Trim());
                        break;

                    case "AudioMixdown":
                        track.MixDown = Converters.GetAudioMixDown(value.Trim());
                        break;

                    case "AudioSamplerate":
                        track.SampleRate = value == "Auto" ? 0 : double.Parse(value);
                        break;

                    case "AudioTrack":
                        //track.SourceTrack = value;
                        break;

                    case "AudioTrackDRCSlider":
                        track.DRC = double.Parse(value);
                        break;

                    case "AudioTrackGainSlider":
                        track.Gain = int.Parse(value.Replace("0.0", "0"));
                        break;
                    }
                }
                audioTracks.Add(track);
                parsed.AudioTracks = audioTracks;
            }
            #endregion

            #region Parse the reset of the plist keys into local variables

            XmlNode presetSettings = root.ChildNodes[2].ChildNodes[0].FirstChild;

            // Start from 2 to avoid the audio settings which we don't need.
            for (int i = 0; i < presetSettings.ChildNodes.Count; i += 2)
            {
                string key   = presetSettings.ChildNodes[i].InnerText;
                string value = presetSettings.ChildNodes[i + 1].InnerText;

                switch (key)
                {
                // Output Settings
                case "FileFormat":
                    parsed.OutputFormat = Converters.GetFileFormat(value.Replace("file", string.Empty).Trim());
                    break;

                case "Mp4HttpOptimize":
                    parsed.OptimizeMP4 = value == "1";
                    break;

                case "Mp4LargeFile":
                    parsed.LargeFile = value == "1";
                    break;

                case "Mp4iPodCompatible":
                    parsed.IPod5GSupport = value == "1";
                    break;

                // Picture Settings
                case "PictureAutoCrop":
                    parsed.HasCropping = value != "1";
                    break;

                case "PictureTopCrop":
                    parsed.Cropping.Top = int.Parse(value);
                    break;

                case "PictureBottomCrop":
                    parsed.Cropping.Bottom = int.Parse(value);
                    break;

                case "PictureLeftCrop":
                    parsed.Cropping.Left = int.Parse(value);
                    break;

                case "PictureRightCrop":
                    parsed.Cropping.Right = int.Parse(value);
                    break;

                case "PictureHeight":
                    parsed.Height = int.Parse(value);
                    break;

                case "PictureWidth":
                    parsed.Width = int.Parse(value);
                    break;

                case "PictureKeepRatio":
                    parsed.KeepDisplayAspect = value == "1";
                    break;

                case "PicturePAR":
                    switch (value)
                    {
                    case "0":
                        parsed.Anamorphic = Anamorphic.None;
                        break;

                    default:
                        parsed.Anamorphic = Anamorphic.Strict;
                        break;

                    case "2":
                        parsed.Anamorphic = Anamorphic.Loose;
                        break;

                    case "3":
                        parsed.Anamorphic = Anamorphic.Custom;
                        break;
                    }
                    break;

                // Filters
                case "PictureDeblock":
                    parsed.Deblock = int.Parse(value);
                    break;

                case "PictureDecomb":
                    parsed.Decomb = Decomb.Off;
                    switch (value)
                    {
                    case "1":
                        parsed.Decomb = Decomb.Custom;
                        break;

                    case "2":
                        parsed.Decomb = Decomb.Default;
                        break;

                    case "3":
                        parsed.Decomb = Decomb.Fast;
                        break;
                    }
                    break;

                case "PictureDecombCustom":
                    if (value != string.Empty)
                    {
                        parsed.CustomDecomb = value;
                    }
                    break;

                case "PictureDecombDeinterlace":
                    // Not Used
                    break;

                case "PictureDeinterlace":
                    switch (value)
                    {
                    case "0":
                        parsed.Deinterlace = Deinterlace.Off;
                        break;

                    case "1":
                        parsed.Deinterlace = Deinterlace.Custom;
                        break;

                    case "2":
                        parsed.Deinterlace = Deinterlace.Fast;
                        break;

                    case "3":
                        parsed.Deinterlace = Deinterlace.Slow;
                        break;

                    case "4":
                        parsed.Deinterlace = Deinterlace.Slower;
                        break;
                    }
                    break;

                case "PictureDeinterlaceCustom":
                    if (value != string.Empty)
                    {
                        parsed.CustomDeinterlace = value;
                    }
                    break;

                case "PictureDenoise":
                    switch (value)
                    {
                    case "0":
                        parsed.Denoise = Denoise.Off;
                        break;

                    case "1":
                        parsed.Denoise = Denoise.Custom;
                        break;

                    case "2":
                        parsed.Denoise = Denoise.Weak;
                        break;

                    case "3":
                        parsed.Denoise = Denoise.Medium;
                        break;

                    case "4":
                        parsed.Denoise = Denoise.Strong;
                        break;
                    }

                    break;

                case "PictureDenoiseCustom":
                    if (value != string.Empty)
                    {
                        parsed.CustomDenoise = value;
                    }
                    break;

                case "PictureDetelecine":
                    parsed.Detelecine = Detelecine.Off;
                    if (value == "1")
                    {
                        parsed.Detelecine = Detelecine.Custom;
                    }
                    if (value == "2")
                    {
                        parsed.Detelecine = Detelecine.Default;
                    }
                    break;

                case "PictureDetelecineCustom":
                    if (value != string.Empty)
                    {
                        parsed.CustomDetelecine = value;
                    }
                    break;

                // Video Tab
                case "VideoAvgBitrate":
                    if (!string.IsNullOrEmpty(value))
                    {
                        parsed.VideoBitrate = int.Parse(value);
                    }
                    break;

                case "VideoEncoder":
                    parsed.VideoEncoder = EnumHelper <VideoEncoder> .GetValue(value);

                    break;

                case "VideoFramerate":

                    if (value == "Same as source")
                    {
                        parsed.Framerate = null;
                    }
                    else if (!string.IsNullOrEmpty(value))
                    {
                        parsed.Framerate = double.Parse(value);
                    }
                    break;

                case "VideoFramerateMode":
                    switch (value)
                    {
                    case "vfr":
                        parsed.FramerateMode = FramerateMode.VFR;
                        break;

                    case "cfr":
                        parsed.FramerateMode = FramerateMode.CFR;
                        break;

                    default:
                        parsed.FramerateMode = FramerateMode.PFR;
                        break;
                    }
                    break;

                case "VideoGrayScale":
                    parsed.Grayscale = value == "1";
                    break;

                case "VideoQualitySlider":
                    if (!string.IsNullOrEmpty(value))
                    {
                        parsed.Quality = double.Parse(value);
                    }
                    break;

                case "VideoQualityType":     // The Type of Quality Mode used
                    qualityMode = value;
                    break;

                case "VideoTurboTwoPass":
                    parsed.TurboFirstPass = value == "1";
                    break;

                case "VideoTwoPass":
                    parsed.TwoPass = value == "1";
                    break;

                // Chapter Markers Tab
                case "ChapterMarkers":
                    parsed.IncludeChapterMarkers = value == "1";
                    break;

                // Advanced x264 tab
                case "x264Option":
                    parsed.AdvancedEncoderOptions = value;
                    break;

                // Preset Information
                case "PresetBuildNumber":
                    preset.Version = value;
                    break;

                case "PresetDescription":
                    preset.Description = value;
                    break;

                case "PresetName":
                    preset.Name = value;
                    break;

                case "Type":
                    //parsed.Type = value; // TODO find out what this is
                    break;

                case "UsesMaxPictureSettings":
                    pictureSettingsMode = PresetPictureSettingsMode.SourceMaximum;
                    break;

                case "UsesPictureFilters":
                    useFilters = value == "1";
                    break;

                case "UsesPictureSettings":
                    pictureSettingsMode = PresetPictureSettingsMode.Custom;
                    break;

                // Allowed Passthru
                case "AudioAllowAACPass":
                    parsed.AllowedPassthruOptions.AudioAllowAACPass = value == "1";
                    break;

                case "AudioAllowAC3Pass":
                    parsed.AllowedPassthruOptions.AudioAllowAC3Pass = value == "1";
                    break;

                case "AudioAllowDTSHDPass":
                    parsed.AllowedPassthruOptions.AudioAllowDTSHDPass = value == "1";
                    break;

                case "AudioAllowDTSPass":
                    parsed.AllowedPassthruOptions.AudioAllowDTSPass = value == "1";
                    break;

                case "AudioAllowMP3Pass":
                    parsed.AllowedPassthruOptions.AudioAllowMP3Pass = value == "1";
                    break;

                case "AudioEncoderFallback":
                    parsed.AllowedPassthruOptions.AudioEncoderFallback = EnumHelper <AudioEncoder> .GetValue(value);

                    break;
                }
            }

            // Kill any Quality values we don't need.
            switch (qualityMode)
            {
            case "1":     // Avg Bitrate
                parsed.VideoEncodeRateType = VideoEncodeRateType.AverageBitrate;
                break;

            case "2":     // CQ
                parsed.VideoEncodeRateType = VideoEncodeRateType.ConstantQuality;
                break;
            }

            // Default filters if we have to
            if (!useFilters)
            {
                parsed.Detelecine  = Detelecine.Off;
                parsed.Denoise     = Denoise.Off;
                parsed.Deinterlace = Deinterlace.Off;
                parsed.Decomb      = Decomb.Off;
                parsed.Deblock     = 0;
                parsed.Grayscale   = false;
            }

            if (pictureSettingsMode == PresetPictureSettingsMode.SourceMaximum)
            {
                parsed.MaxWidth  = parsed.Height;
                parsed.MaxHeight = parsed.Width;
            }
            #endregion


            preset.Task = parsed;
            preset.PictureSettingsMode = pictureSettingsMode;
            preset.UsePictureFilters   = useFilters;
            preset.Category            = PresetService.UserPresetCatgoryName;

            return(preset);
        }