vdr-plugin-softhddevice-drm-gles 1.6.7
cVideoRender Class Reference

Video Renderer. More...

#include <videorender.h>

Public Member Functions

 cVideoRender (cSoftHdDevice *)
 Create the video renderer.
 
 ~cVideoRender (void)
 Destroy the video renderer.
 
void Init (void)
 Initialize the renderer.
 
void ReInitDisplayMode (void)
 Re-Initialize the drm device with current display mode settings.
 
void Exit (void)
 Exit and cleanup the renderer.
 
void Stop (void)
 Stop the thread.
 
void Halt (void)
 
void Resume (void)
 
void SetVideoOutputPosition (const cRect &)
 Set size and position of the video on the screen.
 
void SetOsdSize (int, int)
 Wrapper to set the osd size in the device.
 
void SetScreenSize (int, int, double, bool)
 Wrapper to set the screen size in the device.
 
void SetDisplayMode (int)
 Wrapper to set the display mode.
 
bool CanHandleMode (sDrmMode *)
 Wrapper to check, if drm can handle the display mode.
 
int64_t GetVideoClock (void)
 
void GetStats (int *, int *, int *)
 Get some rendering statistics.
 
void ResetFrameCounter (void)
 Send start condition to video thread.
 
void Reset ()
 Reset the renderer.
 
void SetPlaybackPaused (bool pause)
 
void SetScheduleAudioResume (bool resume)
 
void ScheduleVideoPlaybackPauseAt (int64_t ptsMs)
 
void ProcessEvents (void)
 Process queued events and forward to event receiver.
 
void ResetBufferReuseStrategy ()
 
void ResetDecodingStrategy ()
 
void ResetPipBufferReuseStrategy ()
 
void ResetPipDecodingStrategy ()
 
void OsdClear (void)
 Clear the OSD (draw an empty/ transparent OSD)
 
void OsdDrawARGB (int, int, int, int, int, const uint8_t *, int, int)
 Draw an OSD ARGB image.
 
void SetTrickSpeed (double, bool, bool)
 Set the trickspeed parameters.
 
bool IsTrickSpeed (void)
 
bool IsForwardTrickspeed (void)
 
void SetStillpicture (bool active)
 
bool IsStillpicture (void)
 
int TriggerGrab (void)
 Trigger a screen grab.
 
void ClearGrabBuffers (void)
 Clear the grab drm buffers.
 
cGrabBufferGetGrabbedVideoBuffer (void)
 
cGrabBufferGetGrabbedOsdBuffer (void)
 
cGrabBufferGetGrabbedPipBuffer (void)
 
int DrmHandleEvent (void)
 Wrapper for drmHandleEvent()
 
bool CanHandleHdr (void)
 Return true, if the device can handle HDR.
 
void SetEnableHdr (bool enable)
 
bool DisplayFrame ()
 Display the frame (video and/or osd)
 
int GetFramesFilled (void)
 
void PushMainFrame (AVFrame *)
 Push a main frame into the render ringbuffer.
 
void PushPipFrame (AVFrame *)
 Push a PiP frame into the render ringbuffer.
 
int64_t GetOutputPtsMs (void)
 Get the output PTS in milliseconds.
 
void DisplayBlackFrame (void)
 Display a black video frame.
 
void ClearDecoderToDisplayQueue (void)
 Clear (empty) the decoder to display queue.
 
bool IsOutputBufferFull (void)
 Check, if the main render output buffer is full.
 
void SetDisplayOneFrameThenPause (bool pause)
 
void SchedulePlaybackStartAtPtsMs (int64_t ptsMs)
 
void ScheduleResyncAtPtsMs (int64_t ptsMs)
 
cQueue< cDrmBuffer > * GetMainOutputBuffer (void)
 
cQueue< cDrmBuffer > * GetPipOutputBuffer (void)
 
void DisableOglOsd (void)
 
void EnableOglOsd (void)
 
bool OglOsdDisabled (void)
 
EGLSurface EglSurface (void)
 
EGLDisplay EglDisplay (void)
 
EGLContext EglContext (void)
 
int GlInitiated (void)
 
void SetPipActive (bool on)
 
void ClearPipDecoderToDisplayQueue (void)
 Clear (empty) the decoder to display queue.
 
void SetPipSize (bool)
 Set the size and position of the pip window.
 

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 InitBuffers (void)
 Init the osd and black buffer.
 
void DeleteBuffers (void)
 Delete the osd and black buffer.
 
void CreateGrabBuffers (bool)
 Copy current video, osd and pip buffers to dedicated grabbing buffers.
 
bool FrameDropNecessary (int64_t, int64_t)
 Do the AV Sync.
 
void LogDroppedDuped (int64_t, int64_t, int)
 Log A/V sync debug message.
 
int64_t PtsToMs (int64_t)
 Convert a PTS to milliseconds.
 
void PushFrame (AVFrame *, bool, std::atomic< cBufferStrategy * > &, std::atomic< cDecodingStrategy * > &, cQueue< cDrmBuffer > *, cDrmBufferPool *, bool)
 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 (void)
 Restore color space, color encoding and color range to BT709 and the original color range.
 

Private Attributes

cSoftHdDevicem_pDevice
 pointer to cSoftHdDevice
 
cSoftHdAudiom_pAudio
 pointer to cSoftHdAudio
 
cSoftHdConfigm_pConfig
 pointer to cSoftHdConfig
 
std::mutex m_mutex
 mutex for thread control
 
std::vector< Eventm_eventQueue
 event queue for incoming events
 
std::atomic< doublem_refreshRateHz
 screen refresh rate in Hz
 
cQueue< cDrmBufferm_drmBufferQueue {VIDEO_SURFACES_MAX}
 queue for DRM buffers to be displayed (VIDEO_SURFACES_MAX is defined in thread.h)
 
cQueue< cDrmBufferm_pipDrmBufferQueue {VIDEO_SURFACES_MAX}
 queue for PIP DRM buffers to be displayed (VIDEO_SURFACES_MAX is defined in thread.h)
 
std::atomic< doublem_trickspeedFactor = 0
 current trick speed
 
std::atomic< boolm_trickspeed = false
 true, if trickspeed is active
 
std::atomic< boolm_forwardTrickspeed = true
 true, if trickspeed plays forward
 
std::atomic< boolm_stillpicture = false
 true, if stillpicture is active
 
std::atomic< intm_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)
 
std::atomic< boolm_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_tm_pts = AV_NOPTS_VALUE
 current video PTS
 
std::mutex m_grabMutex
 mutex around grabbing
 
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
 
cDrmDevicem_pDrmDevice
 pointer cDrmDevice object
 
