WinGui: Add checkbox for Legacy A/V alignment behaviour for players that don't suppor...
authorsr55 <sr55.hb@outlook.com>
Wed, 14 Jun 2017 21:07:14 +0000 (22:07 +0100)
committersr55 <sr55.hb@outlook.com>
Wed, 14 Jun 2017 21:07:14 +0000 (22:07 +0100)
win/CS/HandBrake.ApplicationServices/Interop/Json/Encode/Destination.cs
win/CS/HandBrake.ApplicationServices/Interop/Json/Presets/HBPreset.cs
win/CS/HandBrakeWPF/Properties/ResourcesTooltips.Designer.cs
win/CS/HandBrakeWPF/Properties/ResourcesTooltips.resx
win/CS/HandBrakeWPF/Properties/ResourcesUI.Designer.cs
win/CS/HandBrakeWPF/Properties/ResourcesUI.resx
win/CS/HandBrakeWPF/Services/Encode/Factories/EncodeFactory.cs
win/CS/HandBrakeWPF/Services/Encode/Model/EncodeTask.cs
win/CS/HandBrakeWPF/Services/Presets/Factories/JsonPresetFactory.cs
win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
win/CS/HandBrakeWPF/Views/MainView.xaml

index 9d22fb98a9f512a2a959cc5ee619e8cfbdaf9307..910a541ca1fb6f22e4702c11913eea8af76d8878 100644 (file)
@@ -26,6 +26,11 @@ namespace HandBrake.ApplicationServices.Interop.Json.Encode
         /// </summary>\r
         public bool ChapterMarkers { get; set; }\r
 \r
+        /// <summary>\r
+        /// Use Legacy A/V Alignment rather than Edit Lists.\r
+        /// </summary>\r
+        public bool AlignAVStart { get; set; }\r
+\r
         /// <summary>\r
         /// Gets or sets the file.\r
         /// </summary>\r
index 6ddb9c0c29e6a54e5ee930137312d19564f93f9d..1df789cb22884c68b7e680f68fadb2de9786e865 100644 (file)
@@ -16,6 +16,8 @@ namespace HandBrake.ApplicationServices.Interop.Json.Presets
     /// </summary>\r
     public class HBPreset\r
     {\r
+        public bool AlignAVStart { get; set; }\r
+\r
         /// <summary>\r
         /// Gets or sets the audio copy mask.\r
         /// </summary>\r
index 9da007c106baaca571683dca8078627a34ecb4fe..d629a2424eaeeba328b0c662db34b49ea770ea03 100644 (file)
@@ -311,6 +311,15 @@ namespace HandBrakeWPF.Properties {
             }\r
         }\r
         \r
+        /// <summary>\r
+        ///   Looks up a localized string similar to Aligns the initial timestamps of all audio and video streams by inserting blank frames or dropping frames. May improve audio/video sync for broken players that do not honor MP4 edit lists..\r
+        /// </summary>\r
+        public static string MainView_AlignAVStart {\r
+            get {\r
+                return ResourceManager.GetString("MainView_AlignAVStart", resourceCulture);\r
+            }\r
+        }\r
+        \r
         /// <summary>\r
         ///   Looks up a localized string similar to Video angle to encode. Only applicable to multi-angle DVD and Blu-ray..\r
         /// </summary>\r
index ed2d40c51f3f522b5d6ecba4206e9d0efe89c976..e5b35b1b842c32f4717052e3968698c74773ff90 100644 (file)
@@ -454,4 +454,7 @@ Lapsharp's Animation tune is useful for cel animation such as anime and cartoons
 \r
 Lapsharp's Sprite tune is useful for 1-/4-/8-/16-bit 2-dimensional games. Sprite uses a 4-neighbor Laplacian kernel that enhances vertical and horizontal edges more than diagonal edges.</value>\r
   </data>\r
+  <data name="MainView_AlignAVStart" xml:space="preserve">\r
+    <value>Aligns the initial timestamps of all audio and video streams by inserting blank frames or dropping frames. May improve audio/video sync for broken players that do not honor MP4 edit lists.</value>\r
+  </data>\r
 </root>
\ No newline at end of file
index 5944201090d66d9c9ba17547c0c76cee079562ed..6ca2f276e4f42091948c77d869c4c8036efb2678 100644 (file)
@@ -654,6 +654,15 @@ namespace HandBrakeWPF.Properties {
             }\r
         }\r
         \r
+        /// <summary>\r
+        ///   Looks up a localized string similar to Align A/V Start.\r
+        /// </summary>\r
+        public static string MainView_AlignAVStart {\r
+            get {\r
+                return ResourceManager.GetString("MainView_AlignAVStart", resourceCulture);\r
+            }\r
+        }\r
+        \r
         /// <summary>\r
         ///   Looks up a localized string similar to Angle.\r
         /// </summary>\r
index 34edf84b045b3d244548bbe3a931bce6c54e0218..6349d49784fed99b6e4869e1a1717ad5eea24066 100644 (file)
@@ -911,4 +911,7 @@ This will not affect your current settings in the Subtitle tab.</value>
   <data name="FiltersView_Sharpen" xml:space="preserve">\r
     <value>Sharpen</value>\r
   </data>\r
+  <data name="MainView_AlignAVStart" xml:space="preserve">\r
+    <value>Align A/V Start</value>\r
+  </data>\r
 </root>
\ No newline at end of file
index 20e4eff14e4da1cd418a62a16a87eddf49174b99..18021c9bc91ceaea05ed3b8afdba577db136f077 100644 (file)
@@ -146,6 +146,7 @@ namespace HandBrakeWPF.Services.Encode.Factories
                     Mp4Optimize = job.OptimizeMP4
                 },
                 ChapterMarkers = job.IncludeChapterMarkers,
