1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-15 14:13:16 +02:00

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:
James Almer
2022-09-10 00:36:34 -03:00
parent f1b35fc8f0
commit 60d8c2019f

View File

@@ -102,6 +102,8 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
av_channel_layout_uninit(&par->ch_layout);
par->codec_type = AVMEDIA_TYPE_AUDIO; par->codec_type = AVMEDIA_TYPE_AUDIO;
if (!big_endian) { if (!big_endian) {
id = avio_rl16(pb); 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) if (par->codec_id == AV_CODEC_ID_ADPCM_G726 && par->sample_rate)
par->bits_per_coded_sample = par->bit_rate / par->sample_rate; par->bits_per_coded_sample = par->bit_rate / par->sample_rate;
av_channel_layout_uninit(&par->ch_layout); /* ignore WAVEFORMATEXTENSIBLE layout if different from channel count */
par->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; if (channels != par->ch_layout.nb_channels) {
par->ch_layout.nb_channels = channels; av_channel_layout_uninit(&par->ch_layout);
par->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC;
par->ch_layout.nb_channels = channels;
}
return 0; return 0;
} }