vdr-plugin-softhddevice-drm-gles 1.4.0
drmbuffer.h
Go to the documentation of this file.
1
20#ifndef __DRMBUFFER_H
21#define __DRMBUFFER_H
22
23extern "C" {
24#include <libavfilter/avfilter.h>
25#include <libavutil/hwcontext_drm.h>
26}
27
28#ifdef USE_GLES
29#include <gbm.h>
30#endif
31
32#include "pool.h"
33#include "misc.h"
34
35#define RENDERBUFFERS 36
36
38{
39 uint8_t bitspp;
40 uint8_t xsub;
41 uint8_t ysub;
42};
43
45{
46 uint32_t format;
47 const char *fourcc;
48 uint8_t num_planes;
50};
51
53public:
54 cDrmBuffer(void);
56#ifdef USE_GLES
57 cDrmBuffer(int, uint32_t, uint32_t, uint32_t, struct gbm_bo *);
58#endif
59 virtual ~cDrmBuffer(void);
60
61 void Setup(int, uint32_t, uint32_t, uint32_t, AVDRMFrameDescriptor *, bool);
62 void Destroy(void);
63 void InitBo(int, uint32_t, uint32_t, uint32_t, struct gbm_bo *);
64 void FillBlack(void);
65
66 // setter and getter methods
67 uint32_t Width(void) { return m_width; };
68 void SetWidth(uint32_t width) { m_width = width; };
69 uint32_t Height(void) { return m_height; };
70 void SetHeight(uint32_t height) { m_height = height; };
71 uint32_t PixFmt(void) { return m_pixFmt; };
72 void SetPixFmt(uint32_t pixFmt) { m_pixFmt = pixFmt; };
73
74 bool IsDirty(void) { return m_dirty; };
75 void MarkClean(void) { m_dirty = false; };
76 void MarkDirty(void) { m_dirty = true; };
78 void SetPresentationPending(bool pending) { m_presentationPending = pending; };
79
80 int Id(void) { return m_fbId; };
81 void SetId(int id) { m_fbId = id; };
82 void SetFdDrm(int fdDrm) { m_drmDeviceFd = fdDrm; };
83 int NumPlanes(void) { return m_numPlanes; };
84 void SetNumPlanes(int numPlanes) { m_numPlanes = numPlanes; };
85 int DmaBufHandle(void) { return m_dmaBufHandle[0]; };
86 void SetDmaBufHandle(uint32_t fd) { m_dmaBufHandle[0] = fd; };
87 void SetNumObjects(int numObjects) { m_numObjects = numObjects; };
88 void SetObjectIndex(int idx, uint32_t objIdx) { m_objIdx[idx] = objIdx; };
89 uint8_t *Plane(int idx) { return m_pPlane[idx]; };
90 uint32_t PrimeHandle(int idx) { return m_planePrimeHandle[idx]; };
91 uint32_t *PrimeHandle(void) { return m_planePrimeHandle; };
92 void SetHandle(int idx, uint32_t handle) { m_planePrimeHandle[idx] = handle; };
93 uint32_t Offset(int idx) { return m_offset[idx]; };
94 uint32_t *Offset(void) { return m_offset; };
95 void SetOffset(int idx, uint32_t offset) { m_offset[idx] = offset; };
96 uint32_t Pitch(int idx) { return m_pitch[idx]; };
97 uint32_t *Pitch(void) { return m_pitch; };
98 void SetPitch(int idx, uint32_t pitch) { m_pitch[idx] = pitch; };
99 uint32_t Size(int idx) { return m_size[idx]; };
100 uint32_t *Size(void) { return m_size; };
101 void SetSize(int idx, uint32_t size) { m_size[idx] = size; };
102 AVFrame *frame = nullptr;
103 void SetDestroyAfterUse(bool val) { m_destroyAfterUse = val; };
104 void PresentationFinished(void);
105
106private:
107 uint32_t m_width;
108 uint32_t m_height;
109 uint32_t m_pixFmt;
110
111 bool m_dirty;
112
113 uint32_t m_fbId;
115
117
120 int m_objIdx[4];
122
123 uint8_t *m_pPlane[4];
124 uint32_t m_planePrimeHandle[4];
125 uint32_t m_offset[4];
126 uint32_t m_pitch[4];
127 uint32_t m_size[4]{0};
128
130 bool m_destroyAfterUse = false;
132
133#ifdef USE_GLES
134 struct gbm_bo *m_pBo;
135#endif
136};
137
138class cDrmBufferPool : public cPool<cDrmBuffer> {
139public:
145};
146
147#endif
cDrmBuffer * FindUninitilized(void)
Definition: drmbuffer.cpp:423
cDrmBuffer * FindByDmaBufHandle(int)
Definition: drmbuffer.cpp:413
cDrmBuffer * FindNoPresentationPending(void)
Definition: drmbuffer.cpp:436
void DestroyAllExcept(cDrmBuffer *)
Definition: drmbuffer.cpp:446
void MarkClean(void)
Definition: drmbuffer.h:75
void SetNumPlanes(int numPlanes)
Definition: drmbuffer.h:84
bool m_dirty
true, if the buffer is dirty (it was written to)
Definition: drmbuffer.h:111
uint32_t Pitch(int idx)
Definition: drmbuffer.h:96
cDrmBuffer(void)
cDrmBuffer constructor
Definition: drmbuffer.cpp:40
int DmaBufHandle(void)
Definition: drmbuffer.h:85
bool m_destroyAfterUse
true, if buffer should be destroyed after use
Definition: drmbuffer.h:130
void SetPixFmt(uint32_t pixFmt)
Definition: drmbuffer.h:72
int m_objIdx[4]
index of the objects
Definition: drmbuffer.h:120
bool m_closeHandleOnDestroy
true, if DMA-BUF handle should be closed on destroy
Definition: drmbuffer.h:131
void Setup(int, uint32_t, uint32_t, uint32_t, AVDRMFrameDescriptor *, bool)
Setup the buffer.
Definition: drmbuffer.cpp:270
uint32_t Width(void)
Definition: drmbuffer.h:67
void InitBo(int, uint32_t, uint32_t, uint32_t, struct gbm_bo *)
uint32_t Height(void)
Definition: drmbuffer.h:69
int m_numObjects
number of prime objects in the buffer
Definition: drmbuffer.h:119
void SetOffset(int idx, uint32_t offset)
Definition: drmbuffer.h:95
uint8_t * Plane(int idx)
Definition: drmbuffer.h:89
void SetId(int id)
Definition: drmbuffer.h:81
uint32_t m_fbId
framebuffer id
Definition: drmbuffer.h:113
bool IsPresentationPending(void)
Definition: drmbuffer.h:77
virtual ~cDrmBuffer(void)
cDrmBuffer destructor
Definition: drmbuffer.cpp:157
void SetNumObjects(int numObjects)
Definition: drmbuffer.h:87
void SetSize(int idx, uint32_t size)
Definition: drmbuffer.h:101
int NumPlanes(void)
Definition: drmbuffer.h:83
uint32_t m_width
buffer width
Definition: drmbuffer.h:107
uint32_t m_offset[4]
array of the plane offset
Definition: drmbuffer.h:125
void MarkDirty(void)
Definition: drmbuffer.h:76
uint32_t m_pitch[4]
array of the plane pitch
Definition: drmbuffer.h:126
uint32_t * Pitch(void)
Definition: drmbuffer.h:97
uint32_t Size(int idx)
Definition: drmbuffer.h:99
void SetPitch(int idx, uint32_t pitch)
Definition: drmbuffer.h:98
void FillBlack(void)
Color the buffer black.
Definition: drmbuffer.cpp:404
uint32_t PrimeHandle(int idx)
Definition: drmbuffer.h:90
AVFrame * frame
associated AVFrame
Definition: drmbuffer.h:102
void SetHandle(int idx, uint32_t handle)
Definition: drmbuffer.h:92
uint32_t m_objectPrimeHandle[4]
primedata objects prime handles (count is numObjects, index is objIdx)
Definition: drmbuffer.h:121
int m_dmaBufHandle[4]
DMA-BUF file descriptor.
Definition: drmbuffer.h:118
int Id(void)
Definition: drmbuffer.h:80
uint32_t m_pixFmt
buffer pixel format
Definition: drmbuffer.h:109
uint32_t * PrimeHandle(void)
Definition: drmbuffer.h:91
uint32_t PixFmt(void)
Definition: drmbuffer.h:71
void SetObjectIndex(int idx, uint32_t objIdx)
Definition: drmbuffer.h:88
void SetFdDrm(int fdDrm)
Definition: drmbuffer.h:82
int m_drmDeviceFd
drm device file descriptor
Definition: drmbuffer.h:114
uint32_t * Offset(void)
Definition: drmbuffer.h:94
bool IsDirty(void)
Definition: drmbuffer.h:74
uint32_t m_height
buffer height
Definition: drmbuffer.h:108
uint32_t Offset(int idx)
Definition: drmbuffer.h:93
void SetPresentationPending(bool pending)
Definition: drmbuffer.h:78
void SetWidth(uint32_t width)
Definition: drmbuffer.h:68
void PresentationFinished(void)
Definition: drmbuffer.cpp:456
bool m_presentationPending
true, if buffer is pending presentation
Definition: drmbuffer.h:129
uint32_t * Size(void)
Definition: drmbuffer.h:100
uint8_t * m_pPlane[4]
array of the plane data
Definition: drmbuffer.h:123
void SetHeight(uint32_t height)
Definition: drmbuffer.h:70
void Destroy(void)
Clear and destroy the buffer object and its parameters.
Definition: drmbuffer.cpp:164
uint32_t m_size[4]
array of the plane size
Definition: drmbuffer.h:127
void SetDmaBufHandle(uint32_t fd)
Definition: drmbuffer.h:86
uint32_t m_planePrimeHandle[4]
array of the plane handles
Definition: drmbuffer.h:124
int m_numPlanes
number of planes in the buffer
Definition: drmbuffer.h:116
void SetDestroyAfterUse(bool val)
Definition: drmbuffer.h:103
Definition: pool.h:25
#define RENDERBUFFERS
number of render video buffers
Definition: drmbuffer.h:35
Misc function header file.
Pool class header file.
uint32_t format
Definition: drmbuffer.h:46
uint8_t num_planes
Definition: drmbuffer.h:48
struct format_plane_info planes[4]
Definition: drmbuffer.h:49
const char * fourcc
Definition: drmbuffer.h:47
uint8_t bitspp
Definition: drmbuffer.h:39