lswr: channel_map requires input conversion.
authorNicolas George <nicolas.george@normalesup.org>
Mon, 16 Jul 2012 12:18:19 +0000 (14:18 +0200)
committerNicolas George <nicolas.george@normalesup.org>
Tue, 17 Jul 2012 07:50:36 +0000 (09:50 +0200)
channel_map is applied between in and postin.
Without this test, if the input format is an acceptable internal format,
the in->postin conversion is skipped. In the best case,
it ignores channel_map, in the worst case it causes an assert failure
if the number of channels is changed by the map.

libswresample/swresample.c

index 1b5492d..0c869f9 100644 (file)
@@ -542,7 +542,7 @@ static int swr_convert_internal(struct SwrContext *s, AudioData *out, int out_co
     preout_tmp= s->preout;
     preout= &preout_tmp;
 
-    if(s->int_sample_fmt == s-> in_sample_fmt && s->in.planar)
+    if(s->int_sample_fmt == s-> in_sample_fmt && s->in.planar && !s->channel_map)
         postin= in;
 
     if(s->resample_first ? !s->resample : !s->rematrix)