vdr-plugin-softhddevice-drm-gles 1.4.0
drmdevice.h
Go to the documentation of this file.
1
21// @todo: sort out header includes
22
23#ifndef __DRMDEVICE_H
24#define __DRMDEVICE_H
25
26#ifndef __USE_GNU
27#define __USE_GNU
28#endif
29
30#include <stdbool.h>
31#include <unistd.h>
32
33#include <inttypes.h>
34
35#include <libintl.h>
36
37#ifdef USE_GLES
38#include <assert.h>
39#include <EGL/egl.h>
40#endif
41#include <pthread.h>
42#include <errno.h>
43#include <fcntl.h>
44#include <string.h>
45#include <sys/mman.h>
46#include <drm_fourcc.h>
47
48#include "logger.h"
49
50extern "C" {
51#include <libavcodec/avcodec.h>
52#include <libavutil/hwcontext_drm.h>
53#include <libavutil/pixdesc.h>
54#include <libavfilter/buffersink.h>
55#include <libavfilter/buffersrc.h>
56#include <libavutil/opt.h>
57}
58
59#include "misc.h"
60#include "buf2rgb.h"
61
62//#include "videorender.h"
63#include "audio.h"
64#include "drm.h"
65#include "threads.h"
66#include "grab.h"
67
68// save!
69#include "drmplane.h"
70
71/*****************************************************************************
72 * cDrmDevice class
73 ****************************************************************************/
74
76{
77public:
78 cDrmDevice(cVideoRender *, const char *);
79 virtual ~cDrmDevice(void);
80
81 int Init(void);
82 int Fd(void) { return m_fdDrm; };
83 void Close(void);
84
85 // setters and getters
86 uint32_t ConnectorId(void) { return m_connectorId; };
87
88 uint64_t DisplayWidth(void) { return m_drmModeInfo.hdisplay; };
89 uint64_t DisplayHeight(void) { return m_drmModeInfo.vdisplay; };
90
91 uint32_t CrtcId(void) { return m_crtcId; };
92 int UseZpos(void) { return m_useZpos; };
93 uint64_t ZposOverlay(void) { return m_zposOverlay; };
94 uint64_t ZposPrimary(void) { return m_zposPrimary; };
95
96 cDrmPlane *OsdPlane(void) { return &m_osdPlane; };
97 cDrmPlane *VideoPlane(void) { return &m_videoPlane; };
98 cDrmPlane *PipPlane(void) { return &m_pipPlane; };
99
100#ifdef USE_GLES
101 EGLSurface EglSurface(void) { return m_eglSurface; };
102 EGLDisplay EglDisplay(void) { return m_eglDisplay; };
103 EGLContext EglContext(void) { return m_eglContext; };
104 int GlInitiated(void) { return m_glInitiated; };
105 struct gbm_surface *GbmSurface(void) { return m_pGbmSurface; };
106
107 cDrmBuffer *GetBufFromBo(struct gbm_bo *);
108#endif
109 int SetPropertyRequest(drmModeAtomicReqPtr, uint32_t, uint32_t, const char *, uint64_t);
110 void SaveCrtc(void);
111 void RestoreCrtc(void);
112 int HandleEvent(void);
113 int CreatePropertyBlob(uint32_t *);
114 void InitEvent(void);
115
116private:
118
120 uint32_t m_connectorId;
121 drmModeModeInfo m_drmModeInfo;
122 uint32_t m_crtcId;
123 uint32_t m_crtcIndex;
124 drmModeCrtc *m_drmModeCrtcSaved;
125 drmEventContext m_drmEventCtx;
126
130
132 uint64_t m_zposOverlay;
133 uint64_t m_zposPrimary;
136 uint64_t m_zposPip;
138
139 int32_t FindCrtcForConnector(const drmModeRes *, const drmModeConnector *);
140#ifdef USE_GLES
141 struct gbm_device *m_pGbmDevice;
142 struct gbm_surface *m_pGbmSurface;
143
144 EGLSurface m_eglSurface;
145 EGLDisplay m_eglDisplay;
146 EGLContext m_eglContext;
147 bool m_glInitiated;
148
149 int InitEGL(void);
150 EGLConfig GetEGLConfig(void);
151 int InitGbm(int, int, uint32_t, uint64_t);
152#endif
153};
154
155#endif
Audio and alsa module header file.
Some helper functions header file.
uint32_t m_userReqDisplayRefreshRate
user requested display refresh rate
Definition: drmdevice.h:129
int m_userReqDisplayHeight
user requested display height
Definition: drmdevice.h:128
drmModeModeInfo m_drmModeInfo
mode info
Definition: drmdevice.h:121
int CreatePropertyBlob(uint32_t *)
Creates a property blob.
Definition: drmdevice.cpp:951
int Fd(void)
Definition: drmdevice.h:82
cDrmPlane m_videoPlane
the video drm plane
Definition: drmdevice.h:134
cDrmDevice(cVideoRender *, const char *)
cDrmDevice constructor
Definition: drmdevice.cpp:77
int SetPropertyRequest(drmModeAtomicReqPtr, uint32_t, uint32_t, const char *, uint64_t)
Add a property to a request.
Definition: drmdevice.cpp:959
uint64_t DisplayHeight(void)
Definition: drmdevice.h:89
int32_t FindCrtcForConnector(const drmModeRes *, const drmModeConnector *)
Finds the CRTC_ID for the given connector.
Definition: drmdevice.cpp:916
int HandleEvent(void)
Polls for a drm event.
Definition: drmdevice.cpp:1013
int m_userReqDisplayWidth
user requested display width
Definition: drmdevice.h:127
cDrmPlane m_pipPlane
the pip drm plane
Definition: drmdevice.h:137
uint64_t DisplayWidth(void)
Definition: drmdevice.h:88
uint64_t ZposPrimary(void)
Definition: drmdevice.h:94
drmModeCrtc * m_drmModeCrtcSaved
saved CRTC infos
Definition: drmdevice.h:124
int m_fdDrm
drm file descriptor
Definition: drmdevice.h:119
uint64_t ZposOverlay(void)
Definition: drmdevice.h:93
uint64_t m_zposPip
zpos of pip plane
Definition: drmdevice.h:136
cDrmPlane * PipPlane(void)
Definition: drmdevice.h:98
void SaveCrtc(void)
Saves information of a CRTC.
Definition: drmdevice.cpp:993
uint32_t CrtcId(void)
Definition: drmdevice.h:91
virtual ~cDrmDevice(void)
cDrmDevice destructor
Definition: drmdevice.cpp:91
uint32_t m_connectorId
connector id
Definition: drmdevice.h:120
void RestoreCrtc(void)
Restore information of a CRTC.
Definition: drmdevice.cpp:1001
void Close(void)
Close drm file handle.
Definition: drmdevice.cpp:939
cDrmPlane * OsdPlane(void)
Definition: drmdevice.h:96
uint32_t m_crtcId
current crtc ID
Definition: drmdevice.h:122
cDrmPlane * VideoPlane(void)
Definition: drmdevice.h:97
uint32_t ConnectorId(void)
Definition: drmdevice.h:86
uint32_t m_crtcIndex
current crtc index
Definition: drmdevice.h:123
cVideoRender * m_pRender
pointer to cVideoRender object
Definition: drmdevice.h:117
int Init(void)
Initiate the drm device.
Definition: drmdevice.cpp:258
uint64_t m_zposPrimary
zpos of primary plane
Definition: drmdevice.h:133
drmEventContext m_drmEventCtx
drm event context
Definition: drmdevice.h:125
bool m_useZpos
is set, if drm hardware can use zpos
Definition: drmdevice.h:131
cDrmPlane m_osdPlane
the osd drm plane
Definition: drmdevice.h:135
void InitEvent(void)
Init the event context.
Definition: drmdevice.cpp:1021
uint64_t m_zposOverlay
zpos of overlay plane
Definition: drmdevice.h:132
int UseZpos(void)
Definition: drmdevice.h:92
cDrmPlane - DRM plane class
Definition: drmplane.h:30
cVideoRender - Video render class
Definition: videorender.h:122
DRM plane class header.
Grabber header file.
Logger class header file.
Misc function header file.
Thread classes header file.