From 7710b44f1df4bc8c23857b0d0e5cc56f94ca15cf Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Wed, 15 May 2024 12:37:33 +0300 Subject: [PATCH] plugins/screencast: Specify the effective drm format Currently, the dmabuf format is hardcoded to DRM_FORMAT_ARGB8888, but testCreateDmabuf() uses m_drmFormat. Furthermore, if the shm buffers are used, it's preferred to use a buffer format that's friendly to QImage and OpenGL, which is DRM_FORMAT_ARGB8888. --- src/plugins/screencast/screencaststream.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/plugins/screencast/screencaststream.cpp b/src/plugins/screencast/screencaststream.cpp index 6a82ab606c..dfbfc6a451 100644 --- a/src/plugins/screencast/screencaststream.cpp +++ b/src/plugins/screencast/screencaststream.cpp @@ -618,7 +618,9 @@ void ScreenCastStream::invalidateCursor() QList ScreenCastStream::buildFormats(bool fixate, char buffer[2048]) { - const auto format = drmFormatToSpaVideoFormat(m_drmFormat); + const auto dmabufFormat = drmFormatToSpaVideoFormat(m_drmFormat); + const auto shmFormat = drmFormatToSpaVideoFormat(DRM_FORMAT_ARGB8888); + spa_pod_builder podBuilder = SPA_POD_BUILDER_INIT(buffer, 2048); spa_fraction defFramerate = SPA_FRACTION(0, 1); spa_fraction minFramerate = SPA_FRACTION(1, 1); @@ -629,12 +631,12 @@ QList ScreenCastStream::buildFormats(bool fixate, char buffer[2 QList params; params.reserve(fixate + m_hasDmaBuf + 1); if (fixate) { - params.append(buildFormat(&podBuilder, SPA_VIDEO_FORMAT_BGRA, &resolution, &defFramerate, &minFramerate, &maxFramerate, {m_dmabufParams->modifier}, SPA_POD_PROP_FLAG_MANDATORY)); + params.append(buildFormat(&podBuilder, dmabufFormat, &resolution, &defFramerate, &minFramerate, &maxFramerate, {m_dmabufParams->modifier}, SPA_POD_PROP_FLAG_MANDATORY)); } if (m_hasDmaBuf) { - params.append(buildFormat(&podBuilder, SPA_VIDEO_FORMAT_BGRA, &resolution, &defFramerate, &minFramerate, &maxFramerate, m_modifiers, SPA_POD_PROP_FLAG_MANDATORY | SPA_POD_PROP_FLAG_DONT_FIXATE)); + params.append(buildFormat(&podBuilder, dmabufFormat, &resolution, &defFramerate, &minFramerate, &maxFramerate, m_modifiers, SPA_POD_PROP_FLAG_MANDATORY | SPA_POD_PROP_FLAG_DONT_FIXATE)); } - params.append(buildFormat(&podBuilder, format, &resolution, &defFramerate, &minFramerate, &maxFramerate, {}, 0)); + params.append(buildFormat(&podBuilder, shmFormat, &resolution, &defFramerate, &minFramerate, &maxFramerate, {}, 0)); return params; }