Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qeglfskmsvsp2screen.h
Go to the documentation of this file.
1// Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
2// Copyright (C) 2017 The Qt Company Ltd.
3// Copyright (C) 2016 Pelagicore AG
4// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
5// Qt-Security score:significant reason:default
6
7#ifndef QEGLFSKMSVSP2SCREEN_H
8#define QEGLFSKMSVSP2SCREEN_H
9
12#include <QtCore/QMutex>
13
14#include <qpa/qplatformscreen_p.h>
15
16#include <gbm.h>
17
19
22{
23public:
24 QEglFSKmsVsp2Screen(QEglFSKmsDevice *device, const QKmsOutput &output);
25
26 gbm_surface *createSurface();
27 void resetSurface();
28
30 void initVsp2();
31 void initQtLayer();
32
33 //TODO: use a fixed index API instead of auto increment?
34 int addLayer(int dmabufFd, const QSize &size, const QPoint &position, uint drmPixelFormat, uint bytesPerLine) override;
35 void setLayerBuffer(int id, int dmabufFd) override;
36 void setLayerPosition(int id, const QPoint &position) override;
37 void setLayerAlpha(int id, qreal alpha) override;
38 bool removeLayer(int id) override;
39 void addBlendListener(void (*callback)()) override;
40
41 void flip();
42 void blendAndFlipDrm();
43
44private:
45 class Blender : public QObject // This is a workaround we really would want the screen to be a QObject
46 {
47 public:
48 Blender(QEglFSKmsVsp2Screen *screen) : m_screen(screen) {}
49 ~Blender() override {}
50 bool event(QEvent *event) override;
51 QEglFSKmsVsp2Screen *m_screen = nullptr;
52 };
53 QScopedArrayPointer<Blender> m_blender;
54
55 gbm_surface *m_gbmSurface = nullptr;
56 gbm_bo *m_currentGbmBo = nullptr;
57 gbm_bo *m_nextGbmBo = nullptr;
58
59 QScopedPointer<QVsp2BlendingDevice> m_blendDevice;
60
61 struct FrameBuffer { //these are for buffers that have been blended by the bru
62 uint32_t drmBufferId = 0;
63 int dmabufFd = -1;
64 };
65 std::array<FrameBuffer, 2> m_frameBuffers;
66 uint m_backFb = 0;
67 void initDumbFrameBuffer(FrameBuffer &fb);
68 QList<void (*)()> m_blendFinishedCallbacks;
69
70 struct DmaBuffer { //these are for qt buffers before blending with additional layers (gbm buffer data)
71 int dmabufFd = -1;
72 };
73 static void dmaBufferDestroyedHandler(gbm_bo *gbmBo, void *data);
74 DmaBuffer *dmaBufferForGbmBuffer(gbm_bo *gbmBo);
75
76 void ensureModeSet();
77 void doDrmFlip();
78
79 bool m_blendScheduled = false;
80 int m_qtLayer = 0; //TODO: add API for changing this
81};
82
83QT_END_NAMESPACE
84
85#endif // QEGLFSKMSVSP2SCREEN_H
gbm_device * gbmDevice() const
void * nativeDisplay() const override
QEglFSKmsVsp2Device(QKmsScreenConfig *screenConfig, const QString &path)
void registerScreenCloning(QPlatformScreen *screen, QPlatformScreen *screenThisScreenClones, const QList< QPlatformScreen * > &screensCloningThisScreen) override
QPlatformScreen * createHeadlessScreen() override
QPlatformScreen * createScreen(const QKmsOutput &output) override
bool removeLayer(int id) override
void setLayerPosition(int id, const QPoint &position) override
gbm_surface * createSurface()
void setLayerBuffer(int id, int dmabufFd) override
void addBlendListener(void(*callback)()) override
int addLayer(int dmabufFd, const QSize &size, const QPoint &position, uint drmPixelFormat, uint bytesPerLine) override
void setLayerAlpha(int id, qreal alpha) override
QEglFSKmsVsp2Screen(QEglFSKmsDevice *device, const QKmsOutput &output)
Combined button and popup list for selecting options.