diff options
author | James Almer <jamrial@gmail.com> | 2022-09-10 06:36:34 +0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2022-09-11 15:52:02 +0300 |
commit | 60d8c2019f59fcbeb597c900a56c8c4cd9ec8838 (patch) | |
tree | 81071791d3d0bdf86bddde0fe958f78e35fac05e /libavformat/riffdec.c | |
parent | f1b35fc8f01b3882490f626a18fcf0b407d41848 (diff) |
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>
Diffstat (limited to 'libavformat/riffdec.c')
-rw-r--r-- | libavformat/riffdec.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/libavformat/riffdec.c b/libavformat/riffdec.c index 3946ecb72f..c1e4a04550 100644 --- a/libavformat/riffdec.c +++ b/libavformat/riffdec.c @@ -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; } |