cDrmBufferm_pBufOsd = nullptr
 pointer to osd drm buffer object
 
cDrmBuffer m_bufBlack
 black drm buffer object
 
cDrmBufferm_pCurrentlyDisplayed = nullptr
 pointer to currently displayed DRM buffer
 
cDrmBufferm_pCurrentlyPipDisplayed = nullptr
 pointer to currently displayed DRM buffer
 
bool m_osdShown = false
 set, if osd is shown currently
 
std::atomic< boolm_videoPlaybackPaused = true
 set, if playback is frozen (used for pause)
 
std::atomic< boolm_resumeAudioScheduled = false
 set, if audio resume is scheduled after a pause
 
std::atomic< int64_tm_videoPlaybackPauseScheduledAt = AV_NOPTS_VALUE
 if set, video will be paused at the given pts
 
std::atomic< boolm_displayOneFrameThenPause = false
 set, if only one frame shall be displayed and then pause playback
 
std::atomic< int64_tm_schedulePlaybackStartAtPtsMs = AV_NOPTS_VALUE
 if set, frames with PTS older than this will be dropped
 
std::atomic< int64_tm_scheduleResyncAtPtsMs = AV_NOPTS_VALUE
 if set, a resync (enter state BUFFERING) will be forced at the given pts
 
IEventReceiverm_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
 
int m_framesPerFlipCycle = 1
 number of pageflips over which a single video frame should be presented 1 in progressive display mode 2 in interlaced display mode, to skip the sync and present an (interleaved) frame 2 times
 
int m_flipCounter = 0
 page flip counter
 
cHdrMetadata m_pHdrMetadata
 hdr metadata object
 
bool m_hasDoneHdrModeset = false
 true, if we ever created an hdr blob and did a modesetting
 
std::atomic< boolm_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_bom_bo
 pointer to current gbm buffer object
 
struct gbm_bom_pOldBo
 pointer to old gbm buffer object (for later free)
 
struct gbm_bom_pNextBo
 pointer to next gbm buffer object (for later free)
 
std::atomic< boolm_pipActive = false
 true, if pip should be displayed
 

Static Private Attributes

static constexpr int AV_SYNC_THRESHOLD_AUDIO_BEHIND_VIDEO_MS = 20
 Sync Corridor.
 
static constexpr int AV_SYNC_THRESHOLD_AUDIO_AHEAD_VIDEO_MS = 20
 threshold in ms, when to drop video frames to keep audio and video in sync
 

Detailed Description

Video Renderer.

This part is responsible to put all the parts together and display them on the screen

Definition at line 160 of file videorender.h.

Constructor & Destructor Documentation

◆ cVideoRender()

cVideoRender::cVideoRender ( cSoftHdDevice device)

Create the video renderer.

Parameters
devicepointer to cSoftHdDevice

Definition at line 58 of file videorender.cpp.

References cSoftHdConfig::ConfigDisableOglOsd, cSoftHdConfig::ConfigPipUseAlt, m_bo, m_disableOglOsd, m_pConfig, m_pNextBo, m_pOldBo, m_timebase, and SetPipSize().

◆ ~cVideoRender()

cVideoRender::~cVideoRender ( void  )

Destroy the video renderer.

Definition at line 84 of file videorender.cpp.

References L_DRM, LOGDEBUG2, m_pDrmDevice, and Stop().

Member Function Documentation

◆ Action()

void cVideoRender::Action ( void  )
protectedvirtual

Thread loop, which tries to display frames and processes events.

Definition at line 614 of file videorender.cpp.

References DisplayFrame(), LOGDEBUG, m_mutex, and ProcessEvents().

◆ CanHandleHdr()

bool cVideoRender::CanHandleHdr ( void  )

Return true, if the device can handle HDR.

Definition at line 849 of file videorender.cpp.

References cDrmDevice::CanHandleHdr(), and m_pDrmDevice.

Referenced by cHdrMetadata::Build().

◆ CanHandleMode()

bool cVideoRender::CanHandleMode ( sDrmMode mode)

Wrapper to check, if drm can handle the display mode.

Parameters
modedisplay mode

Definition at line 1265 of file videorender.cpp.

References cDrmDevice::CanHandleMode(), and m_pDrmDevice.

Referenced by cVideoStream::RenderFrame(), and cSoftHdDevice::SetDisplayMode().

◆ ClearDecoderToDisplayQueue()

void cVideoRender::ClearDecoderToDisplayQueue ( void  )

◆ ClearGrabBuffers()

void cVideoRender::ClearGrabBuffers ( void  )

Clear the grab drm buffers.

Definition at line 1196 of file videorender.cpp.

References cGrabBuffer::Clear(), m_grabMutex, m_grabOsd, m_grabPip, and m_grabVideo.

Referenced by cSoftHdGrab::Finish(), and cSoftHdGrab::Start().

◆ ClearPipDecoderToDisplayQueue()

void cVideoRender::ClearPipDecoderToDisplayQueue ( void  )

Clear (empty) the decoder to display queue.

Definition at line 108 of file videorender.cpp.

References cQueue< T >::Clear(), cDrmBufferPool::DestroyAllExcept(), m_pCurrentlyPipDisplayed, m_pipDrmBufferPool, and m_pipDrmBufferQueue.

Referenced by cSoftHdDevice::ResetPipStream().

◆ CommitBuffer()

int cVideoRender::CommitBuffer ( cDrmBuffer buf,
cDrmBuffer pip 
)
private

Commit the frame to the hardware.

Parameters
bufvideo drm buffer
Return values
0modesetting and commit was done, need to process outstanding DRM events
-1no modesetting and commit was done

Definition at line 429 of file videorender.cpp.

References LOGERROR, m_pCurrentlyDisplayed, m_pCurrentlyPipDisplayed, m_pDrmDevice, cDrmDevice::ModeAtomicAlloc(), cDrmDevice::ModeAtomicCommit(), cDrmDevice::ModeAtomicFree(), cDrmDevice::OsdPlane(), cDrmDevice::PipPlane(), SetOsdBuffer(), SetPipBuffer(), SetVideoBuffer(), and cDrmDevice::VideoPlane().

Referenced by PageFlip().

◆ CreateGrabBuffers()

void cVideoRender::CreateGrabBuffers ( bool  grabPip)
private

Copy current video, osd and pip buffers to dedicated grabbing buffers.

Parameters
grabPiptrue, if the pip buffer should be grabbed

Definition at line 1166 of file videorender.cpp.

