Fix T71621: VSE crashes when playing last frame of audio

Porting bug fix from audaspace upstream.
This commit is contained in:
Joerg Mueller 2019-11-22 10:34:01 +01:00
parent 3d015c71cc
commit e93aa9c0fc
Notes: blender-bot 2023-02-14 10:21:10 +01:00
Referenced by issue #71621, Blender Crashes Frequently with Timeline Scrub
2 changed files with 11 additions and 4 deletions

View File

@ -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

View File

@ -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.