Fix T71621: VSE crashes when playing last frame of audio
Porting bug fix from audaspace upstream.
This commit is contained in:
13
extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
vendored
13
extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
vendored
@@ -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
|
||||
|
@@ -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.
|
||||
|
Reference in New Issue
Block a user