decode adts aac streams
Originally committed as revision 4953 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
6ee669732d
commit
79b0b66ba0
@ -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…
x
Reference in New Issue
Block a user