]> git.sesse.net Git - vlc/commitdiff
Fixed wav audio channel order.
authorLaurent Aimar <fenrir@videolan.org>
Tue, 31 Mar 2009 17:40:48 +0000 (19:40 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Wed, 1 Apr 2009 05:46:45 +0000 (07:46 +0200)
modules/demux/wav.c

index 9e40f73d7ca22bbd3f5254b37eff78258ffa3e2e..e4116446963f3551bad9469049188d9ed2722c51 100644 (file)
@@ -202,25 +202,33 @@ static int Open( vlc_object_t * p_this )
                 if( i_channel_mask & pi_channels_src[i] )
                     p_sys->i_channel_mask |= pi_channels_in[i];
             }
+        }
+    }
+    else if( GetWLE( &p_wf->wFormatTag ) == WAVE_FORMAT_PCM &&
+             p_sys->fmt.audio.i_channels > 2 && p_sys->fmt.audio.i_channels <= 9 )
+    {
+        for( int i = 0; i < p_sys->fmt.audio.i_channels; i++ )
+            p_sys->i_channel_mask |= pi_channels_in[i];
+    }
 
-            if( p_sys->fmt.i_codec == VLC_FOURCC('a','r','a','w') ||
-                p_sys->fmt.i_codec == VLC_FOURCC('p','c','m',' ') ||
-                p_sys->fmt.i_codec == VLC_FOURCC('a','f','l','t') )
-
+    if( p_sys->i_channel_mask )
+    {
+        if( p_sys->fmt.i_codec == VLC_FOURCC('a','r','a','w') ||
+            p_sys->fmt.i_codec == VLC_FOURCC('p','c','m',' ') ||
+            p_sys->fmt.i_codec == VLC_FOURCC('a','f','l','t') )
             p_sys->b_chan_reorder =
                 aout_CheckChannelReorder( pi_channels_in, NULL,
                                           p_sys->i_channel_mask,
                                           p_sys->fmt.audio.i_channels,
                                           p_sys->pi_chan_table );
 
-            msg_Dbg( p_demux, "channel mask: %x, reordering: %i",
-                     p_sys->i_channel_mask, (int)p_sys->b_chan_reorder );
-        }
-        p_sys->fmt.audio.i_physical_channels =
-            p_sys->fmt.audio.i_original_channels =
-                p_sys->i_channel_mask;
+        msg_Dbg( p_demux, "channel mask: %x, reordering: %i",
+                 p_sys->i_channel_mask, (int)p_sys->b_chan_reorder );
     }
 
+    p_sys->fmt.audio.i_physical_channels =
+    p_sys->fmt.audio.i_original_channels = p_sys->i_channel_mask;
+
     if( p_sys->fmt.i_extra > 0 )
     {
         p_sys->fmt.p_extra = malloc( p_sys->fmt.i_extra );