vdr-plugin-softhddevice-drm-gles 1.6.2
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 <vdr/osd.h>
23
24#include "pool.h"
25
36
43
48public:
49 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]; };
82 uint8_t *Plane(int idx) { return m_pPlane[idx]; };
86 uint32_t Offset(int idx) { return m_offset[idx]; };
87 uint32_t *Offset(void) { return m_offset; };
89 uint32_t Pitch(int idx) { return m_pitch[idx]; };
90 uint32_t *Pitch(void) { return m_pitch; };
92 uint32_t Size(int idx) { return m_size[idx]; };
93 uint32_t *Size(void) { return m_size; };
94 void SetSize(int idx, uint32_t size) { m_size[idx] = size; };
95 AVFrame *frame = nullptr;
97 void PresentationFinished(void);
98 void SetSizeOnScreen(int x, int y, int w, int h) { m_rectOnScreen.Set(x, y, w, h); };
100
101private:
105
107
108 bool m_dirty;
109
112
114
117 int m_objIdx[4];
119
125
127 bool m_destroyAfterUse = false;
129
130#ifdef USE_GLES
131 struct gbm_bo *m_pBo;
132#endif
133};
134
138class cDrmBufferPool : public cPool<cDrmBuffer> {
139public:
145private:
146 constexpr static int RENDERBUFFERS = 36;
147};
148
151#endif
DRM Buffer Pool.
Definition drmbuffer.h:138
static constexpr int RENDERBUFFERS
number of render video buffers
Definition drmbuffer.h:146
DRM Buffer.
Definition drmbuffer.h:47
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:98
bool m_dirty
true, if the buffer is dirty (it was written to)
Definition drmbuffer.h:108
uint32_t Pitch(int idx)
Definition drmbuffer.h:89
int DmaBufHandle(void)
Definition drmbuffer.h:78
bool m_destroyAfterUse
true, if buffer should be destroyed after use
Definition drmbuffer.h:127
void SetPixFmt(uint32_t pixFmt)
Definition drmbuffer.h:65
int m_objIdx[4]
index of the objects
Definition drmbuffer.h:117
bool m_closeHandleOnDestroy
true, if DMA-BUF handle should be closed on destroy
Definition drmbuffer.h:128
cRect m_rectOnScreen
dimensions on screen - set at pageflip, needed for grab
Definition drmbuffer.h:106
uint32_t Width(void)
Definition drmbuffer.h:60
uint32_t Height(void)
Definition drmbuffer.h:62
int m_numObjects
number of prime objects in the buffer
Definition drmbuffer.h:116
void SetOffset(int idx, uint32_t offset)
Definition drmbuffer.h:88
uint8_t * Plane(int idx)
Definition drmbuffer.h:82
void SetId(int id)
Definition drmbuffer.h:74
uint32_t m_fbId
framebuffer id
Definition drmbuffer.h:110
struct gbm_bo * m_pBo
pointer to the gbm buffer object
Definition drmbuffer.h:131
bool IsPresentationPending(void)
Definition drmbuffer.h:70
void SetNumObjects(int numObjects)
Definition drmbuffer.h:80
void SetSize(int idx, uint32_t size)
Definition drmbuffer.h:94
int NumPlanes(void)
Definition drmbuffer.h:76
uint32_t m_width
buffer width
Definition drmbuffer.h:102
uint32_t m_offset[4]
array of the plane offset
Definition drmbuffer.h:122
void MarkDirty(void)
Definition drmbuffer.h:69
cRect GetScreenRect(void)
Definition drmbuffer.h:99
uint32_t m_pitch[4]
array of the plane pitch
Definition drmbuffer.h:123
uint32_t * Pitch(void)
Definition drmbuffer.h:90
uint32_t Size(int idx)
Definition drmbuffer.h:92
void SetPitch(int idx, uint32_t pitch)
Definition drmbuffer.h:91
uint32_t PrimeHandle(int idx)
Definition drmbuffer.h:83
AVFrame * frame
associated AVFrame
Definition drmbuffer.h:95
void SetHandle(int idx, uint32_t handle)
Definition drmbuffer.h:85
uint32_t m_objectPrimeHandle[4]
primedata objects prime handles (count is numObjects, index is objIdx)
Definition drmbuffer.h:118
int m_dmaBufHandle[4]
DMA-BUF file descriptor.
Definition drmbuffer.h:115
int Id(void)
Definition drmbuffer.h:73
uint32_t m_pixFmt
buffer pixel format
Definition drmbuffer.h:104
uint32_t * PrimeHandle(void)
Definition drmbuffer.h:84
uint32_t PixFmt(void)
Definition drmbuffer.h:64
void SetObjectIndex(int idx, uint32_t objIdx)
Definition drmbuffer.h:81
void SetFdDrm(int fdDrm)
Definition drmbuffer.h:75
int m_drmDeviceFd
drm device file descriptor
Definition drmbuffer.h:111
uint32_t * Offset(void)
Definition drmbuffer.h:87
bool IsDirty(void)
Definition drmbuffer.h:67
uint32_t m_height
buffer height
Definition drmbuffer.h:103
uint32_t Offset(int idx)
Definition drmbuffer.h:86
void SetPresentationPending(bool pending)
Definition drmbuffer.h:71
void SetWidth(uint32_t width)
Definition drmbuffer.h:61
bool m_presentationPending
true, if buffer presentation is pending
Definition drmbuffer.h:126
uint32_t * Size(void)
Definition drmbuffer.h:93
uint8_t * m_pPlane[4]
array of the plane data
Definition drmbuffer.h:120
void SetHeight(uint32_t height)
Definition drmbuffer.h:63
uint32_t m_size[4]
array of the plane size
Definition drmbuffer.h:124
void SetDmaBufHandle(uint32_t fd)
Definition drmbuffer.h:79
uint32_t m_planePrimeHandle[4]
array of the plane handles
Definition drmbuffer.h:121
int m_numPlanes
number of planes in the buffer
Definition drmbuffer.h:113
void SetDestroyAfterUse(bool val)
Definition drmbuffer.h:96
Pool Implementation Template Class.
Definition pool.h:25
cDrmBuffer(void)
Create a new drm buffer.
Definition drmbuffer.cpp:48
cDrmBuffer * FindUninitilized(void)
Find a clean drm buffer from the buffer pool.
void Setup(int, uint32_t, uint32_t, uint32_t, AVDRMFrameDescriptor *, bool)
Setup the buffer.
cDrmBuffer * FindByDmaBufHandle(int)
Find a drm buffer from the buffer pool by a given prime handle.
void FillBlack(void)
Color the buffer black.
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.
void PresentationFinished(void)
The presentation of this buffer has finished.
void Destroy(void)
Clear and destroy the buffer object and its parameters.
Pool Implementation.
uint32_t format
Definition drmbuffer.h:38
uint8_t num_planes
Definition drmbuffer.h:40
struct format_plane_info planes[4]
Definition drmbuffer.h:41
const char * fourcc
Definition drmbuffer.h:39