bluetooth: produce silence on mSBC decoding error
authorIgor V. Kovalenko <igor.v.kovalenko@gmail.com>
Thu, 25 Feb 2021 21:00:47 +0000 (00:00 +0300)
committerPulseAudio Marge Bot <pulseaudio-maintainers@lists.freedesktop.org>
Mon, 5 Apr 2021 15:43:32 +0000 (15:43 +0000)
We are supposed to conceal packet loss. This is not trivial but we can at least
produce silence instead of breaking on mSBC decoding error.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/507>

src/modules/bluetooth/bt-codec-msbc.c

index c49a0f9..b101143 100644 (file)
@@ -287,9 +287,11 @@ static size_t decode_buffer(void *codec_info, const uint8_t *input_buffer, size_
 
     if (PA_UNLIKELY(decoded <= 0)) {
         pa_log_error("mSBC decoding error (%li)", (long) decoded);
-        *processed = 0;
-        return 0;
+        pa_silence_memory(output_buffer, sbc_info->codesize, &sbc_info->sample_spec);
+        decoded = sbc_info->frame_length;
+        written = sbc_info->codesize;
     }
+
     pa_assert_fp((size_t)decoded == sbc_info->frame_length);
     pa_assert_fp((size_t)written == sbc_info->codesize);