From 896e59758a11ff645879098b5ebca2e753731b4e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Reimar=20D=C3=B6ffinger?= Date: Mon, 11 Jul 2011 20:35:02 +0200 Subject: [PATCH] Move resetting of channels, sample_rate back to av_find_stream_info. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Resetting it on codec init would incorrectly clear the values if av_find_stream_info was already run before, in particular breaking ffplay. This fixes trac tickets #213 and #262. Signed-off-by: Reimar Döffinger --- libavcodec/aacdec.c | 3 --- libavformat/utils.c | 9 +++++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c index 8a936da59..d9f60d6d2 100644 --- a/libavcodec/aacdec.c +++ b/libavcodec/aacdec.c @@ -570,9 +570,6 @@ static av_cold int aac_decode_init(AVCodecContext *avctx) ac->m4ac.sample_rate = avctx->sample_rate; if (avctx->extradata_size > 0) { - avctx->channels = 0; - avctx->frame_size = 0; - avctx->sample_rate = 0; if (decode_audio_specific_config(ac, ac->avctx, &ac->m4ac, avctx->extradata, avctx->extradata_size) < 0) diff --git a/libavformat/utils.c b/libavformat/utils.c index 654bc8aae..b9a4ebab9 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2261,6 +2261,15 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) for(i=0;inb_streams;i++) { AVCodec *codec; st = ic->streams[i]; + if (st->codec->codec_id == CODEC_ID_AAC && st->codec->extradata_size) { + // We need to discard these since they can be plain wrong for + // backwards compatible HE-AAC signaling. + // But when we have no extradata we need to keep them or we can't + // play anything at all. + st->codec->sample_rate = 0; + st->codec->frame_size = 0; + st->codec->channels = 0; + } if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO || st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) { -- 2.11.0