From e9de840a51149e8f352f9141ba1c7995cf8ed943 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Smoczy=C5=84ski?= Date: Fri, 29 Jan 2021 22:04:00 +0100 Subject: [PATCH] [EGD-5290] Fix on audio on voice call MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Due to an error in the stream's block reservation, when the stream was full, SAI was trying to read data to an unitialized data span randomly disabling audio channel. Fix the problem by overwriting data after the peek position, always returning valid data span. Signed-off-by: Marcin SmoczyƄski --- module-audio/Audio/Stream.cpp | 9 +++++++++ module-audio/Audio/test/unittest_stream.cpp | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/module-audio/Audio/Stream.cpp b/module-audio/Audio/Stream.cpp index f57b9d890e62461dbe0ab44c54bd95e5fbbedf64..27164804ab3d2ce33165be51e35b835a05ca5ae1 100644 --- a/module-audio/Audio/Stream.cpp +++ b/module-audio/Audio/Stream.cpp @@ -137,6 +137,15 @@ bool Stream::reserve(Span &span) return true; } + // reset data to peek end + _blocksUsed = 0; + _dataEnd = _peekPosition; + + // reserve at peek end + _reserveCount = 1; + _writeReservationPosition = _peekPosition; + span = *++_writeReservationPosition; + broadcastEvent(Event::StreamOverflow); return false; } diff --git a/module-audio/Audio/test/unittest_stream.cpp b/module-audio/Audio/test/unittest_stream.cpp index 42f8eda6be3a94d35cb4db3f6bebdd046a73e947..d84485d55d5a79e059e48e6cb4eada48c55a915c 100644 --- a/module-audio/Audio/test/unittest_stream.cpp +++ b/module-audio/Audio/test/unittest_stream.cpp @@ -203,7 +203,7 @@ TEST(Stream, Reserve) EXPECT_FALSE(s.reserve(span)); s.commit(); - EXPECT_EQ(s.getUsedBlockCount(), s.getBlockCount()); + EXPECT_EQ(s.getUsedBlockCount(), 1); } int main(int argc, char **argv)