vdr-plugin-softhddevice-drm-gles 1.6.4-d0291bb
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
44public:
45 cDrmDevice(cVideoRender *, const char *, const char *);
46 ~cDrmDevice(void);
47
48 int Init(void);
49 int Fd(void) { return m_fdDrm; };
50 void Close(void);
51
52 // setters and getters
54
55 uint64_t DisplayWidth(void) { return m_drmModeInfo.hdisplay; };
56 uint64_t DisplayHeight(void) { return m_drmModeInfo.vdisplay; };
57
58 uint32_t CrtcId(void) { return m_crtcId; };
59 int UseZpos(void) { return m_useZpos; };
62
63 cDrmPlane *OsdPlane(void) { return &m_osdPlane; };
64 cDrmPlane *VideoPlane(void) { return &m_videoPlane; };
65 cDrmPlane *PipPlane(void) { return &m_pipPlane; };
66 bool HasPipPlane(void) { return m_pipPlane.GetId(); };
67
68#ifdef USE_GLES
72 int GlInitiated(void) { return m_glInitiated; };
73 struct gbm_surface *GbmSurface(void) { return m_pGbmSurface; };
74
76#endif
77 void SaveCrtc(void);
78 void RestoreCrtc(void);
79 int HandleEvent(void);
80 void InitEvent(void);
81
82 bool CanHandleHdr(void) { return m_hdrMetadata != 0; };
83
84 // drmModeAtomic* wrapper functions
98 int CreateHdrBlob(struct hdr_output_metadata *, size_t, uint32_t *);
101
102private:
104
105 int m_fdDrm = -1;
113
114 const char *m_userDrmDevice = nullptr;
118
119 bool m_useZpos = false;
126
128 int GetPropertyValue(uint32_t, uint32_t, const char *, uint64_t *);
129 uint32_t GetPropertyID(uint32_t, uint32_t, const char *);
130
133#ifdef USE_GLES
136
141
142 int InitEGL(void);
144 int InitGbm(int, int, uint32_t, uint64_t);
145#endif
146};
147
148#endif
DRM Buffer.
Definition drmbuffer.h:46
DRM Device.
Definition drmdevice.h:43
bool m_glInitiated
true, if OpenGL/ES context is initiated
Definition drmdevice.h:140
uint32_t m_userReqDisplayRefreshRate
user requested display refresh rate
Definition drmdevice.h:117
int SetConnectorHdrOutputMetadata(drmModeAtomicReqPtr, uint32_t)
int m_userReqDisplayHeight
user requested display height
Definition drmdevice.h:116
drmModeModeInfo m_drmModeInfo
mode info
Definition drmdevice.h:107
int ModeAtomicCommit(drmModeAtomicReqPtr req, uint32_t flags, void *user_data)
Definition drmdevice.h:86
cDrmBuffer * GetBufFromBo(struct gbm_bo *)
Get a drm buffer from a gbm buffer object.
EGLDisplay EglDisplay(void)
Definition drmdevice.h:70
int GetPropertyValue(uint32_t, uint32_t, const char *, uint64_t *)
Get a drm property value.
void ModeAtomicFree(drmModeAtomicReqPtr req)
Definition drmdevice.h:87
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.
uint32_t m_hdrMetadata
property id of HDR_OUTPUT_METADATA
Definition drmdevice.h:110
int GlInitiated(void)
Definition drmdevice.h:72
drmModeAtomicReqPtr ModeAtomicAlloc(void)
Definition drmdevice.h:85
int Fd(void)
Definition drmdevice.h:49
int GetVideoPlaneColorRange(uint64_t *)
cDrmPlane m_videoPlane
the video drm plane
Definition drmdevice.h:122
int DestroyHdrBlob(uint32_t)
struct gbm_surface * m_pGbmSurface
pointer to the gbm surface
Definition drmdevice.h:135
uint32_t GetPropertyID(uint32_t, uint32_t, const char *)
Get a property ID.
int SetVideoPlaneColorEncoding(drmModeAtomicReqPtr, uint32_t)
bool HasPipPlane(void)
Definition drmdevice.h:66
EGLSurface EglSurface(void)
Definition drmdevice.h:69
EGLContext m_eglContext
EGL context.
Definition drmdevice.h:139
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)
uint64_t DisplayHeight(void)
Definition drmdevice.h:56
int32_t FindCrtcForConnector(const drmModeRes *, const drmModeConnector *)
Find the CRTC_ID for the given connector.
EGLSurface m_eglSurface
EGL surface.
Definition drmdevice.h:137
int HandleEvent(void)
Poll for a drm event.
int m_userReqDisplayWidth
user requested display width
Definition drmdevice.h:115
int DestroyModeBlob(uint32_t)
cDrmPlane m_pipPlane
the pip drm plane
Definition drmdevice.h:125
uint64_t DisplayWidth(void)
Definition drmdevice.h:55
uint64_t ZposPrimary(void)
Definition drmdevice.h:61
drmModeCrtc * m_drmModeCrtcSaved
saved CRTC infos
Definition drmdevice.h:111
int CreateHdrBlob(struct hdr_output_metadata *, size_t, uint32_t *)
struct gbm_surface * GbmSurface(void)
Definition drmdevice.h:73
int m_fdDrm
drm file descriptor
Definition drmdevice.h:105
uint64_t ZposOverlay(void)
Definition drmdevice.h:60
uint64_t m_zposPip
zpos of pip plane
Definition drmdevice.h:124
int SetConnectorHdrBlobProperty(uint32_t)
cDrmPlane * PipPlane(void)
Definition drmdevice.h:65
EGLDisplay m_eglDisplay
EGL display.
Definition drmdevice.h:138
void SaveCrtc(void)
Save information of a CRTC.
uint32_t CrtcId(void)
Definition drmdevice.h:58
~cDrmDevice(void)
Definition drmdevice.cpp:55
uint32_t m_connectorId
connector id
Definition drmdevice.h:106
void RestoreCrtc(void)
Restore information of a CRTC.
void Close(void)
Close the drm file handle.
cDrmPlane * OsdPlane(void)
Definition drmdevice.h:63
uint32_t m_crtcId
current crtc ID
Definition drmdevice.h:108
int SetConnectorCrtcId(drmModeAtomicReqPtr)
EGLContext EglContext(void)
Definition drmdevice.h:71
cDrmPlane * VideoPlane(void)
Definition drmdevice.h:64
int InitGbm(int, int, uint32_t, uint64_t)
Init gbm device and surface.
uint32_t ConnectorId(void)
Definition drmdevice.h:53
uint32_t m_crtcIndex
current crtc index
Definition drmdevice.h:109
int SetCrtcActive(drmModeAtomicReqPtr, uint32_t)
cVideoRender * m_pRender
pointer to cVideoRender object
Definition drmdevice.h:103
int Init(void)
Initiate the drm device.
uint64_t m_zposPrimary
zpos of primary plane
Definition drmdevice.h:121
drmEventContext m_drmEventCtx
drm event context
Definition drmdevice.h:112
bool CanHandleHdr(void)
Definition drmdevice.h:82
bool m_useZpos
is set, if drm hardware can use zpos
Definition drmdevice.h:119
struct gbm_device * m_pGbmDevice
pointer to the gbm device
Definition drmdevice.h:134
cDrmPlane m_osdPlane
the osd drm plane
Definition drmdevice.h:123
int SetVideoPlaneColorRange(drmModeAtomicReqPtr, uint32_t)
void InitEvent(void)
Init the event context.
const char * m_userDrmDevice
user requested drm device
Definition drmdevice.h:114
uint64_t m_zposOverlay
zpos of overlay plane
Definition drmdevice.h:120
int UseZpos(void)
Definition drmdevice.h:59
DRM Plane.
Definition drmplane.h:23
uint32_t GetId(void)
Definition drmplane.h:39
Video Renderer.
DRM Plane Header File.
EGLConfig GetEGLConfig(void)
Get a suitable EGLConfig.