diff options
| author | fazzi <18248986+fxzzi@users.noreply.github.com> | 2026-04-26 19:21:13 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-26 19:21:13 +0100 |
| commit | 84d45bd13acce0b16c8f86e83144f22b18d9398e (patch) | |
| tree | 53f4eba913bdc04f4158a586fc5d9ef010ba620b /src/helpers/Monitor.cpp | |
| parent | d669ea7db20bad576f13f2b0f7aca038d95536e1 (diff) | |
monitor: set format back after failing DS activation (#14168)
we do run m_lastScanout.reset(), but m_lastScanout might sometimes not
be set. cache format from before attempting DS, and set back to it on
activation failure.
Diffstat (limited to 'src/helpers/Monitor.cpp')
| -rw-r--r-- | src/helpers/Monitor.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 44e06765..37606d4f 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -1991,7 +1991,8 @@ bool CMonitor::attemptDirectScanout() { if (m_lastScanout.expired()) m_prevDrmFormat = m_drmFormat; - const bool NEEDS_TEST = !m_lastScanout || m_drmFormat != params.format; // do not retest while it's active + const auto PREV_FORMAT = m_drmFormat; + const bool NEEDS_TEST = !m_lastScanout || m_drmFormat != params.format; // do not retest while it's active if (m_drmFormat != params.format) { m_output->state->setFormat(params.format); m_drmFormat = params.format; @@ -2004,6 +2005,10 @@ bool CMonitor::attemptDirectScanout() { if (NEEDS_TEST && !m_state.test()) { Log::logger->log(Log::TRACE, "attemptDirectScanout: failed basic test"); + if (m_drmFormat != PREV_FORMAT) { + m_output->state->setFormat(PREV_FORMAT); + m_drmFormat = PREV_FORMAT; + } return false; } @@ -2029,6 +2034,10 @@ bool CMonitor::attemptDirectScanout() { if (!ok) { Log::logger->log(Log::TRACE, "attemptDirectScanout: failed to scanout surface"); + if (m_drmFormat != PREV_FORMAT) { + m_output->state->setFormat(PREV_FORMAT); + m_drmFormat = PREV_FORMAT; + } m_lastScanout.reset(); return false; } |
