Reconstructing AAC CPE

From MultimediaWiki
Revision as of 16:58, 5 March 2006 by Multimedia Mike (talk | contribs) (outline the reconstruction process)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Part of Understanding AAC

This page describes the process of reconstructing PCM data based on the decoded CPE parameters in an AAC bitstream.

Reconstruction Process

 +-specrec.c:reconstruct_channel_pair()
   +-specrec.c:allocate_channel_pair()
   +-specrec.c:quant_to_spec()
   +-pns.c:pns_decode()
   +-ms.c:ms_decode()
   +-is.c:is_decode()
   +-ic_predict.c:ic_prediction() (main profile)
   +-ic_predict.c:pns_reset_pred_state() (main profile)
   +-(LTP & LD stuff)
   +-tns.c:tns_decode_frame()
   +-drc.c:drc_decode()
   +-filtback.c:ifilter_bank()
   +-ssr.c:ssr_decode()
   +-lt_predict.c:lt_update_state()
   +-sbr_dec.c:sbrDecodeInit()
   +-sbr_dec.c:sbrDecodeCoupleFrame()

reconstruct_channel_pair(2 ic_streams, 2 spec_data arrays(16 bit ints))

 declare 2 1024-element float arrays for spectral coefficients (spec_coeff1 and spec_coeff2)
 quant_to_spec(ics1, spec_data1, ics1)
 quant_to_spec(ics2, spec_data2, ics2)
 if ics1.ms_mask_present
   pns_decode(ics1, ics2, spec_coef1, spec_coeff2)
 else
   pns_decode(ics1, spec_coef1)
   pns_decode(ics2, spec_coef2)
 ms_decode(ics1, ics2, spec_coef1, spec_coef2)
 is_decode(ics1, ics2, spec_coef1, spec_coef2)
 // main profile decoding
 // LTP decoding
 tns_decode(ics1, spec_coeff1)
 tns_decode(ics2, spec_coeff2)
 // DRC stuff
 ifilter_bank(ics1, spec_coeff1)
 ifilter_bank(ics2, spec_coeff2)
 save window shape for next frame (I thought frames were independent)
 // LTP stuff
 // SBR stuff

allocate_channel_pair()

quant_to_spec()

pns_decode()

ms_decode()

is_decode()

ic_prediction() (pertains to main profile)

pns_reset_pred_state() (pertains to main profile)

tns_decode_frame() (pertains to LTP and LD stuff)

drc_decode() (pertains to LTP and LD stuff)

ifilter_bank() (pertains to LTP and LD stuff)

ssr_decode() (pertains to LTP and LD stuff)

lt_update_state() (pertains to LTP and LD stuff)

sbrDecodeInit() (pertains to LTP and LD stuff)

sbrDecodeCoupleFrame() (pertains to LTP and LD stuff)