/// <summary> /// Set's up the DataGridView on the Chapters tab (frmMain) /// </summary> /// <param name="title"> /// The currently selected title object. /// This will be used to get chapter names if they exist. /// </param> /// <param name="dataChpt"> /// The DataGridView Control /// </param> /// <param name="chapterEnd"> /// The chapter End. /// </param> /// <returns> /// The chapter naming. /// </returns> public static DataGridView ChapterNaming(Title title, DataGridView dataChpt, string chapterEnd) { int i = 0, finish = 0; if (chapterEnd != "Auto") int.TryParse(chapterEnd, out finish); while (i < finish) { string chapterName = string.Empty; if (title != null) { if (title.Chapters.Count <= i && title.Chapters[i] != null) { chapterName = title.Chapters[i].ChapterName; } } int n = dataChpt.Rows.Add(); dataChpt.Rows[n].Cells[0].Value = i + 1; dataChpt.Rows[n].Cells[1].Value = string.IsNullOrEmpty(chapterName) ? "Chapter " + (i + 1) : chapterName; dataChpt.Rows[n].Cells[0].ValueType = typeof(int); dataChpt.Rows[n].Cells[1].ValueType = typeof(string); i++; } return dataChpt; }
/// <summary> /// Convert Interop Title objects to App Services Title object /// </summary> /// <param name="titles"> /// The titles. /// </param> /// <returns> /// The convert titles. /// </returns> private static List<Title> ConvertTitles(IEnumerable<Interop.SourceData.Title> titles) { List<Title> titleList = new List<Title>(); foreach (Interop.SourceData.Title title in titles) { Title converted = new Title { TitleNumber = title.TitleNumber, Duration = title.Duration, Resolution = new Size(title.Resolution.Width, title.Resolution.Height), AspectRatio = title.AspectRatio, AngleCount = title.AngleCount, ParVal = new Size(title.ParVal.Width, title.ParVal.Height), AutoCropDimensions = title.AutoCropDimensions, Fps = title.Framerate }; foreach (Interop.SourceData.Chapter chapter in title.Chapters) { converted.Chapters.Add(new Chapter(chapter.ChapterNumber, string.Empty, chapter.Duration)); } foreach (Interop.SourceData.AudioTrack track in title.AudioTracks) { converted.AudioTracks.Add(new AudioTrack(track.TrackNumber, track.Language, track.LanguageCode, track.Description, string.Empty, track.SampleRate, track.Bitrate)); } foreach (Interop.SourceData.Subtitle track in title.Subtitles) { SubtitleType convertedType = new SubtitleType(); switch (track.SubtitleSource) { case Interop.SourceData.SubtitleSource.VobSub: convertedType = SubtitleType.VobSub; break; case Interop.SourceData.SubtitleSource.UTF8: convertedType = SubtitleType.UTF8Sub; break; case Interop.SourceData.SubtitleSource.TX3G: convertedType = SubtitleType.TX3G; break; case Interop.SourceData.SubtitleSource.SSA: convertedType = SubtitleType.SSA; break; case Interop.SourceData.SubtitleSource.SRT: convertedType = SubtitleType.SRT; break; case Interop.SourceData.SubtitleSource.CC608: convertedType = SubtitleType.CC; break; case Interop.SourceData.SubtitleSource.CC708: convertedType = SubtitleType.CC; break; } converted.Subtitles.Add(new Subtitle(track.TrackNumber, track.Language, track.LanguageCode, convertedType)); } titleList.Add(converted); } return titleList; }
/// <summary> /// Parse the Title Information /// </summary> /// <param name="output">A StringReader of output data</param> /// <returns>A Title Object</returns> public static Title Parse(StringReader output) { var thisTitle = new Title(); string nextLine = output.ReadLine(); // Get the Title Number Match m = Regex.Match(nextLine, @"^\+ title ([0-9]*):"); if (m.Success) thisTitle.TitleNumber = int.Parse(m.Groups[1].Value.Trim()); nextLine = output.ReadLine(); // Detect if this is the main feature m = Regex.Match(nextLine, @" \+ Main Feature"); if (m.Success) { thisTitle.MainTitle = true; nextLine = output.ReadLine(); } // Get the stream name for file import m = Regex.Match(nextLine, @"^ \+ stream:"); if (m.Success) { thisTitle.SourceName = nextLine.Replace("+ stream:", string.Empty).Trim(); nextLine = output.ReadLine(); } // Jump over the VTS and blocks line m = Regex.Match(nextLine, @"^ \+ vts:"); if (nextLine.Contains("blocks") || nextLine.Contains("+ vts ")) { nextLine = output.ReadLine(); } // Multi-Angle Support if LibDvdNav is enabled if (!Properties.Settings.Default.DisableLibDvdNav) { m = Regex.Match(nextLine, @" \+ angle\(s\) ([0-9])"); if (m.Success) { string angleList = m.Value.Replace("+ angle(s) ", string.Empty).Trim(); int angleCount; int.TryParse(angleList, out angleCount); thisTitle.AngleCount = angleCount; nextLine = output.ReadLine(); } } // Get duration for this title m = Regex.Match(nextLine, @"^ \+ duration: ([0-9]{2}:[0-9]{2}:[0-9]{2})"); if (m.Success) thisTitle.Duration = TimeSpan.Parse(m.Groups[1].Value); // Get resolution, aspect ratio and FPS for this title m = Regex.Match(output.ReadLine(), @"^ \+ size: ([0-9]*)x([0-9]*), pixel aspect: ([0-9]*)/([0-9]*), display aspect: ([0-9]*\.[0-9]*), ([0-9]*\.[0-9]*) fps"); if (m.Success) { thisTitle.Resolution = new Size(int.Parse(m.Groups[1].Value), int.Parse(m.Groups[2].Value)); thisTitle.ParVal = new Size(int.Parse(m.Groups[3].Value), int.Parse(m.Groups[4].Value)); thisTitle.AspectRatio = float.Parse(m.Groups[5].Value, Culture); thisTitle.Fps = float.Parse(m.Groups[6].Value, Culture); } // Get autocrop region for this title m = Regex.Match(output.ReadLine(), @"^ \+ autocrop: ([0-9]*)/([0-9]*)/([0-9]*)/([0-9]*)"); if (m.Success) { thisTitle.AutoCropDimensions = new Cropping { Top = int.Parse(m.Groups[1].Value), Bottom = int.Parse(m.Groups[2].Value), Left = int.Parse(m.Groups[3].Value), Right = int.Parse(m.Groups[4].Value) }; } thisTitle.Chapters.AddRange(Chapter.ParseList(output)); thisTitle.AudioTracks.AddRange(AudioHelper.ParseList(output)); thisTitle.Subtitles.AddRange(Subtitle.ParseList(output)); return thisTitle; }
/// <summary> /// Reset the GUI /// </summary> private void ResetGUI() { drp_dvdtitle.Items.Clear(); drop_chapterStart.Items.Clear(); drop_chapterFinish.Items.Clear(); lbl_duration.Text = "Select a Title"; PictureSettings.lbl_src_res.Text = "Select a Title"; sourcePath = String.Empty; text_destination.Text = String.Empty; selectedTitle = null; }
/// <summary> /// Set the Source Title /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { this.SourceTracks = title.AudioTracks; // Only reset the audio tracks if we have none, or if the task is null. if (this.Task == null) { this.SetPreset(preset, task); } // If there are no source tracks, clear the list, otherwise try to Auto-Select the correct tracks if (this.SourceTracks == null || !this.SourceTracks.Any()) { this.Task.AudioTracks.Clear(); } else { this.SetupTracks(); } // Force UI Updates this.NotifyOfPropertyChange(() => this.Task); }
/// <summary> /// Setup this window for a new source /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { this.SourceTracks.Clear(); this.SourceTracks.Add(ForeignAudioSearchTrack); foreach (Subtitle subtitle in title.Subtitles) { this.SourceTracks.Add(subtitle); } this.Task = task; this.NotifyOfPropertyChange(() => this.Task); this.AutomaticSubtitleSelection(); }
/// <summary> /// Setup this window for a new source /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { this.Task = task; if (title != null) { // Set cached info this.sourceParValues = title.ParVal; this.sourceResolution = title.Resolution; if (preset.PictureSettingsMode == PresetPictureSettingsMode.None) { // We have no instructions, so simply set it to the source. this.Width = this.GetModulusValue(this.sourceResolution.Width - this.CropLeft - this.CropRight); this.MaintainAspectRatio = true; } else { // Set the Max Width / Height available to the user controls if (this.sourceResolution.Width < this.MaxWidth) { this.MaxWidth = this.sourceResolution.Width; } else if (this.sourceResolution.Width > this.MaxWidth) { this.MaxWidth = preset.Task.MaxWidth ?? this.sourceResolution.Width; } if (this.sourceResolution.Height < this.MaxHeight) { this.MaxHeight = this.sourceResolution.Height; } else if (this.sourceResolution.Height > this.MaxHeight) { this.MaxHeight = preset.Task.MaxHeight ?? this.sourceResolution.Height; } // Set the Width, and Maintain Aspect ratio. That should calc the Height for us. this.Width = preset.Task.Width ?? this.MaxWidth; // Note: This will be auto-corrected in the property if it's too large. // If our height is too large, let it downscale the width for us by setting the height to the lower value. if (!this.MaintainAspectRatio && this.Height > this.MaxHeight) { this.Height = this.MaxHeight; } if (this.SelectedAnamorphicMode == Anamorphic.Custom) { this.AnamorphicAdjust(); // Refresh the values } } // Update the cropping values, preffering those in the presets. if (!preset.Task.HasCropping) { this.CropTop = title.AutoCropDimensions.Top; this.CropBottom = title.AutoCropDimensions.Bottom; this.CropLeft = title.AutoCropDimensions.Left; this.CropRight = title.AutoCropDimensions.Right; this.IsCustomCrop = false; } else { this.CropLeft = preset.Task.Cropping.Left; this.CropRight = preset.Task.Cropping.Right; this.CropTop = preset.Task.Cropping.Top; this.CropBottom = preset.Task.Cropping.Bottom; this.IsCustomCrop = true; } // Set Screen Controls this.SourceInfo = string.Format( "{0}x{1}, Aspect Ratio: {2:0.00}", title.Resolution.Width, title.Resolution.Height, title.AspectRatio); } this.NotifyOfPropertyChange(() => this.Task); }
/// <summary> /// Prepare the Preset window to create a Preset Object later. /// </summary> /// <param name="task"> /// The Encode Task. /// </param> public void Setup(EncodeTask task, Title title) { this.Preset.Task = new EncodeTask(task); this.selectedTitle = title; }
/// <summary> /// Set the Track list dropdown from the parsed title captured during the scan /// </summary> /// <param name="selectedTitle">The selected title</param> /// <param name="preset">A preset</param> public void SetTrackListFromPreset(Title selectedTitle, Preset preset) { if (selectedTitle.AudioTracks.Count == 0) { audioList.Rows.Clear(); this.ScannedTracks.Clear(); this.ScannedTracks.Add(Audio.NoneFound); this.drp_audioTrack.Refresh(); drp_audioTrack.SelectedIndex = 0; return; } // Setup the Audio track source dropdown with the new audio tracks. this.ScannedTracks.Clear(); this.drp_audioTrack.SelectedItem = null; foreach (var item in selectedTitle.AudioTracks) { this.ScannedTracks.Add(item); } drp_audioTrack.SelectedItem = this.ScannedTracks.FirstOrDefault(); this.drp_audioTrack.Refresh(); // Add any tracks the preset has, if there is a preset and no audio tracks in the list currently if (audioList.Rows.Count == 0 && preset != null) { EncodeTask parsed = QueryParserUtility.Parse(preset.Query); foreach (AudioTrack audioTrack in parsed.AudioTracks) { audioTrack.ScannedTrack = drp_audioTrack.SelectedItem as Audio; this.audioTracks.Add(audioTrack); } } this.AutomaticTrackSelection(); }
/// <summary> /// Setup this window for a new source /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { this.Task = task; if (title != null) { // Set cached info this.sourceAspectRatio = title.AspectRatio; this.sourceParValues = title.ParVal; this.sourceResolution = title.Resolution; // Set the Max Width / Height available to the user controls if (sourceResolution.Width < this.MaxWidth) { this.MaxWidth = sourceResolution.Width; } else if (sourceResolution.Width > this.MaxWidth) { this.MaxWidth = preset.Task.MaxWidth ?? sourceResolution.Width; } if (sourceResolution.Height < this.MaxHeight) { this.MaxHeight = sourceResolution.Height; } else if (sourceResolution.Height > this.MaxHeight) { this.MaxHeight = preset.Task.MaxHeight ?? sourceResolution.Height; } // Set Screen Controls this.SourceInfo = string.Format( "{0}x{1}, Aspect Ratio: {2:0.00}", title.Resolution.Width, title.Resolution.Height, title.AspectRatio); if (!preset.Task.HasCropping) { this.CropTop = title.AutoCropDimensions.Top; this.CropBottom = title.AutoCropDimensions.Bottom; this.CropLeft = title.AutoCropDimensions.Left; this.CropRight = title.AutoCropDimensions.Right; this.IsCustomCrop = false; } else { this.CropLeft = preset.Task.Cropping.Left; this.CropRight = preset.Task.Cropping.Right; this.CropTop = preset.Task.Cropping.Top; this.CropBottom = preset.Task.Cropping.Bottom; this.IsCustomCrop = true; } // TODO handle preset max width / height this.Width = title.Resolution.Width; this.Height = title.Resolution.Height; this.MaintainAspectRatio = true; if (this.SelectedAnamorphicMode == Anamorphic.Custom) { AnamorphicAdjust(); // Refresh the values } } this.NotifyOfPropertyChange(() => this.Task); }
/// <summary> /// Setup the window after a scan. /// </summary> /// <param name="selectedTitle"> /// The selected title. /// </param> /// <param name="currentTask"> /// The current task. /// </param> /// <param name="currentPreset"> /// The Current preset /// </param> public void Setup(Title selectedTitle, EncodeTask currentTask, Preset currentPreset) { }
/// <summary> /// Setup this window for a new source /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { this.Query = preset.Task.AdvancedEncoderOptions; this.X264Preset = preset.Task.x264Preset; this.X264Profile = preset.Task.x264Profile; this.X264Tune = preset.Task.X264Tune; }
public BatchTitle(string fileName, Title title, bool include = false) { Title = title; Include = include; FileName = fileName; }
/// <summary> /// Setup this window for a new source /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { if (preset != null) { // Properties this.SelectedDenoise = EnumHelper<Denoise>.GetDisplay(preset.Task.Denoise); this.SelectedDecomb = EnumHelper<Decomb>.GetDisplay(preset.Task.Decomb); this.SelectedDeInterlace = EnumHelper<Deinterlace>.GetDisplay(preset.Task.Deinterlace); this.SelectedDetelecine = EnumHelper<Detelecine>.GetDisplay(preset.Task.Detelecine); this.Grayscale = preset.Task.Grayscale; this.DeblockValue = preset.Task.Deblock; // Custom Values this.CustomDecomb = preset.Task.CustomDecomb; this.CustomDeinterlace = preset.Task.CustomDeinterlace; this.CustomDetelecine = preset.Task.CustomDetelecine; this.CustomDenoise = preset.Task.CustomDenoise; } }
/// <summary> /// Setup this window for a new source /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { this.SourceTracks = title.Subtitles; this.SubtitleTracks = task.SubtitleTracks; }
/// <summary> /// Setup this window for a new source /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { this.CurrentTask = task; }
/// <summary> /// Initializes a new instance of the <see cref="SelectionTitle"/> class. /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="sourceName"> /// The source Name. /// </param> public SelectionTitle(Title title, string sourceName) { this.sourceName = sourceName; this.Title = title; }
/// <summary> /// Create a CSV file with the data from the Main Window Chapters tab /// </summary> /// <param name="title">Title of the chapters you wish to save.</param> /// <param name="filePathName">Path to save the csv file</param> /// <returns>True if successful </returns> private static bool ChapterCsvSave(Title title, string filePathName) { try { string csv = string.Empty; foreach (var chapter in title.Chapters) { csv += chapter.ChapterNumber; csv += ","; csv += chapter.ChapterName.Replace(",", "\\,"); csv += Environment.NewLine; } StreamWriter file = new StreamWriter(filePathName); file.Write(csv); file.Close(); file.Dispose(); return true; } catch (Exception exc) { MessageBox.Show("Unable to save Chapter Makrers file! \nChapter marker names will NOT be saved in your encode \n\n" + exc, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } }
/// <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; } }
/// <summary> /// Setup this window for a new source /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { this.Task = task; this.NotifyOfPropertyChange(() => this.AdvancedOptionsString); }
private string GetAutoNameTitle(Title title) { // Get the Source Name and remove any invalid characters string sourceName = Path.GetInvalidFileNameChars().Aggregate(mainWindow.SourceName, (current, character) => current.Replace(character.ToString(), string.Empty)); sourceName = Path.GetFileNameWithoutExtension(sourceName); // Remove Underscores if (userSettingService.GetUserSetting<bool>(UserSettingConstants.AutoNameRemoveUnderscore)) sourceName = sourceName.Replace("_", " "); // Switch to "Title Case" if (userSettingService.GetUserSetting<bool>(UserSettingConstants.AutoNameTitleCase)) sourceName = sourceName.ToTitleCase(); string dvdTitle = title.TitleNumber.ToString(); // Get the Chapter Start and Chapter End Numbers string chapterStart = string.Empty; string chapterFinish = string.Empty; string combinedChapterTag = chapterStart; /* * File Name */ string destinationFilename; if (userSettingService.GetUserSetting<string>(UserSettingConstants.AutoNameFormat) != string.Empty) { destinationFilename = userSettingService.GetUserSetting<string>(UserSettingConstants.AutoNameFormat); destinationFilename = destinationFilename.Replace("{source}", sourceName) .Replace("{title}", dvdTitle) .Replace("{chapters}", combinedChapterTag) .Replace("{date}", DateTime.Now.Date.ToShortDateString().Replace('/', '-')); } else destinationFilename = sourceName + "_T" + dvdTitle + "_C" + combinedChapterTag; /* * File Extension */ if (mainWindow.drop_format.SelectedIndex == 0) { switch (userSettingService.GetUserSetting<int>(UserSettingConstants.UseM4v)) { case 0: // Automatic destinationFilename += mainWindow.Check_ChapterMarkers.Checked || mainWindow.AudioSettings.RequiresM4V() || mainWindow.Subtitles.RequiresM4V() ? ".m4v" : ".mp4"; break; case 1: // Always MP4 destinationFilename += ".mp4"; break; case 2: // Always M4V destinationFilename += ".m4v"; break; } } else if (mainWindow.drop_format.SelectedIndex == 1) destinationFilename += ".mkv"; return destinationFilename; }
/// <summary> /// The set preset. /// </summary> /// <param name="preset"> /// The preset. /// </param> /// <param name="currentTitle"> /// The current Title. /// </param> public void Setup(Preset preset, Title currentTitle) { this.IncludeChapterMarkers = preset.Task.IncludeChapterMarkers; this.SetSourceChapters(currentTitle.Chapters); }
/// <summary> /// Setup this window for a new source /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { this.EncoderOptionsViewModel.SetSource(title, preset, task); this.X264ViewModel.SetSource(title, preset, task); }
private void drp_dvdtitle_SelectedIndexChanged(object sender, EventArgs e) { UnRegisterPresetEventHandler(); drop_mode.SelectedIndex = 0; drop_chapterStart.Items.Clear(); drop_chapterFinish.Items.Clear(); if (string.IsNullOrEmpty(drp_dvdtitle.Text) || drp_dvdtitle.Text == "Automatic" || this.currentSource == null) { return; } selectedTitle = drp_dvdtitle.SelectedItem as Title; if (selectedTitle == null) { return; } lbl_duration.Text = selectedTitle.Duration.ToString(); PictureSettings.CurrentlySelectedPreset = this.currentlySelectedPreset; PictureSettings.Source = selectedTitle; // Setup Picture Settings Tab Control // Populate the Angles dropdown drop_angle.Items.Clear(); if (!userSettingService.GetUserSetting<bool>(ASUserSettingConstants.DisableLibDvdNav)) { drop_angle.Visible = true; lbl_angle.Visible = true; for (int i = 1; i <= selectedTitle.AngleCount; i++) drop_angle.Items.Add(i.ToString()); if (drop_angle.Items.Count == 0) { drop_angle.Visible = false; lbl_angle.Visible = false; } if (drop_angle.Items.Count != 0) drop_angle.SelectedIndex = 0; } else { drop_angle.Visible = false; lbl_angle.Visible = false; } // Populate the Start chapter Dropdown drop_chapterStart.Items.Clear(); drop_chapterStart.Items.AddRange(selectedTitle.Chapters.ToArray()); if (drop_chapterStart.Items.Count > 0) drop_chapterStart.Text = drop_chapterStart.Items[0].ToString(); // Populate the Final Chapter Dropdown drop_chapterFinish.Items.Clear(); drop_chapterFinish.Items.AddRange(selectedTitle.Chapters.ToArray()); if (drop_chapterFinish.Items.Count > 0) drop_chapterFinish.Text = drop_chapterFinish.Items[drop_chapterFinish.Items.Count - 1].ToString(); // Populate the Audio Channels Dropdown AudioSettings.SetTrackListAfterTitleChange(selectedTitle, this.currentlySelectedPreset); // Populate the Subtitles dropdown Subtitles.SetSubtitleTrackAuto(selectedTitle.Subtitles.ToArray()); // Update the source label if we have multiple streams if (selectedTitle != null) if (!string.IsNullOrEmpty(selectedTitle.SourceName)) labelSource.Text = Path.GetFileName(selectedTitle.SourceName); // Run the AutoName & ChapterNaming functions if (this.userSettingService.GetUserSetting<bool>(UserSettingConstants.AutoNaming)) { string autoPath = Main.AutoName(this); if (autoPath != null) text_destination.Text = autoPath; else MessageBox.Show( "You currently have \"Automatically name output files\" enabled for the destination file box, but you do not have a valid default directory set.\n\nYou should set a \"Default Path\" in HandBrakes preferences. (See 'Tools' menu -> 'Options' -> 'Output Files' Tab -> 'Default Path')", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } data_chpt.Rows.Clear(); if (selectedTitle.Chapters.Count != 1) { DataGridView chapterGridView = Main.ChapterNaming(selectedTitle, data_chpt, drop_chapterFinish.Text); if (chapterGridView != null) data_chpt = chapterGridView; } else { Check_ChapterMarkers.Checked = false; Check_ChapterMarkers.Enabled = false; } // Hack to force the redraw of the scrollbars which don't resize properly when the control is disabled. data_chpt.Columns[0].Width = 166; data_chpt.Columns[0].Width = 165; RegisterPresetEventHandler(); }
/// <summary> /// Setup this window for a new source /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { this.Task = task; this.NotifyOfPropertyChange(() => this.Task); if (preset != null) { this.IncludeChapterMarkers = preset.Task.IncludeChapterMarkers; } this.sourceChaptersList = title.Chapters; this.SetSourceChapters(title.Chapters); }
/// <summary> /// Set the Source Title /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { this.SourceTracks = title.AudioTracks; this.SetPreset(preset, task); this.AutomaticTrackSelection(); }
/// <summary> /// Setup this window for a new source /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { this.SourceTracks = title.Subtitles; this.Task = task; this.NotifyOfPropertyChange(() => this.Task); this.AutomaticSubtitleSelection(); }
/// <summary> /// Setup this window for a new source /// </summary> /// <param name="title"> /// The title. /// </param> /// <param name="preset"> /// The preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title title, Preset preset, EncodeTask task) { }
/// <summary> /// The set source. /// </summary> /// <param name="selectedTitle"> /// The selected title. /// </param> /// <param name="currentPreset"> /// The current preset. /// </param> /// <param name="task"> /// The task. /// </param> public void SetSource(Title selectedTitle, Preset currentPreset, EncodeTask task) { this.Task = task; this.Preset = currentPreset; this.NotifyOfPropertyChange(() => this.AdvancedOptionsString); }
/// <summary> /// Set the Track list dropdown from the parsed title captured during the scan /// </summary> /// <param name="selectedTitle">The selected title</param> /// <param name="preset">A preset</param> public void SetTrackListAfterTitleChange(Title selectedTitle, Preset preset) { // Reset this.AudioTracks.Clear(); this.ScannedTracks.Clear(); if (selectedTitle.AudioTracks.Count == 0) { this.ScannedTracks.Add(AudioHelper.NoneFound); this.drp_audioTrack.Refresh(); drp_audioTrack.SelectedIndex = 0; return; } // Setup the Audio track source dropdown with the new audio tracks. // this.ScannedTracks.Clear(); this.drp_audioTrack.SelectedItem = null; this.ScannedTracks = new BindingList<Audio>(selectedTitle.AudioTracks.ToList()); drp_audioTrack.DataSource = this.ScannedTracks; drp_audioTrack.SelectedItem = this.ScannedTracks.FirstOrDefault(); this.drp_audioTrack.Refresh(); // Add any tracks the preset has, if there is a preset and no audio tracks in the list currently if (audioList.Rows.Count == 0 && preset != null) { EncodeTask parsed = QueryParserUtility.Parse(preset.Query); foreach (AudioTrack audioTrack in parsed.AudioTracks) { audioTrack.ScannedTrack = drp_audioTrack.SelectedItem as Audio; this.audioTracks.Add(audioTrack); } } if (selectedTitle.AudioTracks.Count > 0) { this.AutomaticTrackSelection(); } }
/// <summary> /// Parse the Title Information /// </summary> /// <param name="output">A StringReader of output data</param> /// <returns>A Title Object</returns> public static Title Parse(StringReader output) { var thisTitle = new Title(); string nextLine = output.ReadLine(); // Get the Title Number Match m = Regex.Match(nextLine, @"^\+ title ([0-9]*):"); if (m.Success) { thisTitle.TitleNumber = int.Parse(m.Groups[1].Value.Trim()); } nextLine = output.ReadLine(); // Detect if this is the main feature m = Regex.Match(nextLine, @" \+ Main Feature"); if (m.Success) { thisTitle.MainTitle = true; nextLine = output.ReadLine(); } // Get the stream name for file import m = Regex.Match(nextLine, @"^ \+ stream:"); if (m.Success) { thisTitle.SourceName = nextLine.Replace("+ stream:", string.Empty).Trim(); nextLine = output.ReadLine(); } // Playlist m = Regex.Match(nextLine, @"^ \+ playlist:"); if (m.Success) { thisTitle.Playlist = nextLine.Replace("+ playlist:", string.Empty).Trim(); nextLine = output.ReadLine(); } // Jump over the VTS and blocks line m = Regex.Match(nextLine, @"^ \+ vts:"); if (nextLine.Contains("blocks") || nextLine.Contains("+ vts ")) { nextLine = output.ReadLine(); } // Multi-Angle Support if LibDvdNav is enabled if (!userSettingService.GetUserSetting <bool>(ASUserSettingConstants.DisableLibDvdNav)) { m = Regex.Match(nextLine, @" \+ angle\(s\) ([0-9])"); if (m.Success) { string angleList = m.Value.Replace("+ angle(s) ", string.Empty).Trim(); int angleCount; int.TryParse(angleList, out angleCount); thisTitle.AngleCount = angleCount; nextLine = output.ReadLine(); } } // Get duration for this title m = Regex.Match(nextLine, @"^ \+ duration: ([0-9]{2}:[0-9]{2}:[0-9]{2})"); if (m.Success) { thisTitle.Duration = TimeSpan.Parse(m.Groups[1].Value); } // Get resolution, aspect ratio and FPS for this title m = Regex.Match(output.ReadLine(), @"^ \+ size: ([0-9]*)x([0-9]*), pixel aspect: ([0-9]*)/([0-9]*), display aspect: ([0-9]*\.[0-9]*), ([0-9]*\.[0-9]*) fps"); if (m.Success) { thisTitle.Resolution = new Size(int.Parse(m.Groups[1].Value), int.Parse(m.Groups[2].Value)); thisTitle.ParVal = new Size(int.Parse(m.Groups[3].Value), int.Parse(m.Groups[4].Value)); thisTitle.AspectRatio = Math.Round(float.Parse(m.Groups[5].Value, CultureInfo.InvariantCulture), 2); thisTitle.Fps = float.Parse(m.Groups[6].Value, CultureInfo.InvariantCulture); } // Get autocrop region for this title m = Regex.Match(output.ReadLine(), @"^ \+ autocrop: ([0-9]*)/([0-9]*)/([0-9]*)/([0-9]*)"); if (m.Success) { thisTitle.AutoCropDimensions = new Cropping { Top = int.Parse(m.Groups[1].Value), Bottom = int.Parse(m.Groups[2].Value), Left = int.Parse(m.Groups[3].Value), Right = int.Parse(m.Groups[4].Value) }; } thisTitle.Chapters.AddRange(Chapter.ParseList(output)); thisTitle.AudioTracks.AddRange(AudioHelper.ParseList(output)); thisTitle.Subtitles.AddRange(Subtitle.ParseList(output)); return(thisTitle); }