From eed23cdf1102a8099bd7f47bfe3fb44e19148a08 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Mon, 8 Jan 2024 01:23:55 +0100 Subject: Fix lag when media messages are shown and fix media controls --- src/ui/MxcMediaProxy.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/ui/MxcMediaProxy.cpp') diff --git a/src/ui/MxcMediaProxy.cpp b/src/ui/MxcMediaProxy.cpp index 5fae0654..3d486f6a 100644 --- a/src/ui/MxcMediaProxy.cpp +++ b/src/ui/MxcMediaProxy.cpp @@ -23,8 +23,6 @@ MxcMediaProxy::MxcMediaProxy(QObject *parent) : QMediaPlayer(parent) { - connect(this, &MxcMediaProxy::eventIdChanged, &MxcMediaProxy::startDownload); - connect(this, &MxcMediaProxy::roomChanged, &MxcMediaProxy::startDownload); connect( this, &QMediaPlayer::errorOccurred, this, [](QMediaPlayer::Error error, QString errorString) { nhlog::ui()->debug("Media player error {} and errorStr {}", @@ -36,6 +34,17 @@ MxcMediaProxy::MxcMediaProxy(QObject *parent) static_cast(status), static_cast(this->error())); }); + connect(this, &MxcMediaProxy::playbackStateChanged, [this](QMediaPlayer::PlaybackState status) { + // We only set the output when starting the playback because otherwise the audio device + // lookup takes about 500ms, which causes a lot of stutter... + if (status == QMediaPlayer::PlayingState && !audioOutput()) { + nhlog::ui()->debug("Set audio output"); + auto newOut = new QAudioOutput(this); + newOut->setMuted(muted_); + newOut->setVolume(volume_); + setAudioOutput(newOut); + } + }); connect(this, &MxcMediaProxy::metaDataChanged, [this]() { emit orientationChanged(); }); connect(ChatPage::instance()->timelineManager()->rooms(), @@ -55,7 +64,7 @@ MxcMediaProxy::orientation() const } void -MxcMediaProxy::startDownload() +MxcMediaProxy::startDownload(bool onlyCached) { if (!room_) return; @@ -126,6 +135,9 @@ MxcMediaProxy::startDownload() } } + if (onlyCached) + return; + http::client()->download(url, [filename, url, processBuffer](const std::string &data, const std::string &, -- cgit 1.5.1