decoder/ffmepg: fill AudioFormat from AVCodecContext, not AVCodecParameters

`AVCodecParameters` contains values from the codec detected by
avformat_find_stream_info(), but after avcodec_open2(), a different
codec might be selected with a different `AVSampleFormat`.  This leads
to misinterpretation of data returned from FFmpeg, leading to random
noise or silence.

This was observed with FFmpeg 4.0.2 and a TS container file containing
MP2.  A mp3-float codec was detected returning `AV_SAMPLE_FMT_FLTP`,
but finally the `mpegaudiodec_fixed.c` was used, returning
`AV_SAMPLE_FMT_S16`.

By using the audio format from `AVCodecContext`, we ensure that MPD
and FFmpeg always agree on the actual audio format in the buffer.

This removes the FFmpeg bug workaround from commit e1b032cbad which I
assume is obsolete after 7 years.

Fixes #380
This commit is contained in:
Max Kellermann
2018-11-04 22:30:50 +01:00
parent bd115a4008
commit 6c602811df
2 changed files with 12 additions and 16 deletions

1
NEWS
View File

@@ -1,6 +1,7 @@
ver 0.21.2 (not yet released)
* decoder
- ffmpeg: require FFmpeg 3.1 or later
- ffmpeg: fix broken sound with certain codecs
ver 0.21.1 (2018/11/04)
* protocol