diff options
author | Igor V. Kovalenko <igor.v.kovalenko@gmail.com> | 2022-05-05 21:21:58 +0300 |
---|---|---|
committer | PulseAudio Marge Bot <pulseaudio-maintainers@lists.freedesktop.org> | 2022-05-16 18:01:39 +0000 |
commit | a4e690bda598cdd1870f0ec7e69fe6341ac5d218 (patch) | |
tree | 11f087ab5fad5c581ee8c10fcb5bffc80e5b5edb | |
parent | a4402bb4f4056475e2b7d32ced1f1a3c49651eb2 (diff) |
bluetooth: Make sure there is at least one SBC frame to encode
If SBC frame plus RTP header exceeds MTU size, let block size be at least one
frame to make sure bluetooth code can make progress reading and writing data.
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/695>
-rw-r--r-- | src/modules/bluetooth/a2dp-codec-sbc.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/modules/bluetooth/a2dp-codec-sbc.c b/src/modules/bluetooth/a2dp-codec-sbc.c index 61e8ac224..54e52ae4c 100644 --- a/src/modules/bluetooth/a2dp-codec-sbc.c +++ b/src/modules/bluetooth/a2dp-codec-sbc.c @@ -731,6 +731,14 @@ static size_t get_block_size(void *codec_info, size_t link_mtu) { if (frame_count > 15) frame_count = 15; + /* Code dealing with read/write block size expects it to be + * non-zero to make progress, make it at least one frame. + */ + if (frame_count < 1) { + pa_log_warn("SBC packet size %lu is larger than link MTU %lu", sbc_info->frame_length + rtp_size, link_mtu); + frame_count = 1; + } + return frame_count * sbc_info->codesize; } |