trivial: don't duplicate channels
authorThomas Guillem <thomas@gllm.fr>
Tue, 25 Oct 2016 11:26:38 +0000 (13:26 +0200)
committerThomas Guillem <thomas@gllm.fr>
Tue, 25 Oct 2016 11:32:43 +0000 (13:32 +0200)
This is a partial revert of 08d95b393f6471fd31d11ebd9bdbbf5c2dde9a7f

We don't want to copy Stereo chans to Rear and/or Middle chans, even if these
chans won't be used. We should just use Middle chans as Rear chans (if they are
not used) and vice-versa.

modules/audio_filter/channel_mixer/trivial.c

index 48fa84f..b500e1a 100644 (file)
@@ -297,57 +297,23 @@ static int Create( vlc_object_t *p_this )
         }
         else
         {
-#define AOUT_CHAN_LEFT_IDX 0
-#define AOUT_CHAN_RIGHT_IDX 1
-#define AOUT_CHAN_MIDDLELEFT_IDX 2
-#define AOUT_CHAN_MIDDLERIGHT_IDX 3
-#define AOUT_CHAN_REARLEFT_IDX 4
-#define AOUT_CHAN_REARRIGHT_IDX 5
-#define AOUT_CHAN_REARCENTER_IDX 6
-#define AOUT_CHAN_CENTER_IDX 7
-#define AOUT_CHAN_LFE_IDX 8
-
-            /* There is no corresponding input channel for the output channel.
-             * Try to match an input channel of the same side. For example, if
-             * there is an output ML, but no input ML, try to use RL or L
-             * instead. */
-            if( unlikely( i_chan == AOUT_CHAN_LEFT ) )
-                channel_map[i_dst_idx] =
-                    src_chans[AOUT_CHAN_MIDDLELEFT_IDX] != -1 ?
-                    src_chans[AOUT_CHAN_MIDDLELEFT_IDX] :
-                    src_chans[AOUT_CHAN_REARLEFT_IDX];
-            else if( unlikely( i_chan == AOUT_CHAN_RIGHT ) )
-                channel_map[i_dst_idx] =
-                    src_chans[AOUT_CHAN_MIDDLERIGHT_IDX] != -1 ?
-                    src_chans[AOUT_CHAN_MIDDLERIGHT_IDX] :
-                    src_chans[AOUT_CHAN_REARRIGHT_IDX];
-            else if( i_chan == AOUT_CHAN_MIDDLELEFT )
-                channel_map[i_dst_idx] =
-                    src_chans[AOUT_CHAN_REARLEFT_IDX] != -1 ?
-                    src_chans[AOUT_CHAN_REARLEFT_IDX] :
-                    src_chans[AOUT_CHAN_LEFT_IDX];
-            else if( i_chan == AOUT_CHAN_MIDDLERIGHT )
-                channel_map[i_dst_idx] =
-                    src_chans[AOUT_CHAN_REARRIGHT_IDX] != -1 ?
-                    src_chans[AOUT_CHAN_REARRIGHT_IDX] :
-                    src_chans[AOUT_CHAN_RIGHT_IDX];
-            else if( i_chan == AOUT_CHAN_REARLEFT )
-                channel_map[i_dst_idx] =
-                    src_chans[AOUT_CHAN_MIDDLELEFT_IDX] != -1 ?
-                    src_chans[AOUT_CHAN_MIDDLELEFT_IDX] :
-                    src_chans[AOUT_CHAN_LEFT_IDX];
-            else if( i_chan == AOUT_CHAN_REARRIGHT )
-                channel_map[i_dst_idx] =
-                    src_chans[AOUT_CHAN_MIDDLERIGHT_IDX] != -1 ?
-                    src_chans[AOUT_CHAN_MIDDLERIGHT_IDX] :
-                    src_chans[AOUT_CHAN_RIGHT_IDX];
-            else if( i_chan == AOUT_CHAN_REARCENTER )
-                channel_map[i_dst_idx] =
-                    src_chans[AOUT_CHAN_CENTER_IDX];
-            else if( i_chan == AOUT_CHAN_CENTER )
-                channel_map[i_dst_idx] =
-                    src_chans[AOUT_CHAN_REARCENTER_IDX];
-            else /* LFE */
+            if( ( i_chan & AOUT_CHANS_MIDDLE )
+             && !( i_out_physical_channels & AOUT_CHANS_REAR ) )
+            {
+                /* Use Rear chans as Middle chans if Rear chans are not used */
+                assert( i + 2 < AOUT_CHAN_MAX );
+                assert( pi_vlc_chan_order_wg4[i + 2] & AOUT_CHANS_REAR );
+                channel_map[i_dst_idx] = src_chans[i + 2];
+            }
+            else if( ( i_chan & AOUT_CHANS_REAR )
+                  && !( i_out_physical_channels & AOUT_CHANS_MIDDLE ) )
+            {
+                /* Use Middle chans as Rear chans if Middle chans are not used */
+                assert( (int) i - 2 >= 0 );
+                assert( pi_vlc_chan_order_wg4[i - 2] & AOUT_CHANS_MIDDLE );
+                channel_map[i_dst_idx] = src_chans[i - 2];
+            }
+            else
                 channel_map[i_dst_idx] = -1;
         }
         i_dst_idx++;