[FFmpeg-devel] [RFC] SBR implicit signaling

Alex Converse alex.converse
Thu Dec 17 23:16:50 CET 2009

Hi everyone,

I'm looking for some input on SBR signaling. First, a quick primer on
SBR signaling:

AAC+SBR supports 3 different ways to signal the presence of SBR to the decoder.

2. Backward Compatible Explicit Signaling: The exensionAudioObjectType
is set to SBR in the AudioSpecificConfig (the mp4a global header).
This is obviously not compatible with ADTS.

1. Hierarchical Explicit Signaling: The first AOT signaled in the
AudioSpecificConfig is SBR. This also is obviously not compatible with

0. Implicit Signaling: No notification of SBR is present in the
headers. The AudioSpecificConfig/ADTS sample rate is the core AAC
sample rate. Detection of implicitly signaled SBR is required for all
HE AAC profile decoders.

Handling the two explicitly signaled cases are trivial. Implicit
signaling presents more of a problem. There is no way to detect the
presence of SBR without examining and possibly decoding the first
audio frame. Furthermore the bulk of the conformance streams are
implicitly signaled.

FAAD2 appears to extend the HE-AAC Level 3/4 caveat[1] and decode all
stream of AAC sample rate <= 24 kHz at twice their AAC sample rate (by
using SBR's pure upsampling mode if no SBR data is present) and all
streams of AAC sample rate > 24 kHz at their AAC sample rate (By using
downsampled SBR if SBR is present).

Increasing the sample rate in AVCodec.decode() (aac_decode_frame())
appears to be too late.

Any input on how to handle implicitly signaled SBR would be welcome.

[1] "NOTE 1: For level 3 and level 4 decoders, it is mandatory to
operate SBR in a downsampled mode if the sampling rate of the AAC core
is higher than 24 kHz. Hence, if SBR operates on a 48 kHz AAC signal,
the internal sampling rate of SBR will be 96 kHz, however, the output
signal will be downsampled by SBR to 48 kHz."

More information about the ffmpeg-devel mailing list