avformat/riffdec: don't unconditionally overwrite WAVEFORMATEXTENSIBLE layout
Do it only if the value conflicts with the previous channels value. Fixes ticket #9912 Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
parent
f1b35fc8f0
commit
60d8c2019f
@ -102,6 +102,8 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
av_channel_layout_uninit(&par->ch_layout);
|
||||
|
||||
par->codec_type = AVMEDIA_TYPE_AUDIO;
|
||||
if (!big_endian) {
|
||||
id = avio_rl16(pb);
|
||||
@ -189,9 +191,12 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
|
||||
if (par->codec_id == AV_CODEC_ID_ADPCM_G726 && par->sample_rate)
|
||||
par->bits_per_coded_sample = par->bit_rate / par->sample_rate;
|
||||
|
||||
av_channel_layout_uninit(&par->ch_layout);
|
||||
par->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC;
|
||||
par->ch_layout.nb_channels = channels;
|
||||
/* ignore WAVEFORMATEXTENSIBLE layout if different from channel count */
|
||||
if (channels != par->ch_layout.nb_channels) {
|
||||
av_channel_layout_uninit(&par->ch_layout);
|
||||
par->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC;
|
||||
par->ch_layout.nb_channels = channels;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user