Commit: e93aa9c0fc669d0b09a1159e8ef1e2b9dfcc7320
Author: Joerg Mueller
Date:   Fri Nov 22 10:34:01 2019 +0100
Branches: master
https://developer.blender.org/rBe93aa9c0fc669d0b09a1159e8ef1e2b9dfcc7320

Fix T71621: VSE crashes when playing last frame of audio

Porting bug fix from audaspace upstream.

===================================================================

M       extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
M       extern/audaspace/plugins/ffmpeg/FFMPEGReader.h

===================================================================

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.

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to