+                AlignAVStart = job.AlignAVStart,
                 Mux = HBFunctions.hb_container_get_from_name(job.OutputFormat == OutputFormat.Mp4 ? "av_mp4" : "av_mkv"), // TODO tidy up.
                 ChapterList = new List<Chapter>()
             };
index 84d1eb7ebc018f8bafd177eec623ef3266cf6a1d..f65cf689143ff94cecb82a484a5a4b4d7733cc7d 100644 (file)
@@ -87,6 +87,7 @@ namespace HandBrakeWPF.Services.Encode.Model
                 this.ChapterNames.Add(new ChapterMarker(track));
             }
 
+            this.AlignAVStart = task.AlignAVStart;
             this.ChapterMarkersFilePath = task.ChapterMarkersFilePath;
             this.Cropping = new Cropping(task.Cropping);
             this.CustomDecomb = task.CustomDecomb;
@@ -218,6 +219,8 @@ namespace HandBrakeWPF.Services.Encode.Model
         /// </summary>
         public bool IPod5GSupport { get; set; }
 
+        public bool AlignAVStart { get; set; }
+
         #endregion
 
         #region Picture
index 9b252e0309484653f463bba7c8af0ca6d5deb0c8..787e5ea46d5298549daac24066abb4a43d621c78 100644 (file)
@@ -72,6 +72,7 @@ namespace HandBrakeWPF.Services.Presets.Factories
             preset.Task.OptimizeMP4 = importedPreset.Mp4HttpOptimize;\r
             preset.Task.IPod5GSupport = importedPreset.Mp4iPodCompatible;\r
             preset.Task.OutputFormat = GetFileFormat(importedPreset.FileFormat.Replace("file", string.Empty).Trim()); // TOOD null check.\r
+            preset.Task.AlignAVStart = importedPreset.AlignAVStart;\r
 \r
             /* Picture Settings */\r
             preset.PictureSettingsMode = (PresetPictureSettingsMode)importedPreset.UsesPictureSettings;\r
@@ -604,6 +605,7 @@ namespace HandBrakeWPF.Services.Presets.Factories
             preset.FileFormat = EnumHelper<OutputFormat>.GetShortName(export.Task.OutputFormat);\r
             preset.Mp4HttpOptimize = export.Task.OptimizeMP4;\r
             preset.Mp4iPodCompatible = export.Task.IPod5GSupport;\r
+            preset.AlignAVStart = export.Task.AlignAVStart;\r
 \r
             // Picture Settings\r
             preset.PictureForceHeight = 0; // TODO\r
index 0a8d0b297f9b81ecf46ca1c4698ef064ab2cfe4d..1502d4baa7c0a275365fd853e761d1645f6439bd 100644 (file)
@@ -393,6 +393,7 @@ namespace HandBrakeWPF.ViewModels
                     this.OptimizeMP4 = selectedPreset.Task.OptimizeMP4;\r
                     this.IPod5GSupport = selectedPreset.Task.IPod5GSupport;\r
                     this.SelectedOutputFormat = selectedPreset.Task.OutputFormat;\r
+                    this.AlignAVStart = selectedPreset.Task.AlignAVStart;\r
 \r
                     // Tab Settings\r
                     this.PictureSettingsViewModel.SetPreset(this.selectedPreset, this.CurrentTask);\r
@@ -458,6 +459,23 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
+        public bool AlignAVStart\r
+        {\r
+            get\r
+            {\r
+                return this.CurrentTask.AlignAVStart;\r
+            }\r
+            set\r
+            {\r
+                if (value == this.CurrentTask.AlignAVStart)\r
+                {\r
+                    return;\r
+                }\r
+                this.CurrentTask.AlignAVStart = value;\r
+                this.NotifyOfPropertyChange(() => this.AlignAVStart);\r
+            }\r
+        }\r
+\r
         /// <summary>\r
         /// Gets or sets The Current Encode Task that the user is building\r
         /// </summary>\r
@@ -2218,9 +2236,11 @@ namespace HandBrakeWPF.ViewModels
                 this.IsMkv = true;\r
                 this.CurrentTask.OptimizeMP4 = false;\r
                 this.CurrentTask.IPod5GSupport = false;\r
+                this.CurrentTask.AlignAVStart = false;\r
 \r
                 this.NotifyOfPropertyChange(() => this.OptimizeMP4);\r
                 this.NotifyOfPropertyChange(() => this.IPod5GSupport);\r
+                this.NotifyOfPropertyChange(() => this.AlignAVStart);              \r
             }\r
 \r
             // Update The browse file extension display\r
index 507ceb41d627b423514e9207167ac68e4c56cc20..b8da5c564fcad78ac11095a97ab134a0caa6f19d 100644 (file)
                               IsChecked="{Binding Path=IPod5GSupport}"\r
                               Visibility="{Binding IsMkv,\r
                                                    Converter={StaticResource boolToVisConverter},\r
-                                                   ConverterParameter=true}"\r
-                              />\r
+                                                   ConverterParameter=true}" />\r
+\r
+                    <CheckBox Name="AlignAVStart"\r
+                              Margin="8,0,0,0"\r
+                              VerticalAlignment="Center"\r
+                              Content="{x:Static Properties:ResourcesUI.MainView_AlignAVStart}"\r
+                              ToolTip="{x:Static Properties:ResourcesTooltips.MainView_AlignAVStart}"\r
+                              IsChecked="{Binding Path=AlignAVStart}"\r
+                              Visibility="{Binding IsMkv,\r
+                                                   Converter={StaticResource boolToVisConverter},\r
+                                                   ConverterParameter=true}" />\r
                 </StackPanel>\r
             </StackPanel>\r
 \r