Expand description
§oxideav-aac
Pure-Rust AAC (Advanced Audio Coding) parsing — currently Phase 1 of the post-r111 orphan-rebuild lineage. Decode and encode bodies are not wired up yet; this crate’s public surface is limited to:
-
The
adtsmodule — ISO/IEC 13818-7 §1.A.2 Audio Data Transport Stream fixed-header parser (sync, profile, sampling-frequency index, channel configuration, frame length, raw-data-block count, CRC presence flag). -
The
ascmodule — ISO/IEC 14496-3 §1.6.2.1 AudioSpecificConfig parser, including the §4.4.1 GASpecificConfig body for all General Audio audio-object types (AOTs 1, 2, 3, 4, 6, 7, 17, 19, 20, 21, 22, 23) and the hierarchical SBR (AOT 5) / PS (AOT 29) outer-wrapper unwrap. Embeds an inlinepce::PcewhenchannelConfiguration == 0. Round 177 extends the GA body with theextensionFlag == 1subtree (Table 4.1: AOT 22’snumOfSubFrame+layer_length; the AOT-17 / 19 / 20 / 23 resilience triplet; the always-presentextensionFlag3tail bit) and the Table 1.15 trailingepConfig2-bit field for every ER AOT in {17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 39}.epConfig == 2or3(which mandateErrorProtectionSpecificConfig()parsing) surface asError::UnsupportedEpConfig; anextensionFlag3 == 1body — whose layout is reserved by the spec — surfaces asError::UnsupportedAscExtensionFlag3. Round 192 adds the Table 1.15 trailingsyncExtensionType == 0x2b7implicit-SBR probe (§1.6.5): when the outer AOT is not the explicit SBR (5) or PS (29) wrapper and the carrier has at least 16 bits remaining, [AudioSpecificConfig::parse] now reads an 11-bitsyncExtensionTypefield. On a0x2b7match it consumes the nestedGetAudioObjectType()plus either the SBR branch (sbrPresentFlag, optionalextensionSamplingFrequencyIndex, then a second 11-bitsyncExtensionType == 0x548gating a 1-bitpsPresentFlag) or the BSAC branch (sbrPresentFlag, optionalextensionSamplingFrequencyIndex, mandatory 4-bitextensionChannelConfiguration). The probe result is exposed asasc::AudioSpecificConfig::trailing_sbr_probeand the implicitly-signalled SBR / PS / extension-sample-rate values are also propagated to the top-levelsbr_present/ps_present/extension_sampling_frequency_index/extension_sample_rate/extension_channel_configurationfields. A carrier-bounded entry pointasc::AudioSpecificConfig::parse_bits_boundedis exposed so LATMStreamMuxConfig(and any future esds AudioObj descriptor) callers can pass the exact ASC bit length;asc::AudioSpecificConfig::parse_bitspreserves its no-probe semantics for callers that hold aBitReadercarrying trailing carrier bytes. -
The
pcemodule — ISO/IEC 14496-3 §4.4.1.1 program_config_element parser. Used both standalone (inside [raw_data_block]) and inline insideasc. -
The [
raw_data_block] module — ISO/IEC 14496-3 §4.4.2.1 syntactic raw_data_block() walker that visits eachid_syn_elein order and stops cleanly atEND (0b111). Per-element bodies for SCE / CPE / CCE / LFE are not parsed yet — the walker emits an element-header event and the consumer is responsible for advancing the bit-reader past the body (subsequent rounds will internalise this). PCE is fully parsed. Round 160 added the matching encoder-side [raw_data_block::FrameAssembler] — the bit-exact inverse, with a typed push-API (push_channel_header/push_channel_body_bits/push_fill/push_data/push_pce/push_end) that composes the existing per-tool writers (IcsInfo::write,SectionData::write, …) into a complete byte stream. Round 165 addspce::Pce::write(the bit-exact inverse of the round-126Pce::parse) and the matching [raw_data_block::FrameAssembler::push_pce] entry point, closing the last per-element writer gap in theraw_data_block()frame assembler. -
The [
ics_info] module — ISO/IEC 14496-3 §4.4.6 / Table 4.6 ics_info() parser. The first piece of Phase 2 (channel-element body parsing) — surfaces the window-sequence / shape,max_sfb,scale_factor_grouping, the Main predictor side-info (AOT 1), and the LTPltp_data()body (Table 4.55) when the wire bit selects it, plus the §4.5.2.3.4 derivations (num_windows,num_window_groups,window_group_length[],num_swb). Round 140 added the matchingIcsInfo::writeencoder primitive (and a publicwrite_ltp_datahelper) — the second encode-side syntax-element writer in the crate. Self-roundtrip (write→parse) is bit-perfect across every branch the parser handles, including the Main predictor + Table 4.55 LTP body for both the non-LD and the ER-AAC-LD forms. -
The [
section_data] module — ISO/IEC 14496-3 §4.4.6 / ISO/IEC 13818-7 §6.3 Table 17 section_data() parser, plus (round 137) the matchingSectionData::writeencoder primitive. The parser assigns a Huffman codebook (sect_cb) to each run of scalefactor bands per window group via run-length escape coding, building the per-groupsfb_cb[g][sfb]map thatscale_factor_data()(next round) consumes. The encoder is its inverse: given the same(window_sequence, max_sfb)context it emits a bit-exact Table 17 stream. Self-roundtrip (write→parse) is bit-perfect across the long, EIGHT_SHORT, single-escape, double-escape, and exact-multiple-of-sect_esc_valbranches. No Huffman decode yet — every field is fixed-width. -
The [
pulse_data] module — ISO/IEC 14496-3 §4.4.6.3 / Table 4.7 pulse_data() parser and encoder primitive (new in round 142). The parser reads the 2-bitnumber_pulse, 6-bitpulse_start_sfb, andnumber_pulse + 1(5-bit pulse_offset, 4-bit pulse_amp)records into [pulse_data::PulseData]; the writer serialises the same structure back bit-for-bit. Every field is fixed-width — no Huffman tables, noswb_offsetdependence, and no surrounding-element state. The §4.6.13 reconstruction loop (k += swb_offset[pulse_start_sfb] + pulse_offset[j]; x_quant[…] ±= pulse_amp[j]) is not performed; it needsswb_offset_long_window[]and the post-Huffmanx_quantarray that arrive withspectral_data(). -
The [
scale_factor_data] module — ISO/IEC 14496-3 §4.4.6 / Table 4.53 (non-resilient branch) plus §4.6.3 / Table 4.A.1 scale_factor_data() parser and encoder primitive (round 149, the fifth encode-side syntax-element writer in the crate). Carries the AAC scalefactor Huffman codebook (codebook 12) — 121 entries indexed0..=120withindex_offset = -60, producing DPCM deltas in-60..=+60. The parser walks the per-(g, sfb)non-ZERO_HCBsubsequence driven by [section_data::SectionData::sfb_cb] and dispatches betweenhcod_sf[](ordinary spectrum / PNS-after-first / both intensity codebooks) and the 9-bitdpcm_noise_nrgPCM seed (first PNS band of the frame). The writer serialises the same structure back bit-for-bit and validates the in-memory record variants against the codebook map.Round 152 adds the §4.6.2.3.2 / §4.6.8.1.4 / §4.6.13 DPCM accumulator pair [
scale_factor_data::accumulate] (decoder side) / [scale_factor_data::differentiate] (encoder side) that converts between transmitted DPCM deltas and absolute per-band quantities. Three independent tracks: spectrum scalefactors (seedlast_sf = global_gain, range0..=255), intensity stereo positions (seedlast_is = 0), and PNS noise energies (seedlast_nrg = global_gain - NOISE_OFFSET - 256, first PNS band carries a 9-bituimsbfliteral). The §4.4.6 error-resilient branch (aacScalefactorDataResilienceFlag == 1, RVLC withrev_global_gain,sf_concealment,length_of_rvlc_sf) is still not implemented; ER AAC-LD / scalable profiles that flip the resilience flag will need a siblingscale_factor_data_rvlc()module. -
The [
tns_data] module — ISO/IEC 14496-3 §4.4.6 / Table 4.54 tns_data() parser and encoder primitive (new in round 146). The parser walks every transform window of the surroundingwindow_sequenceand readsn_filt[w](1 or 2 bits per Table 4.155), an optionalcoef_res[w](whenn_filt[w] > 0), then per-filterlength(4 or 6 bits),order(3 or 5 bits), and — whenorder > 0—direction,coef_compress, andorder×coef[i]magnitudes whose width is(3 + coef_res) − coef_compressper §4.6.9.3. The writer serialises the same structure back bit-for-bit. The §4.6.9.3tns_decode_coefLPC reconstruction (signed conversion,iqfacarcsine inverse-quantisation, Levinson-style conversion to LPC) lives in [tns_coef], as does the §4.6.9.3tns_ar_filterall-pole pass over a strided spectrum region. What remains owed is the §4.6.9tns_decode_frameorchestration that slices the per-window spectrum byswb_offset/direction/lengthand dispatches the filter — that walker belongs with the per-AOT IMDCT reconstruction driver. -
The [
gain_control_data] module — ISO/IEC 14496-3 §4.4.6.5 / Table 4.12 gain_control_data() parser and encoder primitive (new in round 183). Carries the SSR (AOT 3) PQF-band gain-control ladder: 2-bitmax_band, then for eachbd ∈ 1..=max_banda per-window(3-bit adjust_num) + adjust_num × (4-bit alevcode + W(seq, wd)-bit aloccode)ladder with the per-window_sequencewindow countN ∈ {1, 2, 8, 2}and the per-(seq, wd)aloccodewidth table from Table 4.12 (5 / 4-2 / 2 / 4-5). The §4.6.12 ladder-application loop that reconstructs sample-domain attenuation factors is not performed; it needs the SSR PQF / IMDCT back-end. -
The [
swb_offset] module — ISO/IEC 14496-3 §4.5.4.1 / Tables 4.129–4.141 swb_offset_long_window[] and swb_offset_short_window[] lookup tables, new in round 194. The per-band lowest-coefficient index for each of the 12 validsamplingFrequencyIndexvalues is exposed as [swb_offset::SWB_OFFSET_LONG_WINDOW] (each slotnum_swb + 1entries with trailing 1024 sentinel) and [swb_offset::SWB_OFFSET_SHORT_WINDOW] (each slotnum_swb + 1entries with trailing 128 sentinel). Public accessors [swb_offset::long_window_offsets] and [swb_offset::short_window_offsets] bounds-checkfs_index. [swb_offset::apply_pulse_data] applies the §4.6.13 pulse-escape reconstruction to a long-windowx_quantslice — the first reconstruction-layer entry point in the crate, consuming a parsed [pulse_data::PulseData] block and folding the±pulse_ampfix-up into the quantised spectrum at the running coefficient indexk = swb_offset[fs][ pulse_start_sfb] + Σ pulse_offset[i]. The 960-line frame variant (Tables 4.142–4.147) is not covered. -
The [
tns_max] module — ISO/IEC 14496-3 §4.6.9.4 Tables 4.102 / 4.103 decoder-sideTNS_MAX_ORDER/TNS_MAX_BANDSclamp tables and §4.6.17.2.5 Tables 4.119 / 4.120 LD-specificTNS_MAX_BANDStables, new in round 200. The accessors [tns_max::tns_max_order] and [tns_max::tns_max_bands] surface the per-AOT / per-window-sequence / per-fs_indexcaps; [tns_max::tns_max_bands_ld_480] and [tns_max::tns_max_bands_ld_512] handle the LD frame-size split. The clamp helpers [tns_max::clamp_tns_order] and [tns_max::clamp_tns_band] fold the §4.6.9.3 three-waymin(band, TNS_MAX_BANDS, max_sfb)andmin(order, TNS_MAX_ORDER)pseudocode into one call so the eventual TNS reconstruction layer can consume them without re-deriving the AOT dispatch. The Table 4.103 dispatch splits AOT 3 (AAC SSR) into the PQF-filterbank columns; every other AOT uses the non-PQF columns. -
The [
ics_body] module — ISO/IEC 14496-3 §4.4.6 / Table 4.50individual_channel_stream()body walker, new in round 207. Composes the existing per-tool parsers / writers (global_gain, [ics_info], [section_data], [scale_factor_data], optional [pulse_data] / [tns_data] / [gain_control_data]) into the complete Table 4.50 channel-element body, up to but not includingspectral_data(). Surfaces the parsed structure plus thespectral_data_bit_offsetso the caller (e.g. a future spectrum parser, or a frame-assembler that hands off the spectrum-bit-slice viapush_channel_body_bits) can resume the walk at the right boundary. The shared-infoCPEform ([ics_body::IcsBody::parse_with_ics_info] / [ics_body::IcsBody::write_with_ics_info]) accepts the externally-held [ics_info::IcsInfo] for the per-channel body. Table 4.50 Note 1’s “pulse_data illegal onEIGHT_SHORT_SEQUENCE” and the §4.6.12 “gain_control_data is AOT-3 (SSR) only” normative constraints are enforced on the writer side; the parser surfaces literal bits to keep hostile streams from panicking.scale_flag == true(scalable AAC, AOT 6) rejects withError::NotImplemented. -
The [
spectral_codebook] module — ISO/IEC 14496-3 §4.6.3.1 / Table 4.95 Spectrum Huffman codebook parameter table plus the §4.6.3.3 codeword-index → spectral-tuple translation, the §4.6.3.3 sign-bit fix-up, and the §4.6.3.3 ESC sequence handler for codebook 11 (and the extension books 16..=31), new in round 213.TABLE_4_95: [Table495Row; 32]carries the four normative columns (unsigned_cb,dimension,lav,esc_threshold) for every codebook in0..=31;table_4_95is the safe accessor. [spectral_codebook::decode_index_to_tuple] is the §4.6.3.3 pseudocode that translates a Huffman codeword indexidxto adim-tuple of quantised spectral coefficients; [spectral_codebook::encode_tuple_to_index] is its inverse. The sign-bit fix-up [spectral_codebook::apply_sign_bits] / [spectral_codebook::derive_sign_bits] folds the per-non-zero-coefficient sign bits the spec emits after an unsigned-codebook codeword onto / from a signed tuple. The ESC sequence [spectral_codebook::decode_esc_value] / [spectral_codebook::encode_esc_value] expands codebook-11 coefficients at the LAV cap into the §4.6.3.3 escape sequence (2^(N + 4) + escape_word, capped at [spectral_codebook::MAX_QUANT] = 8191 per §4.6.1.3). The Huffman tables themselves (Tables 4.A.3 through 4.A.12) are still owed — see [spectrum_huffman] for the first one. The §4.4.6spectral_data()wire walker that loops over scalefactor bands and dispatches on the per-band codebook is also not wired up; this module is the per-codeword translation layer it will sit on top of. -
The [
spectrum_huffman] module — the wire layer for the §4.6.3 / Annex 4.A Huffman codebooks (new in round 219). Round 219 landed the first of the eleven spectrum books: Table 4.A.2 (Spectrum Huffman Codebook 1, signed 4-tuple,LAV = 1, 81 entries indexed0..=80, maximum codeword length 11 bits; the zero-tuple at index 40 carries the single-bit codeword0). Round 226 added Codebook 2 (Table 4.A.3, same signed 4-tuple universe, 9-bit max), round 231 added Codebook 3 (Table 4.A.4, the first unsigned book,LAV = 2, 16-bit max; the zero magnitude tuple migrates to index 0). Round 234 added Codebook 4 (Table 4.A.5, the second unsigned dim-4 book, 12-bit max; the shortest codeword0b0000parks at index 40 while index 0 carries a 4-bit0b0111). Round 238 adds Codebook 5 (Table 4.A.6, the first pair book:unsigned = 0,dim = 2,LAV = 4→9^2 = 81entries, 13-bit max; the §4.6.3.3 polynomial puts the zero-tuple(0, 0)at the centre index 40 — also the location of the single-bit0shortest codeword — while the four(±4, ±4)lattice corners take the four 13-bit codewords at indices 0 / 8 / 72 / 80). Public API per book:HCODN_NUM_ENTRIES= 81,HCODN_MAX_LEN(codebook-specific),hcodN_encode(idx) -> (length, codeword)(right-aligned inu16),hcodN_decodereads MSB-first from aoxideav_core::bits::BitReaderand returns the codeword index, andhcodN_writeis a convenience wrapper over the encode + writer-emit pair. Every book is a complete prefix code overHCODN_MAX_LENbits, exhaustively verified at unit-test time. Round 250 added Codebook 8 (Table 4.A.9, the second unsigned pair book sharing Codebook 7’sunsigned = 1,dim = 2,LAV = 7→ 64-entry universe; 10-bit max; the zero-tuple at index 0 carries a 5-bit0b01110and the shortest 3-bit0codeword migrates to the interior tuple(1, 1)at index 9). Codebooks 9..=11 (Tables 4.A.10 … 4.A.12) reuse the same module shape and are owed in subsequent rounds; thespectral_data()driver that dispatches per-band onto the chosen codebook arrives once all eleven are in place. -
The [
dequant] module — ISO/IEC 14496-3 §4.6.1.3 inverse quantization (Sign(x_quant) · |x_quant|^(4/3)) and §4.6.2.3.3 scalefactor application (gain = 2^(0.25 · (sf − SF_OFFSET)),SF_OFFSET = 100), new in round 284 — the first numeric reconstruction stage after the wire walk. [dequant::rescale_spectrum] applies both band-wise over the §4.5.2.3.4sect_sfb_offsetranges in the §4.5.2.3.5 interleaved transmission order. -
The [
decoded_spectrum] module — the §4.6.3.3quant_to_spec()de-interleaver (transmission order → window-majorspec[w][k]) and [decoded_spectrum::decode_channel_spectrum], the per-channel pipeline stage (pulse fix-up → scalefactor accumulation → inverse quantization + rescaling → de-interleave → TNS), new in round 284. Ends one step short of the §4.6.11 filterbank. -
The [
extension_payload] module — ISO/IEC 14496-3 §4.4.2.7 / Table 4.51 extension_payload() parser and encoder primitive (new in round 187). Implements the three non-SBRextension_typebranches whose body layouts are fully specified by fixed-width fields:EXT_FILL(0b0000) — the Table 4.51 default branch surfacing the8 * (cnt - 1) + 4other_bitsas a packed byte buffer;EXT_FILL_DATA(0b0001) — the normative-pattern filler withfill_nibble == 0b0000andfill_byte == 0b1010_0101; andEXT_DYNAMIC_RANGE(0b1011) — the Table 4.52dynamic_range_info()block (optionalpce_instance_tag, optional Table 4.53excluded_channels()exclude-mask list, optional per-band partitioning, optionalprog_ref_level, and per-band(dyn_rng_sgn, dyn_rng_ctl)records). The two SBR-data values from ISO/IEC 13818-7 Table 40 (EXT_SBR_DATA0b1101andEXT_SBR_DATA_CRC0b1110) surface asError::UnsupportedExtensionSbr— their bodies aresbr_extension_data()which needs the QMF / patching back-end this crate does not yet provide. The §4.5.2.13 DRC companding-curve application is not performed; the raw(dyn_rng_sgn, dyn_rng_ctl)records are surfaced verbatim for a later round.
The decode path is fully wired: register installs an AAC
Decoder (id "aac") via the
codec_decoder module, adapting the decode::StreamDecoder into
the framework’s packet-in / frame-out trait. The encode path still
has no rate-control back-end — the bit-exact wire writers exist but
no Encoder is registered.
§Provenance
Every numeric
constant, bit layout, and clause reference in this crate is sourced
from the staged ISO/IEC 13818-7 and ISO/IEC 14496-3 PDFs under
docs/audio/aac/. The fixture descriptions in
docs/audio/aac/aac-fixtures-and-traces.md were consulted as a
cross-reference against the spec wording.
§Status (Phase 1 + Phase 2 begin)
- ADTS fixed header parsing: complete (sync + 7-byte body).
- ADTS CRC validation: deferred; the parser surfaces the
protection_absentflag but does not validate the trailing 16-bit CRC when present. raw_data_block()walker: iteratesid_syn_eleand stops atEND; FIL / DSE / PCE bodies are fully consumed. SCE / CPE / CCE / LFE bodies now compose through the new [ics_body] walker (Table 4.50):global_gain→ [ics_info] → [section_data] → [scale_factor_data] → optional [pulse_data] / [tns_data] / [gain_control_data]. The trailing channel-stream tool, Table 4.56spectral_data(), is covered by the [spectral_data] walker:ics_bodysurfaces the start bit-offset and [spectral_data::SpectralData::parse] consumes the spectrum from that position, completing the Table 4.50 body. Driving that pair from theraw_data_block()walker (plus the CPEcommon_window/ms_mask_presentheader) is the remaining wiring; thetests/docs_adts_corpus.rsdriver demonstrates the full composition over the staged ADTS fixture corpus.- Numeric reconstruction (round 284): a parsed channel body now
decodes to a window-major real-valued spectrum via
[
decoded_spectrum::decode_channel_spectrum] — §4.6.3.3 pulse fix-up, §4.6.2.3.2 scalefactor accumulation, §4.6.1.3 inverse quantization, §4.6.2.3.3 rescaling, §4.6.3.3quant_to_spec(), §4.6.9 TNS. The §4.6.11 filterbank (round 289) turns that spectrum into PCM-domain samples. M/S (§4.6.8.1) stereo reconstruction is [ms_stereo::apply_ms_stereo] (round 293), a CPE-level de-matrix over the channel pair before TNS. Intensity stereo (§4.6.8.2) reconstruction is [intensity_stereo::apply_intensity_stereo] (round 300), the deterministic left→right derivationr = is_intensity·invert_intensity·0.5^(0.25·is_pos)·lthat runs after M/S and before TNS. PNS (§4.6.13) synthesis is [pns::apply_pns] / [pns::apply_pns_pair] (round 307), the noise-band fillscale = 2^(0.25·noise_nrg)/sqrt(Σ spec²)whose per-band L2 norm is the spec-determined2^(0.25·noise_nrg)(only the per-coefficient phase is RNG-defined, so the band energy — not the exact samples — is byte-exact). The §4.6 element-level decode driver [element_decode::ElementDecoder] (round 311) chains the whole stack per channel element:decode_scefor SCE / LFE anddecode_cpefor a CPE run pulse → dequant →quant_to_spec()→ M/S → intensity → PNS → TNS → §4.6.11 filterbank to PCM, carrying the per-channel overlap-add tail across frames. The stream-leveldecode::StreamDecoderwalks the §4.4.2.1raw_data_block()above that driver and renders to element-order interleaved 16-bit PCM via the §4.6.11 [pcm] output stage (the §1.3NINT()round-half-away-from-zero + saturation). The decoded PCM is validated against the stagedexpected.wavcorpus: the two PNS-free ADTS fixtures are 99.9 % byte-exact (max error 1 LSB — the residual is thef64direct-sum vs afloat32fast-transform IMDCT difference), and the PNS-bearing fixtures match in the PCM RMS domain below 0.1 % error-to-signal (full byte-exactness is precluded only by the §4.6.13.3 spec-undefined noise phase).
Modules§
- adts
- ADTS — Audio Data Transport Stream — fixed-header parser.
- adts_
crc - ADTS
error_check()and SBRbs_sbr_crc_bitsCRC verification. - asc
AudioSpecificConfigparser.- asc_
writer AudioSpecificConfig()writer — ISO/IEC 14496-3 Table 1.15 written forward for the configurations this crate’s encoders produce.- codec_
decoder oxideav_core::Decoderwiring for AAC-LC carried in ADTS.- codec_
encoder oxideav_core::Encoderwiring for the AAC-LC encoder.- decode
- Stream-level ADTS decode driver — raw_data_block walk to interleaved 16-bit PCM.
- encoder
- End-to-end AAC-LC encoder — ISO/IEC 14496-3 §4.5/§4.6 written forward.
- he_
aac_ encoder - HE-AAC v1 encoder — AAC-LC core at half rate + the §4.6.18 SBR tool, Annex 4.B.18.1 (Figure 4.B.15) written forward.
- latm
- LATM / LOAS transport framing — ISO/IEC 14496-3 §1.7.
- latm_
writer - LOAS / LATM writer — ISO/IEC 14496-3 §1.7 written forward for the streams this crate’s encoders produce.
- pce
program_config_element()parser.- sbr_
encoder - SBR encoder — the parameter-estimation half of the HE-AAC v1 encoder, ISO/IEC 14496-3 Annex 4.B.18 (informative encoder description) written forward against the normative §4.6.18 decoder this crate already carries.
- scalable
- Scalable AAC — ISO/IEC 14496-3 §4.4.2.2 (Tables 4.13–4.18) syntax and the §4.5.2.2 / §4.6.14.2 AAC-only layer-combination decode for the AAC scalable (AOT 6) and ER AAC scalable (AOT 20) object types.
Enums§
- Error
- Errors returned by
oxideav-aacPhase 1 surface.
Functions§
- register
- Codec-registry entry point. Installs the AAC
Decoder(id"aac") — the ADTS-framed AAC-LC decode chain wired throughcodec_decoder::register_codecs, claiming the MP4 object-type / WAVEFORMATEX / FourCC / Matroska tags an AAC elementary stream is routed under. No encoder is wired yet (the crate has the bit-exact wire writers but no rate-control encoder back-end).
Type Aliases§
- Result
- Result alias used throughout the crate.