Fix streamed media downloading.

Fixes #8500.
This commit is contained in:
John Preston 2022-12-22 10:26:07 +04:00
parent 1d7ad701b4
commit b3858d5d97
3 changed files with 13 additions and 10 deletions

View file

@ -944,20 +944,16 @@ void Reader::loadForDownloader(
_loader->attachDownloader(downloader); _loader->attachDownloader(downloader);
} }
_downloaderOffsetRequests.emplace(uint32(offset)); _downloaderOffsetRequests.emplace(uint32(offset));
if (_streamingActive) { // Will be processed in continueDownloaderFromMainThread()
wakeFromSleep(); // from StreamedFileDownloader::requestParts().
} else {
processDownloaderRequests();
}
} }
void Reader::doneForDownloader(int64 offset) { void Reader::doneForDownloader(int64 offset) {
Expects(offset >= 0 && offset <= std::numeric_limits<uint32>::max()); Expects(offset >= 0 && offset <= std::numeric_limits<uint32>::max());
_downloaderOffsetAcks.emplace(offset); _downloaderOffsetAcks.emplace(offset);
if (!_streamingActive) { // Will be processed in continueDownloaderFromMainThread()
processDownloaderRequests(); // from StreamedFileDownloader::requestParts().
}
} }
void Reader::cancelForDownloader( void Reader::cancelForDownloader(
@ -1104,10 +1100,15 @@ bool Reader::downloaderWaitForCachedSlice(uint32 offset) {
} }
void Reader::checkCacheResultsForDownloader() { void Reader::checkCacheResultsForDownloader() {
continueDownloaderFromMainThread();
}
void Reader::continueDownloaderFromMainThread() {
if (_streamingActive) { if (_streamingActive) {
return; wakeFromSleep();
} else {
processDownloaderRequests();
} }
processDownloaderRequests();
} }
void Reader::setLoaderPriority(int priority) { void Reader::setLoaderPriority(int priority) {

View file

@ -77,6 +77,7 @@ public:
void doneForDownloader(int64 offset); void doneForDownloader(int64 offset);
void cancelForDownloader( void cancelForDownloader(
not_null<Storage::StreamedFileDownloader*> downloader); not_null<Storage::StreamedFileDownloader*> downloader);
void continueDownloaderFromMainThread();
~Reader(); ~Reader();

View file

@ -88,6 +88,7 @@ void StreamedFileDownloader::requestParts() {
&& _partsRequested < kRequestPartsCount) { && _partsRequested < kRequestPartsCount) {
requestPart(); requestPart();
} }
_reader->continueDownloaderFromMainThread();
} }
void StreamedFileDownloader::requestPart() { void StreamedFileDownloader::requestPart() {