From 2b7fb7a9a65ead00db50f1dc093165c69de7bc10 Mon Sep 17 00:00:00 2001 From: John Preston <johnprestonmail@gmail.com> Date: Thu, 14 Mar 2019 14:45:08 +0400 Subject: [PATCH] Pause music only when video playback starts. --- .../media/view/media_view_overlay_widget.cpp | 40 +++++++++++-------- .../media/view/media_view_overlay_widget.h | 4 +- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index d336eed17..46442bf5d 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -811,9 +811,7 @@ void OverlayWidget::step_radial(crl::time ms, bool timer) { const auto streamVideo = ready && (_doc->isAnimation() || _doc->isVideoFile()); const auto tryOpenImage = ready && (_doc->size < App::kImageSizeLimit); if (ready && ((tryOpenImage && !_radial.animating()) || streamVideo)) { - if (_doc->isVideoFile() || _doc->isVideoMessage()) { - _autoplayVideoDocument = _doc; - } + _streamingStartPaused = false; if (!_doc->data().isEmpty() && streamVideo) { displayDocument(_doc, App::histItemById(_msgid)); } else { @@ -1686,9 +1684,7 @@ void OverlayWidget::showDocument(not_null<DocumentData*> document, HistoryItem * } if (!_animOpacities.isEmpty()) _animOpacities.clear(); - if (document->isVideoFile() || document->isVideoMessage()) { - _autoplayVideoDocument = document; - } + _streamingStartPaused = false; displayDocument(document, context); preloadData(0); activateControls(); @@ -1701,7 +1697,7 @@ void OverlayWidget::displayPhoto(not_null<PhotoData*> photo, HistoryItem *item) } clearStreaming(); destroyThemePreview(); - _doc = _autoplayVideoDocument = nullptr; + _doc = nullptr; _fullScreenVideo = false; _photo = photo; _radial.stop(); @@ -1765,10 +1761,6 @@ void OverlayWidget::displayDocument(DocumentData *doc, HistoryItem *item) { refreshMediaViewer(); - if (_autoplayVideoDocument && _doc != _autoplayVideoDocument) { - _autoplayVideoDocument = nullptr; - } - if (documentChanged) { refreshCaption(item); } @@ -2234,10 +2226,12 @@ void OverlayWidget::playbackPauseResume() { clearStreaming(); initStreaming(); } else if (_streamed->player.finished()) { + _streamingStartPaused = false; restartAtSeekPosition(0); } else if (_streamed->player.paused()) { _streamed->player.resume(); updatePlaybackState(); + playbackPauseMusic(); } else { _streamed->player.pause(); updatePlaybackState(); @@ -2252,8 +2246,6 @@ void OverlayWidget::playbackPauseResume() { void OverlayWidget::restartAtSeekPosition(crl::time position) { Expects(_streamed != nullptr); - _autoplayVideoDocument = _doc; - if (videoShown()) { _streamed->info.video.cover = videoFrame(); _current = Images::PixmapFast(transformVideoFrame(videoFrame())); @@ -2266,11 +2258,16 @@ void OverlayWidget::restartAtSeekPosition(crl::time position) { || options.audioId.type() == AudioMsgId::Type::Unknown) { options.mode = Streaming::Mode::Video; options.loop = true; + _streamingPauseMusic = false; + } else { + _streamingPauseMusic = true; } _streamed->player.play(options); - - Player::instance()->pause(AudioMsgId::Type::Voice); - Player::instance()->pause(AudioMsgId::Type::Song); + if (_streamingStartPaused) { + _streamed->player.pause(); + } else { + playbackPauseMusic(); + } _streamed->info.audio.state.position = _streamed->info.video.state.position @@ -2288,6 +2285,7 @@ void OverlayWidget::playbackControlsSeekProgress(crl::time position) { } void OverlayWidget::playbackControlsSeekFinished(crl::time position) { + _streamingStartPaused = false; restartAtSeekPosition(position); } @@ -2340,9 +2338,18 @@ void OverlayWidget::playbackResumeOnCall() { _streamed->resumeOnCallEnd = false; _streamed->player.resume(); updatePlaybackState(); + playbackPauseMusic(); } } +void OverlayWidget::playbackPauseMusic() { + if (!_streamingPauseMusic) { + return; + } + Player::instance()->pause(AudioMsgId::Type::Voice); + Player::instance()->pause(AudioMsgId::Type::Song); +} + void OverlayWidget::updatePlaybackState() { Expects(_streamed != nullptr); @@ -3092,6 +3099,7 @@ bool OverlayWidget::moveToEntity(const Entity &entity, int preloadDelta) { setContext(std::nullopt); } clearStreaming(); + _streamingStartPaused = true; if (auto photo = base::get_if<not_null<PhotoData*>>(&entity.data)) { displayPhoto(*photo, entity.item); } else if (auto document = base::get_if<not_null<DocumentData*>>(&entity.data)) { diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.h b/Telegram/SourceFiles/media/view/media_view_overlay_widget.h index 74d396161..bda534a81 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.h +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.h @@ -170,6 +170,7 @@ private: void playbackToggleFullScreen(); void playbackPauseOnCall(); void playbackResumeOnCall(); + void playbackPauseMusic(); void playbackWaitingChange(bool waiting); void updateOver(QPoint mpos); @@ -330,7 +331,8 @@ private: QString _dateText; QString _headerText; - DocumentData *_autoplayVideoDocument = nullptr; + bool _streamingStartPaused = false; + bool _streamingPauseMusic = false; bool _fullScreenVideo = false; int _fullScreenZoomCache = 0;