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/??/??)
|
ver 0.16.6 (2010/??/??)
|
||||||
* decoder:
|
* decoder:
|
||||||
- fix assertion failure when resuming streams
|
- fix assertion failure when resuming streams
|
||||||
|
- ffmpeg: work around bogus channel count
|
||||||
* encoder:
|
* encoder:
|
||||||
- flac, null, wave: fix buffer corruption bug
|
- flac, null, wave: fix buffer corruption bug
|
||||||
- wave: support packed 24 bit samples
|
- wave: support packed 24 bit samples
|
||||||
|
@ -407,13 +407,6 @@ ffmpeg_decode(struct decoder *decoder, struct input_stream *input)
|
|||||||
return;
|
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;
|
GError *error = NULL;
|
||||||
struct audio_format audio_format;
|
struct audio_format audio_format;
|
||||||
if (!audio_format_init_checked(&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)) {
|
codec_context->channels, &error)) {
|
||||||
g_warning("%s", error->message);
|
g_warning("%s", error->message);
|
||||||
g_error_free(error);
|
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);
|
av_close_input_stream(format_context);
|
||||||
mpd_ffmpeg_stream_close(stream);
|
mpd_ffmpeg_stream_close(stream);
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user