/*
- * Common AAC and AC3 parser
- * Copyright (c) 2003 Fabrice Bellard.
- * Copyright (c) 2003 Michael Niedermayer.
+ * Common AAC and AC-3 parser
+ * Copyright (c) 2003 Fabrice Bellard
+ * Copyright (c) 2003 Michael Niedermayer
*
* This file is part of FFmpeg.
*
if(len<=0){
i=END_NOT_FOUND;
}else{
+ s->state=0;
i-= s->header_size -1;
s->remaining_size = len;
- if(!new_frame_start)
+ if(!new_frame_start || pc->index+i<=0){
+ s->remaining_size += i;
goto get_next;
+ }
}
}
}
*poutbuf_size = buf_size;
/* update codec info */
- avctx->sample_rate = s->sample_rate;
- /* allow downmixing to stereo (or mono for AC3) */
- if(avctx->request_channels > 0 &&
- avctx->request_channels < s->channels &&
- (avctx->request_channels <= 2 ||
- (avctx->request_channels == 1 &&
- avctx->codec_id == CODEC_ID_AC3))) {
- avctx->channels = avctx->request_channels;
- } else {
- avctx->channels = s->channels;
+ if(s->codec_id)
+ avctx->codec_id = s->codec_id;
+
+ /* Due to backwards compatible HE-AAC the sample rate, channel count,
+ and total number of samples found in an AAC ADTS header are not
+ reliable. Bit rate is still accurate because the total frame duration in
+ seconds is still correct (as is the number of bits in the frame). */
+ if (avctx->codec_id != CODEC_ID_AAC) {
+ avctx->sample_rate = s->sample_rate;
+
+ /* allow downmixing to stereo (or mono for AC-3) */
+ if(avctx->request_channels > 0 &&
+ avctx->request_channels < s->channels &&
+ (avctx->request_channels <= 2 ||
+ (avctx->request_channels == 1 &&
+ (avctx->codec_id == CODEC_ID_AC3 ||
+ avctx->codec_id == CODEC_ID_EAC3)))) {
+ avctx->channels = avctx->request_channels;
+ } else {
+ avctx->channels = s->channels;
+ avctx->channel_layout = s->channel_layout;
+ }
+ avctx->frame_size = s->samples;
}
+
avctx->bit_rate = s->bit_rate;
- avctx->frame_size = s->samples;
return i;
}