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