decoder/ffmpeg: work around bogus channel count
Initialize the audio_format before calling avcodec_open(), because avcodec_open() will fill bogus values.
This commit is contained in:
parent
6f365c30eb
commit
e1b032cbad
1
NEWS
1
NEWS
|
@ -1,6 +1,7 @@
|
|||
ver 0.16.6 (2010/??/??)
|
||||
* decoder:
|
||||
- fix assertion failure when resuming streams
|
||||
- ffmpeg: work around bogus channel count
|
||||
* encoder:
|
||||
- flac, null, wave: fix buffer corruption bug
|
||||
- wave: support packed 24 bit samples
|
||||
|
|
|
@ -407,13 +407,6 @@ ffmpeg_decode(struct decoder *decoder, struct input_stream *input)
|
|||
return;
|
||||
}
|
||||
|
||||
if (avcodec_open(codec_context, codec)<0) {
|
||||
g_warning("Could not open codec\n");
|
||||
av_close_input_stream(format_context);
|
||||
mpd_ffmpeg_stream_close(stream);
|
||||
return;
|
||||
}
|
||||
|
||||
GError *error = NULL;
|
||||
struct audio_format audio_format;
|
||||
if (!audio_format_init_checked(&audio_format,
|
||||
|
@ -422,7 +415,18 @@ ffmpeg_decode(struct decoder *decoder, struct input_stream *input)
|
|||
codec_context->channels, &error)) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
avcodec_close(codec_context);
|
||||
av_close_input_stream(format_context);
|
||||
mpd_ffmpeg_stream_close(stream);
|
||||
return;
|
||||
}
|
||||
|
||||
/* the audio format must be read from AVCodecContext by now,
|
||||
because avcodec_open() has been demonstrated to fill bogus
|
||||
values into AVCodecContext.channels - a change that will be
|
||||
reverted later by avcodec_decode_audio3() */
|
||||
|
||||
if (avcodec_open(codec_context, codec)<0) {
|
||||
g_warning("Could not open codec\n");
|
||||
av_close_input_stream(format_context);
|
||||
mpd_ffmpeg_stream_close(stream);
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue