From c2afef2bde664c88768a76e97ad5a817bd608c3d Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 25 Oct 2024 21:03:03 +0400 Subject: [PATCH] Improve changing of video playback quality. --- .../media/view/media_view_overlay_widget.cpp | 17 +++++++++++++++-- .../media/view/media_view_overlay_widget.h | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index 435e4d8d1..bb16d1e3e 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -2285,6 +2285,8 @@ void OverlayWidget::assignMediaPointer(DocumentData *document) { _photo = nullptr; _photoMedia = nullptr; if (_document != document) { + _streamedQualityChangeFrame = QImage(); + _streamedQualityChangeFinished = false; if ((_document = document)) { _chosenQuality = chooseQuality(); _documentMedia = _document->createMediaView(); @@ -2301,6 +2303,8 @@ void OverlayWidget::assignMediaPointer(DocumentData *document) { void OverlayWidget::assignMediaPointer(not_null photo) { _savePhotoVideoWhenLoaded = SavePhotoVideo::None; _chosenQuality = nullptr; + _streamedQualityChangeFrame = QImage(); + _streamedQualityChangeFinished = false; _document = nullptr; _documentMedia = nullptr; _documentLoadingTo = QString(); @@ -4279,7 +4283,9 @@ void OverlayWidget::playbackPauseResume() { redisplayContent(); } } else if (_streamed->instance.player().finished() - || !_streamed->instance.player().active()) { + || !_streamed->instance.player().active() + || _streamedQualityChangeFinished) { + _streamedQualityChangeFinished = false; _streamingStartPaused = false; restartAtSeekPosition(0); } else if (_streamed->instance.player().paused()) { @@ -4348,6 +4354,7 @@ void OverlayWidget::restartAtSeekPosition(crl::time position) { _streamed->instance.pause(); } else { playbackPauseMusic(); + _streamedQualityChangeFinished = false; } _streamed->pausedBySeek = false; @@ -4445,8 +4452,14 @@ void OverlayWidget::playbackControlsQualityChanged(int quality) { if (_streamed && _streamed->instance.ready()) { _streamedQualityChangeFrame = currentVideoFrameImage(); } + if (_streamed + && (!_streamed->instance.player().active() + || _streamed->instance.player().finished())) { + _streamedQualityChangeFinished = true; + } + _streamingStartPaused = _streamedQualityChangeFinished + || (_streamed && _streamed->instance.player().paused()); clearStreaming(); - _streamingStartPaused = false; const auto time = _streamedPosition; const auto startStreaming = StartStreaming(false, time); if (!canInitStreaming() || !initStreaming(startStreaming)) { diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.h b/Telegram/SourceFiles/media/view/media_view_overlay_widget.h index 8396ddd4d..c14124ffc 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.h +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.h @@ -634,6 +634,7 @@ private: QImage _streamedQualityChangeFrame; crl::time _streamedPosition = 0; int _streamedCreated = 0; + bool _streamedQualityChangeFinished = false; bool _showAsPip = false; std::unique_ptr _stories;