/* EncodeTask.cs $ This file is part of the HandBrake source code. Homepage: . It may be used under the terms of the GNU General Public License. */ namespace HandBrake.ApplicationServices.Model { using System.Collections.ObjectModel; using System.Linq; using HandBrake.ApplicationServices.Model.Encoding; using HandBrake.Interop.Model; using HandBrake.Interop.Model.Encoding; using HandBrake.Interop.Model.Encoding.x264; using OutputFormat = HandBrake.ApplicationServices.Model.Encoding.OutputFormat; /// /// An Encode Task /// public class EncodeTask { /// /// 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.x264Preset = x264Preset.None; this.x264Profile = x264Profile.None; this.X264Tune = x264Tune.None; } /// /// 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)); } this.ChapterNames = new ObservableCollection(); foreach (ChapterMarker track in task.ChapterNames) { this.ChapterNames.Add(new ChapterMarker(track)); } 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.Deblock = task.Deblock; this.Decomb = task.Decomb; this.Deinterlace = task.Deinterlace; this.Denoise = task.Denoise; this.Destination = task.Destination; this.Detelecine = task.Detelecine; this.DisableLibDvdNav = task.DisableLibDvdNav; 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.LargeFile = task.LargeFile; 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.Verbosity = task.Verbosity; this.VideoBitrate = task.VideoBitrate; this.VideoEncoder = task.VideoEncoder; this.VideoEncodeRateType = task.VideoEncodeRateType; this.Width = task.Width; this.x264Preset = task.x264Preset; this.x264Profile = task.x264Profile; this.X264Tune = task.X264Tune; this.PreviewStartAt = task.PreviewStartAt; this.PreviewDuration = task.PreviewDuration; } #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; } private int startPoint; /// /// Gets or sets StartPoint. /// public int StartPoint { get { return this.startPoint; } set { this.startPoint = value; } } private int endPoint; /// /// Gets or sets EndPoint. /// public int EndPoint { get { return this.endPoint; } set { this.endPoint = value; } } #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 LargeFile. /// public bool LargeFile { 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; } #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. /// 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 CustomDecomb. /// public string CustomDecomb { 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 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; } #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 x264Preset. /// public x264Preset x264Preset { get; set; } /// /// Gets or sets x264Profile. /// public x264Profile x264Profile { get; set; } /// /// Gets or sets X264Tune. /// public x264Tune X264Tune { get; set; } /// /// Gets or sets Verbosity. /// public int Verbosity { get; set; } /// /// Gets or sets a value indicating whether disableLibDvdNav. /// public bool DisableLibDvdNav { get; set; } #endregion #region Preview /// /// Gets or sets StartAt. /// public int? PreviewStartAt { get; set; } /// /// Gets or sets Duration. /// public int? PreviewDuration { get; set; } #endregion #region Helpers /// /// Gets a value indicating whether M4v extension is required. /// public bool RequiresM4v { get { if (this.OutputFormat == OutputFormat.M4V || this.OutputFormat == OutputFormat.Mp4) { bool audio = this.AudioTracks.Any(item => item.Encoder == AudioEncoder.Ac3Passthrough || item.Encoder == AudioEncoder.Ac3 || item.Encoder == AudioEncoder.DtsPassthrough || item.Encoder == AudioEncoder.Passthrough); bool subtitles = this.SubtitleTracks.Any(track => track.SubtitleType != SubtitleType.VobSub); return audio || subtitles; } return false; } } #endregion } }