diff options
author | Joerg Mueller <nexyon@gmail.com> | 2019-11-22 12:34:01 +0300 |
---|---|---|
committer | Joerg Mueller <nexyon@gmail.com> | 2019-11-22 12:34:01 +0300 |
commit | e93aa9c0fc669d0b09a1159e8ef1e2b9dfcc7320 (patch) | |
tree | beb88f8c9c43120ad3a98586f636a3d23dc1765b | |
parent | 3d015c71ccbc7501a56e05727f744a60c13bde12 (diff) |
Fix T71621: VSE crashes when playing last frame of audio
Porting bug fix from audaspace upstream.
-rw-r--r-- | extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp | 13 | ||||
-rw-r--r-- | extern/audaspace/plugins/ffmpeg/FFMPEGReader.h | 2 |
2 files changed, 11 insertions, 4 deletions
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<FFMPEGReader*>(opaque); - int64_t remaining_buffer_size = reader->m_membuffer->getSize() - reader->m_membufferpos; - int64_t size = std::min(static_cast<int64_t>(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. |