mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 14:17:12 +02:00
Fix possible crash in audio speed change.
This commit is contained in:
parent
a4d8b78bc5
commit
0c165d1fb8
5 changed files with 18 additions and 2 deletions
|
@ -816,8 +816,14 @@ bool FFMpegLoader::seekTo(crl::time positionMs) {
|
|||
}
|
||||
|
||||
FFMpegLoader::ReadResult FFMpegLoader::readMore() {
|
||||
if (_readTillEnd) {
|
||||
return ReadError::EndOfFile;
|
||||
}
|
||||
const auto readResult = readFromReadyContext(_codecContext);
|
||||
if (readResult != ReadError::Wait) {
|
||||
if (readResult == ReadError::EndOfFile) {
|
||||
_readTillEnd = true;
|
||||
}
|
||||
return readResult;
|
||||
}
|
||||
|
||||
|
|
|
@ -205,6 +205,7 @@ private:
|
|||
|
||||
AVCodecContext *_codecContext = nullptr;
|
||||
AVPacket _packet;
|
||||
bool _readTillEnd = false;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -512,7 +512,8 @@ Mixer::Track::WithSpeed Loaders::rebufferOnSpeedChange(
|
|||
} else if (result == AudioPlayerLoader::ReadError::Retry) {
|
||||
continue;
|
||||
}
|
||||
Assert(result == AudioPlayerLoader::ReadError::RetryNotQueued);
|
||||
Assert(result == AudioPlayerLoader::ReadError::RetryNotQueued
|
||||
|| result == AudioPlayerLoader::ReadError::EndOfFile);
|
||||
finished = true;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -41,6 +41,9 @@ auto ChildFFMpegLoader::readFromInitialFrame() -> ReadResult {
|
|||
}
|
||||
|
||||
auto ChildFFMpegLoader::readMore() -> ReadResult {
|
||||
if (_readTillEnd) {
|
||||
return ReadError::EndOfFile;
|
||||
}
|
||||
const auto initialFrameResult = readFromInitialFrame();
|
||||
if (initialFrameResult != ReadError::Wait) {
|
||||
return initialFrameResult;
|
||||
|
@ -53,7 +56,11 @@ auto ChildFFMpegLoader::readMore() -> ReadResult {
|
|||
}
|
||||
|
||||
if (_queue.empty()) {
|
||||
return _eofReached ? ReadError::EndOfFile : ReadError::Wait;
|
||||
if (!_eofReached) {
|
||||
return ReadError::Wait;
|
||||
}
|
||||
_readTillEnd = true;
|
||||
return ReadError::EndOfFile;
|
||||
}
|
||||
|
||||
auto packet = std::move(_queue.front());
|
||||
|
|
|
@ -55,6 +55,7 @@ private:
|
|||
std::deque<FFmpeg::Packet> _queue;
|
||||
bool _forceToBuffer = false;
|
||||
bool _eofReached = false;
|
||||
bool _readTillEnd = false;
|
||||
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue