[Bf-blender-cvs] [e93aa9c0fc6] master: Fix T71621: VSE crashes when playing last frame of audio

Joerg Mueller noreply at git.blender.org
Fri Nov 22 10:40:16 CET 2019


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.



More information about the Bf-blender-cvs mailing list