// --------------------------------------------------------------------------------------------------------------------
//
// 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 HandBrake.ApplicationServices.Interop.Model;
using HandBrake.ApplicationServices.Interop.Model.Encoding;
using HandBrakeWPF.Utilities;
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;
///
/// An Encode Task
///
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.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.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.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.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; }
#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; }
#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 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
}
}