Mercurial > libavcodec.hg
changeset 10116:6cade2cdd63b libavcodec
Store the frame size in the LibSpeexContext in case the header does not exist.
author | jbr |
---|---|
date | Sat, 29 Aug 2009 21:04:18 +0000 |
parents | 0b76ca7e07b5 |
children | d0f2f4e4436c |
files | libspeexdec.c |
diffstat | 1 files changed, 8 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/libspeexdec.c Sat Aug 29 16:55:55 2009 +0000 +++ b/libspeexdec.c Sat Aug 29 21:04:18 2009 +0000 @@ -29,6 +29,7 @@ SpeexStereoState stereo; void *dec_state; SpeexHeader *header; + int frame_size; } LibSpeexContext; @@ -52,7 +53,7 @@ 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 @@ 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 @@ 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 @@ 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; }