From 3ebe34bc3f6e84a29b462d9d7b02c8009af6a4c8 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Mon, 18 Mar 2024 17:44:55 +0200 Subject: [PATCH] plugins/screencast: Improve code readability --- src/plugins/screencast/screencaststream.cpp | 25 ++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/plugins/screencast/screencaststream.cpp b/src/plugins/screencast/screencaststream.cpp index d71b2eba75..896862f2b0 100644 --- a/src/plugins/screencast/screencaststream.cpp +++ b/src/plugins/screencast/screencaststream.cpp @@ -514,17 +514,17 @@ void ScreenCastStream::recordFrame(const QRegion &_damagedRegion) struct spa_buffer *spa_buffer = buffer->buffer; struct spa_data *spa_data = spa_buffer->datas; - uint8_t *data = (uint8_t *)spa_data->data; - if (!data && spa_buffer->datas->type != SPA_DATA_DmaBuf) { - qCWarning(KWIN_SCREENCAST) << "Failed to record frame: invalid buffer data"; - spa_data->chunk->flags = SPA_CHUNK_FLAG_CORRUPTED; - pw_stream_queue_buffer(m_pwStream, buffer); - return; - } - spa_data->chunk->flags = SPA_CHUNK_FLAG_NONE; static_cast(Compositor::self()->backend())->makeCurrent(); - if (data || spa_data[0].type == SPA_DATA_MemFd) { + if (spa_data[0].type == SPA_DATA_MemFd) { + uint8_t *data = static_cast(spa_data->data); + if (!data) { + qCWarning(KWIN_SCREENCAST) << "Failed to record frame: invalid buffer data"; + spa_data->chunk->flags = SPA_CHUNK_FLAG_CORRUPTED; + pw_stream_queue_buffer(m_pwStream, buffer); + return; + } + const bool hasAlpha = m_source->hasAlphaChannel(); const int bpp = data && !hasAlpha ? 3 : 4; const uint stride = SPA_ROUND_UP_N(size.width() * bpp, 4); @@ -546,7 +546,7 @@ void ScreenCastStream::recordFrame(const QRegion &_damagedRegion) const PlatformCursorImage cursorImage = kwinApp()->cursorImage(); painter.drawImage(QRect{position.toPoint(), cursorImage.image().size()}, cursorImage.image()); } - } else { + } else if (spa_data[0].type == SPA_DATA_DmaBuf) { auto dmabuf = m_dmabufDataForPwBuffer.constFind(buffer); if (dmabuf == m_dmabufDataForPwBuffer.constEnd()) { qCDebug(KWIN_SCREENCAST) << "Failed to record frame: no dmabuf data"; @@ -595,6 +595,11 @@ void ScreenCastStream::recordFrame(const QRegion &_damagedRegion) m_cursor.lastRect = {}; } } + } else { + qCWarning(KWIN_SCREENCAST, "Failed to record frame: invalid buffer type: %d", spa_data[0].type); + spa_data->chunk->flags = SPA_CHUNK_FLAG_CORRUPTED; + pw_stream_queue_buffer(m_pwStream, buffer); + return; } if (m_cursor.mode == ScreencastV1Interface::Metadata) {