From e93aa9c0fc669d0b09a1159e8ef1e2b9dfcc7320 Mon Sep 17 00:00:00 2001 From: Joerg Mueller Date: Fri, 22 Nov 2019 10:34:01 +0100 Subject: Fix T71621: VSE crashes when playing last frame of audio Porting bug fix from audaspace upstream. --- extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp | 13 ++++++++++--- extern/audaspace/plugins/ffmpeg/FFMPEGReader.h | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'extern/audaspace') diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp index 2f5b5bdd199..b46f65eddbf 100644 --- a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp +++ b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp @@ -292,8 +292,8 @@ int FFMPEGReader::read_packet(void* opaque, uint8_t* buf, int buf_size) { FFMPEGReader* reader = reinterpret_cast(opaque); - int64_t remaining_buffer_size = reader->m_membuffer->getSize() - reader->m_membufferpos; - int64_t size = std::min(static_cast(buf_size), remaining_buffer_size); + int size = std::min(buf_size, reader->m_membuffer->getSize() - reader->m_membufferpos); + if(size < 0) return -1; @@ -319,7 +319,14 @@ int64_t FFMPEGReader::seek_packet(void* opaque, int64_t offset, int whence) return reader->m_membuffer->getSize(); } - return (reader->m_membufferpos += offset); + int64_t position = reader->m_membufferpos + offset; + + if(position > reader->m_membuffer->getSize()) + position = reader->m_membuffer->getSize(); + + reader->m_membufferpos = int(position); + + return position; } bool FFMPEGReader::isSeekable() const diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.h b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.h index a69ac7709c8..f62436ac83b 100644 --- a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.h +++ b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.h @@ -112,7 +112,7 @@ private: /** * Reading position of the buffer. */ - int64_t m_membufferpos; + int m_membufferpos; /** * Whether the audio data has to be interleaved after reading. -- cgit v1.2.3