|
vdr-plugin-softhddevice-drm-gles 1.6.2
|
Video Renderer. More...
#include <videorender.h>
Protected Member Functions | |
| virtual void | Action (void) |
| Thread loop, which tries to display frames and processes events. | |
Private Member Functions | |
| int | GetFrameFlags (AVFrame *) |
| Get frame flags. | |
| void | SetFrameFlags (AVFrame *, int) |
| Set frame flags. | |
| void | SetVideoClock (int64_t pts) |
| bool | PageFlip (cDrmBuffer *, cDrmBuffer *) |
| Do the pageflip. | |
| int | SetVideoBuffer (cDrmBuffer *) |
| Modesetting for video. | |
| int | SetOsdBuffer (drmModeAtomicReqPtr) |
| Modesetting for osd. | |
| int | SetPipBuffer (cDrmBuffer *) |
| Modesetting for pip. | |
| int | CommitBuffer (cDrmBuffer *, cDrmBuffer *) |
| Commit the frame to the hardware. | |
| void | CreateGrabBuffers (bool) |
| Copy current video, osd and pip buffers to dedicated grabbing buffers. | |
| void | LogDroppedDuped (int64_t, int64_t, int) |
| Log A/V sync debug message. | |
| int64_t | PtsToMs (int64_t) |
| void | PushFrame (AVFrame *, bool, std::atomic< cBufferStrategy * > &, std::atomic< cDecodingStrategy * > &, cQueue< cDrmBuffer > *, cDrmBufferPool *) |
| Push the frame into the render ringbuffer. | |
| int | GetFramePresentationCount (int64_t) |
| Get the number of times the current frame shall be presented in trickspeed mode. | |
| void | SetHdrBlob (struct hdr_output_metadata) |
| Create an hdr blob and set it for the connector. | |
| void | SetColorSpace (drmColorRange) |
| Set kms color space, color encoding and color range. | |
| void | RestoreColorSpace () |
| Restore color space, color encoding and color range to BT709 and the original color range. | |
Private Attributes | |
| cSoftHdDevice * | m_pDevice |
| pointer to cSoftHdDevice | |
| cSoftHdAudio * | m_pAudio |
| pointer to cSoftHdAudio | |
| cSoftHdConfig * | m_pConfig |
| pointer to cSoftHdConfig | |
| std::mutex | m_mutex |
| mutex for thread control | |
| std::vector< Event > | m_eventQueue |
| event queue for incoming events | |
| double | m_refreshRateHz |
| screen refresh rate in Hz | |
| cQueue< cDrmBuffer > | m_drmBufferQueue {VIDEO_SURFACES_MAX} |
| queue for DRM buffers to be displayed (VIDEO_SURFACES_MAX is defined in thread.h) | |
| cQueue< cDrmBuffer > | m_pipDrmBufferQueue {VIDEO_SURFACES_MAX} |
| queue for PIP DRM buffers to be displayed (VIDEO_SURFACES_MAX is defined in thread.h) | |
| std::atomic< double > | m_trickspeedFactor = 0 |
| current trick speed | |
| std::atomic< bool > | m_trickspeed = false |
| true, if trickspeed is active | |
| std::atomic< bool > | m_forwardTrickspeed = true |
| true, if trickspeed plays forward | |
| std::atomic< bool > | m_stillpicture = false |
| true, if stillpicture is active | |
| std::atomic< int > | m_framePresentationCounter = 0 |
| number of times the current frame has to be shown (for slow-motion) | |
| int | m_numWrongProgressive |
| counter for progressive frames sent in an interlaced stream (only used for logging) | |
| bool | m_startgrab = false |
| internal flag to trigger grabbing | |
| cCondVar | m_grabCond |
| condition gets signalled, if renederer finished to clone the grabbed buffers | |
| cGrabBuffer | m_grabOsd |
| keeps the current grabbed osd | |
| cGrabBuffer | m_grabVideo |
| keeps the current grabbed video | |
| cGrabBuffer | m_grabPip |
| keeps the current grabbed pip video | |
| int | m_startCounter = 0 |
| counter for displayed frames, indicates a video start | |
| int | m_framesDuped = 0 |
| number of frames duplicated | |
| int | m_framesDropped = 0 |
| number of frames dropped | |
| bool | m_lastFrameWasDropped = false |
| true, if the last frame was dropped | |
| AVRational | m_timebase |
| timebase used for pts, set by first RenderFrame() | |
| std::mutex | m_timebaseMutex |
| mutex used around m_timebase | |
| std::atomic< int64_t > | m_pts = AV_NOPTS_VALUE |
| current video PTS | |
| cRect | m_videoRect |
| rect of the currently displayed video | |
| bool | m_videoIsScaled = false |
| true, if the currently displayed video is scaled | |
| int | m_pipScalePercent |
| scale factor for pip | |
| int | m_pipLeftPercent |
| left margin for pip | |
| int | m_pipTopPercent |
| top margin for pip | |
| cDrmDevice * | m_pDrmDevice |
| pointer cDrmDevice object | |
| cDrmBuffer * | m_pBufOsd = nullptr |
| pointer to osd drm buffer object | |
| cDrmBuffer | m_bufBlack |
| black drm buffer object | |
| cDrmBuffer * | m_pCurrentlyDisplayed = nullptr |
| pointer to currently displayed DRM buffer | |
| cDrmBuffer * | m_pCurrentlyPipDisplayed = nullptr |
| pointer to currently displayed DRM buffer | |
| bool | m_osdShown = false |
| set, if osd is shown currently | |
| std::atomic< bool > | m_videoPlaybackPaused = true |
| set, if playback is frozen (used for pause) | |
| std::atomic< bool > | m_resumeAudioScheduled = false |
| set, if audio resume is scheduled after a pause | |
| std::atomic< int64_t > | m_videoPlaybackPauseScheduledAt = AV_NOPTS_VALUE |
| if set, video will be paused at the given pts | |
| std::atomic< bool > | m_displayOneFrameThenPause = false |
| set, if only one frame shall be displayed and then pause playback | |
| std::atomic< int64_t > | m_schedulePlaybackStartAtPtsMs = AV_NOPTS_VALUE |
| if set, frames with PTS older than this will be dropped | |
| std::atomic< int64_t > | m_scheduleResyncAtPtsMs = AV_NOPTS_VALUE |
| if set, a resync (enter state BUFFERING) will be forced at the given pts | |
| IEventReceiver * | m_pEventReceiver |
| pointer to event receiver | |
| cDrmBufferPool | m_drmBufferPool |
| pool of drm buffers | |
| cDrmBufferPool | m_pipDrmBufferPool |
| PIP pool of drm buffers. | |
| std::atomic< cBufferStrategy * > | m_bufferReuseStrategy = nullptr |
| strategy to select drm buffers | |
| std::atomic< cBufferStrategy * > | m_pipBufferReuseStrategy = nullptr |
| strategy to select drm buffers | |
| std::atomic< cDecodingStrategy * > | m_decodingStrategy = nullptr |
| strategy for decoding setup | |
| std::atomic< cDecodingStrategy * > | m_pipDecodingStrategy = nullptr |
| strategy for decoding setup | |
| cHdrMetadata | m_pHdrMetadata |
| hdr metadata object | |
| bool | m_hasDoneHdrModeset = false |
| true, if we ever created an hdr blob and did a modesetting | |
| std::atomic< bool > | m_enableHdr = false |
| hdr is enabled | |
| drmColorRange | m_originalColorRange = COLORRANGE_LIMITED |
| initial color range | |
| bool | m_colorRangeStored = false |
| true, if the original color range was stored | |
| bool | m_disableOglOsd |
| set, if ogl osd is disabled | |
| struct gbm_bo * | m_bo |
| pointer to current gbm buffer object | |
| struct gbm_bo * | m_pOldBo |
| pointer to old gbm buffer object (for later free) | |
| struct gbm_bo * | m_pNextBo |
| pointer to next gbm buffer object (for later free) | |
| std::atomic< bool > | m_pipActive = false |
| true, if pip should be displayed | |
Video Renderer.
This part is responsible to put all the parts together and display them on the screen
Definition at line 140 of file videorender.h.
Definition at line 207 of file videorender.h.
References m_disableOglOsd.
Referenced by cSoftHdDevice::SetDisableOglOsd().
|
inline |
Definition at line 212 of file videorender.h.
References cDrmDevice::EglContext(), and m_pDrmDevice.
Referenced by cOglThread::eglAcquireContext().
|
inline |
Definition at line 211 of file videorender.h.
References cDrmDevice::EglDisplay(), and m_pDrmDevice.
Referenced by cOglThread::eglAcquireContext().
|
inline |
Definition at line 210 of file videorender.h.
References cDrmDevice::EglSurface(), and m_pDrmDevice.
Referenced by cOglThread::eglAcquireContext().
Definition at line 208 of file videorender.h.
References m_disableOglOsd.
Referenced by cSoftHdDevice::SetEnableOglOsd().
Definition at line 192 of file videorender.h.
References m_drmBufferQueue, and cQueue< T >::Size().
|
inline |
Definition at line 182 of file videorender.h.
References m_grabOsd.
Referenced by cSoftHdGrab::GetGrab().
|
inline |
Definition at line 183 of file videorender.h.
References m_grabPip.
Referenced by cSoftHdGrab::GetGrab().
|
inline |
Definition at line 181 of file videorender.h.
References m_grabVideo.
Referenced by cSoftHdGrab::GetGrab().
|
inline |
Definition at line 202 of file videorender.h.
References m_drmBufferQueue.
Referenced by cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 203 of file videorender.h.
References m_pipDrmBufferQueue.
Referenced by cSoftHdDevice::OnLeavingState().
Definition at line 153 of file videorender.h.
References m_pts.
Referenced by GetOutputPtsMs(), cSoftHdDevice::GetSTC(), and PushFrame().
Definition at line 213 of file videorender.h.
References cDrmDevice::GlInitiated(), and m_pDrmDevice.
Referenced by cOglThread::InitOpenGL().
Definition at line 148 of file videorender.h.
References m_mutex.
Referenced by cSoftHdDevice::Clear(), and cSoftHdDevice::OnEventReceived().
Definition at line 174 of file videorender.h.
References m_forwardTrickspeed.
Referenced by cVideoStream::CheckForcingFrameDecode().
Definition at line 176 of file videorender.h.
References m_stillpicture.
Referenced by DisplayFrame().
Definition at line 173 of file videorender.h.
References m_trickspeed.
Referenced by cVideoStream::DecodeInput(), DisplayFrame(), GetFramePresentationCount(), PushMainFrame(), and ResetFrameCounter().
Definition at line 209 of file videorender.h.
References m_disableOglOsd.
Referenced by cDrmDevice::Init().
|
inline |
Definition at line 162 of file videorender.h.
References m_bufferReuseStrategy.
Referenced by cSoftHdDevice::OnEnteringState(), and cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 163 of file videorender.h.
References m_decodingStrategy.
Referenced by cSoftHdDevice::OnEnteringState().
|
inline |
Definition at line 164 of file videorender.h.
References m_pipBufferReuseStrategy.
Referenced by cSoftHdDevice::ResetPipStream().
|
inline |
Definition at line 165 of file videorender.h.
References m_pipDecodingStrategy.
Referenced by cSoftHdDevice::ResetPipStream().
Definition at line 149 of file videorender.h.
References m_mutex.
Referenced by cSoftHdDevice::Clear(), cSoftHdDevice::OnEnteringState(), and cSoftHdDevice::OnEventReceived().
Definition at line 200 of file videorender.h.
References m_schedulePlaybackStartAtPtsMs.
Referenced by cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
Definition at line 201 of file videorender.h.
References m_scheduleResyncAtPtsMs.
Referenced by cSoftHdDevice::OnEventReceived().
Definition at line 159 of file videorender.h.
References m_videoPlaybackPauseScheduledAt.
Referenced by cSoftHdDevice::OnEventReceived().
Definition at line 199 of file videorender.h.
References m_displayOneFrameThenPause.
Referenced by cSoftHdDevice::Clear(), and cSoftHdDevice::OnLeavingState().
Definition at line 188 of file videorender.h.
References m_enableHdr.
Referenced by cSoftHdDevice::SetEnableHdr().
Definition at line 217 of file videorender.h.
References m_pipActive.
Referenced by cSoftHdDevice::SetRenderPipActive().
Definition at line 157 of file videorender.h.
References m_videoPlaybackPaused.
Referenced by cSoftHdDevice::HandleStillPicture(), cSoftHdDevice::OnEnteringState(), cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
Definition at line 158 of file videorender.h.
References m_resumeAudioScheduled.
Referenced by cSoftHdDevice::OnEventReceived().
Definition at line 175 of file videorender.h.
References m_stillpicture.
Referenced by cSoftHdDevice::HandleStillPicture(), cSoftHdDevice::OnEnteringState(), and cSoftHdDevice::OnEventReceived().
Definition at line 300 of file videorender.h.
References m_pts.
Referenced by PageFlip(), PushFrame(), and Reset().
pointer to current gbm buffer object
Definition at line 291 of file videorender.h.
Referenced by cVideoRender(), OsdClear(), and OsdDrawARGB().
|
private |
black drm buffer object
Definition at line 264 of file videorender.h.
Referenced by DisplayBlackFrame(), Exit(), and Init().
|
private |
strategy to select drm buffers
Definition at line 278 of file videorender.h.
Referenced by PushMainFrame(), and ResetBufferReuseStrategy().
true, if the original color range was stored
Definition at line 287 of file videorender.h.
Referenced by RestoreColorSpace(), and SetHdrBlob().
|
private |
strategy for decoding setup
Definition at line 280 of file videorender.h.
Referenced by PushMainFrame(), Reset(), and ResetDecodingStrategy().
|
private |
set, if ogl osd is disabled
Definition at line 290 of file videorender.h.
Referenced by cVideoRender(), DisableOglOsd(), EnableOglOsd(), Exit(), Init(), OglOsdDisabled(), OsdClear(), and OsdDrawARGB().
set, if only one frame shall be displayed and then pause playback
Definition at line 271 of file videorender.h.
Referenced by DisplayFrame(), and SetDisplayOneFrameThenPause().
|
private |
pool of drm buffers
Definition at line 276 of file videorender.h.
Referenced by ClearDecoderToDisplayQueue(), and PushMainFrame().
|
private |
queue for DRM buffers to be displayed (VIDEO_SURFACES_MAX is defined in thread.h)
Definition at line 232 of file videorender.h.
Referenced by ClearDecoderToDisplayQueue(), DisplayFrame(), GetFramesFilled(), GetMainOutputBuffer(), IsOutputBufferFull(), LogDroppedDuped(), and PushMainFrame().
hdr is enabled
Definition at line 285 of file videorender.h.
Referenced by SetEnableHdr(), and SetVideoBuffer().
|
private |
event queue for incoming events
Definition at line 229 of file videorender.h.
Referenced by DisplayFrame(), and ProcessEvents().
true, if trickspeed plays forward
Definition at line 236 of file videorender.h.
Referenced by IsForwardTrickspeed(), and SetTrickSpeed().
|
private |
number of times the current frame has to be shown (for slow-motion)
Definition at line 238 of file videorender.h.
Referenced by DisplayFrame(), and SetTrickSpeed().
|
private |
number of frames dropped
Definition at line 250 of file videorender.h.
Referenced by GetStats(), LogDroppedDuped(), and Reset().
|
private |
number of frames duplicated
Definition at line 249 of file videorender.h.
Referenced by GetStats(), LogDroppedDuped(), and Reset().
|
private |
condition gets signalled, if renederer finished to clone the grabbed buffers
Definition at line 243 of file videorender.h.
Referenced by CreateGrabBuffers(), and TriggerGrab().
|
private |
keeps the current grabbed osd
Definition at line 244 of file videorender.h.
Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and GetGrabbedOsdBuffer().
|
private |
keeps the current grabbed pip video
Definition at line 246 of file videorender.h.
Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and GetGrabbedPipBuffer().
|
private |
keeps the current grabbed video
Definition at line 245 of file videorender.h.
Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and GetGrabbedVideoBuffer().
true, if we ever created an hdr blob and did a modesetting
Definition at line 284 of file videorender.h.
Referenced by Exit(), RestoreColorSpace(), and SetColorSpace().
true, if the last frame was dropped
Definition at line 251 of file videorender.h.
Referenced by DisplayFrame().
|
private |
mutex for thread control
Definition at line 228 of file videorender.h.
|
private |
counter for progressive frames sent in an interlaced stream (only used for logging)
Definition at line 239 of file videorender.h.
Referenced by Reset().
|
private |
initial color range
Definition at line 286 of file videorender.h.
Referenced by RestoreColorSpace(), and SetHdrBlob().
set, if osd is shown currently
Definition at line 267 of file videorender.h.
Referenced by CommitBuffer(), CreateGrabBuffers(), Init(), OsdClear(), OsdDrawARGB(), and SetOsdBuffer().
|
private |
pointer to cSoftHdAudio
Definition at line 226 of file videorender.h.
Referenced by DisplayFrame(), and LogDroppedDuped().
|
private |
pointer to osd drm buffer object
Definition at line 263 of file videorender.h.
Referenced by CreateGrabBuffers(), DisplayFrame(), Exit(), Init(), OsdClear(), OsdDrawARGB(), and SetOsdBuffer().
|
private |
pointer to cSoftHdConfig
Definition at line 227 of file videorender.h.
Referenced by cVideoRender(), and SetPipSize().
|
private |
pointer to currently displayed DRM buffer
Definition at line 265 of file videorender.h.
Referenced by ClearDecoderToDisplayQueue(), CommitBuffer(), CreateGrabBuffers(), DisplayBlackFrame(), and DisplayFrame().
|
private |
pointer to currently displayed DRM buffer
Definition at line 266 of file videorender.h.
Referenced by ClearPipDecoderToDisplayQueue(), CommitBuffer(), CreateGrabBuffers(), and DisplayFrame().
|
private |
pointer to cSoftHdDevice
Definition at line 225 of file videorender.h.
Referenced by DisplayFrame(), Init(), LogDroppedDuped(), and SetScreenSize().
|
private |
pointer cDrmDevice object
Definition at line 262 of file videorender.h.
Referenced by CanHandleHdr(), CommitBuffer(), DrmHandleEvent(), EglContext(), EglDisplay(), EglSurface(), Exit(), GlInitiated(), Init(), OsdClear(), OsdDrawARGB(), PageFlip(), PushFrame(), RestoreColorSpace(), SetColorSpace(), SetHdrBlob(), SetOsdBuffer(), SetPipBuffer(), SetVideoBuffer(), and ~cVideoRender().
|
private |
pointer to event receiver
Definition at line 275 of file videorender.h.
Referenced by ProcessEvents().
|
private |
hdr metadata object
Definition at line 283 of file videorender.h.
Referenced by SetColorSpace(), and SetVideoBuffer().
true, if pip should be displayed
Definition at line 296 of file videorender.h.
Referenced by SetPipActive(), and SetPipBuffer().
|
private |
strategy to select drm buffers
Definition at line 279 of file videorender.h.
Referenced by PushPipFrame(), and ResetPipBufferReuseStrategy().
|
private |
strategy for decoding setup
Definition at line 281 of file videorender.h.
Referenced by PushPipFrame(), and ResetPipDecodingStrategy().
|
private |
PIP pool of drm buffers.
Definition at line 277 of file videorender.h.
Referenced by ClearPipDecoderToDisplayQueue(), and PushPipFrame().
|
private |
queue for PIP DRM buffers to be displayed (VIDEO_SURFACES_MAX is defined in thread.h)
Definition at line 233 of file videorender.h.
Referenced by ClearPipDecoderToDisplayQueue(), DisplayFrame(), GetPipOutputBuffer(), and PushPipFrame().
|
private |
left margin for pip
Definition at line 259 of file videorender.h.
Referenced by SetPipBuffer(), and SetPipSize().
|
private |
scale factor for pip
Definition at line 258 of file videorender.h.
Referenced by SetPipBuffer(), and SetPipSize().
|
private |
top margin for pip
Definition at line 260 of file videorender.h.
Referenced by SetPipBuffer(), and SetPipSize().
pointer to next gbm buffer object (for later free)
Definition at line 293 of file videorender.h.
Referenced by cVideoRender(), Exit(), OsdClear(), and OsdDrawARGB().
pointer to old gbm buffer object (for later free)
Definition at line 292 of file videorender.h.
Referenced by cVideoRender(), Exit(), OsdClear(), and OsdDrawARGB().
|
private |
current video PTS
Definition at line 254 of file videorender.h.
Referenced by GetVideoClock(), and SetVideoClock().
|
private |
screen refresh rate in Hz
Definition at line 230 of file videorender.h.
Referenced by GetFramePresentationCount(), and SetScreenSize().
set, if audio resume is scheduled after a pause
Definition at line 269 of file videorender.h.
Referenced by DisplayFrame(), and SetScheduleAudioResume().
|
private |
if set, frames with PTS older than this will be dropped
Definition at line 272 of file videorender.h.
Referenced by DisplayFrame(), and SchedulePlaybackStartAtPtsMs().
|
private |
if set, a resync (enter state BUFFERING) will be forced at the given pts
Definition at line 273 of file videorender.h.
Referenced by DisplayFrame(), and ScheduleResyncAtPtsMs().
|
private |
counter for displayed frames, indicates a video start
Definition at line 248 of file videorender.h.
Referenced by DisplayFrame(), GetStats(), Reset(), and ResetFrameCounter().
internal flag to trigger grabbing
Definition at line 242 of file videorender.h.
Referenced by CreateGrabBuffers(), and TriggerGrab().
true, if stillpicture is active
Definition at line 237 of file videorender.h.
Referenced by IsStillpicture(), and SetStillpicture().
|
private |
timebase used for pts, set by first RenderFrame()
Definition at line 252 of file videorender.h.
Referenced by cVideoRender(), DisplayFrame(), GetOutputPtsMs(), and PtsToMs().
|
private |
mutex used around m_timebase
Definition at line 253 of file videorender.h.
Referenced by GetOutputPtsMs(), and PtsToMs().
true, if trickspeed is active
Definition at line 235 of file videorender.h.
Referenced by IsTrickSpeed(), and SetTrickSpeed().
|
private |
current trick speed
Definition at line 234 of file videorender.h.
Referenced by GetFramePresentationCount(), and SetTrickSpeed().
true, if the currently displayed video is scaled
Definition at line 257 of file videorender.h.
Referenced by DisplayFrame(), SetPipBuffer(), SetVideoBuffer(), and SetVideoOutputPosition().
set, if playback is frozen (used for pause)
Definition at line 268 of file videorender.h.
Referenced by DisplayFrame(), and SetPlaybackPaused().
|
private |
if set, video will be paused at the given pts
Definition at line 270 of file videorender.h.
Referenced by DisplayFrame(), and ScheduleVideoPlaybackPauseAt().
|
private |
rect of the currently displayed video
Definition at line 256 of file videorender.h.
Referenced by SetPipBuffer(), SetVideoBuffer(), and SetVideoOutputPosition().