Skip to content

Flushing decoder not implemented for split rendering

Prerequisites: #1119 (closed)

The function IVAS_DEC_Flush is applicable only when the decoder outputs to an audio-only output config. There is no corresponding functionality for flushing to an ISAR bitstream/metadata struct (ISAR_SPLIT_REND_BITS_DATA).

IVAS_DEC_Flush is currently used with split rendering outputs, where special case logic accounting for multiple head poses causes too many channels of audio to be written to the output buffer.

To reproduce:

# Build with ASAN
./IVAS_cod -q -sba 1 128000 48 ./scripts/testv/stvFOA48c_cut_.004.wav ./FOA-dly5.192
./scripts/tools/Darwin/networkSimulator_g192 ./scripts/dly_error_profiles/dly_error_profile_5.dat ./FOA-dly5.192 ./FOA-dly5.netsimout ./FOA-dly5.netsimtrace 1
./IVAS_dec -q -fr 20 -T ./scripts/trajectories/const000.csv -Tracefile ./FOA-128000-BINAURAL_SPLIT_PCM-dly5.trace -om ./FOA-128000-BINAURAL_SPLIT_PCM-dly5.isarmd -voip BINAURAL_SPLIT_PCM 48 ./FOA-dly5.netsimout ./FOA-128000-BINAURAL_SPLIT_PCM-dly5.wav

Result:

=================================================================
==96224==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x620000000f80 at pc 0x000102db51b0 bp 0x00016d873a90 sp 0x00016d873a88
WRITE of size 2 at 0x620000000f80 thread T0
    #0 0x000102db51ac in ivas_syn_output ivas_tools.c:144
    #1 0x0001027caba8 in ivas_jbm_dec_render ivas_jbm_dec.c:1343
    #2 0x0001029d0d38 in IVAS_DEC_Flush lib_dec.c:4149
    #3 0x000102590094 in decodeVoIP decoder.c:3627
    #4 0x000102587090 in main decoder.c:760
    #5 0x000195716b94 in start+0x17b8 (dyld:arm64e+0xfffffffffff3ab94)

0x620000000f80 is located 0 bytes after 3840-byte region [0x620000000080,0x620000000f80)
allocated by thread T0 here:
    #0 0x000103ea538c in malloc+0x78 (libclang_rt.asan_osx_dynamic.dylib:arm64e+0x3d38c)
    #1 0x000102586f54 in main decoder.c:747
    #2 0x000195716b94 in start+0x17b8 (dyld:arm64e+0xfffffffffff3ab94)

SUMMARY: AddressSanitizer: heap-buffer-overflow ivas_tools.c:144 in ivas_syn_output