File indexing completed on 2024-04-28 09:21:52
0001 /* 0002 SPDX-FileCopyrightText: 2023 Aleix Pol Gonzalez <aleixpol@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "pwhelpers.h" 0008 #include "logging.h" 0009 0010 QImage::Format SpaToQImageFormat(quint32 format) 0011 { 0012 switch (format) { 0013 case SPA_VIDEO_FORMAT_BGRx: 0014 case SPA_VIDEO_FORMAT_BGRA: 0015 return QImage::Format_RGBA8888_Premultiplied; // Handled in SpaBufferToQImage 0016 case SPA_VIDEO_FORMAT_ABGR: 0017 case SPA_VIDEO_FORMAT_xBGR: 0018 return QImage::Format_ARGB32; // Handled in SpaBufferToQImage 0019 case SPA_VIDEO_FORMAT_BGR: 0020 return QImage::Format_BGR888; 0021 case SPA_VIDEO_FORMAT_RGBx: 0022 return QImage::Format_RGBX8888; 0023 case SPA_VIDEO_FORMAT_RGB: 0024 return QImage::Format_RGB888; 0025 case SPA_VIDEO_FORMAT_RGBA: 0026 return QImage::Format_RGBA8888_Premultiplied; 0027 default: 0028 qCWarning(PIPEWIRE_LOGGING) << "cannot convert spa format to QImage" << format; 0029 return QImage::Format_RGB32; 0030 } 0031 } 0032 0033 QImage PWHelpers::SpaBufferToQImage(const uchar *data, int width, int height, qsizetype bytesPerLine, spa_video_format format) 0034 { 0035 switch (format) { 0036 case SPA_VIDEO_FORMAT_BGRx: 0037 case SPA_VIDEO_FORMAT_BGRA: 0038 case SPA_VIDEO_FORMAT_xBGR: 0039 case SPA_VIDEO_FORMAT_ABGR: { 0040 // This is needed because QImage does not support BGRA 0041 // This is obviously a much slower path, it makes sense to avoid it as much as possible 0042 return QImage(data, width, height, bytesPerLine, SpaToQImageFormat(format)).rgbSwapped(); 0043 } 0044 case SPA_VIDEO_FORMAT_BGR: 0045 case SPA_VIDEO_FORMAT_RGBx: 0046 case SPA_VIDEO_FORMAT_RGB: 0047 case SPA_VIDEO_FORMAT_RGBA: 0048 default: 0049 return QImage(data, width, height, bytesPerLine, SpaToQImageFormat(format)); 0050 } 0051 }