]> git.sesse.net Git - vlc/commitdiff
- accurate testing of i_original_channels
authorBoris Dorès <babal@videolan.org>
Sat, 22 Oct 2005 17:58:12 +0000 (17:58 +0000)
committerBoris Dorès <babal@videolan.org>
Sat, 22 Oct 2005 17:58:12 +0000 (17:58 +0000)
modules/audio_filter/channel_mixer/dolby.c
modules/audio_filter/channel_mixer/headphone.c

index 797f53d76462d094908d81f42cfb051eec2bcc86..d6db508e73690ea5376c5fb5db2ff3cda7269328 100644 (file)
@@ -81,13 +81,11 @@ static int Create( vlc_object_t *p_this )
     aout_filter_t * p_filter = (aout_filter_t *)p_this;
 
     /* Validate audio filter format */
-    if ( p_filter->input.i_original_channels
-                    != (AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT|AOUT_CHAN_DOLBYSTEREO )
-          || aout_FormatNbChannels( &p_filter->output ) <= 2
-          || p_filter->output.i_physical_channels
-                != ( p_filter->output.i_original_channels & AOUT_CHAN_PHYSMASK )
-          || p_filter->input.i_physical_channels
-                != ( p_filter->input.i_original_channels & AOUT_CHAN_PHYSMASK ))
+    if ( p_filter->input.i_physical_channels != (AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT)
+       || ! ( p_filter->input.i_original_channels & AOUT_CHAN_DOLBYSTEREO )
+       || aout_FormatNbChannels( &p_filter->output ) <= 2
+       || ( p_filter->input.i_original_channels & ~AOUT_CHAN_DOLBYSTEREO )
+          != ( p_filter->output.i_original_channels & ~AOUT_CHAN_DOLBYSTEREO ) )
     {
         return VLC_EGENERIC;
     }
index e36ed615cacc09675d9f9ad87472d1d367600573..da3762fc3a1ba9650f2e040ea551b6f640969ffa 100644 (file)
@@ -344,17 +344,21 @@ static int Create( vlc_object_t *p_this )
     vlc_bool_t b_fit = VLC_TRUE;
 
     /* Activate this filter only with stereo devices */
-    if ( p_filter->output.i_physical_channels != (AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT)
-          || p_filter->output.i_physical_channels
-                != ( p_filter->output.i_original_channels & AOUT_CHAN_PHYSMASK )
-          || p_filter->input.i_physical_channels
-                != ( p_filter->input.i_original_channels & AOUT_CHAN_PHYSMASK ) )
+    if ( p_filter->output.i_physical_channels
+            != (AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT) )
     {
         msg_Dbg( p_filter, "Filter discarded (incompatible format)" );
         return VLC_EGENERIC;
     }
 
     /* Request a specific format if not already compatible */
+    if ( p_filter->input.i_original_channels
+            != p_filter->output.i_original_channels )
+    {
+        b_fit = VLC_FALSE;
+        p_filter->input.i_original_channels =
+                                        p_filter->output.i_original_channels;
+    }
     if ( p_filter->input.i_format != VLC_FOURCC('f','l','3','2')
           || p_filter->output.i_format != VLC_FOURCC('f','l','3','2') )
     {
@@ -376,7 +380,6 @@ static int Create( vlc_object_t *p_this )
                                               AOUT_CHAN_CENTER |
                                               AOUT_CHAN_REARLEFT |
                                               AOUT_CHAN_REARRIGHT;
-        p_filter->input.i_original_channels = p_filter->input.i_physical_channels;
     }
     if ( ! b_fit )
     {