[SCM] libav/experimental: Store the frame size in the LibSpeexContext in case the header does not exist.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:50:35 UTC 2013


The following commit has been merged in the experimental branch:
commit 6833385d30167c966a4e1cbb4d22f0ba82ef4e37
Author: Justin Ruggles <justin.ruggles at gmail.com>
Date:   Sat Aug 29 21:04:18 2009 +0000

    Store the frame size in the LibSpeexContext in case the header does not exist.
    
    Originally committed as revision 19741 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/libspeexdec.c b/libavcodec/libspeexdec.c
index 4241de2..88bf85f 100644
--- a/libavcodec/libspeexdec.c
+++ b/libavcodec/libspeexdec.c
@@ -29,6 +29,7 @@ typedef struct {
     SpeexStereoState stereo;
     void *dec_state;
     SpeexHeader *header;
+    int frame_size;
 } LibSpeexContext;
 
 
@@ -52,7 +53,7 @@ static av_cold int libspeex_decode_init(AVCodecContext *avctx)
     if (s->header) {
         avctx->sample_rate = s->header->rate;
         avctx->channels    = s->header->nb_channels;
-        avctx->frame_size  = s->header->frame_size;
+        avctx->frame_size  = s->frame_size = s->header->frame_size;
         if (s->header->frames_per_packet)
             avctx->frame_size *= s->header->frames_per_packet;
 
@@ -76,8 +77,10 @@ static av_cold int libspeex_decode_init(AVCodecContext *avctx)
         return -1;
     }
 
-    if (!s->header)
+    if (!s->header) {
         speex_decoder_ctl(s->dec_state, SPEEX_GET_FRAME_SIZE, &avctx->frame_size);
+        s->frame_size = avctx->frame_size;
+    }
 
     if (avctx->channels == 2) {
         SpeexCallback callback;
@@ -100,7 +103,7 @@ static int libspeex_decode_frame(AVCodecContext *avctx,
     int16_t *output = data, *end;
     int i, num_samples;
 
-    num_samples = s->header->frame_size * avctx->channels;
+    num_samples = s->frame_size * avctx->channels;
     end = output + *data_size / sizeof(*output);
 
     speex_bits_read_from(&s->bits, buf, buf_size);
@@ -115,12 +118,12 @@ static int libspeex_decode_frame(AVCodecContext *avctx,
             break;
 
         if (avctx->channels == 2)
-            speex_decode_stereo_int(output, s->header->frame_size, &s->stereo);
+            speex_decode_stereo_int(output, s->frame_size, &s->stereo);
 
         output += num_samples;
     }
 
-    avctx->frame_size = s->header->frame_size * i;
+    avctx->frame_size = s->frame_size * i;
     *data_size = avctx->channels * avctx->frame_size * sizeof(*output);
     return buf_size;
 }

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list