[FFmpeg-cvslog] r19741 - trunk/libavcodec/libspeexdec.c

jbr subversion
Sat Aug 29 23:04:18 CEST 2009


Author: jbr
Date: Sat Aug 29 23:04:18 2009
New Revision: 19741

Log:
Store the frame size in the LibSpeexContext in case the header does not exist.

Modified:
   trunk/libavcodec/libspeexdec.c

Modified: trunk/libavcodec/libspeexdec.c
==============================================================================
--- trunk/libavcodec/libspeexdec.c	Sat Aug 29 18:55:55 2009	(r19740)
+++ trunk/libavcodec/libspeexdec.c	Sat Aug 29 23:04:18 2009	(r19741)
@@ -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(
     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(
         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(AVCodec
     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(AVCodec
             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;
 }



More information about the ffmpeg-cvslog mailing list