References L_GRAB, LOGDEBUG2, m_grabCond, m_grabMutex, m_grabOsd, m_grabPip, m_grabVideo, m_osdShown, m_pBufOsd, m_pCurrentlyDisplayed, m_pCurrentlyPipDisplayed, m_startgrab, and cGrabBuffer::Set().

Referenced by DisplayFrame().

◆ DeleteBuffers()

void cVideoRender::DeleteBuffers ( void  )
private

Delete the osd and black buffer.

The GBM bo (GLES OSD) are also destroyed here

Definition at line 1437 of file videorender.cpp.

References cDrmBuffer::Destroy(), m_bufBlack, m_disableOglOsd, m_pBufOsd, m_pNextBo, and m_pOldBo.

Referenced by Exit().

◆ DisableOglOsd()

void cVideoRender::DisableOglOsd ( void  )
inline

Definition at line 231 of file videorender.h.

References m_disableOglOsd.

Referenced by cSoftHdDevice::SetDisableOglOsd().

◆ DisplayBlackFrame()

void cVideoRender::DisplayBlackFrame ( void  )

Display a black video frame.

Definition at line 815 of file videorender.cpp.

References cDrmBuffer::Destroy(), cDrmBuffer::frame, L_DRM, LOGDEBUG2, m_bufBlack, m_pCurrentlyDisplayed, and PageFlip().

Referenced by cSoftHdDevice::OnEnteringState().

◆ DisplayFrame()

◆ DrmHandleEvent()

int cVideoRender::DrmHandleEvent ( void  )

Wrapper for drmHandleEvent()

Definition at line 841 of file videorender.cpp.

References cDrmDevice::HandleEvent(), and m_pDrmDevice.

◆ EglContext()

EGLContext cVideoRender::EglContext ( void  )
inline

Definition at line 236 of file videorender.h.

References cDrmDevice::EglContext(), and m_pDrmDevice.

Referenced by cOglThread::eglAcquireContext().

◆ EglDisplay()

EGLDisplay cVideoRender::EglDisplay ( void  )
inline

Definition at line 235 of file videorender.h.

References cDrmDevice::EglDisplay(), and m_pDrmDevice.

Referenced by cOglThread::eglAcquireContext().

◆ EglSurface()

EGLSurface cVideoRender::EglSurface ( void  )
inline

Definition at line 234 of file videorender.h.

References cDrmDevice::EglSurface(), and m_pDrmDevice.

Referenced by cOglThread::eglAcquireContext().

◆ EnableOglOsd()

void cVideoRender::EnableOglOsd ( void  )
inline

Definition at line 232 of file videorender.h.

References m_disableOglOsd.

Referenced by cSoftHdDevice::SetEnableOglOsd().

◆ Exit()

◆ FrameDropNecessary()

◆ GetFrameFlags()

int cVideoRender::GetFrameFlags ( AVFrame frame)
private

Get frame flags.

Parameters
frameAVFrame
Returns
FRAME_FLAG_TRICKSPEED or FRAME_FLAG_STILLPICTURE

Definition at line 543 of file videorender.cpp.

◆ GetFramePresentationCount()

int cVideoRender::GetFramePresentationCount ( int64_t  interFrameGapMs)
private

Get the number of times the current frame shall be presented in trickspeed mode.

This is calculated based on the inter-frame gap (distance between each I-frame VDR sends us during trickspeed), the refresh rate of the output device, and the trickspeed speed.

Parameters
interFrameGapMsinter-frame gap in ms
Return values
numberof times the current frame shall be presented

Definition at line 1119 of file videorender.cpp.

References IsTrickSpeed(), m_refreshRateHz, and m_trickspeedFactor.

Referenced by DisplayFrame().

◆ GetFramesFilled()

int cVideoRender::GetFramesFilled ( void  )
inline

Definition at line 216 of file videorender.h.

References m_drmBufferQueue, and cQueue< T >::Size().

◆ GetGrabbedOsdBuffer()

cGrabBuffer * cVideoRender::GetGrabbedOsdBuffer ( void  )
inline

Definition at line 206 of file videorender.h.

References m_grabOsd.

Referenced by cSoftHdGrab::GetGrabbedOsdData().

◆ GetGrabbedPipBuffer()

cGrabBuffer * cVideoRender::GetGrabbedPipBuffer ( void  )
inline

Definition at line 207 of file videorender.h.

References m_grabPip.

Referenced by cSoftHdGrab::GetGrabbedPipData().

◆ GetGrabbedVideoBuffer()

cGrabBuffer * cVideoRender::GetGrabbedVideoBuffer ( void  )
inline

Definition at line 205 of file videorender.h.

References m_grabVideo.

Referenced by cSoftHdGrab::GetGrabbedVideoData().

◆ GetMainOutputBuffer()

cQueue< cDrmBuffer > * cVideoRender::GetMainOutputBuffer ( void  )
inline

Definition at line 226 of file videorender.h.

References m_drmBufferQueue.

Referenced by cSoftHdDevice::OnLeavingState().

◆ GetOutputPtsMs()

int64_t cVideoRender::GetOutputPtsMs ( void  )

Get the output PTS in milliseconds.

Returns the presentation timestamp of the next frame to be displayed.

Returns
PTS in milliseconds

Definition at line 1061 of file videorender.cpp.

References AV_NOPTS_VALUE, GetVideoClock(), m_timebase, and m_timebaseMutex.

Referenced by cSoftHdDevice::GetFirstAudioPtsMsToPlay(), cSoftHdDevice::GetFirstVideoPtsMsToPlay(), cSoftHdDevice::IsBufferingThresholdReached(), and cSoftHdDevice::OnEventReceived().

◆ GetPipOutputBuffer()

cQueue< cDrmBuffer > * cVideoRender::GetPipOutputBuffer ( void  )
inline

Definition at line 227 of file videorender.h.

References m_pipDrmBufferQueue.

Referenced by cSoftHdDevice::OnLeavingState().

◆ GetStats()

void cVideoRender::GetStats ( int duped,
int dropped,
int counter 
)

Get some rendering statistics.

Parameters
[out]dupednumber of duplicated frames
[out]droppednumber of dropped frames
[out]counternumber of decoded frames

Definition at line 1212 of file videorender.cpp.

References m_framesDropped, m_framesDuped, and m_startCounter.

Referenced by cSoftHdDevice::GetStats().

◆ GetVideoClock()

int64_t cVideoRender::GetVideoClock ( void  )
inline

Definition at line 177 of file videorender.h.

References m_pts.

Referenced by GetOutputPtsMs(), cSoftHdDevice::GetSTC(), and PushFrame().

◆ GlInitiated()

int cVideoRender::GlInitiated ( void  )
inline

Definition at line 237 of file videorender.h.

