* craft-audio: LOAS / LATM framing in the aac module
latm_config and latm_split give a LOAS frame's AudioSpecificConfig and the
payload of its sub-frame: one program, one layer, AAC-LC, frameLengthType 0,
audioMuxVersion 0 or 1. LATM is an AAC transport, so it belongs with the AAC
decoder (feature aac-decode).
Moved from FilmCraft's filmcraft-codecs (crates/codecs/src/audio.rs at
storytold/filmcraft@db60ee4), with its payload-length test; new tests for a
round trip, the refused cases and mutated frames.
* craft-audio: LATM takes its channel count from the configuration's layout
The channel configuration is an index into ISO/IEC 14496-3 Table 1.19: 7 and
12 are eight channels and 11 is seven, and 8-10 and 13-15 are reserved.
latm_config reported the index as the count, and a reserved configuration as
that many channels; it now sums the layout and refuses a reserved one.
Ported from storytold/filmcraft#4297.
* craft-audio: LATM reads a program config element in its StreamMuxConfig
With channel configuration 0 the layout is in a program config element.
latm_config ignored it and reported two channels, so 5.1 in LATM played as
silent stereo. It now reads the element (lining the bits up first, since the
AudioSpecificConfig starts at any bit of the frame and the element aligns to
its bytes), puts it in the AudioSpecificConfig the decoder gets, and refuses
the stream when the element does not parse. With audioMuxVersion 1, what
ascLen counts past the configuration is skipped as fill.
Ported from storytold/filmcraft#4280 (the LATM part).
* craft-audio: README names the LATM functions
* craft-audio: rustfmt the LATM module
---------
Co-authored-by: mpratsaki <110930793+mpratsaki@users.noreply.github.com>