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