diff -Nru handbrake-0.9.8ppa2/.svn/entries handbrake-0.9.9ppa1~precise1/.svn/entries
--- handbrake-0.9.8ppa2/.svn/entries 2012-07-18 10:17:32.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/entries 2013-05-18 16:12:10.000000000 +0000
@@ -1,466 +1 @@
-10
-
-dir
-4863
-svn://svn.handbrake.fr/HandBrake/tags/0.9.8
-svn://svn.handbrake.fr/HandBrake
-
-
-
-2012-07-17T22:35:28.669832Z
-4863
-sr55
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-b64f7644-9d1e-0410-96f1-a4d463321fa5
-
-DoxyfileLibHb
-file
-
-
-
-
-2012-07-18T10:17:32.976663Z
-9a2633fe96526b3ec327e57de27992e1
-2010-08-21T13:02:43.132939Z
-3488
-sr55
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-69993
-
-AUTHORS
-file
-
-
-
-
-2012-07-18T10:17:32.976663Z
-481b9e4cec917bb71f2f7af3d8667635
-2012-03-04T11:17:16.154250Z
-4491
-sr55
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2668
-
-gtk
-dir
-
-scripts
-dir
-
-THANKS
-file
-
-
-
-
-2012-07-18T10:17:32.976663Z
-2ed3f32f6ab9a996e16841101d64ba73
-2012-07-17T15:04:00.415147Z
-4855
-sr55
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-803
-
-DoxyfileGtk
-file
-
-
-
-
-2012-07-18T10:17:32.976663Z
-2cebc40f72d55a660decb73c0886a6d2
-2010-08-21T13:02:43.132939Z
-3488
-sr55
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-69989
-
-macosx
-dir
-
-win
-dir
-
-CREDITS
-file
-
-
-
-
-2012-07-18T10:17:32.976663Z
-830009c8621e29ad93c8bfd3bd02b357
-2011-06-20T14:46:14.902198Z
-4065
-sr55
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-507
-
-contrib
-dir
-
-DoxyfileDotNet
-file
-
-
-
-
-2012-07-18T10:17:32.976663Z
-483f2599d5d7a45fef53752fa1a66c55
-2011-10-08T19:07:42.495920Z
-4276
-sr55
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-70009
-
-DoxyfileMac
-file
-
-
-
-
-2012-07-18T10:17:32.976663Z
-bdc95603af4a2709061107e5d78fbf46
-2010-08-21T13:16:27.553926Z
-3489
-sr55
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-69993
-
-doc
-dir
-
-COPYING
-file
-
-
-
-
-2012-07-18T10:17:32.976663Z
-39bba7d2cf0ba1036f2a6e2be52fe3f0
-2011-06-20T14:29:53.891470Z
-4063
-sr55
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-18091
-
-NEWS
-file
-
-
-
-
-2012-07-18T10:17:32.980663Z
-a8d842c87a7bc104c0bb94935a050fb9
-2012-07-17T15:04:00.415147Z
-4855
-sr55
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-37833
-
-make
-dir
-
-README.pod
-file
-
-
-
-
-2012-07-18T10:17:32.980663Z
-d7fe90cdd62af4bebede9fbf3ec1e08e
-2011-07-09T20:45:20.002005Z
-4094
-sr55
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1248
-
-test
-dir
-
-libhb
-dir
-
-configure
-file
-
-
-
-
-2012-07-18T10:17:32.976663Z
-8aa02542642d13b44677d2e47e4145c7
-2009-03-08T22:50:57.400451Z
-2242
-konablend
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-380
-
-TRANSLATIONS
-file
-
-
-
-
-2012-07-18T10:17:32.976663Z
-edcd07f8be634a6fe25f706a0c5b7cc8
-2011-06-20T14:40:52.920190Z
-4064
-sr55
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-185
-
-pkg
-dir
-
+12
diff -Nru handbrake-0.9.8ppa2/.svn/format handbrake-0.9.9ppa1~precise1/.svn/format
--- handbrake-0.9.8ppa2/.svn/format 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/format 2013-05-18 16:12:10.000000000 +0000
@@ -0,0 +1 @@
+12
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/01/0157124851245255211fc9a57a3fba3b13cddf6b.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/01/0157124851245255211fc9a57a3fba3b13cddf6b.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/01/0157124851245255211fc9a57a3fba3b13cddf6b.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/01/0157124851245255211fc9a57a3fba3b13cddf6b.svn-base 2013-05-18 16:12:18.000000000 +0000
@@ -0,0 +1,18 @@
+// --------------------------------------------------------------------------------------------------------------------
+//
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+//
+//
+// The About View Model Interface
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.ViewModels.Interfaces
+{
+ ///
+ /// The About View Model Interface
+ ///
+ public interface IAboutViewModel
+ {
+ }
+}
\ No newline at end of file
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/01/01c59f7901c3eaae74317bc41f6172f4a6f6aaf8.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/01/01c59f7901c3eaae74317bc41f6172f4a6f6aaf8.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/01/01c59f7901c3eaae74317bc41f6172f4a6f6aaf8.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/01/01c59f7901c3eaae74317bc41f6172f4a6f6aaf8.svn-base 2013-05-18 16:12:18.000000000 +0000
@@ -0,0 +1,65 @@
+// --------------------------------------------------------------------------------------------------------------------
+//
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+//
+//
+// Scan Progress Event Args
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrake.ApplicationServices.EventArgs
+{
+ using System;
+ using System.Runtime.Serialization;
+
+ ///
+ /// Scan Progress Event Args
+ ///
+ [DataContractAttribute]
+ public class ScanCompletedEventArgs : EventArgs
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// Whether the scan was cancelled.
+ ///
+ ///
+ /// The exception.
+ ///
+ ///
+ /// The error information.
+ ///
+ public ScanCompletedEventArgs(bool cancelled, Exception exception, string errorInformation)
+ {
+ this.Successful = !cancelled && exception == null && string.IsNullOrEmpty(errorInformation);
+ this.Cancelled = cancelled;
+ this.Exception = exception;
+ this.ErrorInformation = errorInformation;
+ }
+
+ ///
+ /// Gets or sets a value indicating whether Successful.
+ ///
+ [DataMember]
+ public bool Successful { get; set; }
+
+ ///
+ /// Gets or sets a value indicating whether Cancelled.
+ ///
+ [DataMember]
+ public bool Cancelled { get; set; }
+
+ ///
+ /// Gets or sets Exception.
+ ///
+ [DataMember]
+ public Exception Exception { get; set; }
+
+ ///
+ /// Gets or sets ErrorInformation.
+ ///
+ [DataMember]
+ public string ErrorInformation { get; set; }
+ }
+}
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/01/01d56044ca35c0d005acb691b5e06c7de85a050c.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/01/01d56044ca35c0d005acb691b5e06c7de85a050c.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/01/01d56044ca35c0d005acb691b5e06c7de85a050c.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/01/01d56044ca35c0d005acb691b5e06c7de85a050c.svn-base 2013-05-18 16:12:19.000000000 +0000
@@ -0,0 +1,2 @@
+$(eval $(call import.MODULE.rules,FRIBIDI))
+$(eval $(call import.CONTRIB.rules,FRIBIDI))
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/01/01fba85da5ac38e0aaf08c25104e18990e1560cd.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/01/01fba85da5ac38e0aaf08c25104e18990e1560cd.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/01/01fba85da5ac38e0aaf08c25104e18990e1560cd.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/01/01fba85da5ac38e0aaf08c25104e18990e1560cd.svn-base 2013-05-18 16:12:18.000000000 +0000
@@ -0,0 +1,68 @@
+
+
+
+ Debug
+ AnyCPU
+
+
+ 2.0
+ {D721824C-CAFA-40B1-83C9-83E4B1215D60}
+ Library
+ Properties
+ HandBrakeInterop.Test
+ HandBrakeInterop.Test
+ v4.0
+ 512
+ {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+ 3.5
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+ {F0A61F62-2C3B-4A87-AFF4-0C4256253DA1}
+ HandBrakeInterop
+
+
+
+
+
\ No newline at end of file
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/02/0264155828cca415b535f521ad0d28f4f5c92366.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/02/0264155828cca415b535f521ad0d28f4f5c92366.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/02/0264155828cca415b535f521ad0d28f4f5c92366.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/02/0264155828cca415b535f521ad0d28f4f5c92366.svn-base 2013-05-18 16:12:19.000000000 +0000
@@ -0,0 +1,157 @@
+diff -Naur libdvdnav.orig/src/vm/vm.c libdvdnav/src/vm/vm.c
+--- libdvdnav.orig/src/vm/vm.c 2009-10-29 09:10:44.836643320 -0700
++++ libdvdnav/src/vm/vm.c 2009-11-27 11:32:47.475322754 -0800
+@@ -585,6 +585,9 @@
+ switch(menuid) {
+ case DVD_MENU_Title:
+ case DVD_MENU_Escape:
++ if(vm->vmgi == NULL || vm->vmgi->pgci_ut == NULL) {
++ goto fail;
++ }
+ (vm->state).domain = VMGM_DOMAIN;
+ break;
+ case DVD_MENU_Root:
+@@ -592,6 +595,9 @@
+ case DVD_MENU_Audio:
+ case DVD_MENU_Angle:
+ case DVD_MENU_Part:
++ if(vm->vtsi == NULL || vm->vtsi->pgci_ut == NULL) {
++ goto fail;
++ }
+ (vm->state).domain = VTSM_DOMAIN;
+ break;
+ }
+@@ -606,6 +612,7 @@
+ break;
+ }
+
++fail:
+ return 0;
+ }
+
+@@ -1412,8 +1419,9 @@
+ if(link_values.data2 != 0)
+ (vm->state).HL_BTNN_REG = link_values.data2 << 10;
+ if(!set_VTS_PTT(vm, (vm->state).vtsN, (vm->state).VTS_TTN_REG, link_values.data1))
+- assert(0);
+- link_values = play_PG(vm);
++ link_values.command = Exit;
++ else
++ link_values = play_PG(vm);
+ break;
+ case LinkPGN:
+ /* Link to Program Number:data1 */
+@@ -1458,8 +1466,9 @@
+ /* Set SPRM1 and SPRM2 */
+ assert((vm->state).domain == VTSM_DOMAIN || (vm->state).domain == VTS_DOMAIN); /* ?? */
+ if(!set_VTS_TT(vm, (vm->state).vtsN, link_values.data1))
+- assert(0);
+- link_values = play_PGC(vm);
++ link_values.command = Exit;
++ else
++ link_values = play_PGC(vm);
+ break;
+ case JumpVTS_PTT:
+ /* Jump to Part:data2 of Title:data1 in same VTS Title Domain */
+@@ -1469,8 +1478,9 @@
+ /* Set SPRM1 and SPRM2 */
+ assert((vm->state).domain == VTSM_DOMAIN || (vm->state).domain == VTS_DOMAIN); /* ?? */
+ if(!set_VTS_PTT(vm, (vm->state).vtsN, link_values.data1, link_values.data2))
+- assert(0);
+- link_values = play_PGC_PG(vm, (vm->state).pgN);
++ link_values.command = Exit;
++ else
++ link_values = play_PGC_PG(vm, (vm->state).pgN);
+ break;
+
+ case JumpSS_FP:
+@@ -1488,6 +1498,10 @@
+ /* Allowed from anywhere except the VTS Title domain */
+ /* Stop SPRM9 Timer and any GPRM counters */
+ assert((vm->state).domain != VTS_DOMAIN); /* ?? */
++ if(vm->vmgi == NULL || vm->vmgi->pgci_ut == NULL) {
++ link_values.command = Exit;
++ break;
++ }
+ (vm->state).domain = VMGM_DOMAIN;
+ if(!set_MENU(vm, link_values.data1))
+ assert(0);
+@@ -1504,14 +1518,22 @@
+ if (link_values.data1 != (vm->state).vtsN) {
+ /* the normal case */
+ assert((vm->state).domain == VMGM_DOMAIN || (vm->state).domain == FP_DOMAIN); /* ?? */
+- (vm->state).domain = VTSM_DOMAIN;
+ if (!ifoOpenNewVTSI(vm, vm->dvd, link_values.data1)) /* Also sets (vm->state).vtsN */
+ assert(0);
++ if(vm->vtsi == NULL || vm->vtsi->pgci_ut == NULL) {
++ link_values.command = Exit;
++ break;
++ }
++ (vm->state).domain = VTSM_DOMAIN;
+ } else {
+ /* This happens on some discs like "Captain Scarlet & the Mysterons" or
+ * the German RC2 of "Anatomie" in VTSM. */
+ assert((vm->state).domain == VTSM_DOMAIN ||
+ (vm->state).domain == VMGM_DOMAIN || (vm->state).domain == FP_DOMAIN); /* ?? */
++ if(vm->vtsi == NULL || vm->vtsi->pgci_ut == NULL) {
++ link_values.command = Exit;
++ break;
++ }
+ (vm->state).domain = VTSM_DOMAIN;
+ }
+ } else {
+@@ -1533,6 +1555,10 @@
+ /* set_PGCN:data1 */
+ /* Stop SPRM9 Timer and any GPRM counters */
+ assert((vm->state).domain != VTS_DOMAIN); /* ?? */
++ if(vm->vmgi == NULL || vm->vmgi->pgci_ut == NULL) {
++ link_values.command = Exit;
++ break;
++ }
+ (vm->state).domain = VMGM_DOMAIN;
+ if(!set_PGCN(vm, link_values.data1))
+ assert(0);
+@@ -1552,6 +1578,10 @@
+ /* set_RSMinfo:data2 */
+ assert((vm->state).domain == VTS_DOMAIN); /* ?? */
+ /* Must be called before domain is changed */
++ if(vm->vmgi == NULL || vm->vmgi->pgci_ut == NULL) {
++ link_values.command = Exit;
++ break;
++ }
+ set_RSMinfo(vm, link_values.data2, /* We dont have block info */ 0);
+ (vm->state).domain = VMGM_DOMAIN;
+ if(!set_MENU(vm, link_values.data1))
+@@ -1563,6 +1593,10 @@
+ /* set_RSMinfo:data2 */
+ assert((vm->state).domain == VTS_DOMAIN); /* ?? */
+ /* Must be called before domain is changed */
++ if(vm->vtsi == NULL || vm->vtsi->pgci_ut == NULL) {
++ link_values.command = Exit;
++ break;
++ }
+ set_RSMinfo(vm, link_values.data2, /* We dont have block info */ 0);
+ (vm->state).domain = VTSM_DOMAIN;
+ if(!set_MENU(vm, link_values.data1))
+@@ -1574,6 +1608,10 @@
+ /* set_RSMinfo:data2 */
+ assert((vm->state).domain == VTS_DOMAIN); /* ?? */
+ /* Must be called before domain is changed */
++ if(vm->vmgi == NULL || vm->vmgi->pgci_ut == NULL) {
++ link_values.command = Exit;
++ break;
++ }
+ set_RSMinfo(vm, link_values.data2, /* We dont have block info */ 0);
+ (vm->state).domain = VMGM_DOMAIN;
+ if(!set_PGCN(vm, link_values.data1))
+@@ -1634,7 +1672,9 @@
+ (vm->state).TT_PGCN_REG = pgcN;
+ (vm->state).PTTN_REG = part;
+ (vm->state).TTN_REG = get_TT(vm, vtsN, vts_ttn);
+- assert( (vm->state.TTN_REG) != 0 );
++ if( (vm->state.TTN_REG) == 0 )
++ return 0;
++
+ (vm->state).VTS_TTN_REG = vts_ttn;
+ (vm->state).vtsN = vtsN; /* Not sure about this one. We can get to it easily from TTN_REG */
+ /* Any other registers? */
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/03/03346c93c5f7db7b9b6a096549b1880d46477b70.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/03/03346c93c5f7db7b9b6a096549b1880d46477b70.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/03/03346c93c5f7db7b9b6a096549b1880d46477b70.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/03/03346c93c5f7db7b9b6a096549b1880d46477b70.svn-base 2013-05-18 16:12:18.000000000 +0000
@@ -0,0 +1,27 @@
+// --------------------------------------------------------------------------------------------------------------------
+//
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+//
+//
+// Interaction logic for AudioView.xaml
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Views
+{
+ using System.Windows.Controls;
+
+ ///
+ /// Interaction logic for AudioView.xaml
+ ///
+ public partial class AudioView : UserControl
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public AudioView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/03/0338044e96243723d070f7f1c5aee90230fce50c.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/03/0338044e96243723d070f7f1c5aee90230fce50c.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/03/0338044e96243723d070f7f1c5aee90230fce50c.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/03/0338044e96243723d070f7f1c5aee90230fce50c.svn-base 2013-05-18 16:12:19.000000000 +0000
@@ -0,0 +1,11 @@
+--- fribidi-0.19.2.orig/lib/fribidi-common.h 2007-04-05 09:13:24.000000000 -0700
++++ fribidi-0.19.2/lib/fribidi-common.h 2011-10-20 11:00:21.874917516 -0700
+@@ -54,7 +54,7 @@
+ /* FRIBIDI_ENTRY is a macro used to declare library entry points. */
+ #ifndef FRIBIDI_ENTRY
+ # if (defined(WIN32)) || (defined(_WIN32_WCE))
+-# define FRIBIDI_ENTRY __declspec(dllimport)
++# define FRIBIDI_ENTRY
+ # else /* !WIN32 */
+ # define FRIBIDI_ENTRY /* empty */
+ # endif /* !WIN32 */
Binary files /tmp/5lk47m_5x2/handbrake-0.9.8ppa2/.svn/pristine/03/035a61152f6b3a61f2baf24dc15ac842e2747b3e.svn-base and /tmp/afw0VoTkrp/handbrake-0.9.9ppa1~precise1/.svn/pristine/03/035a61152f6b3a61f2baf24dc15ac842e2747b3e.svn-base differ
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/03/03a4d1b7b4cf7741896201f39c50c24c573e7b59.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/03/03a4d1b7b4cf7741896201f39c50c24c573e7b59.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/03/03a4d1b7b4cf7741896201f39c50c24c573e7b59.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/03/03a4d1b7b4cf7741896201f39c50c24c573e7b59.svn-base 2013-05-18 16:12:18.000000000 +0000
@@ -0,0 +1,68 @@
+// --------------------------------------------------------------------------------------------------------------------
+//
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+//
+//
+// Audio Queue Display Converter
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Converters.Audio
+{
+ using System;
+ using System.Collections.ObjectModel;
+ using System.Globalization;
+ using System.Text;
+ using System.Windows.Data;
+
+ using HandBrake.ApplicationServices.Model.Encoding;
+ using HandBrake.ApplicationServices.Utilities;
+ using HandBrake.Interop.Model.Encoding;
+
+ ///
+ /// Audio Queue Display Converter
+ ///
+ public class AudioQueueDisplayConverter : IValueConverter
+ {
+ ///
+ /// Converts a value.
+ ///
+ ///
+ /// A converted value. If the method returns null, the valid null value is used.
+ ///
+ /// The value produced by the binding source.The type of the binding target property.The converter parameter to use.The culture to use in the converter.
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ ObservableCollection tracks = value as ObservableCollection;
+ StringBuilder audioTracks = new StringBuilder();
+ if (tracks != null)
+ {
+ foreach (AudioTrack track in tracks)
+ {
+ if (string.IsNullOrEmpty(audioTracks.ToString()))
+ {
+ audioTracks.Append(EnumHelper.GetDisplay(track.Encoder));
+ }
+ else
+ {
+ audioTracks.Append(", " + EnumHelper.GetDisplay(track.Encoder));
+ }
+ }
+ }
+
+ return audioTracks.ToString();
+ }
+
+ ///
+ /// Converts a value.
+ ///
+ ///
+ /// A converted value. If the method returns null, the valid null value is used.
+ ///
+ /// The value that is produced by the binding target.The type to convert to.The converter parameter to use.The culture to use in the converter.
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
Binary files /tmp/5lk47m_5x2/handbrake-0.9.8ppa2/.svn/pristine/03/03b0266c683c77f5ec0c98c9e17b01e5c1cd3c95.svn-base and /tmp/afw0VoTkrp/handbrake-0.9.9ppa1~precise1/.svn/pristine/03/03b0266c683c77f5ec0c98c9e17b01e5c1cd3c95.svn-base differ
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/03/03cca22b3e1f81979714a9cf53c1ddf24c8ea347.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/03/03cca22b3e1f81979714a9cf53c1ddf24c8ea347.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/03/03cca22b3e1f81979714a9cf53c1ddf24c8ea347.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/03/03cca22b3e1f81979714a9cf53c1ddf24c8ea347.svn-base 2013-05-18 16:12:11.000000000 +0000
@@ -0,0 +1,837 @@
+/* reader.c
+
+ Copyright (c) 2003-2013 HandBrake Team
+ This file is part of the HandBrake source code
+ Homepage: .
+ It may be used under the terms of the GNU General Public License v2.
+ For full terms see the file COPYING file or visit http://www.gnu.org/licenses/gpl-2.0.html
+ */
+#include "hb.h"
+
+static int hb_reader_init( hb_work_object_t * w, hb_job_t * job );
+static void hb_reader_close( hb_work_object_t * w );
+
+hb_work_object_t hb_reader =
+{
+ WORK_READER,
+ "Reader",
+ hb_reader_init,
+ NULL,
+ hb_reader_close,
+ NULL,
+ NULL
+};
+
+typedef struct
+{
+ int startup;
+ double average; // average time between packets
+ double filtered_average; // average time between packets
+ int64_t last; // last timestamp seen on this stream
+ int id; // stream id
+ int is_audio; // != 0 if this is an audio stream
+ int valid; // Stream timing is not valid until next scr.
+} stream_timing_t;
+
+struct hb_work_private_s
+{
+ hb_job_t * job;
+ hb_title_t * title;
+ volatile int * die;
+
+ hb_bd_t * bd;
+ hb_dvd_t * dvd;
+ hb_stream_t * stream;
+
+ stream_timing_t *stream_timing;
+ int64_t scr_offset;
+ hb_psdemux_t demux;
+ int scr_changes;
+ uint32_t sequence;
+ uint8_t st_slots; // size (in slots) of stream_timing array
+ uint8_t saw_video; // != 0 if we've seen video
+ uint8_t saw_audio; // != 0 if we've seen audio
+
+ int start_found; // found pts_to_start point
+ int64_t pts_to_start;
+ uint64_t st_first;
+ uint64_t duration;
+ hb_fifo_t * fifos[100];
+};
+
+/***********************************************************************
+ * Local prototypes
+ **********************************************************************/
+static hb_fifo_t ** GetFifoForId( hb_work_private_t * r, int id );
+static void UpdateState( hb_work_private_t * r, int64_t start);
+
+/***********************************************************************
+ * hb_reader_init
+ ***********************************************************************
+ *
+ **********************************************************************/
+static int hb_reader_open( hb_work_private_t * r )
+{
+ if ( r->title->type == HB_BD_TYPE )
+ {
+ if ( !( r->bd = hb_bd_init( r->title->path ) ) )
+ return 1;
+ }
+ else if ( r->title->type == HB_DVD_TYPE )
+ {
+ if ( !( r->dvd = hb_dvd_init( r->title->path ) ) )
+ return 1;
+ }
+ else if ( r->title->type == HB_STREAM_TYPE ||
+ r->title->type == HB_FF_STREAM_TYPE )
+ {
+ if ( !( r->stream = hb_stream_open( r->title->path, r->title, 0 ) ) )
+ return 1;
+ }
+ else
+ {
+ // Unknown type, should never happen
+ return 1;
+ }
+ return 0;
+}
+
+static int hb_reader_init( hb_work_object_t * w, hb_job_t * job )
+{
+ hb_work_private_t * r;
+
+ r = calloc( sizeof( hb_work_private_t ), 1 );
+ w->private_data = r;
+
+ r->job = job;
+ r->title = job->title;
+ r->die = job->die;
+ r->sequence = 0;
+
+ r->st_slots = 4;
+ r->stream_timing = calloc( sizeof(stream_timing_t), r->st_slots );
+ r->stream_timing[0].id = r->title->video_id;
+ r->stream_timing[0].average = 90000. * (double)job->vrate_base /
+ (double)job->vrate;
+ r->stream_timing[0].filtered_average = r->stream_timing[0].average;
+ r->stream_timing[0].last = -r->stream_timing[0].average;
+ r->stream_timing[0].valid = 1;
+ r->stream_timing[0].startup = 10;
+ r->stream_timing[1].id = -1;
+
+ r->demux.last_scr = -1;
+
+ if ( !job->pts_to_start )
+ r->start_found = 1;
+ else
+ {
+ // The frame at the actual start time may not be an i-frame
+ // so can't be decoded without starting a little early.
+ // sync.c will drop early frames.
+ r->pts_to_start = MAX(0, job->pts_to_start - 180000);
+ }
+
+ if (job->pts_to_stop)
+ {
+ r->duration = job->pts_to_start + job->pts_to_stop;
+ }
+ else if (job->frame_to_stop)
+ {
+ int frames = job->frame_to_start + job->frame_to_stop;
+ r->duration = (int64_t)frames * job->title->rate_base * 90000 / job->title->rate;
+ }
+ else
+ {
+ hb_chapter_t *chapter;
+ int ii;
+
+ r->duration = 0;
+ for (ii = job->chapter_start; ii < job->chapter_end; ii++)
+ {
+ chapter = hb_list_item( job->title->list_chapter, ii - 1);
+ r->duration += chapter->duration;
+ }
+ }
+
+ // The stream needs to be open before starting the reader thead
+ // to prevent a race with decoders that may share information
+ // with the reader. Specifically avcodec needs this.
+ if ( hb_reader_open( r ) )
+ {
+ free( r->stream_timing );
+ free( r );
+ return 1;
+ }
+ return 0;
+}
+
+
+static void hb_reader_close( hb_work_object_t * w )
+{
+ hb_work_private_t * r = w->private_data;
+
+ if (r->bd)
+ {
+ hb_bd_stop( r->bd );
+ hb_bd_close( &r->bd );
+ }
+ else if (r->dvd)
+ {
+ hb_dvd_stop( r->dvd );
+ hb_dvd_close( &r->dvd );
+ }
+ else if (r->stream)
+ {
+ hb_stream_close(&r->stream);
+ }
+
+ if ( r->stream_timing )
+ {
+ free( r->stream_timing );
+ }
+
+ free( r );
+}
+
+static void push_buf( const hb_work_private_t *r, hb_fifo_t *fifo, hb_buffer_t *buf )
+{
+ while ( !*r->die && !r->job->done )
+ {
+ if ( hb_fifo_full_wait( fifo ) )
+ {
+ hb_fifo_push( fifo, buf );
+ buf = NULL;
+ break;
+ }
+ }
+ if ( buf )
+ {
+ hb_buffer_close( &buf );
+ }
+}
+
+static int is_audio( hb_work_private_t *r, int id )
+{
+ int i;
+ hb_audio_t *audio;
+
+ for( i = 0; ( audio = hb_list_item( r->title->list_audio, i ) ); ++i )
+ {
+ if ( audio->id == id )
+ {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+// The MPEG STD (Standard Target Decoder) essentially requires that we keep
+// per-stream timing so that when there's a timing discontinuity we can
+// seemlessly join packets on either side of the discontinuity. This join
+// requires that we know the timestamp of the previous packet and the
+// average inter-packet time (since we position the new packet at the end
+// of the previous packet). The next four routines keep track of this
+// per-stream timing.
+
+// find or create the per-stream timing state for 'buf'
+
+static stream_timing_t *id_to_st( hb_work_private_t *r, const hb_buffer_t *buf, int valid )
+{
+ stream_timing_t *st = r->stream_timing;
+ while ( st->id != buf->s.id && st->id != -1)
+ {
+ ++st;
+ }
+ // if we haven't seen this stream add it.
+ if ( st->id == -1 )
+ {
+ // we keep the steam timing info in an array with some power-of-two
+ // number of slots. If we don't have two slots left (one for our new
+ // entry plus one for the "-1" eol) we need to expand the array.
+ int slot = st - r->stream_timing;
+ if ( slot + 1 >= r->st_slots )
+ {
+ r->st_slots *= 2;
+ r->stream_timing = realloc( r->stream_timing, r->st_slots *
+ sizeof(*r->stream_timing) );
+ st = r->stream_timing + slot;
+ }
+ st->id = buf->s.id;
+ st->average = 30.*90.;
+ st->filtered_average = st->average;
+ st->startup = 10;
+ st->last = -st->average;
+ if ( ( st->is_audio = is_audio( r, buf->s.id ) ) != 0 )
+ {
+ r->saw_audio = 1;
+ }
+ st[1].id = -1;
+ st->valid = valid;
+ }
+ return st;
+}
+
+// update the average inter-packet time of the stream associated with 'buf'
+// using a recursive low-pass filter with a 16 packet time constant.
+
+static void update_ipt( hb_work_private_t *r, const hb_buffer_t *buf )
+{
+ stream_timing_t *st = id_to_st( r, buf, 1 );
+
+ if( buf->s.renderOffset < 0 )
+ {
+ st->last += st->filtered_average;
+ return;
+ }
+
+ double dt = buf->s.renderOffset - st->last;
+
+ // Protect against spurious bad timestamps
+ // timestamps should only move forward and by reasonable increments
+ if ( dt > 0 && dt < 5 * 90000LL )
+ {
+ if( st->startup )
+ {
+ st->average += ( dt - st->average ) * (1./4.);
+ st->startup--;
+ }
+ else
+ {
+ st->average += ( dt - st->average ) * (1./32.);
+ }
+ // Ignore outliers
+ if (dt < 1.5 * st->average)
+ {
+ st->filtered_average += ( dt - st->filtered_average ) * (1./32.);
+ }
+ }
+ st->last = buf->s.renderOffset;
+ st->valid = 1;
+}
+
+// use the per-stream state associated with 'buf' to compute a new scr_offset
+// such that 'buf' will follow the previous packet of this stream separated
+// by the average packet time of the stream.
+
+static void new_scr_offset( hb_work_private_t *r, hb_buffer_t *buf )
+{
+ stream_timing_t *st = id_to_st( r, buf, 1 );
+ int64_t last;
+ if ( !st->valid )
+ {
+ // !valid means we've not received any previous data
+ // for this stream. There is no 'last' packet time.
+ // So approximate it with video's last time.
+ last = r->stream_timing[0].last;
+ st->valid = 1;
+ }
+ else
+ {
+ last = st->last;
+ }
+ int64_t nxt = last + st->filtered_average;
+ r->scr_offset = buf->s.renderOffset - nxt;
+ // This log is handy when you need to debug timing problems...
+ //hb_log("id %x last %"PRId64" avg %g nxt %"PRId64" renderOffset %"PRId64
+ // " scr_offset %"PRId64"",
+ // buf->s.id, last, st->filtered_average, nxt,
+ // buf->s.renderOffset, r->scr_offset);
+ r->scr_changes = r->demux.scr_changes;
+}
+
+/***********************************************************************
+ * ReaderFunc
+ ***********************************************************************
+ *
+ **********************************************************************/
+void ReadLoop( void * _w )
+{
+ hb_work_object_t * w = _w;
+ hb_work_private_t * r = w->private_data;
+ hb_fifo_t ** fifos;
+ hb_buffer_t * buf;
+ hb_list_t * list;
+ int n;
+ int chapter = -1;
+ int chapter_end = r->job->chapter_end;
+ uint8_t done = 0;
+
+ if (r->bd)
+ {
+ if( !hb_bd_start( r->bd, r->title ) )
+ {
+ hb_bd_close( &r->bd );
+ return;
+ }
+ if ( r->job->start_at_preview )
+ {
+ // XXX code from DecodePreviews - should go into its own routine
+ hb_bd_seek( r->bd, (float)r->job->start_at_preview /
+ ( r->job->seek_points ? ( r->job->seek_points + 1.0 ) : 11.0 ) );
+ }
+ else if ( r->job->pts_to_start )
+ {
+ // Note, bd seeks always put us to an i-frame. no need
+ // to start decoding early using r->pts_to_start
+ hb_bd_seek_pts( r->bd, r->job->pts_to_start );
+ r->duration -= r->job->pts_to_start;
+ r->job->pts_to_start = 0;
+ r->start_found = 1;
+ }
+ else
+ {
+ hb_bd_seek_chapter( r->bd, r->job->chapter_start );
+ }
+ if (r->job->angle > 1)
+ {
+ hb_bd_set_angle( r->bd, r->job->angle - 1 );
+ }
+ }
+ else if (r->dvd)
+ {
+ /*
+ * XXX this code is a temporary hack that should go away if/when
+ * chapter merging goes away in libhb/dvd.c
+ * map the start and end chapter numbers to on-media chapter
+ * numbers since chapter merging could cause the handbrake numbers
+ * to diverge from the media numbers and, if our chapter_end is after
+ * a media chapter that got merged, we'll stop ripping too early.
+ */
+ int start = r->job->chapter_start;
+ hb_chapter_t *chap = hb_list_item( r->job->list_chapter, chapter_end - 1 );
+
+ chapter_end = chap->index;
+ if (start > 1)
+ {
+ chap = hb_list_item( r->job->list_chapter, start - 1 );
+ start = chap->index;
+ }
+ /* end chapter mapping XXX */
+
+ if( !hb_dvd_start( r->dvd, r->title, start ) )
+ {
+ hb_dvd_close( &r->dvd );
+ return;
+ }
+ if (r->job->angle)
+ {
+ hb_dvd_set_angle( r->dvd, r->job->angle );
+ }
+
+ if ( r->job->start_at_preview )
+ {
+ // XXX code from DecodePreviews - should go into its own routine
+ hb_dvd_seek( r->dvd, (float)r->job->start_at_preview /
+ ( r->job->seek_points ? ( r->job->seek_points + 1.0 ) : 11.0 ) );
+ }
+ }
+ else if ( r->stream && r->job->start_at_preview )
+ {
+
+ // XXX code from DecodePreviews - should go into its own routine
+ hb_stream_seek( r->stream, (float)( r->job->start_at_preview - 1 ) /
+ ( r->job->seek_points ? ( r->job->seek_points + 1.0 ) : 11.0 ) );
+
+ }
+ else if ( r->stream && r->job->pts_to_start )
+ {
+ int64_t pts_to_start = r->job->pts_to_start;
+
+ // Find out what the first timestamp of the stream is
+ // and then seek to the appropriate offset from it
+ if ( ( buf = hb_stream_read( r->stream ) ) )
+ {
+ if ( buf->s.start > 0 )
+ {
+ pts_to_start += buf->s.start;
+ }
+ }
+
+ if ( hb_stream_seek_ts( r->stream, pts_to_start ) >= 0 )
+ {
+ // Seek takes us to the nearest I-frame before the timestamp
+ // that we want. So we will retrieve the start time of the
+ // first packet we get, subtract that from pts_to_start, and
+ // inspect the reset of the frames in sync.
+ r->start_found = 2;
+ r->duration -= r->job->pts_to_start;
+ r->job->pts_to_start = pts_to_start;
+ }
+ }
+ else if( r->stream )
+ {
+ /*
+ * Standard stream, seek to the starting chapter, if set, and track the
+ * end chapter so that we end at the right time.
+ */
+ int start = r->job->chapter_start;
+ hb_chapter_t *chap = hb_list_item( r->job->list_chapter, chapter_end - 1 );
+
+ chapter_end = chap->index;
+ if (start > 1)
+ {
+ chap = hb_list_item( r->job->list_chapter, start - 1 );
+ start = chap->index;
+ }
+
+ /*
+ * Seek to the start chapter.
+ */
+ hb_stream_seek_chapter( r->stream, start );
+ }
+
+ list = hb_list_init();
+
+ while(!*r->die && !r->job->done && !done)
+ {
+ if (r->bd)
+ chapter = hb_bd_chapter( r->bd );
+ else if (r->dvd)
+ chapter = hb_dvd_chapter( r->dvd );
+ else if (r->stream)
+ chapter = hb_stream_chapter( r->stream );
+
+ if( chapter < 0 )
+ {
+ hb_log( "reader: end of the title reached" );
+ break;
+ }
+ if( chapter > chapter_end )
+ {
+ hb_log( "reader: end of chapter %d (media %d) reached at media chapter %d",
+ r->job->chapter_end, chapter_end, chapter );
+ break;
+ }
+
+ if (r->bd)
+ {
+ if( (buf = hb_bd_read( r->bd )) == NULL )
+ {
+ break;
+ }
+ }
+ else if (r->dvd)
+ {
+ if( (buf = hb_dvd_read( r->dvd )) == NULL )
+ {
+ break;
+ }
+ }
+ else if (r->stream)
+ {
+ if ( (buf = hb_stream_read( r->stream )) == NULL )
+ {
+ break;
+ }
+ if ( r->start_found == 2 )
+ {
+ // We will inspect the timestamps of each frame in sync
+ // to skip from this seek point to the timestamp we
+ // want to start at.
+ if ( buf->s.start > 0 && buf->s.start < r->job->pts_to_start )
+ {
+ r->job->pts_to_start -= buf->s.start;
+ }
+ else if ( buf->s.start >= r->job->pts_to_start )
+ {
+ r->job->pts_to_start = 0;
+ r->start_found = 1;
+ }
+ }
+ }
+
+ (hb_demux[r->title->demuxer])( buf, list, &r->demux );
+
+ while( ( buf = hb_list_item( list, 0 ) ) )
+ {
+ hb_list_rem( list, buf );
+ fifos = GetFifoForId( r, buf->s.id );
+
+ if ( fifos && ! r->saw_video && !r->job->indepth_scan )
+ {
+ // The first data packet with a PTS from an audio or video stream
+ // that we're decoding defines 'time zero'. Discard packets until
+ // we get one.
+ if ( buf->s.start != -1 && buf->s.renderOffset != -1 &&
+ ( buf->s.id == r->title->video_id || is_audio( r, buf->s.id ) ) )
+ {
+ // force a new scr offset computation
+ r->scr_changes = r->demux.scr_changes - 1;
+ // create a stream state if we don't have one so the
+ // offset will get computed correctly.
+ id_to_st( r, buf, 1 );
+ r->saw_video = 1;
+ hb_log( "reader: first SCR %"PRId64" id 0x%x DTS %"PRId64,
+ r->demux.last_scr, buf->s.id, buf->s.renderOffset );
+ }
+ else
+ {
+ fifos = NULL;
+ }
+ }
+
+ if ( r->job->indepth_scan || fifos )
+ {
+ if ( buf->s.renderOffset != -1 )
+ {
+ if ( r->scr_changes != r->demux.scr_changes )
+ {
+ // This is the first audio or video packet after an SCR
+ // change. Compute a new scr offset that would make this
+ // packet follow the last of this stream with the
+ // correct average spacing.
+ stream_timing_t *st = id_to_st( r, buf, 0 );
+
+ // if this is the video stream and we don't have
+ // audio yet or this is an audio stream
+ // generate a new scr
+ if ( st->is_audio ||
+ ( st == r->stream_timing && !r->saw_audio ) )
+ {
+ new_scr_offset( r, buf );
+ }
+ else
+ {
+ // defer the scr change until we get some
+ // audio since audio has a timestamp per
+ // frame but video & subtitles don't. Clear
+ // the timestamps so the decoder will generate
+ // them from the frame durations.
+ buf->s.start = -1;
+ buf->s.renderOffset = -1;
+ }
+ }
+ }
+ if ( buf->s.start != -1 )
+ {
+ int64_t start = buf->s.start - r->scr_offset;
+
+ if (!r->start_found || r->job->indepth_scan)
+ {
+ UpdateState( r, start );
+ }
+
+ if (r->job->indepth_scan && r->job->pts_to_stop &&
+ start >= r->pts_to_start + r->job->pts_to_stop)
+ {
+ // sync normally would terminate p-to-p
+ // but sync doesn't run during indepth scan
+ hb_log( "reader: reached pts %"PRId64", exiting early", start );
+ done = 1;
+ break;
+ }
+
+ if ( !r->start_found &&
+ start >= r->pts_to_start )
+ {
+ // pts_to_start point found
+ r->start_found = 1;
+ }
+ // This log is handy when you need to debug timing problems
+ //hb_log("id %x scr_offset %"PRId64
+ // " start %"PRId64" --> %"PRId64"",
+ // buf->s.id, r->scr_offset, buf->s.start,
+ // buf->s.start - r->scr_offset);
+ buf->s.start -= r->scr_offset;
+ }
+ if ( buf->s.renderOffset != -1 )
+ {
+ // This packet is referenced to the same SCR as the last.
+ // Adjust timestamp to remove the System Clock Reference
+ // offset then update the average inter-packet time
+ // for this stream.
+ buf->s.renderOffset -= r->scr_offset;
+ update_ipt( r, buf );
+ }
+#if 0
+ // JAS: This was added to fix a rare "audio time went backward"
+ // sync error I found in one sample. But it has a bad side
+ // effect on DVDs, causing frequent "adding silence" sync
+ // errors. So I am disabling it.
+ else
+ {
+ update_ipt( r, buf );
+ }
+#endif
+ }
+ if( fifos )
+ {
+ if ( !r->start_found )
+ {
+ hb_buffer_close( &buf );
+ continue;
+ }
+
+ buf->sequence = r->sequence++;
+ /* if there are mutiple output fifos, send a copy of the
+ * buffer down all but the first (we have to not ship the
+ * original buffer or we'll race with the thread that's
+ * consuming the buffer & inject garbage into the data stream). */
+ for( n = 1; fifos[n] != NULL; n++)
+ {
+ hb_buffer_t *buf_copy = hb_buffer_init( buf->size );
+ buf_copy->s = buf->s;
+ memcpy( buf_copy->data, buf->data, buf->size );
+ push_buf( r, fifos[n], buf_copy );
+ }
+ push_buf( r, fifos[0], buf );
+ }
+ else
+ {
+ hb_buffer_close( &buf );
+ }
+ }
+ }
+
+ // send empty buffers downstream to video & audio decoders to signal we're done.
+ if( !*r->die && !r->job->done )
+ {
+ push_buf( r, r->job->fifo_mpeg2, hb_buffer_init(0) );
+
+ hb_audio_t *audio;
+ for( n = 0; (audio = hb_list_item( r->job->list_audio, n)); ++n )
+ {
+ if ( audio->priv.fifo_in )
+ push_buf( r, audio->priv.fifo_in, hb_buffer_init(0) );
+ }
+
+ hb_subtitle_t *subtitle;
+ for( n = 0; (subtitle = hb_list_item( r->job->list_subtitle, n)); ++n )
+ {
+ if ( subtitle->fifo_in && subtitle->source == VOBSUB)
+ push_buf( r, subtitle->fifo_in, hb_buffer_init(0) );
+ }
+ }
+
+ hb_list_empty( &list );
+
+ hb_log( "reader: done. %d scr changes", r->demux.scr_changes );
+ if ( r->demux.dts_drops )
+ {
+ hb_log( "reader: %d drops because DTS out of range", r->demux.dts_drops );
+ }
+}
+
+static void UpdateState( hb_work_private_t * r, int64_t start)
+{
+ hb_state_t state;
+ uint64_t now;
+ double avg;
+
+ now = hb_get_date();
+ if( !r->st_first )
+ {
+ r->st_first = now;
+ }
+
+#define p state.param.working
+ if ( !r->job->indepth_scan )
+ {
+ state.state = HB_STATE_SEARCHING;
+ p.progress = (float) start / (float) r->job->pts_to_start;
+ }
+ else
+ {
+ state.state = HB_STATE_WORKING;
+ p.progress = (float) start / (float) r->duration;
+ }
+ if( p.progress > 1.0 )
+ {
+ p.progress = 1.0;
+ }
+ p.rate_cur = 0.0;
+ p.rate_avg = 0.0;
+ if (now > r->st_first)
+ {
+ int eta;
+
+ avg = 1000.0 * (double)start / (now - r->st_first);
+ if ( !r->job->indepth_scan )
+ eta = ( r->job->pts_to_start - start ) / avg;
+ else
+ eta = ( r->duration - start ) / avg;
+ p.hours = eta / 3600;
+ p.minutes = ( eta % 3600 ) / 60;
+ p.seconds = eta % 60;
+ }
+ else
+ {
+ p.hours = -1;
+ p.minutes = -1;
+ p.seconds = -1;
+ }
+#undef p
+
+ hb_set_state( r->job->h, &state );
+}
+/***********************************************************************
+ * GetFifoForId
+ ***********************************************************************
+ *
+ **********************************************************************/
+static hb_fifo_t ** GetFifoForId( hb_work_private_t * r, int id )
+{
+ hb_job_t * job = r->job;
+ hb_title_t * title = job->title;
+ hb_audio_t * audio;
+ hb_subtitle_t * subtitle;
+ int i, n, count;
+
+ memset(r->fifos, 0, sizeof(r->fifos));
+
+ if( id == title->video_id )
+ {
+ if (job->indepth_scan && !job->frame_to_stop)
+ {
+ /*
+ * Ditch the video here during the indepth scan until
+ * we can improve the MPEG2 decode performance.
+ *
+ * But if we specify a stop frame, we must decode the
+ * frames in order to count them.
+ */
+ return NULL;
+ }
+ else
+ {
+ r->fifos[0] = job->fifo_mpeg2;
+ return r->fifos;
+ }
+ }
+
+ count = hb_list_count( job->list_subtitle );
+ count = count > 99 ? 99 : count;
+ for( i = n = 0; i < count; i++ )
+ {
+ subtitle = hb_list_item( job->list_subtitle, i );
+ if (id == subtitle->id)
+ {
+ /* pass the subtitles to be processed */
+ r->fifos[n++] = subtitle->fifo_in;
+ }
+ }
+ if ( n != 0 )
+ {
+ return r->fifos;
+ }
+
+ if( !job->indepth_scan )
+ {
+ for( i = n = 0; i < hb_list_count( job->list_audio ); i++ )
+ {
+ audio = hb_list_item( job->list_audio, i );
+ if( id == audio->id )
+ {
+ r->fifos[n++] = audio->priv.fifo_in;
+ }
+ }
+
+ if( n != 0 )
+ {
+ return r->fifos;
+ }
+ }
+
+ return NULL;
+}
+
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/04/0491ecaec7b4eff7fb703eb78a393d32f9e0f79a.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/04/0491ecaec7b4eff7fb703eb78a393d32f9e0f79a.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/04/0491ecaec7b4eff7fb703eb78a393d32f9e0f79a.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/04/0491ecaec7b4eff7fb703eb78a393d32f9e0f79a.svn-base 2013-05-18 16:12:16.000000000 +0000
@@ -0,0 +1 @@
+ARCHS = $(NATIVE_ARCH_ACTUAL)
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/05/0511e1115018da4e2408d07e476e654bb0ad4a71.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/05/0511e1115018da4e2408d07e476e654bb0ad4a71.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/05/0511e1115018da4e2408d07e476e654bb0ad4a71.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/05/0511e1115018da4e2408d07e476e654bb0ad4a71.svn-base 2013-05-18 16:12:19.000000000 +0000
@@ -0,0 +1,2 @@
+$(eval $(call import.MODULE.rules,LIBASS))
+$(eval $(call import.CONTRIB.rules,LIBASS))
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/05/05d8c62d8c74b9042a27a6fc21e84c1f2d70545a.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/05/05d8c62d8c74b9042a27a6fc21e84c1f2d70545a.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/05/05d8c62d8c74b9042a27a6fc21e84c1f2d70545a.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/05/05d8c62d8c74b9042a27a6fc21e84c1f2d70545a.svn-base 2013-05-18 16:12:19.000000000 +0000
@@ -0,0 +1,20 @@
+@anchor{troubleshooting}
+@chapter Troubleshooting
+When troubleshooting build issues, the following files relative to the @file{build/} directory may be especially useful:
+
+@table @file
+@item GNUmakefile
+Top-level makefile which contains build settings generated via @b{configure}.
+
+@item log/config.info.txt
+Record of output from @b{configure}.
+
+@item log/config.verbose.txt
+Record of verbose output from @b{configure}.
+
+@item log/build.txt
+Record of output from @command{configure --launch}. Similar output may be recorded using @command{make} depending on which shell is in use, eg: @command{make >& log/build.txt} or @command{make > log/build.txt 2>&1}.
+
+@item log/xcodemake.env.txt
+Environment (variables) dump as seen when Xcode forks @command{make}. @value{OS.osx} only.
+@end table
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/06/06ed16c98adcd498540fed0bd609c9ece6696166.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/06/06ed16c98adcd498540fed0bd609c9ece6696166.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/06/06ed16c98adcd498540fed0bd609c9ece6696166.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/06/06ed16c98adcd498540fed0bd609c9ece6696166.svn-base 2013-05-18 16:12:17.000000000 +0000
@@ -0,0 +1,71 @@
+/* DockTextField.m $
+
+ This file is part of the HandBrake source code.
+ Homepage: .
+ It may be used under the terms of the GNU General Public License. */
+
+#import "DockTextField.h"
+
+#define DOCK_TEXTFIELD_ALPHA 0.8
+#define DOCK_TEXTFIELD_FONTSIZE 28.0
+
+@implementation DockTextField
+
+@synthesize textToDisplay = _textToDisplay;
+@synthesize startColor = _startColor;
+@synthesize endColor = _endColor;
+
+- (id)initWithFrame:(NSRect)frame
+{
+ self = [super initWithFrame:frame];
+ if (self) {
+ [[self cell] setBezelStyle: NSTextFieldRoundedBezel];
+ _textToDisplay = @"";
+ [self changeGradientColors:[NSColor grayColor] endColor:[NSColor blackColor]];
+ }
+
+ return self;
+}
+
+- (void)changeGradientColors:(NSColor*)startColor endColor:(NSColor*)endColor
+{
+ self.startColor = [startColor colorWithAlphaComponent:DOCK_TEXTFIELD_ALPHA];
+ self.endColor = [endColor colorWithAlphaComponent:DOCK_TEXTFIELD_ALPHA];
+}
+
+- (void)drawRect:(NSRect)dirtyRect
+{
+ if (self.isHidden)
+ return;
+
+ NSRect blackOutlineFrame = NSMakeRect(0.0, 0.0, [self bounds].size.width, [self bounds].size.height-1.0);
+ double radius = self.bounds.size.height / 2;
+
+ NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:self.startColor endingColor:self.endColor];
+ [gradient drawInBezierPath:[NSBezierPath bezierPathWithRoundedRect:blackOutlineFrame xRadius:radius yRadius:radius] angle:90];
+ [gradient release];
+
+ NSMutableDictionary *drawStringAttributes = [[NSMutableDictionary alloc] init];
+ [drawStringAttributes setValue:[NSColor whiteColor] forKey:NSForegroundColorAttributeName];
+ [drawStringAttributes setValue:[NSFont boldSystemFontOfSize:DOCK_TEXTFIELD_FONTSIZE] forKey:NSFontAttributeName];
+ NSShadow *stringShadow = [[NSShadow alloc] init];
+ [stringShadow setShadowColor:[NSColor blackColor]];
+ NSSize shadowSize;
+ shadowSize.width = 2;
+ shadowSize.height = -2;
+ [stringShadow setShadowOffset:shadowSize];
+ [stringShadow setShadowBlurRadius:6];
+ [drawStringAttributes setValue:stringShadow forKey:NSShadowAttributeName];
+ [stringShadow release];
+
+ NSString *MRString = _textToDisplay;
+ NSString *budgetString = [NSString stringWithFormat:@"%@", MRString];
+ NSSize stringSize = [budgetString sizeWithAttributes:drawStringAttributes];
+ NSPoint centerPoint;
+ centerPoint.x = (dirtyRect.size.width / 2) - (stringSize.width / 2);
+ centerPoint.y = dirtyRect.size.height / 2 - (stringSize.height / 2) - 2;
+ [budgetString drawAtPoint:centerPoint withAttributes:drawStringAttributes];
+ [drawStringAttributes release];
+}
+
+@end
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/07/0729596467a293692a20c348cf6c48744107a553.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/07/0729596467a293692a20c348cf6c48744107a553.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/07/0729596467a293692a20c348cf6c48744107a553.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/07/0729596467a293692a20c348cf6c48744107a553.svn-base 2013-05-18 16:12:18.000000000 +0000
@@ -0,0 +1,1016 @@
+
+ True
+ True
+ True
+ False
+ HINT
+ HINT
+ DO_NOT_SHOW
+ DO_NOT_SHOW
+ HINT
+ DO_NOT_SHOW
+ HINT
+ HINT
+ DO_NOT_SHOW
+ DO_NOT_SHOW
+ HINT
+ <?xml version="1.0" encoding="utf-16"?><Profile name="StyleCop"><CSArrangeThisQualifier>True</CSArrangeThisQualifier><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSReformatCode>True</CSReformatCode><CSReorderTypeMembers>True</CSReorderTypeMembers><StyleCop.Documentation><SA1600ElementsMustBeDocumented>True</SA1600ElementsMustBeDocumented><SA1604ElementDocumentationMustHaveSummary>True</SA1604ElementDocumentationMustHaveSummary><SA1609PropertyDocumentationMustHaveValueDocumented>True</SA1609PropertyDocumentationMustHaveValueDocumented><SA1611ElementParametersMustBeDocumented>True</SA1611ElementParametersMustBeDocumented><SA1615ElementReturnValueMustBeDocumented>True</SA1615ElementReturnValueMustBeDocumented><SA1617VoidReturnValueMustNotBeDocumented>True</SA1617VoidReturnValueMustNotBeDocumented><SA1618GenericTypeParametersMustBeDocumented>True</SA1618GenericTypeParametersMustBeDocumented><SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes>True</SA1626SingleLineCommentsMustNotUseDocumentationStyleSlashes><SA1628DocumentationTextMustBeginWithACapitalLetter>True</SA1628DocumentationTextMustBeginWithACapitalLetter><SA1629DocumentationTextMustEndWithAPeriod>True</SA1629DocumentationTextMustEndWithAPeriod><SA1633SA1641UpdateFileHeader>ReplaceCopyrightElement</SA1633SA1641UpdateFileHeader><SA1639FileHeaderMustHaveSummary>True</SA1639FileHeaderMustHaveSummary><SA1642ConstructorSummaryDocumentationMustBeginWithStandardText>True</SA1642ConstructorSummaryDocumentationMustBeginWithStandardText><SA1643DestructorSummaryDocumentationMustBeginWithStandardText>True</SA1643DestructorSummaryDocumentationMustBeginWithStandardText><SA1644DocumentationHeadersMustNotContainBlankLines>True</SA1644DocumentationHeadersMustNotContainBlankLines></StyleCop.Documentation><StyleCop.Layout><SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine>True</SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine><SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine>True</SA1509OpeningCurlyBracketsMustNotBePrecededByBlankLine><SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine>True</SA1510ChainedStatementBlocksMustNotBePrecededByBlankLine><SA1511WhileDoFooterMustNotBePrecededByBlankLine>True</SA1511WhileDoFooterMustNotBePrecededByBlankLine><SA1512SingleLineCommentsMustNotBeFollowedByBlankLine>True</SA1512SingleLineCommentsMustNotBeFollowedByBlankLine><SA1513ClosingCurlyBracketMustBeFollowedByBlankLine>True</SA1513ClosingCurlyBracketMustBeFollowedByBlankLine><SA1514ElementDocumentationHeaderMustBePrecededByBlankLine>True</SA1514ElementDocumentationHeaderMustBePrecededByBlankLine><SA1515SingleLineCommentMustBeProceededByBlankLine>True</SA1515SingleLineCommentMustBeProceededByBlankLine></StyleCop.Layout><StyleCop.Maintainability><SA1119StatementMustNotUseUnnecessaryParenthesis>True</SA1119StatementMustNotUseUnnecessaryParenthesis></StyleCop.Maintainability><StyleCop.Ordering><AlphabeticalUsingDirectives>Alphabetical</AlphabeticalUsingDirectives><ExpandUsingDirectives>FullyQualify</ExpandUsingDirectives><SA1212PropertyAccessorsMustFollowOrder>True</SA1212PropertyAccessorsMustFollowOrder><SA1213EventAccessorsMustFollowOrder>True</SA1213EventAccessorsMustFollowOrder></StyleCop.Ordering><StyleCop.Readability><SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists>True</SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists><SA1106CodeMustNotContainEmptyStatements>True</SA1106CodeMustNotContainEmptyStatements><SA1108BlockStatementsMustNotContainEmbeddedComments>True</SA1108BlockStatementsMustNotContainEmbeddedComments><SA1109BlockStatementsMustNotContainEmbeddedRegions>True</SA1109BlockStatementsMustNotContainEmbeddedRegions><SA1120CommentsMustContainText>True</SA1120CommentsMustContainText><SA1121UseBuiltInTypeAlias>True</SA1121UseBuiltInTypeAlias><SA1122UseStringEmptyForEmptyStrings>True</SA1122UseStringEmptyForEmptyStrings><SA1123DoNotPlaceRegionsWithinElements>True</SA1123DoNotPlaceRegionsWithinElements><SA1124CodeMustNotContainEmptyRegions>True</SA1124CodeMustNotContainEmptyRegions></StyleCop.Readability><StyleCop.Spacing><SA1001CommasMustBeSpacedCorrectly>True</SA1001CommasMustBeSpacedCorrectly><SA1005SingleLineCommentsMustBeginWithSingleSpace>True</SA1005SingleLineCommentsMustBeginWithSingleSpace><SA1006PreprocessorKeywordsMustNotBePrecededBySpace>True</SA1006PreprocessorKeywordsMustNotBePrecededBySpace><SA1021NegativeSignsMustBeSpacedCorrectly>True</SA1021NegativeSignsMustBeSpacedCorrectly><SA1022PositiveSignsMustBeSpacedCorrectly>True</SA1022PositiveSignsMustBeSpacedCorrectly><SA1025CodeMustNotContainMultipleWhitespaceInARow>True</SA1025CodeMustNotContainMultipleWhitespaceInARow></StyleCop.Spacing></Profile>
+ Default: Full Cleanup
+ StyleCop
+ False
+ True
+ 1
+ 1
+ 1
+ SEPARATE
+ ALWAYS_ADD
+ ALWAYS_ADD
+ ALWAYS_ADD
+ ALWAYS_ADD
+ ALWAYS_ADD
+ False
+ False
+ 1
+ 1
+ False
+ public protected internal private static new abstract virtual override sealed readonly extern unsafe volatile async
+ False
+ False
+ False
+ False
+ True
+ ALWAYS_USE
+ ON_SINGLE_LINE
+ False
+ True
+ False
+ False
+ True
+ False
+ True
+ True
+ CHOP_IF_LONG
+ True
+ True
+ CHOP_IF_LONG
+ CHOP_IF_LONG
+ True
+ <?xml version="1.0" encoding="utf-8"?>
+<!-- Last updated 15.05.2012 -->
+<Patterns xmlns="urn:shemas-jetbrains-com:member-reordering-patterns">
+
+ <!-- Do not reorder COM interfaces -->
+ <Pattern>
+ <Match>
+ <And Weight="2000">
+ <Kind Is="interface"/>
+ <Or>
+ <HasAttribute CLRName="System.Runtime.InteropServices.InterfaceTypeAttribute"/>
+ <HasAttribute CLRName="System.Runtime.InteropServices.ComImport"/>
+ </Or>
+ </And>
+ </Match>
+ </Pattern>
+
+ <!-- Do not reorder P/Invoke structs -->
+ <Pattern>
+ <Match>
+ <And Weight="2000">
+ <Or>
+ <Kind Is="struct"/>
+ <Kind Is="class"/>
+ </Or>
+ <HasAttribute CLRName="System.Runtime.InteropServices.StructLayoutAttribute"/>
+ </And>
+ </Match>
+ </Pattern>
+
+ <!-- Do not reorder P/Invoke classes (called xxxNativeMethods) -->
+ <Pattern>
+ <Match>
+ <And Weight="2000">
+ <Kind Is="class"/>
+ <Name Is=".*NativeMethods" />
+ </And>
+ </Match>
+ </Pattern>
+
+ <!-- StyleCop pattern -->
+ <Pattern RemoveAllRegions="true">
+ <Match>
+ <Or Weight="1000" >
+ <Kind Is="class" />
+ <Kind Is="struct" />
+ <Kind Is="interface"/>
+ </Or>
+ </Match>
+
+ <!-- Constants -->
+ <Entry>
+ <Match>
+ <Kind Is="constant"/>
+ </Match>
+ <Sort>
+ <Access Order="public internal protected-internal protected private"/>
+ <Name/>
+ </Sort>
+ <Group Region="Constants"/>
+ </Entry>
+
+ <!-- Static fields -->
+ <Entry>
+ <Match>
+ <And>
+ <Kind Is="field"/>
+ <Static />
+ </And>
+ </Match>
+ <Sort>
+ <Access Order="public internal protected-internal protected private"/>
+ <Readonly/>
+ <Name/>
+ </Sort>
+ <Group Region="Static Fields"/>
+ </Entry>
+
+ <!-- Fields -->
+ <Entry>
+ <Match>
+ <Kind Is="field"/>
+ </Match>
+ <Sort>
+ <Access Order="public internal protected-internal protected private"/>
+ <Readonly/>
+ <Name/>
+ </Sort>
+ <Group Region="Fields"/>
+ </Entry>
+
+ <!-- constructors and destructors -->
+ <Entry>
+ <Match>
+ <Or Weight="200">
+ <Kind Is="constructor"/>
+ <Kind Is="destructor"/>
+ </Or>
+ </Match>
+ <Sort>
+ <Static/>
+ <Kind Order="constructor destructor"/>
+ <Access Order="public internal protected-internal protected private"/>
+ </Sort>
+ <Group Region="Constructors and Destructors"/>
+ </Entry>
+
+ <!-- delegates -->
+ <Entry>
+ <Match>
+ <Kind Is="delegate"/>
+ </Match>
+ <Sort>
+ <Access Order="public internal protected-internal protected private" />
+ <Static />
+ <Name/>
+ </Sort>
+ <Group Region="Delegates"/>
+ </Entry>
+
+ <!-- public events -->
+ <Entry>
+ <Match>
+ <And>
+ <Kind Is="event"/>
+ <Access Is="public"/>
+ </And>
+ </Match>
+ <Sort>
+ <Access Order="public" />
+ <Static />
+ <Name/>
+ </Sort>
+ <Group Region="Public Events"/>
+ </Entry>
+
+ <!-- interface events -->
+ <Entry>
+ <Match>
+ <And>
+ <Kind Is="event"/>
+ <ImplementsInterface/>
+ </And>
+ </Match>
+ <Sort>
+ <ImplementsInterface Immediate="true"/>
+ <Name/>
+ </Sort>
+ <Group Region="Explicit Interface Events" />
+ </Entry>
+
+ <!-- other events -->
+ <Entry>
+ <Match>
+ <Kind Is="event"/>
+ </Match>
+ <Sort>
+ <Access Order="public internal protected-internal protected private" />
+ <Static />
+ <Name/>
+ </Sort>
+ <Group Region="Events"/>
+ </Entry>
+
+ <!-- enum -->
+ <Entry>
+ <Match>
+ <Kind Is="enum"/>
+ </Match>
+ <Sort>
+ <Access Order="public internal protected-internal protected private" />
+ <Name/>
+ </Sort>
+ <Group Region="Enums"/>
+ </Entry>
+
+ <!-- interfaces -->
+ <Entry>
+ <Match>
+ <Kind Is="interface" />
+ </Match>
+ <Sort>
+ <Access Order="public internal protected-internal protected private" />
+ <Name/>
+ </Sort>
+ <Group Region="Interfaces"/>
+ </Entry>
+
+ <!-- public properties -->
+ <Entry>
+ <Match>
+ <And>
+ <Kind Is="property"/>
+ <Access Is="public"/>
+ </And>
+ </Match>
+ <Sort>
+ <Access Order="public"/>
+ <Static/>
+ <Name/>
+ </Sort>
+ <Group Region="Public Properties"/>
+ </Entry>
+
+ <!-- interface properties -->
+ <Entry>
+ <Match>
+ <And>
+ <Kind Is="property"/>
+ <ImplementsInterface/>
+ </And>
+ </Match>
+ <Sort>
+ <ImplementsInterface Immediate="true"/>
+ <Name/>
+ </Sort>
+ <Group Region="Explicit Interface Properties" />
+ </Entry>
+
+ <!-- other properties -->
+ <Entry>
+ <Match>
+ <Kind Is="property"/>
+ </Match>
+ <Sort>
+ <Access Order="public internal protected-internal protected private"/>
+ <Static/>
+ <Name/>
+ </Sort>
+ <Group Region="Properties"/>
+ </Entry>
+
+ <!-- public indexers -->
+ <Entry>
+ <Match>
+ <And>
+ <Kind Is="indexer" Weight="1000" />
+ <Access Is="public"/>
+ </And>
+ </Match>
+ <Sort>
+ <Access Order="public" />
+ <Static/>
+ <Name/>
+ </Sort>
+ <Group Region="Public Indexers"/>
+ </Entry>
+
+ <!-- interface indexers -->
+ <Entry>
+ <Match>
+ <And>
+ <Kind Is="indexer" Weight="1000"/>
+ <ImplementsInterface/>
+ </And>
+ </Match>
+ <Sort>
+ <ImplementsInterface Immediate="true"/>
+ <Name/>
+ </Sort>
+ <Group Region="Explicit Interface Indexers" />
+ </Entry>
+
+ <!-- other indexers -->
+ <Entry>
+ <Match>
+ <Kind Is="indexer" Weight="1000" />
+ </Match>
+ <Sort>
+ <Access Order="public internal protected-internal protected private" />
+ <Static/>
+ <Name/>
+ </Sort>
+ <Group Region="Indexers"/>
+ </Entry>
+
+ <!-- public methods (includes operators) -->
+ <Entry>
+ <Match>
+ <And>
+ <Or>
+ <Kind Is="method"/>
+ <Kind Is="operator"/>
+ </Or>
+ <Access Is="public"/>
+ </And>
+ </Match>
+ <Sort>
+ <Access Order="public"/>
+ <Static/>
+ <Name/>
+ </Sort>
+ <Group Region="Public Methods and Operators"/>
+ </Entry>
+
+ <!-- interface methods -->
+ <Entry>
+ <Match>
+ <And>
+ <Kind Is="method"/>
+ <ImplementsInterface/>
+ </And>
+ </Match>
+ <Sort>
+ <ImplementsInterface Immediate="true"/>
+ <Name/>
+ </Sort>
+ <Group Region="Explicit Interface Methods" />
+ </Entry>
+
+ <!-- other methods -->
+ <Entry>
+ <Match>
+ <Kind Is="method"/>
+ </Match>
+ <Sort>
+ <Access Order="public internal protected-internal protected private"/>
+ <Static/>
+ <Name/>
+ </Sort>
+ <Group Region="Methods"/>
+ </Entry>
+
+ <!-- operators -->
+ <Entry>
+ <Match>
+ <Kind Is="operator"/>
+ </Match>
+ <Sort>
+ <Access Order="public internal protected-internal protected private" />
+ <Static/>
+ <Name/>
+ </Sort>
+ <Group Region="Operators"/>
+ </Entry>
+
+ <!-- Nested structs -->
+ <Entry>
+ <Match>
+ <Kind Is="struct"
+ Weight="600" />
+ </Match>
+ <Sort>
+ <Static />
+ <Access Order="public internal protected-internal protected private" />
+ <Name/>
+ </Sort>
+ </Entry>
+
+ <!-- Nested classes -->
+ <Entry>
+ <Match>
+ <Kind Is="class"
+ Weight="700" />
+ </Match>
+ <Sort>
+ <Static />
+ <Access Order="public internal protected-internal protected private" />
+ <Name/>
+ </Sort>
+ </Entry>
+
+ <!-- all other members -->
+ <Entry/>
+
+ </Pattern>
+</Patterns>
+ True
+ True
+ True
+ False
+ True
+ True
+ False
+ True
+ True
+ False
+ False
+ True
+ Automatic property
+ True
+ True
+ True
+ True
+ False
+ False
+ AAC
+ AC
+ DTS
+ DTSHD
+ HD
+ MP
+ RF
+ UI
+ $object$_On$event$
+ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ <Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ <Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" />
+ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ $object$_On$event$
+ False
+ True
+ ObjectBrowser
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ True
+ True
+ True
+ False
+ VS
+ SymbolsVs08
+ False
+ True
+ True
+ Updates
+ -13,-311
+ True
+ 271
+ 269
+ 91
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ NotOverridden
+ NotOverridden
+ NotOverridden
+ NotOverridden
+ NotOverridden
+ NotOverridden
+ NotOverridden
+ NotOverridden
+ NotOverridden
\ No newline at end of file
diff -Nru handbrake-0.9.8ppa2/.svn/pristine/07/074713099caa6d08be6b0d1ffd58d7e773063109.svn-base handbrake-0.9.9ppa1~precise1/.svn/pristine/07/074713099caa6d08be6b0d1ffd58d7e773063109.svn-base
--- handbrake-0.9.8ppa2/.svn/pristine/07/074713099caa6d08be6b0d1ffd58d7e773063109.svn-base 1970-01-01 00:00:00.000000000 +0000
+++ handbrake-0.9.9ppa1~precise1/.svn/pristine/07/074713099caa6d08be6b0d1ffd58d7e773063109.svn-base 2013-05-18 16:12:18.000000000 +0000
@@ -0,0 +1,449 @@
+// --------------------------------------------------------------------------------------------------------------------
+//
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+//
+//
+// The Audio View Model
+//
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.ViewModels
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Collections.ObjectModel;
+ using System.Collections.Specialized;
+ using System.Linq;
+
+ using Caliburn.Micro;
+
+ using HandBrake.ApplicationServices.Model;
+ using HandBrake.ApplicationServices.Model.Encoding;
+ using HandBrake.ApplicationServices.Parsing;
+ using HandBrake.ApplicationServices.Services.Interfaces;
+ using HandBrake.ApplicationServices.Utilities;
+ using HandBrake.Interop.Model.Encoding;
+
+ using HandBrakeWPF.Commands;
+ using HandBrakeWPF.Model;
+ using HandBrakeWPF.ViewModels.Interfaces;
+
+ ///
+ /// The Audio View Model
+ ///
+ public class AudioViewModel : ViewModelBase, IAudioViewModel
+ {
+ ///
+ /// Backing field for the source tracks list.
+ ///
+ private IEnumerable