LDAC Encoder¶
Introduction¶
Lossless Digital Audio Coding technology (LDAC) is a proprietary audio codec made by Sony used to stream high-quality music to a Bluetooth device. This is a lossy codec that compresses audio with different efficiency. LDAC supports three fixed rates: 330, 660, 990 kb/s and an adaptive bitrate. Source code of LDAC encoder is available in Android Open Source Project.
Source Code¶
The original LDAC source code of the encoder was taken from AOSP. Version of the code taken: commit 300aa818a1a6ee79c9a2fab67be0fdbccefc865b, 20 February 2019.
Multi-instance and reentrance¶
Codec hasn’t tested on multi-instance run, for more information about support of
multi-instance run see codec source documentation. Codec supports reentrance
in case if the value of DSP_CTRL
register and accumulators registers (ACC0_LO
,
ACC0_HI
, ACC0_GLO
and ACC0_GHI
in case of guard mode is on), see [1] in References, will be saved and restored.
Codec-Specific Build Options¶
LTO_BUILD
option is disabled for this codec by default. To build the LDAC
encoder, you must use this specific option: FX_MAPPING=ON/OFF
This option turns ON/OFF remapping of original mathematical fixed-point functions to the optimized ones for ARCv2 DSP processor family. This option is enabled by default.
Example
To build application and library with original (not optimized) mathematical fixed-point functions, use the following command:
gmake all FX_MAPPING=off
Codec-Specific Run-Time Options¶
To run LDAC encoder in MetaWare Debugger (See [2] in References), use the following command:
mdb <mdb parameters> -tcf=<default TCF from /rules/common_hw_config.mk> LDAC_ENCODER_app.elf -i <input_file> -o <output_file> -F <output_frame_size>
The following table lists parameters that can be passed to the LDAC encoder application:
Option | Description | Available values |
---|---|---|
-i |
Specifies the input WAV file | Any name of .wav file without spaces |
-o |
Specifies the output file | Any name of output file without spaces |
-F |
Set output frame size per one channel (in bytes) | 165, 110, 82, 66, 55, 47, 41, 36, 33, 30, 27, 25, 23 |
Example
The following command runs the encoder in ARC nSIM simulator and encodes the wav file with a 110-byte output frame size:
mdb -nsim -run -cl -tcf=em9d_voice_audio LDAC_ENCODER_app.elf -i example_96k_2byte_2ch.wav -o example_96k_2byte_2ch_FS110.bin -F 110
Output file example_96k_2byte_2ch_FS110.bin must be bit-exact with
the similarly named reference file in the ldac_encoder/testvectors/ref
folder.