From d1cf43f9a4d681cd190e4daee3f34e1ba0b4c2b5 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 24 Mar 2019 10:06:55 +0400 Subject: [PATCH] Fix streaming receivedTill reporting. It was incorrect in case audio and video had different durations. --- .../media/streaming/media_streaming_player.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/media/streaming/media_streaming_player.cpp b/Telegram/SourceFiles/media/streaming/media_streaming_player.cpp index d2fef9b12..9a52a7efb 100644 --- a/Telegram/SourceFiles/media/streaming/media_streaming_player.cpp +++ b/Telegram/SourceFiles/media/streaming/media_streaming_player.cpp @@ -805,10 +805,15 @@ Media::Player::TrackState Player::prepareLegacyState() const { } crl::time Player::getCurrentReceivedTill(crl::time duration) const { + const auto forTrack = [&](const TrackState &state) { + return (state.duration > 0 && state.receivedTill == state.duration) + ? std::max(state.receivedTill, duration) + : state.receivedTill; + }; const auto previous = std::max(_previousReceivedTill, crl::time(0)); const auto result = std::min( - std::max(_information.audio.state.receivedTill, previous), - std::max(_information.video.state.receivedTill, previous)); + std::max(forTrack(_information.audio.state), previous), + std::max(forTrack(_information.video.state), previous)); return (result >= 0 && duration > 1 && _options.loop) ? (result % duration) : result;