Improve changing of video playback quality.

This commit is contained in:
John Preston 2024-10-25 21:03:03 +04:00
parent 0991e7d8a4
commit c2afef2bde
2 changed files with 16 additions and 2 deletions

View file

@ -2285,6 +2285,8 @@ void OverlayWidget::assignMediaPointer(DocumentData *document) {
_photo = nullptr; _photo = nullptr;
_photoMedia = nullptr; _photoMedia = nullptr;
if (_document != document) { if (_document != document) {
_streamedQualityChangeFrame = QImage();
_streamedQualityChangeFinished = false;
if ((_document = document)) { if ((_document = document)) {
_chosenQuality = chooseQuality(); _chosenQuality = chooseQuality();
_documentMedia = _document->createMediaView(); _documentMedia = _document->createMediaView();
@ -2301,6 +2303,8 @@ void OverlayWidget::assignMediaPointer(DocumentData *document) {
void OverlayWidget::assignMediaPointer(not_null<PhotoData*> photo) { void OverlayWidget::assignMediaPointer(not_null<PhotoData*> photo) {
_savePhotoVideoWhenLoaded = SavePhotoVideo::None; _savePhotoVideoWhenLoaded = SavePhotoVideo::None;
_chosenQuality = nullptr; _chosenQuality = nullptr;
_streamedQualityChangeFrame = QImage();
_streamedQualityChangeFinished = false;
_document = nullptr; _document = nullptr;
_documentMedia = nullptr; _documentMedia = nullptr;
_documentLoadingTo = QString(); _documentLoadingTo = QString();
@ -4279,7 +4283,9 @@ void OverlayWidget::playbackPauseResume() {
redisplayContent(); redisplayContent();
} }
} else if (_streamed->instance.player().finished() } else if (_streamed->instance.player().finished()
|| !_streamed->instance.player().active()) { || !_streamed->instance.player().active()
|| _streamedQualityChangeFinished) {
_streamedQualityChangeFinished = false;
_streamingStartPaused = false; _streamingStartPaused = false;
restartAtSeekPosition(0); restartAtSeekPosition(0);
} else if (_streamed->instance.player().paused()) { } else if (_streamed->instance.player().paused()) {
@ -4348,6 +4354,7 @@ void OverlayWidget::restartAtSeekPosition(crl::time position) {
_streamed->instance.pause(); _streamed->instance.pause();
} else { } else {
playbackPauseMusic(); playbackPauseMusic();
_streamedQualityChangeFinished = false;
} }
_streamed->pausedBySeek = false; _streamed->pausedBySeek = false;
@ -4445,8 +4452,14 @@ void OverlayWidget::playbackControlsQualityChanged(int quality) {
if (_streamed && _streamed->instance.ready()) { if (_streamed && _streamed->instance.ready()) {
_streamedQualityChangeFrame = currentVideoFrameImage(); _streamedQualityChangeFrame = currentVideoFrameImage();
} }
if (_streamed
&& (!_streamed->instance.player().active()
|| _streamed->instance.player().finished())) {
_streamedQualityChangeFinished = true;
}
_streamingStartPaused = _streamedQualityChangeFinished
|| (_streamed && _streamed->instance.player().paused());
clearStreaming(); clearStreaming();
_streamingStartPaused = false;
const auto time = _streamedPosition; const auto time = _streamedPosition;
const auto startStreaming = StartStreaming(false, time); const auto startStreaming = StartStreaming(false, time);
if (!canInitStreaming() || !initStreaming(startStreaming)) { if (!canInitStreaming() || !initStreaming(startStreaming)) {

View file

@ -634,6 +634,7 @@ private:
QImage _streamedQualityChangeFrame; QImage _streamedQualityChangeFrame;
crl::time _streamedPosition = 0; crl::time _streamedPosition = 0;
int _streamedCreated = 0; int _streamedCreated = 0;
bool _streamedQualityChangeFinished = false;
bool _showAsPip = false; bool _showAsPip = false;
std::unique_ptr<Stories::View> _stories; std::unique_ptr<Stories::View> _stories;