Reconstructing AAC CPE: Difference between revisions
Jump to navigation
Jump to search
(outline the reconstruction process) |
m (clarify present scope) |
||
Line 1: | Line 1: | ||
''Part of [[Understanding AAC]]'' | ''Part of [[Understanding AAC]]'' | ||
This page describes the process of reconstructing [[PCM]] data based on the [[Decoding AAC CPE|decoded CPE parameters]] in an AAC bitstream. | This page describes the process of reconstructing [[PCM]] data based on the [[Decoding AAC CPE|decoded CPE parameters]] in an AAC bitstream. For the moment, this description focuses on what is necessary to reconstruct low complexity (LC) profile data. | ||
== Reconstruction Process == | == Reconstruction Process == | ||
Line 12: | Line 12: | ||
+-ic_predict.c:ic_prediction() (main profile) | +-ic_predict.c:ic_prediction() (main profile) | ||
+-ic_predict.c:pns_reset_pred_state() (main profile) | +-ic_predict.c:pns_reset_pred_state() (main profile) | ||
+-(LTP & LD | +-(processing that is specific LTP & LD profiles) | ||
+-tns.c:tns_decode_frame() | +-tns.c:tns_decode_frame() | ||
+-drc.c:drc_decode() | +-drc.c:drc_decode() | ||
Line 53: | Line 53: | ||
== is_decode() == | == is_decode() == | ||
== ic_prediction( | == ic_prediction() == | ||
== pns_reset_pred_state( | == pns_reset_pred_state() == | ||
== tns_decode_frame( | == tns_decode_frame() == | ||
== drc_decode( | == drc_decode() == | ||
== ifilter_bank( | == ifilter_bank() == | ||
== ssr_decode( | == ssr_decode() == | ||
== lt_update_state( | == lt_update_state() == | ||
== sbrDecodeInit( | == sbrDecodeInit() == | ||
== sbrDecodeCoupleFrame( | == sbrDecodeCoupleFrame() == |
Revision as of 18:01, 5 March 2006
Part of Understanding AAC
This page describes the process of reconstructing PCM data based on the decoded CPE parameters in an AAC bitstream. For the moment, this description focuses on what is necessary to reconstruct low complexity (LC) profile data.
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) +-(processing that is specific LTP & LD profiles) +-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