vdr-plugin-softhddevice-drm-gles 1.5.9-20e15de
cVideoRender Class Reference

cVideoRender - Video render class More...

#include <videorender.h>

Public Member Functions

 cVideoRender (cSoftHdDevice *)
 cVideoRender constructor
 
 ~cVideoRender (void)
 cVideoRender destructor
 
void Init (void)
 Initialize the renderer.
 
void Exit (void)
 Exit and cleanup the renderer.
 
void SetVideoOutputPosition (const cRect &)
 Set size and position of the video on the screen.
 
void SetScreenSize (int, int, double)
 Wrapper to set the screen size in the device.
 
int64_t GetVideoClock (void)
 
void GetStats (int *, int *, int *)
 Get some rendering statistics.
 
void ResetFrameCounter (void)
 Send start condition to video thread.
 
void Reset ()
 
void SetPlaybackPaused (bool pause)
 
void SetScheduleAudioResume (bool resume)
 
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)
 
void ExitDisplayThread (void)
 Stop display thread.
 
void DisplayThreadHalt (void)
 
void DisplayThreadResume (void)
 
int DrmHandleEvent (void)
 Wrapper for drmHandleEvent()
 
bool DisplayFrame ()
 Display the frame (video and/or osd)
 
int GetFramesFilled (void)
 
void PushMainFrame (AVFrame *)
 
void PushPipFrame (AVFrame *)
 
int64_t GetOutputPtsMs (void)
 Get the output PTS in milliseconds.
 
void DisplayBlackFrame (void)
 
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 SetPipActive (bool on)
 
void ClearPipDecoderToDisplayQueue (void)
 Clear (empty) the decoder to display queue.
 
void SetPipSize (bool)
 

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.
 

Private Attributes

cSoftHdDevicem_pDevice
 pointer to cSoftHdDevice
 
cSoftHdAudiom_pAudio
 pointer to cSoftHdAudio
 
cSoftHdConfigm_pConfig
 pointer to cSoftHdConfig
 
cDisplayThreadm_pDisplayThread
 pointer to display thread
 
std::vector< Eventm_eventQueue
 event queue for incoming events
 
double m_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< 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
 
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< 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< 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
 
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
 
std::atomic< bool > m_pipActive = false
 true, if pip should be displayed
 

Detailed Description

cVideoRender - Video render class

Definition at line 105 of file videorender.h.

Constructor & Destructor Documentation

◆ cVideoRender()

cVideoRender::cVideoRender ( cSoftHdDevice device)

cVideoRender constructor

Parameters
devicepointer to cSoftHdDevice

Definition at line 69 of file videorender.cpp.

References cSoftHdConfig::ConfigPipUseAlt, m_pConfig, m_timebase, and SetPipSize().

◆ ~cVideoRender()

cVideoRender::~cVideoRender ( void  )

cVideoRender destructor

Definition at line 89 of file videorender.cpp.

References L_DRM, LOGDEBUG2, m_pDisplayThread, and m_pDrmDevice.

Member Function Documentation

◆ ClearDecoderToDisplayQueue()

void cVideoRender::ClearDecoderToDisplayQueue ( void  )

◆ ClearGrabBuffers()

void cVideoRender::ClearGrabBuffers ( void  )

Clear the grab drm buffers.

Definition at line 1083 of file videorender.cpp.

References cGrabBuffer::FreeDrmBuf(), cGrabBuffer::GetDrmBuf(), m_grabOsd, m_grabPip, and m_grabVideo.

Referenced by cSoftHdGrab::Start().

◆ ClearPipDecoderToDisplayQueue()

void cVideoRender::ClearPipDecoderToDisplayQueue ( void  )

Clear (empty) the decoder to display queue.

Definition at line 114 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 331 of file videorender.cpp.

References cDrmPlane::ClearPlane(), cDrmPlane::DumpParameters(), cDrmDevice::Fd(), cDrmPlane::GetFbId(), cDrmPlane::GetId(), L_DRM, LOGDEBUG2, LOGERROR, m_osdShown, m_pCurrentlyDisplayed, m_pCurrentlyPipDisplayed, m_pDrmDevice, cDrmDevice::OsdPlane(), cDrmDevice::PipPlane(), SetOsdBuffer(), SetPipBuffer(), cDrmPlane::SetPlane(), 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 1052 of file videorender.cpp.

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

Referenced by DisplayFrame().

◆ DisplayBlackFrame()

void cVideoRender::DisplayBlackFrame ( void  )

◆ DisplayFrame()

◆ DisplayThreadHalt()

void cVideoRender::DisplayThreadHalt ( void  )
inline

Definition at line 149 of file videorender.h.

References cDisplayThread::Halt(), and m_pDisplayThread.

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

◆ DisplayThreadResume()

void cVideoRender::DisplayThreadResume ( void  )
inline

