// --------------------------------------------------------------------------------------------------------------------
//
// 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 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;
this.Modulus = 16;
}
///
/// 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.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.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; }
///
/// 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 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; }
#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;
}
}
///
/// 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 string PreviewEncodeStartAt { get; set; }
#endregion
}
}