vdr-plugin-softhddevice-drm-gles 1.6.7
drmbuffer.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-or-later
2
12#ifndef __DRMBUFFER_H
13#define __DRMBUFFER_H
14
15#include <cstdint>
16
17extern "C" {
18#include <libavutil/frame.h>
19#include <libavutil/hwcontext_drm.h>
20}
21
22#include <drm_fourcc.h>
23
24#include <vdr/osd.h>
25
26#include "pool.h"
27
34
42
49public:
50 cDrmBuffer(void);
51#ifdef USE_GLES
52 cDrmBuffer(int, uint32_t, uint32_t, uint32_t, struct gbm_bo *);
53#endif
54
56 void Destroy(void);
57 void FillBlack(void);
58
59 // setter and getter methods
60 uint32_t Width(void) { return m_width; };
61 void SetWidth(uint32_t width) { m_width = width; };
62 uint32_t Height(void) { return m_height; };
63 void SetHeight(uint32_t height) { m_height = height; };
64 uint32_t PixFmt(void) { return m_pixFmt; };
66
67 bool IsDirty(void) { return m_dirty; };
68 void MarkClean(void) { m_dirty = false; };
69 void MarkDirty(void) { m_dirty = true; };
72
73 int Id(void) { return m_fbId; };
74 void SetId(int id) { m_fbId = id; };
76 int NumPlanes(void) { return m_numPlanes; };
78 int DmaBufHandle(void) { return m_dmaBufHandle[0]; };
79 int DmaBufHandle(int idx) { return m_dmaBufHandle[idx]; };
82 int NumObjects(void) { return m_numObjects; };
84 int ObjectIndex(int idx) { return m_objIdx[idx]; };
85 uint8_t *Plane(int idx) { return m_pPlane[idx]; };
89 uint32_t Offset(int idx) { return m_offset[idx]; };
90 uint32_t *Offset(void) { return m_offset; };
92 uint32_t Pitch(int idx) { return m_pitch[idx]; };
93 uint32_t *Pitch(void) { return m_pitch; };
95 uint32_t Size(int idx) { return m_size[idx]; };
96 uint32_t *Size(void) { return m_size; };
97 void SetSize(int idx, uint32_t size) { m_size[idx] = size; };
98 uint64_t Modifier(void) { return m_modifier; };
99 AVFrame *frame = nullptr;
101 void PresentationFinished(void);
102 void SetSizeOnScreen(int x, int y, int w, int h) { m_rectOnScreen.Set(x, y, w, h); };
104
105private:
109
111
112 bool m_dirty;
113
116
118
121 int m_objIdx[4];
123
130
132 bool m_destroyAfterUse = false;
134
135#ifdef USE_GLES
136 struct gbm_bo *m_pBo;
137#endif
138};
139
145class cDrmBufferPool : public cPool<cDrmBuffer> {
146public:
152private:
153 constexpr static int RENDERBUFFERS = 36;
154};
155
156
157#endif
DRM Buffer Pool.
Definition drmbuffer.h:145
cDrmBuffer * FindUninitilized(void)
Find a clean drm buffer from the buffer pool.
static constexpr int RENDERBUFFERS
number of render video buffers
Definition drmbuffer.h:153
cDrmBuffer * FindByDmaBufHandle(int)
Find a drm buffer from the buffer pool by a given prime handle.
cDrmBuffer * FindNoPresentationPending(void)
Find a dirty drm buffer from the buffer pool which presentation has finished.
void DestroyAllExcept(cDrmBuffer *)
Destroy all drm buffers except the given one.
DRM Buffer.
Definition drmbuffer.h:48
void MarkClean(void)
Definition drmbuffer.h:68
void SetNumPlanes(int numPlanes)
Definition drmbuffer.h:77
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
int DmaBufHandle(int idx)
Definition drmbuffer.h:79
uint32_t Pitch(int idx)
Definition drmbuffer.h:92
cDrmBuffer(void)
Create a new drm buffer.
Definition drmbuffer.cpp:43
int DmaBufHandle(void)
Definition drmbuffer.h:78
bool m_destroyAfterUse
true, if buffer should be destroyed after use
Definition drmbuffer.h:132
void SetPixFmt(uint32_t pixFmt)
Definition drmbuffer.h:65
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:133
void Setup(int, uint32_t, uint32_t, uint32_t, AVDRMFrameDescriptor *, bool)
Setup the buffer.
uint64_t Modifier(void)
Definition drmbuffer.h:98
cRect m_rectOnScreen
dimensions on screen - set at pageflip, needed for grab
Definition drmbuffer.h:110
uint32_t Width(void)
Definition drmbuffer.h:60
uint64_t m_modifier
Definition drmbuffer.h:129
uint32_t Height(void)
Definition drmbuffer.h:62
int m_numObjects
number of prime objects in the buffer
Definition drmbuffer.h:120
void SetOffset(int idx, uint32_t offset)
Definition drmbuffer.h:91
uint8_t * Plane(int idx)
Definition drmbuffer.h:85
void SetId(int id)
Definition drmbuffer.h:74
int NumObjects(void)
Definition drmbuffer.h:82
uint32_t m_fbId
framebuffer id
Definition drmbuffer.h:114
struct gbm_bo * m_pBo
pointer to the gbm buffer object
Definition drmbuffer.h:136
bool IsPresentationPending(void)
Definition drmbuffer.h:70
void SetNumObjects(int numObjects)
Definition drmbuffer.h:81
void SetSize(int idx, uint32_t size)
Definition drmbuffer.h:97
int NumPlanes(void)
Definition drmbuffer.h:76
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:69
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:93
uint32_t Size(int idx)
Definition drmbuffer.h:95
void SetPitch(int idx, uint32_t pitch)
Definition drmbuffer.h:94
void FillBlack(void)
Color the buffer black.
uint32_t PrimeHandle(int idx)
Definition drmbuffer.h:86
AVFrame * frame
associated AVFrame
Definition drmbuffer.h:99
void SetHandle(int idx, uint32_t handle)
Definition drmbuffer.h:88
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:73
uint32_t m_pixFmt
buffer pixel format
Definition drmbuffer.h:108
uint32_t * PrimeHandle(void)
Definition drmbuffer.h:87
uint32_t PixFmt(void)
Definition drmbuffer.h:64
void SetObjectIndex(int idx, uint32_t objIdx)
Definition drmbuffer.h:83
void SetFdDrm(int fdDrm)
Definition drmbuffer.h:75
int m_drmDeviceFd
drm device file descriptor
Definition drmbuffer.h:115
uint32_t * Offset(void)
Definition drmbuffer.h:90
bool IsDirty(void)
Definition drmbuffer.h:67
uint32_t m_height
buffer height
Definition drmbuffer.h:107
uint32_t Offset(int idx)
Definition drmbuffer.h:89
void SetPresentationPending(bool pending)
Definition drmbuffer.h:71
void SetWidth(uint32_t width)
Definition drmbuffer.h:61
void PresentationFinished(void)
The presentation of this buffer has finished.
bool m_presentationPending
true, if buffer presentation is pending
Definition drmbuffer.h:131
uint32_t * Size(void)
Definition drmbuffer.h:96
uint8_t * m_pPlane[4]
array of the plane data
Definition drmbuffer.h:124
void SetHeight(uint32_t height)
Definition drmbuffer.h:63
void Destroy(void)
Clear and destroy the buffer object and its parameters.
Definition drmbuffer.cpp:90
uint32_t m_size[4]
array of the plane size
Definition drmbuffer.h:128
int ObjectIndex(int idx)
Definition drmbuffer.h:84
void SetDmaBufHandle(uint32_t fd)
Definition drmbuffer.h:80
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
Pool Implementation Template Class.
Definition pool.h:22
Pool Implementation.
uint32_t format
Definition drmbuffer.h:37
uint8_t num_planes
Definition drmbuffer.h:39
struct format_plane_info planes[4]
Definition drmbuffer.h:40
const char * fourcc
Definition drmbuffer.h:38