vdr-plugin-softhddevice-drm-gles 1.7.3-98a2ef7
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
34public:
35 cDrmBuffer(void);
36#ifdef USE_GLES
37 cDrmBuffer(int, uint32_t, uint32_t, uint32_t, struct gbm_bo *);
38#endif
39
41 void Destroy(void);
42 void FillBlack(void);
43
44 // setter and getter methods
45 uint32_t Width(void) { return m_width; };
46 void SetWidth(uint32_t width) { m_width = width; };
47 uint32_t Height(void) { return m_height; };
48 void SetHeight(uint32_t height) { m_height = height; };
49 uint32_t PixFmt(void) { return m_pixFmt; };
51
52 bool IsDirty(void) { return m_dirty; };
53 void MarkClean(void) { m_dirty = false; };
54 void MarkDirty(void) { m_dirty = true; };
57
58 int Id(void) { return m_fbId; };
59 void SetId(int id) { m_fbId = id; };
61 int NumPlanes(void) { return m_numPlanes; };
63 int DmaBufHandle(void) { return m_dmaBufHandle[0]; };
64 int DmaBufHandle(int idx) { return m_dmaBufHandle[idx]; };
67 int NumObjects(void) { return m_numObjects; };
69 int ObjectIndex(int idx) { return m_objIdx[idx]; };
70 uint8_t *Plane(int idx) { return m_pPlane[idx]; };
74 uint32_t Offset(int idx) { return m_offset[idx]; };
75 uint32_t *Offset(void) { return m_offset; };
77 uint32_t Pitch(int idx) { return m_pitch[idx]; };
78 uint32_t *Pitch(void) { return m_pitch; };
80 uint32_t Size(int idx) { return m_size[idx]; };
81 uint32_t *Size(void) { return m_size; };
82 void SetSize(int idx, uint32_t size) { m_size[idx] = size; };
83 uint64_t Modifier(void) { return m_modifier; };
84 AVFrame *frame = nullptr;
86 void PresentationFinished(void);
87 void SetSizeOnScreen(int x, int y, int w, int h) { m_rectOnScreen.Set(x, y, w, h); };
89
90private:
94
96
97 bool m_dirty;
98
101
103
106 int m_objIdx[4];
108
115
117 bool m_destroyAfterUse = false;
119
120#ifdef USE_GLES
121 struct gbm_bo *m_pBo;
122#endif
123};
124
130class cDrmBufferPool : public cPool<cDrmBuffer> {
131public:
137private:
138 constexpr static int RENDERBUFFERS = 36;
139};
140
141
142#endif
DRM Buffer Pool.
Definition drmbuffer.h:130
cDrmBuffer * FindUninitilized(void)
Find a clean drm buffer from the buffer pool.
static constexpr int RENDERBUFFERS
number of render video buffers
Definition drmbuffer.h:138
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:33
void MarkClean(void)
Definition drmbuffer.h:53
void SetNumPlanes(int numPlanes)
Definition drmbuffer.h:62
void SetSizeOnScreen(int x, int y, int w, int h)
Definition drmbuffer.h:87
bool m_dirty
true, if the buffer is dirty (it was written to)
Definition drmbuffer.h:97
int DmaBufHandle(int idx)
Definition drmbuffer.h:64
uint32_t Pitch(int idx)
Definition drmbuffer.h:77
cDrmBuffer(void)
Create a new drm buffer.
Definition drmbuffer.cpp:43
int DmaBufHandle(void)
Definition drmbuffer.h:63
bool m_destroyAfterUse
true, if buffer should be destroyed after use
Definition drmbuffer.h:117
void SetPixFmt(uint32_t pixFmt)
Definition drmbuffer.h:50
int m_objIdx[4]
index of the objects
Definition drmbuffer.h:106
bool m_closeHandleOnDestroy
true, if DMA-BUF handle should be closed on destroy
Definition drmbuffer.h:118
void Setup(int, uint32_t, uint32_t, uint32_t, AVDRMFrameDescriptor *, bool)
Setup the buffer.
uint64_t Modifier(void)
Definition drmbuffer.h:83
cRect m_rectOnScreen
dimensions on screen - set at pageflip, needed for grab
Definition drmbuffer.h:95
uint32_t Width(void)
Definition drmbuffer.h:45
uint64_t m_modifier
Definition drmbuffer.h:114
uint32_t Height(void)
Definition drmbuffer.h:47
int m_numObjects
number of prime objects in the buffer
Definition drmbuffer.h:105
void SetOffset(int idx, uint32_t offset)
Definition drmbuffer.h:76
uint8_t * Plane(int idx)
Definition drmbuffer.h:70
void SetId(int id)
Definition drmbuffer.h:59
int NumObjects(void)
Definition drmbuffer.h:67
uint32_t m_fbId
framebuffer id
Definition drmbuffer.h:99
struct gbm_bo * m_pBo
pointer to the gbm buffer object
Definition drmbuffer.h:121
bool IsPresentationPending(void)
Definition drmbuffer.h:55
void SetNumObjects(int numObjects)
Definition drmbuffer.h:66
void SetSize(int idx, uint32_t size)
Definition drmbuffer.h:82
int NumPlanes(void)
Definition drmbuffer.h:61
uint32_t m_width
buffer width
Definition drmbuffer.h:91
uint32_t m_offset[4]
array of the plane offset
Definition drmbuffer.h:111
void MarkDirty(void)
Definition drmbuffer.h:54
cRect GetScreenRect(void)
Definition drmbuffer.h:88
uint32_t m_pitch[4]
array of the plane pitch
Definition drmbuffer.h:112
uint32_t * Pitch(void)
Definition drmbuffer.h:78
uint32_t Size(int idx)
Definition drmbuffer.h:80
void SetPitch(int idx, uint32_t pitch)
Definition drmbuffer.h:79
void FillBlack(void)
Color the buffer black.
uint32_t PrimeHandle(int idx)
Definition drmbuffer.h:71
AVFrame * frame
associated AVFrame
Definition drmbuffer.h:84
void SetHandle(int idx, uint32_t handle)
Definition drmbuffer.h:73
uint32_t m_objectPrimeHandle[4]
primedata objects prime handles (count is numObjects, index is objIdx)
Definition drmbuffer.h:107
int m_dmaBufHandle[4]
DMA-BUF file descriptor.
Definition drmbuffer.h:104
int Id(void)
Definition drmbuffer.h:58
uint32_t m_pixFmt
buffer pixel format
Definition drmbuffer.h:93
uint32_t * PrimeHandle(void)
Definition drmbuffer.h:72
uint32_t PixFmt(void)
Definition drmbuffer.h:49
void SetObjectIndex(int idx, uint32_t objIdx)
Definition drmbuffer.h:68
void SetFdDrm(int fdDrm)
Definition drmbuffer.h:60
int m_drmDeviceFd
drm device file descriptor
Definition drmbuffer.h:100
uint32_t * Offset(void)
Definition drmbuffer.h:75
bool IsDirty(void)
Definition drmbuffer.h:52
uint32_t m_height
buffer height
Definition drmbuffer.h:92
uint32_t Offset(int idx)
Definition drmbuffer.h:74
void SetPresentationPending(bool pending)
Definition drmbuffer.h:56
void SetWidth(uint32_t width)
Definition drmbuffer.h:46
void PresentationFinished(void)
The presentation of this buffer has finished.
bool m_presentationPending
true, if buffer presentation is pending
Definition drmbuffer.h:116
uint32_t * Size(void)
Definition drmbuffer.h:81
uint8_t * m_pPlane[4]
array of the plane data
Definition drmbuffer.h:109
void SetHeight(uint32_t height)
Definition drmbuffer.h:48
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:113
int ObjectIndex(int idx)
Definition drmbuffer.h:69
void SetDmaBufHandle(uint32_t fd)
Definition drmbuffer.h:65
uint32_t m_planePrimeHandle[4]
array of the plane handles
Definition drmbuffer.h:110
int m_numPlanes
number of planes in the buffer
Definition drmbuffer.h:102
void SetDestroyAfterUse(bool val)
Definition drmbuffer.h:85
Pool Implementation Template Class.
Definition pool.h:22
Pool Implementation.