◆ DrmHandleEvent()

int cVideoRender::DrmHandleEvent ( void  )

Wrapper for drmHandleEvent()

Definition at line 644 of file videorender.cpp.

References cDrmDevice::HandleEvent(), and m_pDrmDevice.

◆ Exit()

◆ ExitDisplayThread()

void cVideoRender::ExitDisplayThread ( void  )

Stop display thread.

Definition at line 769 of file videorender.cpp.

References LOGDEBUG, m_pDisplayThread, Reset(), and cDisplayThread::Stop().

Referenced by Exit().

◆ GetFrameFlags()

int cVideoRender::GetFrameFlags ( AVFrame *  frame)
private

Get frame flags.

Parameters
frameAVFrame
Returns
FRAME_FLAG_TRICKSPEED or FRAME_FLAG_STILLPICTURE

Definition at line 439 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 1007 of file videorender.cpp.

References IsTrickSpeed(), m_refreshRateHz, and m_trickspeedFactor.

Referenced by DisplayFrame().

◆ GetFramesFilled()

int cVideoRender::GetFramesFilled ( void  )
inline

Definition at line 157 of file videorender.h.

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

◆ GetGrabbedOsdBuffer()

cGrabBuffer * cVideoRender::GetGrabbedOsdBuffer ( void  )
inline

Definition at line 144 of file videorender.h.

References m_grabOsd.

Referenced by cSoftHdGrab::GetGrab().

◆ GetGrabbedPipBuffer()

cGrabBuffer * cVideoRender::GetGrabbedPipBuffer ( void  )
inline

Definition at line 145 of file videorender.h.

References m_grabPip.

Referenced by cSoftHdGrab::GetGrab().

◆ GetGrabbedVideoBuffer()

cGrabBuffer * cVideoRender::GetGrabbedVideoBuffer ( void  )
inline

Definition at line 143 of file videorender.h.

References m_grabVideo.

Referenced by cSoftHdGrab::GetGrab().

◆ GetMainOutputBuffer()

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

Definition at line 167 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 953 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 168 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 1100 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 116 of file videorender.h.

References m_pts.

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

◆ Init()

◆ IsForwardTrickspeed()

bool cVideoRender::IsForwardTrickspeed ( void  )
inline

Definition at line 136 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 793 of file videorender.cpp.

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

Referenced by cSoftHdDevice::IsBufferingThresholdReached().

◆ IsStillpicture()

bool cVideoRender::IsStillpicture ( void  )
inline

Definition at line 138 of file videorender.h.

References m_stillpicture.

Referenced by DisplayFrame().

◆ IsTrickSpeed()

bool cVideoRender::IsTrickSpeed ( void  )
inline

◆ LogDroppedDuped()

void cVideoRender::LogDroppedDuped ( int64_t  audioPtsMs,
int64_t  videoPtsMs,
int  audioBehindVideoByMs 
)
private

Log A/V sync debug message.

Parameters
audioPtsMsaudio pts
videoPtsMsvideo pts
audioBehindVideoByMsaudio is behind video by this many ms

Definition at line 411 of file videorender.cpp.

References cVideoStream::GetAvPacketsFilled(), cSoftHdAudio::GetUsedBytes(), cSoftHdDevice::GetVideoAudioDelayMs(), L_AV_SYNC, LOGDEBUG2, m_drmBufferQueue, m_framesDropped, m_framesDuped, m_pAudio, m_pDevice, cQueue< T >::Size(), Timestamp2String(), and cSoftHdDevice::VideoStream().

Referenced by DisplayFrame().

◆ OsdClear()

void cVideoRender::OsdClear ( void  )

◆ 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 710 of file videorender.cpp.

References cDrmBuffer::Height(), L_OPENGL, L_OSD, LOGDEBUG2, LOGERROR, m_osdShown, m_pBufOsd, m_pDrmDevice, cDrmBuffer::MarkDirty(), MIN, cDrmBuffer::Pitch(), cDrmBuffer::Plane(), and cDrmBuffer::Width().

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 475 of file videorender.cpp.

References AV_NOPTS_VALUE, CommitBuffer(), cDrmBuffer::frame, cDrmDevice::HandleEvent(), cDrmBuffer::Id(), L_PACKET, LOGDEBUG2, LOGERROR, 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 1289 of file videorender.cpp.

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

Referenced by cDisplayThread::Action().

◆ PtsToMs()

int64_t cVideoRender::PtsToMs ( int64_t  pts)
private

Definition at line 634 of file videorender.cpp.

References m_timebase, and m_timebaseMutex.

Referenced by DisplayFrame().

◆ PushFrame()

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

◆ PushMainFrame()

void cVideoRender::PushMainFrame ( AVFrame *  frame)

◆ PushPipFrame()

