// -------------------------------------------------------------------------------------------------------------------- // // This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. // // // An Encode Task // // -------------------------------------------------------------------------------------------------------------------- namespace HandBrakeWPF.Services.Encode.Model { using System.Collections.Generic; using System.Collections.ObjectModel; using Caliburn.Micro; using HandBrake.Interop.Interop.Model; using HandBrake.Interop.Interop.Model.Encoding; using HandBrakeWPF.Model.Filters; using HandBrakeWPF.Services.Encode.Model.Models; using AllowedPassthru = HandBrakeWPF.Services.Encode.Model.Models.AllowedPassthru; using AudioTrack = HandBrakeWPF.Services.Encode.Model.Models.AudioTrack; using ChapterMarker = HandBrakeWPF.Services.Encode.Model.Models.ChapterMarker; using DenoisePreset = HandBrakeWPF.Services.Encode.Model.Models.DenoisePreset; using DenoiseTune = HandBrakeWPF.Services.Encode.Model.Models.DenoiseTune; using FramerateMode = HandBrakeWPF.Services.Encode.Model.Models.FramerateMode; using OutputFormat = HandBrakeWPF.Services.Encode.Model.Models.OutputFormat; using PointToPointMode = HandBrakeWPF.Services.Encode.Model.Models.PointToPointMode; using SubtitleTrack = HandBrakeWPF.Services.Encode.Model.Models.SubtitleTrack; using VideoLevel = HandBrakeWPF.Services.Encode.Model.Models.Video.VideoLevel; using VideoPreset = HandBrakeWPF.Services.Encode.Model.Models.Video.VideoPreset; using VideoProfile = HandBrakeWPF.Services.Encode.Model.Models.Video.VideoProfile; using VideoTune = HandBrakeWPF.Services.Encode.Model.Models.Video.VideoTune; public class EncodeTask : PropertyChangedBase { #region Private Fields /// /// The advanced panel enabled. /// private bool showAdvancedTab; #endregion /// /// Initializes a new instance of the class. /// public EncodeTask() { this.Cropping = new Cropping(); this.AudioTracks = new ObservableCollection(); this.SubtitleTracks = new ObservableCollection(); this.ChapterNames = new ObservableCollection(); this.AllowedPassthruOptions = new AllowedPassthru(); this.Modulus = 16; this.MetaData = new MetaData(); this.VideoTunes = new List(); } /// /// Initializes a new instance of the class. /// Copy Constructor /// /// /// The task. /// public EncodeTask(EncodeTask task) { this.AdvancedEncoderOptions = task.AdvancedEncoderOptions; this.AllowedPassthruOptions = new AllowedPassthru(task.AllowedPassthruOptions); this.Anamorphic = task.Anamorphic; this.Angle = task.Angle; this.AudioTracks = new ObservableCollection(); foreach (AudioTrack track in task.AudioTracks) { this.AudioTracks.Add(new AudioTrack(track, true)); } this.ChapterNames = new ObservableCollection(); foreach (ChapterMarker track in task.ChapterNames) { this.ChapterNames.Add(new ChapterMarker(track)); } this.AlignAVStart = task.AlignAVStart; this.ChapterMarkersFilePath = task.ChapterMarkersFilePath; this.Cropping = new Cropping(task.Cropping); this.CustomDecomb = task.CustomDecomb; this.CustomDeinterlace = task.CustomDeinterlace; this.CustomDenoise = task.CustomDenoise; this.CustomDetelecine = task.CustomDetelecine; this.CustomCombDetect = task.CustomCombDetect; this.CombDetect = task.CombDetect; this.Deblock = task.Deblock; this.Decomb = task.Decomb; this.Deinterlace = task.Deinterlace; this.DeinterlaceFilter = task.DeinterlaceFilter; this.Denoise = task.Denoise; this.DenoisePreset = task.DenoisePreset; this.DenoiseTune = task.DenoiseTune; this.Destination = task.Destination; this.Detelecine = task.Detelecine; this.FlipVideo = task.FlipVideo; this.Rotation = task.Rotation; this.Sharpen = task.Sharpen; this.SharpenPreset = task.SharpenPreset; this.SharpenTune = task.SharpenTune; this.SharpenCustom = task.SharpenCustom; this.DisplayWidth = task.DisplayWidth; this.EndPoint = task.EndPoint; this.Framerate = task.Framerate; this.FramerateMode = task.FramerateMode; this.Grayscale = task.Grayscale; this.HasCropping = task.HasCropping; this.Height = task.Height; this.IncludeChapterMarkers = task.IncludeChapterMarkers; this.IPod5GSupport = task.IPod5GSupport; this.KeepDisplayAspect = task.KeepDisplayAspect; this.MaxHeight = task.MaxHeight; this.MaxWidth = task.MaxWidth; this.Modulus = task.Modulus; this.OptimizeMP4 = task.OptimizeMP4; this.OutputFormat = task.OutputFormat; this.PixelAspectX = task.PixelAspectX; this.PixelAspectY = task.PixelAspectY; this.PointToPointMode = task.PointToPointMode; this.Quality = task.Quality; this.Source = task.Source; this.StartPoint = task.StartPoint; this.SubtitleTracks = new ObservableCollection(); foreach (SubtitleTrack subtitleTrack in task.SubtitleTracks) { this.SubtitleTracks.Add(new SubtitleTrack(subtitleTrack)); } this.Title = task.Title; this.TurboFirstPass = task.TurboFirstPass; this.TwoPass = task.TwoPass; this.VideoBitrate = task.VideoBitrate; this.VideoEncoder = task.VideoEncoder; this.VideoEncodeRateType = task.VideoEncodeRateType; this.Width = task.Width; this.VideoLevel = task.VideoLevel; this.VideoProfile = task.VideoProfile; this.VideoPreset = task.VideoPreset; this.VideoTunes = new List(task.VideoTunes); this.ExtraAdvancedArguments = task.ExtraAdvancedArguments; this.MetaData = new MetaData(task.MetaData); this.ShowAdvancedTab = task.ShowAdvancedTab; } #region Source /// /// Gets or sets Source. /// public string Source { get; set; } /// /// Gets or sets Title. /// public int Title { get; set; } /// /// Gets or sets the Angle /// public int Angle { get; set; } /// /// Gets or sets PointToPointMode. /// public PointToPointMode PointToPointMode { get; set; } /// /// Gets or sets StartPoint. /// public int StartPoint { get; set; } /// /// Gets or sets EndPoint. /// public int EndPoint { get; set; } #endregion #region Destination /// /// Gets or sets Destination. /// public string Destination { get; set; } #endregion #region Output Settings /// /// Gets or sets OutputFormat. /// public OutputFormat OutputFormat { get; set; } /// /// Gets or sets a value indicating whether Optimize. /// public bool OptimizeMP4 { get; set; } /// /// Gets or sets a value indicating whether IPod5GSupport. /// public bool IPod5GSupport { get; set; } public bool AlignAVStart { get; set; } #endregion #region Picture /// /// Gets or sets Width. /// public int? Width { get; set; } /// /// Gets or sets Height. /// public int? Height { get; set; } /// /// Gets or sets MaxWidth. /// public int? MaxWidth { get; set; } /// /// Gets or sets MaxHeight. /// public int? MaxHeight { get; set; } /// /// Gets or sets Cropping. /// public Cropping Cropping { get; set; } /// /// Gets or sets a value indicating whether HasCropping. /// public bool HasCropping { get; set; } /// /// Gets or sets Anamorphic. /// public Anamorphic Anamorphic { get; set; } /// /// Gets or sets DisplayWidth. /// public double? DisplayWidth { get; set; } /// /// Gets or sets a value indicating whether KeepDisplayAspect. /// public bool KeepDisplayAspect { get; set; } /// /// Gets or sets PixelAspectX. /// public int PixelAspectX { get; set; } /// /// Gets or sets PixelAspectY. /// public int PixelAspectY { get; set; } /// /// Gets or sets Modulus. /// public int? Modulus { get; set; } #endregion #region Filters /// /// Gets or sets Deinterlace Filter Mode /// public DeinterlaceFilter DeinterlaceFilter { get; set; } /// /// Gets or sets Deinterlace. /// public Deinterlace Deinterlace { get; set; } /// /// Gets or sets CustomDeinterlace. /// public string CustomDeinterlace { get; set; } /// /// Gets or sets Decomb. /// public Decomb Decomb { get; set; } /// /// Gets or sets the comb detect. /// public CombDetect CombDetect { get; set; } /// /// Gets or sets CustomDecomb. /// public string CustomDecomb { get; set; } /// /// Gets or sets the custom comb detect. /// public string CustomCombDetect { get; set; } /// /// Gets or sets Detelecine. /// public Detelecine Detelecine { get; set; } /// /// Gets or sets CustomDetelecine. /// public string CustomDetelecine { get; set; } /// /// Gets or sets Denoise. /// public Denoise Denoise { get; set; } /// /// Gets or sets the denoise preset. /// public DenoisePreset DenoisePreset { get; set; } /// /// Gets or sets the denoise tune. /// public DenoiseTune DenoiseTune { get; set; } /// /// Gets or sets CustomDenoise. /// public string CustomDenoise { get; set; } /// /// Gets or sets Deblock. /// public int Deblock { get; set; } /// /// Gets or sets a value indicating whether Grayscale. /// public bool Grayscale { get; set; } /// /// Rotate the Video by x Degrees /// public int Rotation { get; set; } /// /// Flip the video. /// public bool FlipVideo { get; set; } public Sharpen Sharpen { get; set; } public FilterPreset SharpenPreset { get; set; } public FilterTune SharpenTune { get; set; } public string SharpenCustom { get; set; } #endregion #region Video /// /// Gets or sets VideoEncodeRateType. /// public VideoEncodeRateType VideoEncodeRateType { get; set; } /// /// Gets or sets the VideoEncoder /// public VideoEncoder VideoEncoder { get; set; } /// /// Gets or sets the Video Encode Mode /// public FramerateMode FramerateMode { get; set; } /// /// Gets or sets Quality. /// public double? Quality { get; set; } /// /// Gets or sets VideoBitrate. /// public int? VideoBitrate { get; set; } /// /// Gets or sets a value indicating whether TwoPass. /// public bool TwoPass { get; set; } /// /// Gets or sets a value indicating whether TurboFirstPass. /// public bool TurboFirstPass { get; set; } /// /// Gets or sets Framerate. /// Null = Same as Source /// public double? Framerate { get; set; } #endregion #region Audio /// /// Gets or sets AudioEncodings. /// public ObservableCollection AudioTracks { get; set; } /// /// Gets or sets AllowedPassthruOptions. /// public AllowedPassthru AllowedPassthruOptions { get; set; } #endregion #region Subtitles /// /// Gets or sets SubtitleTracks. /// public ObservableCollection SubtitleTracks { get; set; } #endregion #region Chapters /// /// Gets or sets a value indicating whether IncludeChapterMarkers. /// public bool IncludeChapterMarkers { get; set; } /// /// Gets or sets ChapterMarkersFilePath. /// public string ChapterMarkersFilePath { get; set; } /// /// Gets or sets ChapterNames. /// public ObservableCollection ChapterNames { get; set; } #endregion #region Advanced /// /// Gets or sets AdvancedEncoderOptions. /// public string AdvancedEncoderOptions { get; set; } /// /// Gets or sets the video profile. /// public VideoProfile VideoProfile { get; set; } /// /// Gets or sets the video level. /// public VideoLevel VideoLevel { get; set; } /// /// Gets or sets the video preset. /// public VideoPreset VideoPreset { get; set; } /// /// Gets or sets the video tunes. /// public List VideoTunes { get; set; } /// /// Gets or sets Extra Advanced Arguments for the Video Tab. /// public string ExtraAdvancedArguments { get; set; } /// /// Gets or sets a value indicating whether advanced panel enabled. /// public bool ShowAdvancedTab { get { return this.showAdvancedTab; } set { if (!Equals(value, this.showAdvancedTab)) { this.showAdvancedTab = value; this.NotifyOfPropertyChange(() => this.ShowAdvancedTab); } } } #endregion #region MetaData /// /// Gets or sets the meta data. /// public MetaData MetaData { get; set; } #endregion #region Preview /// /// Gets or sets a value indicating whether IsPreviewEncode. /// public bool IsPreviewEncode { get; set; } /// /// Gets or sets PreviewEncodeDuration. /// public int? PreviewEncodeDuration { get; set; } /// /// Gets or sets PreviewEncodeStartAt. /// public int? PreviewEncodeStartAt { get; set; } #endregion } }