mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +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() {
|
FFMpegLoader::ReadResult FFMpegLoader::readMore() {
|
||||||
|
if (_readTillEnd) {
|
||||||
|
return ReadError::EndOfFile;
|
||||||
|
}
|
||||||
const auto readResult = readFromReadyContext(_codecContext);
|
const auto readResult = readFromReadyContext(_codecContext);
|
||||||
if (readResult != ReadError::Wait) {
|
if (readResult != ReadError::Wait) {
|
||||||
|
if (readResult == ReadError::EndOfFile) {
|
||||||
|
_readTillEnd = true;
|
||||||
|
}
|
||||||
return readResult;
|
return readResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -205,6 +205,7 @@ private:
|
||||||
|
|
||||||
AVCodecContext *_codecContext = nullptr;
|
AVCodecContext *_codecContext = nullptr;
|
||||||
AVPacket _packet;
|
AVPacket _packet;
|
||||||
|
bool _readTillEnd = false;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -512,7 +512,8 @@ Mixer::Track::WithSpeed Loaders::rebufferOnSpeedChange(
|
||||||
} else if (result == AudioPlayerLoader::ReadError::Retry) {
|
} else if (result == AudioPlayerLoader::ReadError::Retry) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Assert(result == AudioPlayerLoader::ReadError::RetryNotQueued);
|
Assert(result == AudioPlayerLoader::ReadError::RetryNotQueued
|
||||||
|
|| result == AudioPlayerLoader::ReadError::EndOfFile);
|
||||||
finished = true;
|
finished = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,9 @@ auto ChildFFMpegLoader::readFromInitialFrame() -> ReadResult {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto ChildFFMpegLoader::readMore() -> ReadResult {
|
auto ChildFFMpegLoader::readMore() -> ReadResult {
|
||||||
|
if (_readTillEnd) {
|
||||||
|
return ReadError::EndOfFile;
|
||||||
|
}
|
||||||
const auto initialFrameResult = readFromInitialFrame();
|
const auto initialFrameResult = readFromInitialFrame();
|
||||||
if (initialFrameResult != ReadError::Wait) {
|
if (initialFrameResult != ReadError::Wait) {
|
||||||
return initialFrameResult;
|
return initialFrameResult;
|
||||||
|
@ -53,7 +56,11 @@ auto ChildFFMpegLoader::readMore() -> ReadResult {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_queue.empty()) {
|
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());
|
auto packet = std::move(_queue.front());
|
||||||
|
|
|
@ -55,6 +55,7 @@ private:
|
||||||
std::deque<FFmpeg::Packet> _queue;
|
std::deque<FFmpeg::Packet> _queue;
|
||||||
bool _forceToBuffer = false;
|
bool _forceToBuffer = false;
|
||||||
bool _eofReached = false;
|
bool _eofReached = false;
|
||||||
|
bool _readTillEnd = false;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue