screencopy: fix callback resetting (#358)

This commit is contained in:
Vaxry 2025-08-16 15:35:46 +01:00 committed by GitHub
parent add72858d1
commit a10726d6a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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;
}