vdr-plugin-softhddevice-drm-gles 1.6.2
drmdevice.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-or-later
2
13#ifndef __DRMDEVICE_H
14#define __DRMDEVICE_H
15
16#include <cstdint>
17
18#ifdef USE_GLES
19#include <EGL/egl.h>
20#endif
21
22#include <xf86drm.h>
23#include <xf86drmMode.h>
24
25#include "drmplane.h"
26
27#ifdef USE_GLES
28class cDrmBuffer;
29#endif
30
31class cVideoRender;
32
42public:
43 cDrmDevice(cVideoRender *, const char *);
44 ~cDrmDevice(void);
45
46 int Init(void);
47 int Fd(void) { return m_fdDrm; };
48 void Close(void);
49
50 // setters and getters
52
53 uint64_t DisplayWidth(void) { return m_drmModeInfo.hdisplay; };
54 uint64_t DisplayHeight(void) { return m_drmModeInfo.vdisplay; };
55
56 uint32_t CrtcId(void) { return m_crtcId; };
57 int UseZpos(void) { return m_useZpos; };
60
61 cDrmPlane *OsdPlane(void) { return &m_osdPlane; };
62 cDrmPlane *VideoPlane(void) { return &m_videoPlane; };
63 cDrmPlane *PipPlane(void) { return &m_pipPlane; };
64 bool HasPipPlane(void) { return m_pipPlane.GetId(); };
65
66#ifdef USE_GLES
70 int GlInitiated(void) { return m_glInitiated; };
71 struct gbm_surface *GbmSurface(void) { return m_pGbmSurface; };
72
74#endif
75 void SaveCrtc(void);
76 void RestoreCrtc(void);
77 int HandleEvent(void);
78 void InitEvent(void);
79
80 bool CanHandleHdr(void) { return m_hdrMetadata != 0; };
81
82 // drmModeAtomic* wrapper functions
96 int CreateHdrBlob(struct hdr_output_metadata *, size_t, uint32_t *);
99
100private:
102
103 int m_fdDrm = -1;
111
115
116 bool m_useZpos = false;
123
125 int GetPropertyValue(uint32_t, uint32_t, const char *, uint64_t *);
126 uint32_t GetPropertyID(uint32_t, uint32_t, const char *);
127
130#ifdef USE_GLES
133
138
139 int InitEGL(void);
141 int InitGbm(int, int, uint32_t, uint64_t);
142#endif
143};
144
147#endif
DRM Buffer.
Definition drmbuffer.h:47
DRM Device.
Definition drmdevice.h:41
bool m_glInitiated
true, if OpenGL/ES context is initiated
Definition drmdevice.h:137
uint32_t m_userReqDisplayRefreshRate
user requested display refresh rate
Definition drmdevice.h:114
int m_userReqDisplayHeight
user requested display height
Definition drmdevice.h:113
drmModeModeInfo m_drmModeInfo
mode info
Definition drmdevice.h:105
int ModeAtomicCommit(drmModeAtomicReqPtr req, uint32_t flags, void *user_data)
Definition drmdevice.h:84
EGLDisplay EglDisplay(void)
Definition drmdevice.h:68
void ModeAtomicFree(drmModeAtomicReqPtr req)
Definition drmdevice.h:85
uint32_t m_hdrMetadata
property id of HDR_OUTPUT_METADATA
Definition drmdevice.h:108
int GlInitiated(void)
Definition drmdevice.h:70
drmModeAtomicReqPtr ModeAtomicAlloc(void)
Definition drmdevice.h:83
int Fd(void)
Definition drmdevice.h:47
cDrmPlane m_videoPlane
the video drm plane
Definition drmdevice.h:119
struct gbm_surface * m_pGbmSurface
pointer to the gbm surface
Definition drmdevice.h:132
bool HasPipPlane(void)
Definition drmdevice.h:64
EGLSurface EglSurface(void)
Definition drmdevice.h:67
EGLContext m_eglContext
EGL context.
Definition drmdevice.h:136
uint64_t DisplayHeight(void)
Definition drmdevice.h:54
EGLSurface m_eglSurface
EGL surface.
Definition drmdevice.h:134
int m_userReqDisplayWidth
user requested display width
Definition drmdevice.h:112
cDrmPlane m_pipPlane
the pip drm plane
Definition drmdevice.h:122
uint64_t DisplayWidth(void)
Definition drmdevice.h:53
uint64_t ZposPrimary(void)
Definition drmdevice.h:59
drmModeCrtc * m_drmModeCrtcSaved
saved CRTC infos
Definition drmdevice.h:109
struct gbm_surface * GbmSurface(void)
Definition drmdevice.h:71
int m_fdDrm
drm file descriptor
Definition drmdevice.h:103
uint64_t ZposOverlay(void)
Definition drmdevice.h:58
uint64_t m_zposPip
zpos of pip plane
Definition drmdevice.h:121
cDrmPlane * PipPlane(void)
Definition drmdevice.h:63
EGLDisplay m_eglDisplay
EGL display.
Definition drmdevice.h:135
uint32_t CrtcId(void)
Definition drmdevice.h:56
uint32_t m_connectorId
connector id
Definition drmdevice.h:104
cDrmPlane * OsdPlane(void)
Definition drmdevice.h:61
uint32_t m_crtcId
current crtc ID
Definition drmdevice.h:106
EGLContext EglContext(void)
Definition drmdevice.h:69
cDrmPlane * VideoPlane(void)
Definition drmdevice.h:62
uint32_t ConnectorId(void)
Definition drmdevice.h:51
uint32_t m_crtcIndex
current crtc index
Definition drmdevice.h:107
cVideoRender * m_pRender
pointer to cVideoRender object
Definition drmdevice.h:101
uint64_t m_zposPrimary
zpos of primary plane
Definition drmdevice.h:118
drmEventContext m_drmEventCtx
drm event context
Definition drmdevice.h:110
bool CanHandleHdr(void)
Definition drmdevice.h:80
bool m_useZpos
is set, if drm hardware can use zpos
Definition drmdevice.h:116
struct gbm_device * m_pGbmDevice
pointer to the gbm device
Definition drmdevice.h:131
cDrmPlane m_osdPlane
the osd drm plane
Definition drmdevice.h:120
uint64_t m_zposOverlay
zpos of overlay plane
Definition drmdevice.h:117
int UseZpos(void)
Definition drmdevice.h:57
DRM Plane.
Definition drmplane.h:26
uint32_t GetId(void)
Definition drmplane.h:42
Video Renderer.
DRM Plane Header File.
int SetConnectorHdrOutputMetadata(drmModeAtomicReqPtr, uint32_t)
cDrmBuffer * GetBufFromBo(struct gbm_bo *)
Get a drm buffer from a gbm buffer object.
int GetPropertyValue(uint32_t, uint32_t, const char *, uint64_t *)
Get a drm property value.
int SetConnectorColorspace(drmModeAtomicReqPtr, uint32_t)
int InitEGL(void)
Init EGL context.
int CreateModeBlob(uint32_t *)
int CreatePropertyBlob(uint32_t *)
Wrapper to create a property blob.
EGLConfig GetEGLConfig(void)
Get a suitable EGLConfig.
int GetVideoPlaneColorRange(uint64_t *)
int DestroyHdrBlob(uint32_t)
uint32_t GetPropertyID(uint32_t, uint32_t, const char *)
Get a property ID.
int SetVideoPlaneColorEncoding(drmModeAtomicReqPtr, uint32_t)
int SetPropertyRequest(drmModeAtomicReqPtr, uint32_t, uint32_t, const char *, uint64_t)
Add a drm property to an atomic modeset request.
int SetCrtcModeId(drmModeAtomicReqPtr, uint32_t)
int32_t FindCrtcForConnector(const drmModeRes *, const drmModeConnector *)
Find the CRTC_ID for the given connector.
int HandleEvent(void)
Poll for a drm event.
int DestroyModeBlob(uint32_t)
int CreateHdrBlob(struct hdr_output_metadata *, size_t, uint32_t *)
int SetConnectorHdrBlobProperty(uint32_t)
void SaveCrtc(void)
Save information of a CRTC.
~cDrmDevice(void)
Definition drmdevice.cpp:61
void RestoreCrtc(void)
Restore information of a CRTC.
void Close(void)
Close the drm file handle.
int SetConnectorCrtcId(drmModeAtomicReqPtr)
int InitGbm(int, int, uint32_t, uint64_t)
Init gbm device and surface.
int SetCrtcActive(drmModeAtomicReqPtr, uint32_t)
int Init(void)
Initiate the drm device.
int SetVideoPlaneColorRange(drmModeAtomicReqPtr, uint32_t)
void InitEvent(void)
Init the event context.