From a10726d6a8d0ef1a0c645378f983b6278c42eaa0 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sat, 16 Aug 2025 15:35:46 +0100 Subject: [PATCH] screencopy: fix callback resetting (#358) --- src/portals/Screencopy.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/portals/Screencopy.cpp b/src/portals/Screencopy.cpp index 92f3857..f80b10d 100644 --- a/src/portals/Screencopy.cpp +++ b/src/portals/Screencopy.cpp @@ -418,8 +418,8 @@ void CScreencopyPortal::SSession::initCallbacks() { if (!PSTREAM) { Debug::log(TRACE, "[sc] wlrOnBufferDone: no stream"); - sharingData.frameCallback.reset(); sharingData.status = FRAME_NONE; + sharingData.frameCallback.reset(); return; } @@ -432,10 +432,10 @@ void CScreencopyPortal::SSession::initCallbacks() { (PSTREAM->pwVideoInfo.size.width != sharingData.frameInfoDMA.w || PSTREAM->pwVideoInfo.size.height != sharingData.frameInfoDMA.h)) { Debug::log(LOG, "[sc] Incompatible formats, renegotiate stream"); sharingData.status = FRAME_RENEG; - sharingData.frameCallback.reset(); g_pPortalManager->m_sPortals.screencopy->m_pPipewire->updateStreamParam(PSTREAM); g_pPortalManager->m_sPortals.screencopy->queueNextShareFrame(this); sharingData.status = FRAME_NONE; + sharingData.frameCallback.reset(); return; } @@ -445,7 +445,6 @@ void CScreencopyPortal::SSession::initCallbacks() { } if (!PSTREAM->currentPWBuffer) { - sharingData.frameCallback.reset(); Debug::log(LOG, "[screencopy/pipewire] Out of buffers"); sharingData.status = FRAME_NONE; if (sharingData.copyRetries++ < MAX_RETRIES) { @@ -453,6 +452,7 @@ void CScreencopyPortal::SSession::initCallbacks() { g_pPortalManager->m_sPortals.screencopy->m_pPipewire->updateStreamParam(PSTREAM); g_pPortalManager->m_sPortals.screencopy->queueNextShareFrame(this); } + sharingData.frameCallback.reset(); return; } @@ -533,8 +533,8 @@ void CScreencopyPortal::SSession::initCallbacks() { if (!PSTREAM) { Debug::log(TRACE, "[sc] hlOnBufferDone: no stream"); - sharingData.windowFrameCallback.reset(); sharingData.status = FRAME_NONE; + sharingData.windowFrameCallback.reset(); return; } @@ -547,10 +547,10 @@ void CScreencopyPortal::SSession::initCallbacks() { (PSTREAM->pwVideoInfo.size.width != sharingData.frameInfoDMA.w || PSTREAM->pwVideoInfo.size.height != sharingData.frameInfoDMA.h)) { Debug::log(LOG, "[sc] Incompatible formats, renegotiate stream"); sharingData.status = FRAME_RENEG; - sharingData.windowFrameCallback.reset(); g_pPortalManager->m_sPortals.screencopy->m_pPipewire->updateStreamParam(PSTREAM); g_pPortalManager->m_sPortals.screencopy->queueNextShareFrame(this); sharingData.status = FRAME_NONE; + sharingData.windowFrameCallback.reset(); return; } @@ -560,7 +560,6 @@ void CScreencopyPortal::SSession::initCallbacks() { } if (!PSTREAM->currentPWBuffer) { - sharingData.windowFrameCallback.reset(); Debug::log(LOG, "[screencopy/pipewire] Out of buffers"); sharingData.status = FRAME_NONE; if (sharingData.copyRetries++ < MAX_RETRIES) { @@ -568,6 +567,7 @@ void CScreencopyPortal::SSession::initCallbacks() { g_pPortalManager->m_sPortals.screencopy->m_pPipewire->updateStreamParam(PSTREAM); g_pPortalManager->m_sPortals.screencopy->queueNextShareFrame(this); } + sharingData.windowFrameCallback.reset(); return; }