void cVideoRender::PushPipFrame ( AVFrame *  frame)

◆ Reset()

◆ ResetBufferReuseStrategy()

void cVideoRender::ResetBufferReuseStrategy ( )
inline

◆ ResetDecodingStrategy()

void cVideoRender::ResetDecodingStrategy ( )
inline

Definition at line 125 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 966 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 126 of file videorender.h.

References m_pipBufferReuseStrategy.

Referenced by cSoftHdDevice::ResetPipStream().

◆ ResetPipDecodingStrategy()

void cVideoRender::ResetPipDecodingStrategy ( )
inline

Definition at line 127 of file videorender.h.

References m_pipDecodingStrategy.

Referenced by cSoftHdDevice::ResetPipStream().

◆ SchedulePlaybackStartAtPtsMs()

void cVideoRender::SchedulePlaybackStartAtPtsMs ( int64_t  ptsMs)
inline

◆ ScheduleResyncAtPtsMs()

void cVideoRender::ScheduleResyncAtPtsMs ( int64_t  ptsMs)
inline

Definition at line 166 of file videorender.h.

References m_scheduleResyncAtPtsMs.

Referenced by cSoftHdDevice::OnEventReceived().

◆ SetDisplayOneFrameThenPause()

void cVideoRender::SetDisplayOneFrameThenPause ( bool  pause)
inline

Definition at line 164 of file videorender.h.

References m_displayOneFrameThenPause.

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

◆ 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 454 of file videorender.cpp.

References LOGFATAL.

◆ SetOsdBuffer()

◆ SetPipActive()

void cVideoRender::SetPipActive ( bool  on)
inline

Definition at line 182 of file videorender.h.

References m_pipActive.

Referenced by cSoftHdDevice::SetRenderPipActive().

◆ SetPipBuffer()

int cVideoRender::SetPipBuffer ( cDrmBuffer buf)
private

◆ SetPipSize()

◆ SetPlaybackPaused()

void cVideoRender::SetPlaybackPaused ( bool  pause)
inline

◆ SetScheduleAudioResume()

void cVideoRender::SetScheduleAudioResume ( bool  resume)
inline

Definition at line 121 of file videorender.h.

References m_resumeAudioScheduled.

Referenced by cSoftHdDevice::OnEventReceived().

◆ SetScreenSize()

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

Wrapper to set the screen size in the device.

Parameters
widthscreen width
heightscreen height
refreshRateHzscreen refresh rate in Hz

Definition at line 1118 of file videorender.cpp.

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

Referenced by cDrmDevice::Init().

◆ 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 991 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 186 of file videorender.cpp.

References ComputeFittedRect(), cDrmDevice::CrtcId(), cDrmDevice::DisplayHeight(), cDrmDevice::DisplayWidth(), cDrmBuffer::frame, sRect::h, cDrmBuffer::Height(), cDrmBuffer::Id(), m_pDrmDevice, m_videoIsScaled, m_videoRect, cDrmPlane::SetParams(), cDrmBuffer::SetSizeOnScreen(), cDrmDevice::VideoPlane(), sRect::w, cDrmBuffer::Width(), sRect::x, and sRect::y.

Referenced by CommitBuffer().

◆ SetVideoClock()

void cVideoRender::SetVideoClock ( int64_t  pts)
inlineprivate

Definition at line 255 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 1274 of file videorender.cpp.

References LOGDEBUG, m_videoIsScaled, and m_videoRect.

Referenced by cSoftHdDevice::ScaleVideo().

◆ 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 1030 of file videorender.cpp.

References LOGWARNING, m_grabCond, and m_startgrab.

Referenced by cSoftHdGrab::Start().

Member Data Documentation

◆ m_bufBlack

cDrmBuffer cVideoRender::m_bufBlack
private

black drm buffer object

Definition at line 226 of file videorender.h.

Referenced by DisplayBlackFrame(), Exit(), and Init().

◆ m_bufferReuseStrategy

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

strategy to select drm buffers

Definition at line 239 of file videorender.h.

Referenced by PushMainFrame(), and ResetBufferReuseStrategy().

◆ m_decodingStrategy

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

strategy for decoding setup

Definition at line 241 of file videorender.h.

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

◆ 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 232 of file videorender.h.

Referenced by DisplayFrame(), and SetDisplayOneFrameThenPause().

◆ m_drmBufferPool

cDrmBufferPool cVideoRender::m_drmBufferPool
private

pool of drm buffers

Definition at line 237 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 194 of file videorender.h.

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

◆ m_eventQueue

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

event queue for incoming events

Definition at line 191 of file videorender.h.

Referenced by DisplayFrame(), and ProcessEvents().

◆ m_forwardTrickspeed

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

true, if trickspeed plays forward

Definition at line 198 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 200 of file videorender.h.

Referenced by DisplayFrame(), and SetTrickSpeed().

