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
linuxdmabufclientbufferintegration.h
Go to the documentation of this file.
1
// Copyright (C) 2018 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
// Qt-Security score:significant reason:default
4
5
#
ifndef
LINUXDMABUFCLIENTBUFFERINTEGRATION_H
6
#
define
LINUXDMABUFCLIENTBUFFERINTEGRATION_H
7
8
#
include
"linuxdmabuf.h"
9
10
#
include
<
QtWaylandCompositor
/
private
/
qwlclientbufferintegration_p
.
h
>
11
#
include
<
QtWaylandCompositor
/
private
/
qwlclientbuffer_p
.
h
>
12
#
include
<
QtWaylandCompositor
/
private
/
qwayland
-
server
-
wayland
.
h
>
13
#
include
<
QtCore
/
QMutex
>
14
15
#
include
<
drm_fourcc
.
h
>
16
17
QT_BEGIN_NAMESPACE
18
19
typedef
EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL_compat) (EGLDisplay dpy,
struct
wl_resource *
buffer
, EGLint
attribute
, EGLint *
value
);
20
typedef
EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFFORMATSEXTPROC) (EGLDisplay dpy, EGLint
max_formats
, EGLint *
formats
, EGLint *
num_formats
);
21
typedef
EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFMODIFIERSEXTPROC) (EGLDisplay dpy, EGLint
format
, EGLint
max_modifiers
, EGLuint64KHR *
modifiers
, EGLBoolean *
external_only
, EGLint *
num_modifiers
);
22
23
class
LinuxDmabufClientBufferIntegrationPrivate;
24
class
LinuxDmabufParams
;
25
class
LinuxDmabufClientBuffer
;
26
27
// buffer conversion definitions to import YUV buffers
28
struct
YuvPlaneConversion
{
29
EGLint
format
=
DRM_FORMAT_YUYV
;
30
EGLint
widthDivisor
= 1;
31
EGLint
heightDivisor
= 1;
32
EGLint
planeIndex
= 0;
33
};
34
struct
YuvFormatConversion
{
35
uint32_t
inputPlanes
= 1;
36
uint32_t
outputPlanes
= 1;
37
struct
YuvPlaneConversion
plane
[
LinuxDmabufWlBuffer
::
MaxDmabufPlanes
];
38
};
39
40
class
LinuxDmabufClientBufferIntegration
:
public
QtWayland
::
ClientBufferIntegration
41
{
42
public
:
43
LinuxDmabufClientBufferIntegration
(
bool
useLegacyVersion =
false
);
44
~
LinuxDmabufClientBufferIntegration
()
override
;
45
46
void
initializeHardware
(
struct
::wl_display *display)
override
;
47
QtWayland
::
ClientBuffer
*
createBufferFor
(wl_resource *resource)
override
;
48
bool
importBuffer
(wl_resource *resource,
LinuxDmabufWlBuffer
*linuxDmabufBuffer);
49
void
removeBuffer
(wl_resource *resource);
50
void
deleteImage
(EGLImageKHR image);
51
PFNGLEGLIMAGETARGETTEXTURE2DOESPROC
gl_egl_image_target_texture_2d
=
nullptr
;
52
53
private
:
54
Q_DISABLE_COPY
(
LinuxDmabufClientBufferIntegration
)
55
56
bool
m_useLegacyVersion;
57
58
PFNEGLBINDWAYLANDDISPLAYWL egl_bind_wayland_display =
nullptr
;
59
PFNEGLUNBINDWAYLANDDISPLAYWL egl_unbind_wayland_display =
nullptr
;
60
::wl_display *m_wlDisplay =
nullptr
;
61
bool
m_displayBound =
false
;
62
63
PFNEGLQUERYDISPLAYATTRIBEXTPROC egl_query_display_attrib =
nullptr
;
64
PFNEGLQUERYDEVICESTRINGEXTPROC egl_query_device_string =
nullptr
;
65
66
PFNEGLCREATEIMAGEKHRPROC egl_create_image =
nullptr
;
67
PFNEGLDESTROYIMAGEKHRPROC egl_destroy_image =
nullptr
;
68
PFNEGLQUERYDMABUFMODIFIERSEXTPROC egl_query_dmabuf_modifiers_ext =
nullptr
;
69
PFNEGLQUERYDMABUFFORMATSEXTPROC egl_query_dmabuf_formats_ext =
nullptr
;
70
71
bool
initSimpleTexture(
LinuxDmabufWlBuffer
*dmabufBuffer);
72
bool
initYuvTexture(
LinuxDmabufWlBuffer
*dmabufBuffer);
73
QList<uint32_t> supportedDrmFormats();
74
QList<uint64_t> supportedDrmModifiers(uint32_t format);
75
const
char
*drmDevice()
const
;
76
77
EGLDisplay m_eglDisplay = EGL_NO_DISPLAY;
78
79
QHash<EGLint, YuvFormatConversion> m_yuvFormats;
80
bool
m_supportsDmabufModifiers =
false
;
81
QHash<
struct
::wl_resource *, LinuxDmabufWlBuffer *> m_importedBuffers;
82
QScopedPointer<LinuxDmabuf> m_linuxDmabuf;
83
};
84
85
class
LinuxDmabufClientBuffer
:
public
QtWayland
::
ClientBuffer
86
{
87
public
:
88
~
LinuxDmabufClientBuffer
()
override
;
89
90
QWaylandBufferRef
::
BufferFormatEgl
bufferFormatEgl
()
const
override
;
91
QSize
size
()
const
override
;
92
QWaylandSurface
::
Origin
origin
()
const
override
;
93
QOpenGLTexture
*
toOpenGlTexture
(
int
plane)
override
;
94
95
protected
:
96
void
setDestroyed
()
override
;
97
98
private
:
99
friend
class
LinuxDmabufClientBufferIntegration
;
100
friend
class
LinuxDmabufClientBufferIntegrationPrivate;
101
102
LinuxDmabufClientBuffer(
LinuxDmabufClientBufferIntegration
* integration, wl_resource *bufferResource,
LinuxDmabufWlBuffer
*dmabufBuffer);
103
104
LinuxDmabufWlBuffer
*d =
nullptr
;
105
LinuxDmabufClientBufferIntegration
*m_integration =
nullptr
;
106
};
107
108
QT_END_NAMESPACE
109
110
#
endif
// LINUXDMABUFCLIENTBUFFERINTEGRATION_H
LinuxDmabufClientBufferIntegration
Definition
linuxdmabufclientbufferintegration.h:41
LinuxDmabufClientBufferIntegration::createBufferFor
QtWayland::ClientBuffer * createBufferFor(wl_resource *resource) override
Definition
linuxdmabufclientbufferintegration.cpp:396
LinuxDmabufClientBufferIntegration::importBuffer
bool importBuffer(wl_resource *resource, LinuxDmabufWlBuffer *linuxDmabufBuffer)
Definition
linuxdmabufclientbufferintegration.cpp:405
LinuxDmabufClientBufferIntegration::deleteImage
void deleteImage(EGLImageKHR image)
Definition
linuxdmabufclientbufferintegration.cpp:391
LinuxDmabufClientBufferIntegration::~LinuxDmabufClientBufferIntegration
~LinuxDmabufClientBufferIntegration() override
Definition
linuxdmabufclientbufferintegration.cpp:244
LinuxDmabufClientBufferIntegration::initializeHardware
void initializeHardware(struct ::wl_display *display) override
Definition
linuxdmabufclientbufferintegration.cpp:258
LinuxDmabufClientBufferIntegration::LinuxDmabufClientBufferIntegration
LinuxDmabufClientBufferIntegration(bool useLegacyVersion=false)
Definition
linuxdmabufclientbufferintegration.cpp:220
LinuxDmabufClientBufferIntegration::gl_egl_image_target_texture_2d
PFNGLEGLIMAGETARGETTEXTURE2DOESPROC gl_egl_image_target_texture_2d
Definition
linuxdmabufclientbufferintegration.h:51
LinuxDmabufClientBufferIntegration::removeBuffer
void removeBuffer(wl_resource *resource)
Definition
linuxdmabufclientbufferintegration.cpp:418
LinuxDmabufClientBuffer
Definition
linuxdmabufclientbufferintegration.h:86
LinuxDmabufClientBuffer::~LinuxDmabufClientBuffer
~LinuxDmabufClientBuffer() override
Definition
linuxdmabufclientbufferintegration.cpp:467
LinuxDmabufClientBuffer::setDestroyed
void setDestroyed() override
Definition
linuxdmabufclientbufferintegration.cpp:461
LinuxDmabufClientBuffer::toOpenGlTexture
QOpenGLTexture * toOpenGlTexture(int plane) override
Definition
linuxdmabufclientbufferintegration.cpp:432
LinuxDmabufClientBuffer::size
QSize size() const override
Definition
linuxdmabufclientbufferintegration.cpp:478
LinuxDmabufClientBuffer::bufferFormatEgl
QWaylandBufferRef::BufferFormatEgl bufferFormatEgl() const override
Definition
linuxdmabufclientbufferintegration.cpp:473
LinuxDmabufClientBuffer::origin
QWaylandSurface::Origin origin() const override
Definition
linuxdmabufclientbufferintegration.cpp:483
LinuxDmabufParams
Definition
linuxdmabuf.h:110
LinuxDmabufWlBuffer
Definition
linuxdmabuf.h:135
LinuxDmabufWlBuffer::MaxDmabufPlanes
static const uint32_t MaxDmabufPlanes
Definition
linuxdmabuf.h:151
QWaylandDmabufUnstableClientBufferIntegrationPlugin
Definition
main.cpp:11
format
EGLint format
Definition
linuxdmabufclientbufferintegration.h:21
num_modifiers
EGLint EGLint EGLuint64KHR EGLBoolean EGLint * num_modifiers
Definition
linuxdmabufclientbufferintegration.h:21
attribute
QT_BEGIN_NAMESPACE typedef struct wl_resource EGLint attribute
Definition
linuxdmabufclientbufferintegration.h:19
external_only
EGLint EGLint EGLuint64KHR EGLBoolean * external_only
Definition
linuxdmabufclientbufferintegration.h:21
max_modifiers
EGLint EGLint max_modifiers
Definition
linuxdmabufclientbufferintegration.h:21
num_formats
EGLint EGLint EGLint * num_formats
Definition
linuxdmabufclientbufferintegration.h:20
buffer
QT_BEGIN_NAMESPACE typedef struct wl_resource * buffer
Definition
linuxdmabufclientbufferintegration.h:19
max_formats
EGLint max_formats
Definition
linuxdmabufclientbufferintegration.h:20
value
QT_BEGIN_NAMESPACE typedef struct wl_resource EGLint EGLint * value
Definition
linuxdmabufclientbufferintegration.h:19
modifiers
EGLint EGLint EGLuint64KHR * modifiers
Definition
linuxdmabufclientbufferintegration.h:21
formats
EGLint EGLint * formats
Definition
linuxdmabufclientbufferintegration.h:20
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
YuvFormatConversion
Definition
linuxdmabufclientbufferintegration.h:34
YuvFormatConversion::plane
struct YuvPlaneConversion plane[LinuxDmabufWlBuffer::MaxDmabufPlanes]
Definition
linuxdmabufclientbufferintegration.h:37
YuvFormatConversion::inputPlanes
uint32_t inputPlanes
Definition
linuxdmabufclientbufferintegration.h:35
YuvFormatConversion::outputPlanes
uint32_t outputPlanes
Definition
linuxdmabufclientbufferintegration.h:36
YuvPlaneConversion
Definition
linuxdmabufclientbufferintegration.h:28
YuvPlaneConversion::widthDivisor
EGLint widthDivisor
Definition
linuxdmabufclientbufferintegration.h:30
YuvPlaneConversion::planeIndex
EGLint planeIndex
Definition
linuxdmabufclientbufferintegration.h:32
YuvPlaneConversion::heightDivisor
EGLint heightDivisor
Definition
linuxdmabufclientbufferintegration.h:31
YuvPlaneConversion::format
EGLint format
Definition
linuxdmabufclientbufferintegration.h:29
qtwayland
src
hardwareintegration
compositor
linux-dmabuf-v1
linuxdmabufclientbufferintegration.h
Generated on
for Qt by
1.18.0