Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qqnxbuffer.cpp
Go to the documentation of this file.
1
// Copyright (C) 2011 - 2012 Research In Motion
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
// Qt-Security score:significant reason:default
4
5
#
include
"qqnxglobal.h"
6
7
#
include
"qqnxbuffer.h"
8
9
#
include
<
QtCore
/
QDebug
>
10
11
#
include
<
errno
.
h
>
12
#
include
<
sys
/
mman
.
h
>
13
14
QT_BEGIN_NAMESPACE
15
16
Q_LOGGING_CATEGORY
(lcQpaScreenBuffer,
"qt.qpa.screen.buffer"
);
17
18
QQnxBuffer
::
QQnxBuffer
()
19
:
m_buffer
(0)
20
{
21
qCDebug(lcQpaScreenBuffer) << Q_FUNC_INFO <<
"Empty"
;
22
}
23
24
QQnxBuffer
::
QQnxBuffer
(screen_buffer_t buffer)
25
:
m_buffer
(
buffer
)
26
{
27
qCDebug(lcQpaScreenBuffer) << Q_FUNC_INFO <<
"Normal"
;
28
29
// Get size of buffer
30
int
size[2];
31
Q_SCREEN_CRITICALERROR
(screen_get_buffer_property_iv(buffer, SCREEN_PROPERTY_BUFFER_SIZE, size),
32
"Failed to query buffer size"
);
33
34
// Get stride of buffer
35
int
stride;
36
Q_SCREEN_CHECKERROR
(screen_get_buffer_property_iv(buffer, SCREEN_PROPERTY_STRIDE, &stride),
37
"Failed to query buffer stride"
);
38
39
// Get access to buffer's data
40
errno = 0;
41
uchar *dataPtr =
nullptr
;
42
Q_SCREEN_CRITICALERROR
(
43
screen_get_buffer_property_pv(buffer, SCREEN_PROPERTY_POINTER, (
void
**)&dataPtr),
44
"Failed to query buffer pointer"
);
45
46
if
(Q_UNLIKELY(!dataPtr))
47
qFatal(
"QQNX: buffer pointer is NULL, errno=%d"
, errno);
48
49
// Get format of buffer
50
int
screenFormat;
51
Q_SCREEN_CHECKERROR
(
52
screen_get_buffer_property_iv(buffer, SCREEN_PROPERTY_FORMAT, &screenFormat),
53
"Failed to query buffer format"
);
54
55
// Convert screen format to QImage format
56
QImage::Format imageFormat = QImage::Format_Invalid;
57
switch
(screenFormat) {
58
case
SCREEN_FORMAT_RGBX4444:
59
imageFormat = QImage::Format_RGB444;
60
break
;
61
case
SCREEN_FORMAT_RGBA4444:
62
imageFormat = QImage::Format_ARGB4444_Premultiplied;
63
break
;
64
case
SCREEN_FORMAT_RGBX5551:
65
imageFormat = QImage::Format_RGB555;
66
break
;
67
case
SCREEN_FORMAT_RGB565:
68
imageFormat = QImage::Format_RGB16;
69
break
;
70
case
SCREEN_FORMAT_RGBX8888:
71
imageFormat = QImage::Format_RGB32;
72
break
;
73
case
SCREEN_FORMAT_RGBA8888:
74
imageFormat = QImage::Format_ARGB32_Premultiplied;
75
break
;
76
default
:
77
qFatal(lcQpaScreenBuffer,
"QQNX: unsupported buffer format, format=%d"
, screenFormat);
78
}
79
80
// wrap buffer in an image
81
m_image = QImage(dataPtr, size[0], size[1], stride, imageFormat);
82
}
83
84
QQnxBuffer
::
QQnxBuffer
(
const
QQnxBuffer
&other)
85
:
m_buffer
(
other
.
m_buffer
),
86
m_image
(
other
.
m_image
)
87
{
88
qCDebug(lcQpaScreenBuffer) << Q_FUNC_INFO <<
"Copy"
;
89
}
90
91
QQnxBuffer
::~
QQnxBuffer
()
92
{
93
qCDebug(lcQpaScreenBuffer) << Q_FUNC_INFO;
94
}
95
96
void
QQnxBuffer
::
invalidateInCache
()
97
{
98
qCDebug(lcQpaScreenBuffer) << Q_FUNC_INFO;
99
100
// Verify native buffer exists
101
if
(Q_UNLIKELY(!m_buffer))
102
qFatal(lcQpaScreenBuffer,
"QQNX: can't invalidate cache for null buffer"
);
103
104
// Evict buffer's data from cache
105
errno = 0;
106
int
result = msync(m_image.bits(), m_image.height() * m_image.bytesPerLine(), MS_INVALIDATE | MS_CACHE_ONLY);
107
if
(Q_UNLIKELY(result != 0))
108
qFatal(lcQpaScreenBuffer,
"QQNX: failed to invalidate cache, errno=%d"
, errno);
109
}
110
111
QT_END_NAMESPACE
QQnxBuffer
Definition
qqnxbuffer.h:18
QQnxBuffer::~QQnxBuffer
virtual ~QQnxBuffer()
Definition
qqnxbuffer.cpp:91
QQnxBuffer::invalidateInCache
void invalidateInCache()
Definition
qqnxbuffer.cpp:96
QQnxBuffer::QQnxBuffer
QQnxBuffer(const QQnxBuffer &other)
Definition
qqnxbuffer.cpp:84
QQnxBuffer::QQnxBuffer
QQnxBuffer()
Definition
qqnxbuffer.cpp:18
QQnxBuffer::QQnxBuffer
QQnxBuffer(screen_buffer_t buffer)
Definition
qqnxbuffer.cpp:24
Q_LOGGING_CATEGORY
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")
Q_SCREEN_CRITICALERROR
#define Q_SCREEN_CRITICALERROR(x, message)
Definition
qqnxglobal.h:20
Q_SCREEN_CHECKERROR
#define Q_SCREEN_CHECKERROR(x, message)
Definition
qqnxglobal.h:17
qtbase
src
plugins
platforms
qnx
qqnxbuffer.cpp
Generated on
for Qt by
1.18.0