From 198ebc0acbfc92da5df219d80d875f0c21f62147 Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 16 Oct 2026 14:02:30 +0200 Subject: [PATCH] Restore the current preview when reopening stream controls --- tools/chatgui/src/stream_publish_engine.cpp | 7 +++++++ tools/chatgui/src/stream_publish_engine.h | 1 + tools/chatgui/src/stream_publish_window.cpp | 1 + 3 files changed, 9 insertions(+) diff --git a/tools/chatgui/src/stream_publish_engine.cpp b/tools/chatgui/src/stream_publish_engine.cpp index 2d4002d0..da7c9853 100644 --- a/tools/chatgui/src/stream_publish_engine.cpp +++ b/tools/chatgui/src/stream_publish_engine.cpp @@ -133,6 +133,13 @@ bool StreamPublishEngine::active() const { return m->id != 0; } bool StreamPublishEngine::running() const { return m->running.load(); } uint64_t StreamPublishEngine::group() const { return m->group; } StreamPublishConfig StreamPublishEngine::config() const { std::lock_guard guard(m->lock); return m->wanted; } +QVariant StreamPublishEngine::previewFrame() const { +#ifdef HAVE_STREAM_CAPTURE + std::lock_guard guard(m->lock); return QVariant::fromValue(m->previewFrame); +#else + return {}; +#endif +} QList StreamPublishEngine::codecs() const { std::lock_guard guard(m->lock); return m->codecs; } bool StreamPublishEngine::muted() const { return m->muted.load(); } void StreamPublishEngine::setMuted(bool muted) { diff --git a/tools/chatgui/src/stream_publish_engine.h b/tools/chatgui/src/stream_publish_engine.h index 7257891a..e4342901 100644 --- a/tools/chatgui/src/stream_publish_engine.h +++ b/tools/chatgui/src/stream_publish_engine.h @@ -48,6 +48,7 @@ public: bool running() const; uint64_t group() const; StreamPublishConfig config() const; + QVariant previewFrame() const; QList codecs() const; static QList sources(); static bool supported(); diff --git a/tools/chatgui/src/stream_publish_window.cpp b/tools/chatgui/src/stream_publish_window.cpp index 29cb47b5..d68d4d9e 100644 --- a/tools/chatgui/src/stream_publish_window.cpp +++ b/tools/chatgui/src/stream_publish_window.cpp @@ -38,6 +38,7 @@ StreamPublishWindow::StreamPublishWindow(StreamPublishEngine* engine, uint64_t g #ifdef HAVE_STREAM_CAPTURE auto* preview = new QVideoWidget(this); m_preview = preview; preview->setMinimumHeight(160); preview->setAspectRatioMode(Qt::KeepAspectRatio); + preview->videoSink()->setVideoFrame(engine->previewFrame().value()); connect(engine, &StreamPublishEngine::previewVideoChanged, this, [this, preview](const QVariant& frame) { auto video = frame.value(); if (!video.isValid() || isVisible()) preview->videoSink()->setVideoFrame(video);