References cDrmDevice::GlInitiated(), and m_pDrmDevice.

Referenced by cOglThread::InitOpenGL().

◆ Halt()

◆ Init()

◆ InitBuffers()

void cVideoRender::InitBuffers ( void  )
private

Init the osd and black buffer.

The osd buffer is only created in non-GLES mode

Size of the black buffer: Initial (default) display size Size of the osd buffer: User requested size (if set as commandline arg) or initial (default) display size

Definition at line 1278 of file videorender.cpp.

References cDrmDevice::DisplayHeight(), cDrmDevice::DisplayWidth(), cDrmDevice::Fd(), cDrmBuffer::FillBlack(), L_DRM, LOGDEBUG2, m_bufBlack, m_disableOglOsd, m_pBufOsd, m_pDrmDevice, cDrmDevice::OsdHeight(), cDrmDevice::OsdWidth(), and cDrmBuffer::Setup().

Referenced by Init().

◆ IsForwardTrickspeed()

bool cVideoRender::IsForwardTrickspeed ( void  )
inline

Definition at line 198 of file videorender.h.

References m_forwardTrickspeed.

Referenced by cVideoStream::CheckForcingFrameDecode().

◆ IsOutputBufferFull()

bool cVideoRender::IsOutputBufferFull ( void  )

Check, if the main render output buffer is full.

Return values
truerender output buffer is full

Definition at line 982 of file videorender.cpp.

References cQueue< T >::IsFull(), and m_drmBufferQueue.

Referenced by cSoftHdDevice::IsBufferingThresholdReached().

◆ IsStillpicture()

bool cVideoRender::IsStillpicture ( void  )
inline

Definition at line 200 of file videorender.h.

References m_stillpicture.

Referenced by DisplayFrame().

◆ IsTrickSpeed()

bool cVideoRender::IsTrickSpeed ( void  )
inline

◆ LogDroppedDuped()

◆ OglOsdDisabled()

bool cVideoRender::OglOsdDisabled ( void  )
inline

Definition at line 233 of file videorender.h.

References m_disableOglOsd.

◆ OsdClear()

◆ OsdDrawARGB()

void cVideoRender::OsdDrawARGB ( int  xi,
int  yi,
int  width,
int  height,
int  pitch,
const uint8_t argb,
int  x,
int  y 
)

Draw an OSD ARGB image.

Parameters
xix-coordinate in argb image
yiy-coordinate in argb image
heightheight in pixel in argb image
widthwidth in pixel in argb image
pitchpitch of argb image
argb32bit ARGB image data
xx-coordinate on screen of argb image
yy-coordinate on screen of argb image

Definition at line 915 of file videorender.cpp.

References EGL_CHECK, cDrmDevice::EglDisplay(), cDrmDevice::EglSurface(), cDrmDevice::GbmSurface(), cDrmDevice::GetBufFromBo(), L_OPENGL, L_OSD, LOGDEBUG2, LOGERROR, m_bo, m_disableOglOsd, m_osdShown, m_pBufOsd, m_pDrmDevice, m_pNextBo, m_pOldBo, cDrmBuffer::MarkDirty(), MIN, cDrmBuffer::Pitch(), and cDrmBuffer::Plane().

Referenced by cSoftHdDevice::OsdDrawARGB().

◆ PageFlip()

bool cVideoRender::PageFlip ( cDrmBuffer buf,
cDrmBuffer pipBuf 
)
private

Do the pageflip.

Parameters
bufdrm buffer
pipBufdrm pip buffer
Returns
true if page flip was done

Definition at line 579 of file videorender.cpp.

References AV_NOPTS_VALUE, CommitBuffer(), cDrmDevice::HandleEvent(), L_PACKET, LOGDEBUG2, LOGERROR, m_flipCounter, m_pDrmDevice, SetVideoClock(), and Timestamp2String().

Referenced by DisplayBlackFrame(), and DisplayFrame().

◆ ProcessEvents()

void cVideoRender::ProcessEvents ( void  )

Process queued events and forward to event receiver.

Definition at line 1504 of file videorender.cpp.

References m_eventQueue, m_pEventReceiver, and IEventReceiver::OnEventReceived().

Referenced by Action().

◆ PtsToMs()

int64_t cVideoRender::PtsToMs ( int64_t  pts)
private

Convert a PTS to milliseconds.

Definition at line 831 of file videorender.cpp.

References m_timebase, and m_timebaseMutex.

Referenced by DisplayFrame(), and FrameDropNecessary().

◆ PushFrame()

void cVideoRender::PushFrame ( AVFrame frame,
bool  trickspeed,
std::atomic< cBufferStrategy * > &  bufferReuseStrategy,
std::atomic< cDecodingStrategy * > &  decodingStrategy,
cQueue< cDrmBuffer > *  drmBufferQueue,
cDrmBufferPool drmBufferPool,
bool  mainFrame 
)
private

Push the frame into the render ringbuffer.

Definition at line 1006 of file videorender.cpp.

References AV_NOPTS_VALUE, cDrmDevice::Fd(), GetVideoClock(), LOGFATAL, m_pDrmDevice, and SetVideoClock().

Referenced by PushMainFrame(), and PushPipFrame().

◆ PushMainFrame()

void cVideoRender::PushMainFrame ( AVFrame frame)

Push a main frame into the render ringbuffer.

Definition at line 990 of file videorender.cpp.

References IsTrickSpeed(), m_bufferReuseStrategy, m_decodingStrategy, m_drmBufferPool, m_drmBufferQueue, and PushFrame().

Referenced by cSoftHdDevice::OnLeavingState().

◆ PushPipFrame()

void cVideoRender::PushPipFrame ( AVFrame frame)

Push a PiP frame into the render ringbuffer.

Definition at line 998 of file videorender.cpp.

References m_pipBufferReuseStrategy, m_pipDecodingStrategy, m_pipDrmBufferPool, m_pipDrmBufferQueue, and PushFrame().

Referenced by cSoftHdDevice::OnLeavingState().

◆ ReInitDisplayMode()

◆ Reset()

◆ ResetBufferReuseStrategy()

void cVideoRender::ResetBufferReuseStrategy ( )
inline

◆ ResetDecodingStrategy()

void cVideoRender::ResetDecodingStrategy ( )
inline

Definition at line 187 of file videorender.h.

References m_decodingStrategy.

Referenced by cSoftHdDevice::OnEnteringState().

◆ ResetFrameCounter()

void cVideoRender::ResetFrameCounter ( void  )

Send start condition to video thread.

Definition at line 1074 of file videorender.cpp.

References IsTrickSpeed(), LOGDEBUG, and m_startCounter.

Referenced by cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().

