Decoding AAC SCE and LFE

From MultimediaWiki
Jump to navigation Jump to search

Part of Understanding AAC

An SCE is a single channel element. An LFE is a special type of SCE and may stand for low frequency element. These elements contain the encoded data (a single audio channel). Presently, this description is only concerned with what it takes to decode low complexity (LC) data. Processing that affects other features is skipped (except if the data needs to be parsed from the bitstream).

A note about the ad-hoc conventions in this syntax description: This notation:

6 bits: foo

indicates that the next 6 bits are to be read from the bitstream and stored in variable foo. Similarily, this notation:

foo: bar

indicates that the next (foo) quantity bits are to be read from the bitstream and stored in variable bar.

Function Hierarchy

When FAAD2 wants to decode a SCE or LFE, this is the sequence of functions it calls in its internal hierarchy:

 syntax.c:decode_sce_lfe()
   +- syntax.c:single_lfe_channel_element()
     +- syntax.c:individual_channel_stream()
     +- (SBR decoding stuff)
     +- specrec.c:reconstruct_single_channel()

decode_sce_lfe()

single_lfe_channel_element()

single_lfe_channel_element()

declare an ic_stream structure: ics
declare an array of 1024 16-bit ints for spectral data: spec_data
4 bits: element instance tag
individual_channel_stream(ics, spec_data)
reconstruct_single_channel(ics, spec_data)

individual_channel_stream(ic_stream ics, spec_data[1024])

This process is detailed in Decoding AAC CPE.

Reconstruction