1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

swr/rematrix: Fix handling of AV_CH_LAYOUT_STEREO_DOWNMIX output

Fixes Ticket2859

Note, testcases related to the downmix channels are welcome.
(id like to make sure this is working correctly now, as obviously it didnt
 work before ...)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2013-08-20 16:56:51 +02:00
parent 6dfffe9200
commit c56d4dab03

View File

@ -82,9 +82,6 @@ static int even(int64_t layout){
} }
static int clean_layout(SwrContext *s, int64_t layout){ static int clean_layout(SwrContext *s, int64_t layout){
if((layout & AV_CH_LAYOUT_STEREO_DOWNMIX) == AV_CH_LAYOUT_STEREO_DOWNMIX)
return AV_CH_LAYOUT_STEREO;
if(layout && layout != AV_CH_FRONT_CENTER && !(layout&(layout-1))) { if(layout && layout != AV_CH_FRONT_CENTER && !(layout&(layout-1))) {
char buf[128]; char buf[128];
av_get_channel_layout_string(buf, sizeof(buf), -1, layout); av_get_channel_layout_string(buf, sizeof(buf), -1, layout);
@ -125,6 +122,11 @@ av_cold static int auto_matrix(SwrContext *s)
in_ch_layout = clean_layout(s, s->in_ch_layout); in_ch_layout = clean_layout(s, s->in_ch_layout);
out_ch_layout = clean_layout(s, s->out_ch_layout); out_ch_layout = clean_layout(s, s->out_ch_layout);
if( out_ch_layout == AV_CH_LAYOUT_STEREO_DOWNMIX
&& (in_ch_layout & AV_CH_LAYOUT_STEREO_DOWNMIX) == 0
)
out_ch_layout = AV_CH_LAYOUT_STEREO;
if(!sane_layout(in_ch_layout)){ if(!sane_layout(in_ch_layout)){
av_get_channel_layout_string(buf, sizeof(buf), -1, s->in_ch_layout); av_get_channel_layout_string(buf, sizeof(buf), -1, s->in_ch_layout);
av_log(s, AV_LOG_ERROR, "Input channel layout '%s' is not supported\n", buf); av_log(s, AV_LOG_ERROR, "Input channel layout '%s' is not supported\n", buf);