From 3e3a197fa55e6e2850375822fb6e8a1dcbf96385 Mon Sep 17 00:00:00 2001 From: Mikael Lund Jepsen Date: Tue, 21 Feb 2012 22:58:56 +0100 Subject: [PATCH] Multiplex HE-AAC with explicit SBR signalling in MKV This is a possible fix for bug #858: http://www.lonelycoder.com/redmine/issues/858 Ref: ISO/IEC 14496-3, Part 3: Audio Section 1.6.2.1 AudioSpecificConfig, and table 1.13 in particular --- src/parser_latm.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/parser_latm.c b/src/parser_latm.c index 52e262f6..9d7369a9 100644 --- a/src/parser_latm.c +++ b/src/parser_latm.c @@ -63,19 +63,28 @@ read_audio_specific_config(elementary_stream_t *st, latm_private_t *latm, int aot, sr; aot = read_bits(bs, 5); - if(aot != 2) - return; latm->sample_rate_index = read_bits(bs, 4); if(latm->sample_rate_index == 0xf) - return; + sr = read_bits(bs, 24); + else + sr = sri_to_rate(latm->sample_rate_index); - sr = sri_to_rate(latm->sample_rate_index); st->es_frame_duration = 1024 * 90000 / sr; latm->channel_config = read_bits(bs, 4); + if (aot == 5) { // AOT_SBR + if (read_bits(bs, 4) == 0xf) { // extensionSamplingFrequencyIndex + skip_bits(bs, 24); + } + aot = read_bits(bs, 5); // this is the main object type (i.e. non-extended) + } + + if(aot != 2) + return; + skip_bits(bs, 1); //framelen_flag if(read_bits1(bs)) // depends_on_coder skip_bits(bs, 14);