OSDN Git Service

aacdec: set AVFrame sample_rate
authorJohn Stebbins <stebbins@jetheaddev.com>
Sun, 9 Feb 2014 01:19:30 +0000 (01:19 +0000)
committerJanne Grunau <janne-libav@jannau.net>
Wed, 12 Feb 2014 11:52:28 +0000 (12:52 +0100)
AVFrame.sample_rate is set in ff_get_buffer, but aacdec calls
ff_get_buffer before the samplerate is known. So it needs to be
set again before returning the frame.

libavcodec/aacdec.c

index 70fbb53..a365209 100644 (file)
@@ -2753,6 +2753,7 @@ static int aac_decode_er_frame(AVCodecContext *avctx, void *data,
     spectral_to_sample(ac);
 
     ac->frame->nb_samples = samples;
+    ac->frame->sample_rate = avctx->sample_rate;
     *got_frame_ptr = 1;
 
     skip_bits_long(gb, get_bits_left(gb));
@@ -2885,16 +2886,18 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
     multiplier = (ac->oc[1].m4ac.sbr == 1) ? ac->oc[1].m4ac.ext_sample_rate > ac->oc[1].m4ac.sample_rate : 0;
     samples <<= multiplier;
 
-    if (samples)
-        ac->frame->nb_samples = samples;
-    *got_frame_ptr = !!samples;
-
     if (ac->oc[1].status && audio_found) {
         avctx->sample_rate = ac->oc[1].m4ac.sample_rate << multiplier;
         avctx->frame_size = samples;
         ac->oc[1].status = OC_LOCKED;
     }
 
+    if (samples) {
+        ac->frame->nb_samples = samples;
+        ac->frame->sample_rate = avctx->sample_rate;
+    }
+    *got_frame_ptr = !!samples;
+
     return 0;
 fail:
     pop_output_configuration(ac);