23QQnxBuffer::QQnxBuffer(screen_buffer_t buffer)
26 qCDebug(lcQpaScreenBuffer) << Q_FUNC_INFO <<
"Normal";
31 "Failed to query buffer size");
36 "Failed to query buffer stride");
40 uchar *dataPtr =
nullptr;
42 screen_get_buffer_property_pv(buffer, SCREEN_PROPERTY_POINTER, (
void **)&dataPtr),
43 "Failed to query buffer pointer");
45 if (Q_UNLIKELY(!dataPtr))
46 qFatal(
"QQNX: buffer pointer is NULL, errno=%d", errno);
51 screen_get_buffer_property_iv(buffer, SCREEN_PROPERTY_FORMAT, &screenFormat),
52 "Failed to query buffer format");
55 QImage::Format imageFormat = QImage::Format_Invalid;
56 switch (screenFormat) {
57 case SCREEN_FORMAT_RGBX4444:
58 imageFormat = QImage::Format_RGB444;
60 case SCREEN_FORMAT_RGBA4444:
61 imageFormat = QImage::Format_ARGB4444_Premultiplied;
63 case SCREEN_FORMAT_RGBX5551:
64 imageFormat = QImage::Format_RGB555;
66 case SCREEN_FORMAT_RGB565:
67 imageFormat = QImage::Format_RGB16;
69 case SCREEN_FORMAT_RGBX8888:
70 imageFormat = QImage::Format_RGB32;
72 case SCREEN_FORMAT_RGBA8888:
73 imageFormat = QImage::Format_ARGB32_Premultiplied;
76 qFatal(lcQpaScreenBuffer,
"QQNX: unsupported buffer format, format=%d", screenFormat);
80 m_image = QImage(dataPtr, size[0], size[1], stride, imageFormat);
95void QQnxBuffer::invalidateInCache()
97 qCDebug(lcQpaScreenBuffer) << Q_FUNC_INFO;
100 if (Q_UNLIKELY(!m_buffer))
101 qFatal(lcQpaScreenBuffer,
"QQNX: can't invalidate cache for null buffer");
105 int result = msync(m_image.bits(), m_image.height() * m_image.bytesPerLine(), MS_INVALIDATE | MS_CACHE_ONLY);
106 if (Q_UNLIKELY(result != 0))
107 qFatal(lcQpaScreenBuffer,
"QQNX: failed to invalidate cache, errno=%d", errno);