◆ m_framesDropped

int cVideoRender::m_framesDropped = 0
private

number of frames dropped

Definition at line 212 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 211 of file videorender.h.

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

◆ m_grabCond

cCondVar cVideoRender::m_grabCond
private

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

Definition at line 205 of file videorender.h.

Referenced by CreateGrabBuffers(), and TriggerGrab().

◆ m_grabOsd

cGrabBuffer cVideoRender::m_grabOsd
private

keeps the current grabbed osd

Definition at line 206 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 208 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 207 of file videorender.h.

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

◆ m_lastFrameWasDropped

bool cVideoRender::m_lastFrameWasDropped = false
private

true, if the last frame was dropped

Definition at line 213 of file videorender.h.

Referenced by DisplayFrame().

◆ m_numWrongProgressive

int cVideoRender::m_numWrongProgressive
private

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

Definition at line 201 of file videorender.h.

Referenced by Reset().

◆ m_osdShown

bool cVideoRender::m_osdShown = false
private

set, if osd is shown currently

Definition at line 229 of file videorender.h.

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

◆ m_pAudio

cSoftHdAudio* cVideoRender::m_pAudio
private

pointer to cSoftHdAudio

Definition at line 188 of file videorender.h.

Referenced by DisplayFrame(), and LogDroppedDuped().

◆ m_pBufOsd

cDrmBuffer* cVideoRender::m_pBufOsd = nullptr
private

pointer to osd drm buffer object

Definition at line 225 of file videorender.h.

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

◆ m_pConfig

cSoftHdConfig* cVideoRender::m_pConfig
private

pointer to cSoftHdConfig

Definition at line 189 of file videorender.h.

Referenced by cVideoRender(), and SetPipSize().

◆ m_pCurrentlyDisplayed

cDrmBuffer* cVideoRender::m_pCurrentlyDisplayed = nullptr
private

pointer to currently displayed DRM buffer

Definition at line 227 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 228 of file videorender.h.

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

◆ m_pDevice

cSoftHdDevice* cVideoRender::m_pDevice
private

pointer to cSoftHdDevice

Definition at line 187 of file videorender.h.

Referenced by DisplayFrame(), Init(), LogDroppedDuped(), and SetScreenSize().

◆ m_pDisplayThread

cDisplayThread* cVideoRender::m_pDisplayThread
private

pointer to display thread

Definition at line 190 of file videorender.h.

Referenced by DisplayThreadHalt(), DisplayThreadResume(), ExitDisplayThread(), Init(), and ~cVideoRender().

◆ m_pDrmDevice

cDrmDevice* cVideoRender::m_pDrmDevice
private

◆ m_pEventReceiver

IEventReceiver* cVideoRender::m_pEventReceiver
private

pointer to event receiver

Definition at line 236 of file videorender.h.

Referenced by ProcessEvents().

◆ m_pipActive

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

true, if pip should be displayed

Definition at line 251 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 240 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 242 of file videorender.h.

Referenced by PushPipFrame(), and ResetPipDecodingStrategy().

◆ m_pipDrmBufferPool

cDrmBufferPool cVideoRender::m_pipDrmBufferPool
private

PIP pool of drm buffers.

Definition at line 238 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 195 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 221 of file videorender.h.

Referenced by SetPipBuffer(), and SetPipSize().

◆ m_pipScalePercent

int cVideoRender::m_pipScalePercent
private

scale factor for pip

Definition at line 220 of file videorender.h.

Referenced by SetPipBuffer(), and SetPipSize().

◆ m_pipTopPercent

int cVideoRender::m_pipTopPercent
private

top margin for pip

Definition at line 222 of file videorender.h.

Referenced by SetPipBuffer(), and SetPipSize().

◆ m_pts

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

current video PTS

Definition at line 216 of file videorender.h.

Referenced by GetVideoClock(), and SetVideoClock().

◆ m_refreshRateHz

double cVideoRender::m_refreshRateHz
private

screen refresh rate in Hz

Definition at line 192 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 231 of file videorender.h.

Referenced by DisplayFrame(), 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 233 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 234 of file videorender.h.

Referenced by DisplayFrame(), and ScheduleResyncAtPtsMs().

◆ m_startCounter

int cVideoRender::m_startCounter = 0
private

counter for displayed frames, indicates a video start

Definition at line 210 of file videorender.h.

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

◆ m_startgrab

bool cVideoRender::m_startgrab = false
private

internal flag to trigger grabbing

Definition at line 204 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 199 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 214 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 215 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 197 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 196 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 219 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 230 of file videorender.h.

Referenced by DisplayFrame(), and SetPlaybackPaused().

◆ m_videoRect

cRect cVideoRender::m_videoRect
private

rect of the currently displayed video

Definition at line 218 of file videorender.h.

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


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