◆ ResetPipBufferReuseStrategy()

void cVideoRender::ResetPipBufferReuseStrategy ( )
inline

Definition at line 188 of file videorender.h.

References m_pipBufferReuseStrategy.

Referenced by cSoftHdDevice::ResetPipStream().

◆ ResetPipDecodingStrategy()

void cVideoRender::ResetPipDecodingStrategy ( )
inline

Definition at line 189 of file videorender.h.

References m_pipDecodingStrategy.

Referenced by cSoftHdDevice::ResetPipStream().

◆ RestoreColorSpace()

◆ Resume()

◆ SchedulePlaybackStartAtPtsMs()

void cVideoRender::SchedulePlaybackStartAtPtsMs ( int64_t  ptsMs)
inline

◆ ScheduleResyncAtPtsMs()

void cVideoRender::ScheduleResyncAtPtsMs ( int64_t  ptsMs)
inline

Definition at line 225 of file videorender.h.

References m_scheduleResyncAtPtsMs.

Referenced by cSoftHdDevice::OnEventReceived().

◆ ScheduleVideoPlaybackPauseAt()

void cVideoRender::ScheduleVideoPlaybackPauseAt ( int64_t  ptsMs)
inline

Definition at line 183 of file videorender.h.

References m_videoPlaybackPauseScheduledAt.

Referenced by cSoftHdDevice::OnEventReceived().

◆ SetColorSpace()

◆ SetDisplayMode()

void cVideoRender::SetDisplayMode ( int  idx)

Wrapper to set the display mode.

Parameters
idxidx in the setup menu display mode array

Definition at line 1255 of file videorender.cpp.

References m_pDevice, and cSoftHdDevice::SetDisplayMode().

Referenced by cVideoStream::RenderFrame().

◆ SetDisplayOneFrameThenPause()

void cVideoRender::SetDisplayOneFrameThenPause ( bool  pause)
inline

Definition at line 223 of file videorender.h.

References m_displayOneFrameThenPause.

Referenced by cSoftHdDevice::Clear(), and cSoftHdDevice::OnLeavingState().

◆ SetEnableHdr()

void cVideoRender::SetEnableHdr ( bool  enable)
inline

Definition at line 212 of file videorender.h.

References m_enableHdr.

Referenced by cSoftHdDevice::SetEnableHdr().

◆ SetFrameFlags()

void cVideoRender::SetFrameFlags ( AVFrame frame,
int  flags 
)
private

Set frame flags.

Parameters
frameAVFrame
flagsFRAME_FLAG_TRICKSPEED and/or FRAME_FLAG_STILLPICTURE

Definition at line 558 of file videorender.cpp.

References LOGFATAL.

◆ SetHdrBlob()

void cVideoRender::SetHdrBlob ( struct hdr_output_metadata  hdrData)
private

Create an hdr blob and set it for the connector.

Parameters
hdrDatahdr metadata

Definition at line 178 of file videorender.cpp.

References cDrmDevice::CreateHdrBlob(), cDrmDevice::DestroyHdrBlob(), cDrmDevice::GetVideoPlaneColorRange(), LOGERROR, m_colorRangeStored, m_originalColorRange, m_pDrmDevice, and cDrmDevice::SetConnectorHdrBlobProperty().

Referenced by SetVideoBuffer().

◆ SetOsdBuffer()

◆ SetOsdSize()

void cVideoRender::SetOsdSize ( int  width,
int  height 
)

Wrapper to set the osd size in the device.

Parameters
widthosd width
heightosd height

Definition at line 1229 of file videorender.cpp.

References m_pDevice, and cSoftHdDevice::SetOsdSize().

Referenced by cDrmDevice::Init().

◆ SetPipActive()

void cVideoRender::SetPipActive ( bool  on)
inline

Definition at line 241 of file videorender.h.

References m_pipActive.

Referenced by cSoftHdDevice::SetRenderPipActive().

◆ SetPipBuffer()

int cVideoRender::SetPipBuffer ( cDrmBuffer buf)
private

Modesetting for pip.

Parameters
[in]bufdrm video buffer to display
Return values
1no modesetting was done
0modesetting was done

Definition at line 368 of file videorender.cpp.

References ComputeFittedRect(), cDrmDevice::CrtcId(), cDrmDevice::DisplayHeight(), cDrmDevice::DisplayWidth(), m_pDrmDevice, m_pipActive, m_pipLeftPercent, m_pipScalePercent, m_pipTopPercent, m_videoIsScaled, m_videoRect, and cDrmDevice::PipPlane().

Referenced by CommitBuffer().

◆ SetPipSize()

void cVideoRender::SetPipSize ( bool  useAlt)

◆ SetPlaybackPaused()

void cVideoRender::SetPlaybackPaused ( bool  pause)
inline

◆ SetScheduleAudioResume()

void cVideoRender::SetScheduleAudioResume ( bool  resume)
inline

Definition at line 182 of file videorender.h.

References m_resumeAudioScheduled.

Referenced by cSoftHdDevice::OnEventReceived().

◆ SetScreenSize()

void cVideoRender::SetScreenSize ( int  width,
int  height,
double  refreshRateHz,
bool  interlaced 
)

Wrapper to set the screen size in the device.

Parameters
widthscreen width
heightscreen height
refreshRateHzscreen refresh rate in Hz
interlacedtrue, if this is an interlaced screen mode

Definition at line 1242 of file videorender.cpp.

References m_flipCounter, m_framesPerFlipCycle, m_pDevice, m_refreshRateHz, and cSoftHdDevice::SetScreenSize().

Referenced by cDrmDevice::FindMode().

◆ SetStillpicture()

void cVideoRender::SetStillpicture ( bool  active)
inline

◆ SetTrickSpeed()

void cVideoRender::SetTrickSpeed ( double  speed,
bool  active,
bool  forward 
)

Set the trickspeed parameters.

Parameters
speedtrick speed value from VDR (0 = normal)
activetrue if trickspeed is active
forwardtrue if forward trick speed, false if backward

Definition at line 1103 of file videorender.cpp.

References L_TRICK, LOGDEBUG2, m_forwardTrickspeed, m_framePresentationCounter, m_trickspeed, and m_trickspeedFactor.

Referenced by cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().

◆ SetVideoBuffer()

int cVideoRender::SetVideoBuffer ( cDrmBuffer buf)
private

Modesetting for video.

Parameters
[in]bufdrm video buffer to display
Return values
1no modesetting was done
0modesetting was done

Definition at line 271 of file videorender.cpp.

