Browse Source

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
tags/v0.6
Alex Converse 16 years ago
parent
commit
ca1fa4144f
1 changed files with 11 additions and 3 deletions
  1. +11
    -3
      libavcodec/aac_ac3_parser.c

+ 11
- 3
libavcodec/aac_ac3_parser.c View File

@@ -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;
}

Loading…
Cancel
Save