vdr-plugin-softhddevice-drm-gles 1.6.2
softhdosdprovider.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-or-later
2
18#include "dummyosd.h"
19#include "logger.h"
20#ifdef USE_GLES
21#include "openglosd.h"
22#endif
23#include "softhddevice.h"
24#include "softhdosd.h"
25#include "softhdosdprovider.h"
26
34/*****************************************************************************
35 * OSD provider
36 ****************************************************************************/
37
42 : cOsdProvider(),
43 m_pDevice(device)
44{
45 LOGDEBUG2(L_OSD, "osdprovider: %s:", __FUNCTION__);
46}
47
52{
53 LOGDEBUG2(L_OSD, "osdprovider %s:", __FUNCTION__);
54
57#ifdef USE_GLES
60#endif
61 }
62}
63
74{
75#ifdef USE_GLES
76 if (m_pDevice->IsDetached()) {
77 LOGDEBUG("osdprovider: %s: %d, %d, %d, device detached, using dummy osd", __FUNCTION__, left, top, level);
78 return m_pOsd = new cDummyOsd(left, top, level);
79 }
80
82 LOGDEBUG("osdprovider: %s: %d, %d, %d, OpenGL disabled, using software rendering", __FUNCTION__, left, top, level);
83 return m_pOsd = new cSoftOsd(left, top, level, m_pDevice);
84 }
85
86 if (StartOpenGlThread()) {
87 LOGDEBUG2(L_OSD, "osdprovider: %s: %d, %d, %d, using OpenGL OSD support", __FUNCTION__, left, top, level);
89 }
90
91 LOGDEBUG("osdprovider: %s: %d, %d, %d, OpenGL failed, using software rendering", __FUNCTION__, left, top, 999);
93 return m_pOsd = new cSoftOsd(left, top, 999, m_pDevice);
94#else
95 if (m_pDevice->IsDetached()) {
96 LOGDEBUG("osdprovider: %s: %d, %d, %d, device detached, using dummy osd", __FUNCTION__, left, top, level);
97 return m_pOsd = new cDummyOsd(left, top, level);
98 }
99
100 LOGDEBUG2(L_OSD, "osdprovider: %s: %d, %d, %d", __FUNCTION__, left, top, level);
101 return m_pOsd = new cSoftOsd(left, top, level, m_pDevice);
102#endif
103}
104
105#ifdef USE_GLES
110 // cleanup OpenGL context
113 cSoftOsdProvider::UpdateOsdSize();
114}
115
121 LOGDEBUG2(L_OPENGL, "osdprovider: %s: OpenGL OSD disabled, OpenGL worker thread NOT started", __FUNCTION__);
122 return false;
123 }
124
125 if (m_pOglThread.get()) {
126 if (m_pOglThread->Active()) {
127 return true;
128 }
129 m_pOglThread.reset();
130 }
132 LOGDEBUG2(L_OPENGL, "osdprovider: %s: Trying to start OpenGL worker thread", __FUNCTION__);
134 wait.Wait();
135
136 if (m_pOglThread->Active()) {
137 LOGINFO("OpenGL worker thread started");
138 return true;
139 }
140
141 LOGDEBUG2(L_OPENGL, "osdprovider: %s: OpenGL worker thread NOT started", __FUNCTION__);
142 return false;
143}
144
149 if (m_pOglThread) {
150 LOGDEBUG2(L_OPENGL, "osdprovider: %s: request stopping OpenGL worker thread", __FUNCTION__);
151 m_pOglThread->RequestStop();
152 }
153}
154
159 if (m_pOglThread) {
160 LOGDEBUG2(L_OPENGL, "osdprovider: %s: stop OpenGL worker thread", __FUNCTION__);
161 m_pOglThread->Stop();
162 }
163 m_pOglThread.reset();
164}
165
170 if (m_pOglThread) {
171 LOGDEBUG2(L_OPENGL, "osdprovider: %s: lock OpenGL worker thread", __FUNCTION__);
172 m_pOglThread->LockOutputFb();
173 return true;
174 }
175
176 return false;
177}
178
183 if (m_pOglThread) {
184 LOGDEBUG2(L_OPENGL, "osdprovider: %s: unlock OpenGL worker thread", __FUNCTION__);
185 m_pOglThread->UnlockOutputFb();
186 }
187}
188
193{
194 if (StartOpenGlThread()) {
195 int imgHandle = m_pOglThread->StoreImage(Image);
196 return imgHandle;
197 }
198 return 0;
199}
200
205 return cOsdProvider::GetImageData(ImageHandle);
206}
207
212{
213 if (StartOpenGlThread())
214 m_pOglThread->DropImageData(imgHandle);
215}
216#endif
217
Dummy OSD.
Definition dummyosd.h:64
Hardware Accelerated OpenGL OSD Implementation.
Definition openglosd.h:709
OpenGL Commands Processing Thread.
Definition openglosd.h:617
Output Device Implementation.
bool IsOsdProviderSet(void) const
void ResetOsdProvider(void)
cOsd * m_pOsd
pointer to single OSD (currently not really used in cSoftOsdProvider?)
std::shared_ptr< cOglThread > m_pOglThread
OpenGL OSD thread.
cSoftHdDevice * m_pDevice
pointer to the cSoftHdDevice object
Software Based OSD.
Definition softhdosd.h:29
Dummy OSD.
int MaxSizeGPUImageCache(void)
Get the maximum GPU image cache size.
int OglOsdIsDisabled(void)
Is the OpenGL/ES osd disabled?
bool IsDetached(void) const
Returns true, if the device is detached.
void SetDisableOglOsd(void)
Disables OpenGL/ES Osd (called from setup menu or conf)
#define LOGDEBUG2
log to LOG_DEBUG and add a prefix
Definition logger.h:42
#define LOGDEBUG
log to LOG_DEBUG
Definition logger.h:40
#define LOGINFO
log to LOG_INFO
Definition logger.h:38
@ L_OSD
osd logs
Definition logger.h:54
@ L_OPENGL
opengl osd logs
Definition logger.h:60
virtual cOsd * CreateOsd(int, int, uint)
Create a new OSD.
virtual ~cSoftOsdProvider()
Delete the OSD provider and stop the OpenGL thread if running.
void RequestStopOpenGlThread(void)
Initiate a stop of the OpenGL thread without waiting.
void OsdSizeChanged(void)
Stop the OpenGL thread, if the osd size changed and update the size.
void StopOpenGlThread(void)
Stop the OpenGL thread and cancel it if necessary.
void UnlockOpenGlThread(void)
Unlock the OpenGL thread.
virtual int StoreImageData(const cImage &Image)
Store image data.
const cImage * GetImageData(int ImageHandle)
Get stored image data.
bool LockOpenGlThread(void)
Lock the OpenGL thread.
cSoftOsdProvider(cSoftHdDevice *)
Create a new OSD provider.
virtual void DropImageData(int ImageHandle)
Drop stored image data.
bool StartOpenGlThread(void)
Start the OpenGL thread.
Logger Header File.
OpenGL OSD Header File.
Output Device Header File.
Software OSD Header File.
OSD Provider Header File.