References cHdrMetadata::Build(), COLORRANGE_LIMITED, ComputeFittedRect(), cDrmDevice::CrtcId(), cDrmDevice::DisplayHeight(), cDrmDevice::DisplayWidth(), m_enableHdr, m_pDrmDevice, m_pHdrMetadata, m_videoIsScaled, m_videoRect, SetColorSpace(), SetHdrBlob(), and cDrmDevice::VideoPlane().

Referenced by CommitBuffer().

◆ SetVideoClock()

void cVideoRender::SetVideoClock ( int64_t  pts)
inlineprivate

Definition at line 344 of file videorender.h.

References m_pts.

Referenced by PageFlip(), PushFrame(), and Reset().

◆ SetVideoOutputPosition()

void cVideoRender::SetVideoOutputPosition ( const cRect rect)

Set size and position of the video on the screen.

Parameters
recta cRect, where the video should be rendered in

Definition at line 1489 of file videorender.cpp.

References LOGDEBUG, m_videoIsScaled, and m_videoRect.

Referenced by cSoftHdDevice::ScaleVideo().

◆ Stop()

void cVideoRender::Stop ( void  )

Stop the thread.

Definition at line 637 of file videorender.cpp.

References LOGDEBUG.

Referenced by Exit(), and ~cVideoRender().

◆ TriggerGrab()

int cVideoRender::TriggerGrab ( void  )

Trigger a screen grab.

Return values
0on success, grab was triggered
1on timeout, grab was not triggered

Definition at line 1142 of file videorender.cpp.

References LOGWARNING, m_grabCond, m_grabMutex, and m_startgrab.

Referenced by cSoftHdGrab::Start().

Member Data Documentation

◆ AV_SYNC_THRESHOLD_AUDIO_AHEAD_VIDEO_MS

constexpr int cVideoRender::AV_SYNC_THRESHOLD_AUDIO_AHEAD_VIDEO_MS = 20
staticconstexprprivate

threshold in ms, when to drop video frames to keep audio and video in sync

Definition at line 286 of file videorender.h.

Referenced by FrameDropNecessary(), and LogDroppedDuped().

◆ AV_SYNC_THRESHOLD_AUDIO_BEHIND_VIDEO_MS

constexpr int cVideoRender::AV_SYNC_THRESHOLD_AUDIO_BEHIND_VIDEO_MS = 20
staticconstexprprivate

Sync Corridor.

The current sync logic drops all old audio data at playback start to start with nearly the same audio and video pts. So the theoretical initial AV-diff is 0ms. However, the real one isn't because it takes some time from BufferingThresholdReached() to the first AV Sync. The tolerance window historically changed from -25/+55ms (original softhddevice) to -5/+35 (softhddevice-drm) up to -20/20ms, which is a symmetrical window around the theoretical 0ms-sync-destination. The AV-diff is mostly stable once synched (except for the consequences of ClockDriftCompensation) but has outliers ~3-4ms from time to time due to audio pts fluctuation. Now, if the initial sync was done to -4ms and such an outlier arrives, we land at -7ms, the frame is dropped and our new AV-diff is +14ms now. This can be avoided by the -20/+20ms window. threshold in ms, when to duplicate video frames to keep audio and video in sync

Definition at line 285 of file videorender.h.

Referenced by FrameDropNecessary(), and LogDroppedDuped().

◆ m_bo

struct gbm_bo* cVideoRender::m_bo
private

pointer to current gbm buffer object

Definition at line 335 of file videorender.h.

Referenced by cVideoRender(), OsdClear(), and OsdDrawARGB().

◆ m_bufBlack

cDrmBuffer cVideoRender::m_bufBlack
private

black drm buffer object

Definition at line 304 of file videorender.h.

Referenced by DeleteBuffers(), DisplayBlackFrame(), Init(), and InitBuffers().

◆ m_bufferReuseStrategy

std::atomic<cBufferStrategy *> cVideoRender::m_bufferReuseStrategy = nullptr
private

strategy to select drm buffers

Definition at line 318 of file videorender.h.

Referenced by PushMainFrame(), and ResetBufferReuseStrategy().

◆ m_colorRangeStored

bool cVideoRender::m_colorRangeStored = false
private

true, if the original color range was stored

Definition at line 331 of file videorender.h.

Referenced by RestoreColorSpace(), and SetHdrBlob().

◆ m_decodingStrategy

std::atomic<cDecodingStrategy *> cVideoRender::m_decodingStrategy = nullptr
private

strategy for decoding setup

Definition at line 320 of file videorender.h.

Referenced by PushMainFrame(), Reset(), and ResetDecodingStrategy().

◆ m_disableOglOsd

bool cVideoRender::m_disableOglOsd
private

set, if ogl osd is disabled

Definition at line 334 of file videorender.h.

Referenced by cVideoRender(), DeleteBuffers(), DisableOglOsd(), EnableOglOsd(), Init(), InitBuffers(), OglOsdDisabled(), OsdClear(), and OsdDrawARGB().

◆ m_displayOneFrameThenPause

std::atomic<bool> cVideoRender::m_displayOneFrameThenPause = false
private

set, if only one frame shall be displayed and then pause playback

Definition at line 311 of file videorender.h.

Referenced by DisplayFrame(), FrameDropNecessary(), and SetDisplayOneFrameThenPause().

◆ m_drmBufferPool

cDrmBufferPool cVideoRender::m_drmBufferPool
private

pool of drm buffers

Definition at line 316 of file videorender.h.

Referenced by ClearDecoderToDisplayQueue(), and PushMainFrame().

◆ m_drmBufferQueue

cQueue<cDrmBuffer> cVideoRender::m_drmBufferQueue {VIDEO_SURFACES_MAX}
private

queue for DRM buffers to be displayed (VIDEO_SURFACES_MAX is defined in thread.h)

Definition at line 256 of file videorender.h.

Referenced by ClearDecoderToDisplayQueue(), DisplayFrame(), GetFramesFilled(), GetMainOutputBuffer(), IsOutputBufferFull(), LogDroppedDuped(), and PushMainFrame().

◆ m_enableHdr

std::atomic<bool> cVideoRender::m_enableHdr = false
private

hdr is enabled

Definition at line 329 of file videorender.h.

Referenced by SetEnableHdr(), and SetVideoBuffer().

◆ m_eventQueue

std::vector<Event> cVideoRender::m_eventQueue
private

event queue for incoming events

Definition at line 253 of file videorender.h.

Referenced by DisplayFrame(), FrameDropNecessary(), and ProcessEvents().

◆ m_flipCounter

int cVideoRender::m_flipCounter = 0
private

page flip counter

Definition at line 325 of file videorender.h.

Referenced by DisplayFrame(), PageFlip(), Reset(), and SetScreenSize().

