Fix T71621: VSE crashes when playing last frame of audio
Porting bug fix from audaspace upstream.
This commit is contained in:
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
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue