mirror of
https://github.com/Rockbox/rockbox.git
synced 2026-10-10 16:13:05 -04:00
At a CELT to hybrid mode switch, opus_decode_frame() runs CELT's pitch PLC nested in the new frame, and celt_decode_lost() held a copy of up to 2 KB of excitation for celt_fir(). On stackOverflow.opus that overran the 9 KB codec stack on native targets such as the e200v2. Filtering in place from the last sample down needs no copy; output is bit-identical. Worst case over all 242 mode switches of stackOverflow.opus, measured under qemu: 9140 -> 7676 bytes below opus_decode(), against 8912 left for it on the e200v2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Change-Id: Iaa9f57182ad86ab76c81c55bea72aa517cc18230 |
||
|---|---|---|
| .. | ||
| celt | ||
| ogg | ||
| silk | ||
| analysis.c | ||
| analysis.h | ||
| config.h | ||
| libopus.make | ||
| mapping_matrix.c | ||
| mapping_matrix.h | ||
| mlp.c | ||
| mlp.h | ||
| mlp_data.c | ||
| opus.c | ||
| opus.h | ||
| opus_compare.c | ||
| opus_custom.h | ||
| opus_decoder.c | ||
| opus_defines.h | ||
| opus_demo.c | ||
| opus_encoder.c | ||
| opus_header.c | ||
| opus_header.h | ||
| opus_multistream.c | ||
| opus_multistream.h | ||
| opus_multistream_decoder.c | ||
| opus_multistream_encoder.c | ||
| opus_private.h | ||
| opus_projection.h | ||
| opus_projection_decoder.c | ||
| opus_projection_encoder.c | ||
| opus_types.h | ||
| README.rockbox | ||
| repacketizer.c | ||
| repacketizer_demo.c | ||
| SOURCES | ||
| tansig_table.h | ||
Libraries: Opus (snapshot) / Opus-tools (snapshot) / libogg 1.3 Imported: January 1st, 2019 Steps taken to adapt original opus/opus-tool/ogg source files to rockbox (useful when for example syncing a new snapshot) Opus: * copied .c/.h files from opus/src lib/rbcodec/codecs/libopus * copied .h files from opus/include to lib/rbcodec/codecs/libopus * copied .c/.h files from opus/celt to lib/rbcodec/codecs/libopus/celt * copied .c/.h files from opus/silk to lib/rbcodec/codecs/libopus/silk Celt: * changed #if FIXED_POINT to #ifdef FIXED_POINT in bands.c * changed #elif OPUS_ARM_INLINE_EDSP to #elif defined (OPUS_ARM_INLINE_EDSP) * renamed OPUS_ARM_INLINE_ASM to OPUS_ARM_ASM_ARMV4_ONLY and OPUS_ARM_INLINE_EDSP to OPUS_ARM_ASM_ARMV5E_AND_LATER throughout celt and silk, since config.h defines exactly one of them per core * add #define ABS(a)(((a) < 0) ? - (a) :(a)) to mathops.h * celt_decode_lost() in celt_decoder.c filters the PLC excitation in place (celt_fir_inplace) instead of through a copy, to fit the codec stack Silk: * added fixed-phase interpolation paths for the 8, 12 and 16 kHz to 48 kHz steps in resampler_private_IIR_FIR.c (disable with OPUS_NO_SILK_FIXED_PHASE) * resampler_private_IIR_FIR.c calls ARM kernels for those three steps: silk/arm/resampler_armv4_asm.S and resampler_armv5e_asm.S, generated by gen_resampler_armv4.py and gen_resampler_armv5e.py beside them (disable with OPUS_ARM_NO_SILK_ASM); on ARMv5E and later the FIR buffer is word aligned Opus-tools: * copied src/opus_header.h and src/opus_header.c to lib/rbcodec/codecs/libopus * changed #include <ogg/ogg.h> to #include "ogg/ogg.h" in opus_header.h Ogg: * copied libogg/src/framing.c to lib/rbcodec/codecs/libopus/ogg * copied libogg/include/ogg.h to lib/rbcodec/codecs/libopus/ogg * copied libogg/include/crctable.h to lib/rbcodec/codecs/libopus/ogg * changed #include "ogg/ogg.h" to #include "ogg.h" in framing.c * -- added os_config.h to lib/rbcodec/codecs/libopus/ogg * added our own os_types.h * changed #include <ogg/os_types.h> to #include "os_types.h" in ogg.h * changed #include <ogg/os_types.h> to #include "os_types.h" in crctable.h