◆ m_forwardTrickspeed

std::atomic<bool> cVideoRender::m_forwardTrickspeed = true
private

true, if trickspeed plays forward

Definition at line 260 of file videorender.h.

Referenced by IsForwardTrickspeed(), and SetTrickSpeed().

◆ m_framePresentationCounter

std::atomic<int> cVideoRender::m_framePresentationCounter = 0
private

number of times the current frame has to be shown (for slow-motion)

Definition at line 262 of file videorender.h.

Referenced by DisplayFrame(), FrameDropNecessary(), and SetTrickSpeed().

◆ m_framesDropped

int cVideoRender::m_framesDropped = 0
private

number of frames dropped

Definition at line 289 of file videorender.h.

Referenced by GetStats(), LogDroppedDuped(), and Reset().

◆ m_framesDuped

int cVideoRender::m_framesDuped = 0
private

number of frames duplicated

Definition at line 288 of file videorender.h.

Referenced by GetStats(), LogDroppedDuped(), and Reset().

◆ m_framesPerFlipCycle

int cVideoRender::m_framesPerFlipCycle = 1
private

number of pageflips over which a single video frame should be presented 1 in progressive display mode 2 in interlaced display mode, to skip the sync and present an (interleaved) frame 2 times

Definition at line 322 of file videorender.h.

Referenced by DisplayFrame(), and SetScreenSize().

◆ m_grabCond

cCondVar cVideoRender::m_grabCond
private

condition gets signalled, if renederer finished to clone the grabbed buffers

Definition at line 267 of file videorender.h.

Referenced by CreateGrabBuffers(), and TriggerGrab().

◆ m_grabMutex

std::mutex cVideoRender::m_grabMutex
private

mutex around grabbing

Definition at line 294 of file videorender.h.

Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and TriggerGrab().

◆ m_grabOsd

cGrabBuffer cVideoRender::m_grabOsd
private

keeps the current grabbed osd

Definition at line 268 of file videorender.h.

Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and GetGrabbedOsdBuffer().

◆ m_grabPip

cGrabBuffer cVideoRender::m_grabPip
private

keeps the current grabbed pip video

Definition at line 270 of file videorender.h.

Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and GetGrabbedPipBuffer().

◆ m_grabVideo

cGrabBuffer cVideoRender::m_grabVideo
private

keeps the current grabbed video

Definition at line 269 of file videorender.h.

Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and GetGrabbedVideoBuffer().

◆ m_hasDoneHdrModeset

bool cVideoRender::m_hasDoneHdrModeset = false
private

true, if we ever created an hdr blob and did a modesetting

Definition at line 328 of file videorender.h.

Referenced by Exit(), RestoreColorSpace(), and SetColorSpace().

◆ m_lastFrameWasDropped

bool cVideoRender::m_lastFrameWasDropped = false
private

true, if the last frame was dropped

Definition at line 290 of file videorender.h.

Referenced by DisplayFrame(), and FrameDropNecessary().

◆ m_mutex

std::mutex cVideoRender::m_mutex
private

mutex for thread control

Definition at line 252 of file videorender.h.

Referenced by Action(), Halt(), and Resume().

◆ m_numWrongProgressive

int cVideoRender::m_numWrongProgressive
private

counter for progressive frames sent in an interlaced stream (only used for logging)

Definition at line 263 of file videorender.h.

Referenced by Reset().

◆ m_originalColorRange

drmColorRange cVideoRender::m_originalColorRange = COLORRANGE_LIMITED
private

initial color range

Definition at line 330 of file videorender.h.

Referenced by RestoreColorSpace(), and SetHdrBlob().

◆ m_osdShown

bool cVideoRender::m_osdShown = false
private

set, if osd is shown currently

Definition at line 307 of file videorender.h.

Referenced by CreateGrabBuffers(), Init(), OsdClear(), OsdDrawARGB(), and SetOsdBuffer().

◆ m_pAudio

cSoftHdAudio* cVideoRender::m_pAudio
private

pointer to cSoftHdAudio

Definition at line 250 of file videorender.h.

Referenced by DisplayFrame(), FrameDropNecessary(), and LogDroppedDuped().

◆ m_pBufOsd

cDrmBuffer* cVideoRender::m_pBufOsd = nullptr
private

pointer to osd drm buffer object

Definition at line 303 of file videorender.h.

Referenced by CreateGrabBuffers(), DeleteBuffers(), DisplayFrame(), Init(), InitBuffers(), OsdClear(), OsdDrawARGB(), and SetOsdBuffer().

◆ m_pConfig

cSoftHdConfig* cVideoRender::m_pConfig
private

pointer to cSoftHdConfig

Definition at line 251 of file videorender.h.

Referenced by cVideoRender(), DisplayFrame(), and SetPipSize().

◆ m_pCurrentlyDisplayed

cDrmBuffer* cVideoRender::m_pCurrentlyDisplayed = nullptr
private

pointer to currently displayed DRM buffer

Definition at line 305 of file videorender.h.

Referenced by ClearDecoderToDisplayQueue(), CommitBuffer(), CreateGrabBuffers(), DisplayBlackFrame(), and DisplayFrame().

◆ m_pCurrentlyPipDisplayed

cDrmBuffer* cVideoRender::m_pCurrentlyPipDisplayed = nullptr
private

pointer to currently displayed DRM buffer

Definition at line 306 of file videorender.h.

Referenced by ClearPipDecoderToDisplayQueue(), CommitBuffer(), CreateGrabBuffers(), and DisplayFrame().

◆ m_pDevice

cSoftHdDevice* cVideoRender::m_pDevice
private

◆ m_pDrmDevice

◆ m_pEventReceiver

IEventReceiver* cVideoRender::m_pEventReceiver
private

pointer to event receiver

Definition at line 315 of file videorender.h.

Referenced by ProcessEvents().

◆ m_pHdrMetadata

cHdrMetadata cVideoRender::m_pHdrMetadata
private

hdr metadata object

Definition at line 327 of file videorender.h.

Referenced by SetColorSpace(), and SetVideoBuffer().

◆ m_pipActive

std::atomic<bool> cVideoRender::m_pipActive = false
private

true, if pip should be displayed

Definition at line 340 of file videorender.h.

Referenced by SetPipActive(), and SetPipBuffer().

◆ m_pipBufferReuseStrategy

std::atomic<cBufferStrategy *> cVideoRender::m_pipBufferReuseStrategy = nullptr
private

strategy to select drm buffers

Definition at line 319 of file videorender.h.

Referenced by PushPipFrame(), and ResetPipBufferReuseStrategy().

◆ m_pipDecodingStrategy

std::atomic<cDecodingStrategy *> cVideoRender::m_pipDecodingStrategy = nullptr
private

strategy for decoding setup

Definition at line 321 of file videorender.h.

Referenced by PushPipFrame(), and ResetPipDecodingStrategy().

◆ m_pipDrmBufferPool

cDrmBufferPool cVideoRender::m_pipDrmBufferPool
private

PIP pool of drm buffers.

Definition at line 317 of file videorender.h.

Referenced by ClearPipDecoderToDisplayQueue(), and PushPipFrame().

◆ m_pipDrmBufferQueue

cQueue<cDrmBuffer> cVideoRender::m_pipDrmBufferQueue {VIDEO_SURFACES_MAX}
private

queue for PIP DRM buffers to be displayed (VIDEO_SURFACES_MAX is defined in thread.h)

Definition at line 257 of file videorender.h.

Referenced by ClearPipDecoderToDisplayQueue(), DisplayFrame(), GetPipOutputBuffer(), and PushPipFrame().

◆ m_pipLeftPercent

int cVideoRender::m_pipLeftPercent
private

left margin for pip

Definition at line 299 of file videorender.h.

Referenced by SetPipBuffer(), and SetPipSize().

◆ m_pipScalePercent

int cVideoRender::m_pipScalePercent
private

scale factor for pip

Definition at line 298 of file videorender.h.

Referenced by SetPipBuffer(), and SetPipSize().

◆ m_pipTopPercent

int cVideoRender::m_pipTopPercent
private

top margin for pip

Definition at line 300 of file videorender.h.

Referenced by SetPipBuffer(), and SetPipSize().

◆ m_pNextBo

struct gbm_bo* cVideoRender::m_pNextBo
private

pointer to next gbm buffer object (for later free)

Definition at line 337 of file videorender.h.

Referenced by cVideoRender(), DeleteBuffers(), OsdClear(), and OsdDrawARGB().

◆ m_pOldBo

struct gbm_bo* cVideoRender::m_pOldBo
private

pointer to old gbm buffer object (for later free)

Definition at line 336 of file videorender.h.

Referenced by cVideoRender(), DeleteBuffers(), OsdClear(), and OsdDrawARGB().

◆ m_pts

std::atomic<int64_t> cVideoRender::m_pts = AV_NOPTS_VALUE
private

current video PTS

Definition at line 293 of file videorender.h.

Referenced by GetVideoClock(), and SetVideoClock().

◆ m_refreshRateHz

std::atomic<double> cVideoRender::m_refreshRateHz
private

screen refresh rate in Hz

Definition at line 254 of file videorender.h.

Referenced by GetFramePresentationCount(), and SetScreenSize().

◆ m_resumeAudioScheduled

std::atomic<bool> cVideoRender::m_resumeAudioScheduled = false
private

set, if audio resume is scheduled after a pause

Definition at line 309 of file videorender.h.

Referenced by FrameDropNecessary(), and SetScheduleAudioResume().

◆ m_schedulePlaybackStartAtPtsMs

std::atomic<int64_t> cVideoRender::m_schedulePlaybackStartAtPtsMs = AV_NOPTS_VALUE
private

if set, frames with PTS older than this will be dropped

Definition at line 312 of file videorender.h.

Referenced by DisplayFrame(), and SchedulePlaybackStartAtPtsMs().

◆ m_scheduleResyncAtPtsMs

std::atomic<int64_t> cVideoRender::m_scheduleResyncAtPtsMs = AV_NOPTS_VALUE
private

if set, a resync (enter state BUFFERING) will be forced at the given pts

Definition at line 313 of file videorender.h.

Referenced by FrameDropNecessary(), and ScheduleResyncAtPtsMs().

◆ m_startCounter

int cVideoRender::m_startCounter = 0
private

counter for displayed frames, indicates a video start

Definition at line 287 of file videorender.h.

Referenced by DisplayFrame(), FrameDropNecessary(), GetStats(), LogDroppedDuped(), Reset(), and ResetFrameCounter().

◆ m_startgrab

std::atomic<bool> cVideoRender::m_startgrab = false
private

internal flag to trigger grabbing

Definition at line 266 of file videorender.h.

Referenced by CreateGrabBuffers(), and TriggerGrab().

◆ m_stillpicture

std::atomic<bool> cVideoRender::m_stillpicture = false
private

true, if stillpicture is active

Definition at line 261 of file videorender.h.

Referenced by IsStillpicture(), and SetStillpicture().

◆ m_timebase

AVRational cVideoRender::m_timebase
private

timebase used for pts, set by first RenderFrame()

Definition at line 291 of file videorender.h.

Referenced by cVideoRender(), DisplayFrame(), GetOutputPtsMs(), and PtsToMs().

◆ m_timebaseMutex

std::mutex cVideoRender::m_timebaseMutex
private

mutex used around m_timebase

Definition at line 292 of file videorender.h.

Referenced by GetOutputPtsMs(), and PtsToMs().

◆ m_trickspeed

std::atomic<bool> cVideoRender::m_trickspeed = false
private

true, if trickspeed is active

Definition at line 259 of file videorender.h.

Referenced by IsTrickSpeed(), and SetTrickSpeed().

◆ m_trickspeedFactor

std::atomic<double> cVideoRender::m_trickspeedFactor = 0
private

current trick speed

Definition at line 258 of file videorender.h.

Referenced by GetFramePresentationCount(), and SetTrickSpeed().

◆ m_videoIsScaled

bool cVideoRender::m_videoIsScaled = false
private

true, if the currently displayed video is scaled

Definition at line 297 of file videorender.h.

Referenced by DisplayFrame(), SetPipBuffer(), SetVideoBuffer(), and SetVideoOutputPosition().

◆ m_videoPlaybackPaused

std::atomic<bool> cVideoRender::m_videoPlaybackPaused = true
private

set, if playback is frozen (used for pause)

Definition at line 308 of file videorender.h.

Referenced by DisplayFrame(), and SetPlaybackPaused().

◆ m_videoPlaybackPauseScheduledAt

std::atomic<int64_t> cVideoRender::m_videoPlaybackPauseScheduledAt = AV_NOPTS_VALUE
private

if set, video will be paused at the given pts

Definition at line 310 of file videorender.h.

Referenced by DisplayFrame(), FrameDropNecessary(), and ScheduleVideoPlaybackPauseAt().

◆ m_videoRect

cRect cVideoRender::m_videoRect
private

rect of the currently displayed video

Definition at line 296 of file videorender.h.

Referenced by SetPipBuffer(), SetVideoBuffer(), and SetVideoOutputPosition().


The documentation for this class was generated from the following files: