[FFmpeg-cvslog] Move resetting of channels, sample_rate back to av_find_stream_info.

Reimar Döffinger git at videolan.org
Tue Jul 12 19:45:27 CEST 2011


ffmpeg | branch: master | Reimar Döffinger <Reimar.Doeffinger at gmx.de> | Mon Jul 11 20:35:02 2011 +0200| [896e59758a11ff645879098b5ebca2e753731b4e] | committer: Reimar Döffinger

Move resetting of channels, sample_rate back to av_find_stream_info.

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 <Reimar.Doeffinger at gmx.de>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=896e59758a11ff645879098b5ebca2e753731b4e
---

 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 8a936da..d9f60d6 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 654bc8a..b9a4eba 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;i<ic->nb_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) {



More information about the ffmpeg-cvslog mailing list