/*
- * 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 + i;
- if(!new_frame_start)
+ s->remaining_size = len;
+ if(!new_frame_start || pc->index+i<=0){
+ s->remaining_size += i;
goto get_next;
+ }
}
}
}
*poutbuf = buf;
*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;
- }
- avctx->bit_rate = s->bit_rate;
- avctx->frame_size = s->samples;
+ /* update codec info */
+ avctx->sample_rate = s->sample_rate;
+ if(s->codec_id)
+ avctx->codec_id = s->codec_id;
+
+ /* 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 {
+ if (avctx->codec_id != CODEC_ID_AAC || s->channels) {
+ avctx->channels = s->channels;
+ avctx->channel_layout = s->channel_layout;
+ }
+ }
+ avctx->bit_rate = s->bit_rate;
+ avctx->frame_size = s->samples;
return i;
}