decode adts aac streams

Originally committed as revision 4953 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Måns Rullgård 19 years ago
parent 6ee669732d
commit 79b0b66ba0
  1. 36
      libavcodec/faad.c

@ -49,9 +49,8 @@ static const char* libfaadname = "libfaad.so.0";
typedef struct { typedef struct {
void* handle; /* dlopen handle */ void* handle; /* dlopen handle */
void* faac_handle; /* FAAD library handle */ void* faac_handle; /* FAAD library handle */
int frame_size;
int sample_size; int sample_size;
int flags; int init;
/* faad calls */ /* faad calls */
faacDecHandle FAADAPI (*faacDecOpen)(void); faacDecHandle FAADAPI (*faacDecOpen)(void);
@ -111,17 +110,20 @@ static int faac_init_mp4(AVCodecContext *avctx)
#endif #endif
int r = 0; int r = 0;
if (avctx->extradata) if (avctx->extradata){
r = s->faacDecInit2(s->faac_handle, (uint8_t*) avctx->extradata, r = s->faacDecInit2(s->faac_handle, (uint8_t*) avctx->extradata,
avctx->extradata_size, avctx->extradata_size,
&samplerate, &channels); &samplerate, &channels);
// else r = s->faacDecInit(s->faac_handle ... ); if (r < 0){
av_log(avctx, AV_LOG_ERROR,
if (r < 0) "faacDecInit2 failed r:%d sr:%ld ch:%ld s:%d\n",
av_log(avctx, AV_LOG_ERROR, "faacDecInit2 failed r:%d sr:%ld ch:%ld s:%d\n", r, samplerate, (long)channels, avctx->extradata_size);
r, samplerate, (long)channels, avctx->extradata_size); } else {
avctx->sample_rate = samplerate; avctx->sample_rate = samplerate;
avctx->channels = channels; avctx->channels = channels;
s->init = 1;
}
}
return r; return r;
} }
@ -155,6 +157,20 @@ static int faac_decode_frame(AVCodecContext *avctx,
? buf_size : (int)bytesconsumed; ? buf_size : (int)bytesconsumed;
#else #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); out = s->faacDecDecode(s->faac_handle, &frame_info, (unsigned char*)buf, (unsigned long)buf_size);
if (frame_info.error > 0) { if (frame_info.error > 0) {

Loading…
Cancel
Save