diff options
author | Alex Converse <alex.converse@gmail.com> | 2010-03-04 02:30:51 +0000 |
---|---|---|
committer | Alex Converse <alex.converse@gmail.com> | 2010-03-04 02:30:51 +0000 |
commit | ca1fa4144fbde99a88589c4b02648980b7d4c2d8 (patch) | |
tree | e4b095c8b41ebbea391fdf75c2537cc92da41d0d /libavcodec/aac_ac3_parser.c | |
parent | 38768cb70a3688f7b71c5104130b31d6a3834bee (diff) | |
download | ffmpeg-ca1fa4144fbde99a88589c4b02648980b7d4c2d8.tar.gz |
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.c | 14 |
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; } |