Mercurial > libavcodec.hg
changeset 3097:41fb9bda307d libavcodec
decode adts aac streams
author | mru |
---|---|
date | Wed, 08 Feb 2006 00:30:58 +0000 |
parents | 966b3f321af0 |
children | eb3d3988aff2 |
files | faad.c |
diffstat | 1 files changed, 26 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/faad.c Tue Feb 07 16:10:48 2006 +0000 +++ b/faad.c Wed Feb 08 00:30:58 2006 +0000 @@ -49,9 +49,8 @@ typedef struct { void* handle; /* dlopen handle */ void* faac_handle; /* FAAD library handle */ - int frame_size; int sample_size; - int flags; + int init; /* faad calls */ faacDecHandle FAADAPI (*faacDecOpen)(void); @@ -111,17 +110,20 @@ #endif int r = 0; - if (avctx->extradata) + if (avctx->extradata){ r = s->faacDecInit2(s->faac_handle, (uint8_t*) avctx->extradata, avctx->extradata_size, &samplerate, &channels); - // else r = s->faacDecInit(s->faac_handle ... ); - - if (r < 0) - av_log(avctx, AV_LOG_ERROR, "faacDecInit2 failed r:%d sr:%ld ch:%ld s:%d\n", - r, samplerate, (long)channels, avctx->extradata_size); - avctx->sample_rate = samplerate; - avctx->channels = channels; + if (r < 0){ + av_log(avctx, AV_LOG_ERROR, + "faacDecInit2 failed r:%d sr:%ld ch:%ld s:%d\n", + r, samplerate, (long)channels, avctx->extradata_size); + } else { + avctx->sample_rate = samplerate; + avctx->channels = channels; + s->init = 1; + } + } return r; } @@ -155,6 +157,20 @@ ? buf_size : (int)bytesconsumed; #else + if(!s->init){ + unsigned long srate; + unsigned char channels; + int r = faacDecInit(s->faac_handle, buf, buf_size, &srate, &channels); + if(r < 0){ + av_log(avctx, AV_LOG_ERROR, "faac: codec init failed: %s\n", + s->faacDecGetErrorMessage(frame_info.error)); + return 0; + } + avctx->sample_rate = srate; + avctx->channels = channels; + s->init = 1; + } + out = s->faacDecDecode(s->faac_handle, &frame_info, (unsigned char*)buf, (unsigned long)buf_size); if (frame_info.error > 0) {