summaryrefslogtreecommitdiff
path: root/libavcodec/aac_ac3_parser.c
diff options
context:
space:
mode:
authorAlex Converse <alex.converse@gmail.com>2010-03-04 02:30:51 +0000
committerAlex Converse <alex.converse@gmail.com>2010-03-04 02:30:51 +0000
commitca1fa4144fbde99a88589c4b02648980b7d4c2d8 (patch)
treee4b095c8b41ebbea391fdf75c2537cc92da41d0d /libavcodec/aac_ac3_parser.c
parent38768cb70a3688f7b71c5104130b31d6a3834bee (diff)
AAC parser: Don't write channels, sample rate, and frame size each frame.
Thanks to backwards compatible HE-AAC signalling these values are unreliable. Originally committed as revision 22194 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/aac_ac3_parser.c')
-rw-r--r--libavcodec/aac_ac3_parser.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/libavcodec/aac_ac3_parser.c b/libavcodec/aac_ac3_parser.c
index 85993c09b7..83ad9c56f9 100644
--- a/libavcodec/aac_ac3_parser.c
+++ b/libavcodec/aac_ac3_parser.c
@@ -71,10 +71,16 @@ get_next:
*poutbuf_size = buf_size;
/* update codec info */
- avctx->sample_rate = s->sample_rate;
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 &&
@@ -83,12 +89,14 @@ get_next:
(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) {
+ } else {
avctx->channels = s->channels;
avctx->channel_layout = s->channel_layout;
}
- avctx->bit_rate = s->bit_rate;
avctx->frame_size = s->samples;
+ }
+
+ avctx->bit_rate = s->bit_rate;
return i;
}