MDCT-Stereo PLC - channel is attenuated in FD concealment
In MDCT-Stereo PLC, attenuation of one channel can happen in the fixed-point decoder which is not in line with the float decoder. In below screenshot, the attenuation can be seen in the fx decoder output starting at 5.72s.
Float decoder output:
Fx decoder output:
Reproduce with
./IVAS_dec_fx stereo 48 stereo-mixed-music--dm1ba1s09--48000.fer.192 stereo-mixed-music--dm1ba1s09--48000.fer.dec.fx.wav
./IVAS_dec_flt_ref stereo 48 stereo-mixed-music--dm1ba1s09--48000.fer.192 stereo-mixed-music--dm1ba1s09--48000.fer.dec.flt.wav
Bitstream will be shared separately as usual.
The first reason for a difference between fx and flt decoder is that the PLC Mode decision is different in both decoders. I think that is fine for this case and just due to expected differences between fx and flt code. The fx decoder chooses MDCT tonal (FD) concealment for both channels, while the float decoder chooses ACELP concealment. I forced the same decision by applying the attached diff to the float reference: patch_for_float.diff. Apply it with git apply patch_for_float.diff
. After forcing the same concealment technology in the float decoder, this is how the output looks like:
So even with the same concealment mode, there is still a difference between fx and flt decoder here. I debugged a bit and found that the input x_tmp
buffer in dec_tcx.c:1751
(line number for float code) is different for channel 2 for this frame. Maybe that is a lead, but I did not invest more time here for now as the issue is not super audible and therefore lower prio for now.