|
vdr-plugin-softhddevice-drm-gles 1.5.9-20e15de
|
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. | |
| cGrabBuffer * | GetGrabbedVideoBuffer (void) |
| cGrabBuffer * | GetGrabbedOsdBuffer (void) |
| cGrabBuffer * | GetGrabbedPipBuffer (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 | |
| cSoftHdDevice * | m_pDevice |
| pointer to cSoftHdDevice | |
| cSoftHdAudio * | m_pAudio |
| pointer to cSoftHdAudio | |
| cSoftHdConfig * | m_pConfig |
| pointer to cSoftHdConfig | |
| cDisplayThread * | m_pDisplayThread |
| pointer to display thread | |
| 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< 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 | |
| std::atomic< bool > | m_pipActive = false |
| true, if pip should be displayed | |
cVideoRender - Video render class
Definition at line 105 of file videorender.h.
| cVideoRender::cVideoRender | ( | cSoftHdDevice * | device | ) |
cVideoRender constructor
| device | pointer to cSoftHdDevice |
Definition at line 69 of file videorender.cpp.
References cSoftHdConfig::ConfigPipUseAlt, m_pConfig, m_timebase, and SetPipSize().
| cVideoRender::~cVideoRender | ( | void | ) |
cVideoRender destructor
Definition at line 89 of file videorender.cpp.
References L_DRM, LOGDEBUG2, m_pDisplayThread, and m_pDrmDevice.
| void cVideoRender::ClearDecoderToDisplayQueue | ( | void | ) |
Clear (empty) the decoder to display queue.
Definition at line 102 of file videorender.cpp.
References cQueue< T >::Clear(), cDrmBufferPool::DestroyAllExcept(), m_drmBufferPool, m_drmBufferQueue, m_pCurrentlyDisplayed, and cDrmBuffer::SetDestroyAfterUse().
Referenced by cSoftHdDevice::Clear(), and cSoftHdDevice::OnEnteringState().
| 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().
| 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().
|
private |
Commit the frame to the hardware.
| buf | video drm buffer |
| 0 | modesetting and commit was done, need to process outstanding DRM events |
| -1 | no 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().
|
private |
Copy current video, osd and pip buffers to dedicated grabbing buffers.
| grabPip | true, 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().
| void cVideoRender::DisplayBlackFrame | ( | void | ) |
Definition at line 621 of file videorender.cpp.
References cDrmBuffer::Destroy(), cDrmBuffer::frame, L_DRM, LOGDEBUG2, m_bufBlack, m_pCurrentlyDisplayed, and PageFlip().
Referenced by cSoftHdDevice::OnEnteringState().
| bool cVideoRender::DisplayFrame | ( | ) |
Display the frame (video and/or osd)
Definition at line 505 of file videorender.cpp.
References AV_NOPTS_VALUE, AV_SYNC_BORDER_MS, AV_SYNC_THRESHOLD_AUDIO_AHEAD_VIDEO_MS, AV_SYNC_THRESHOLD_AUDIO_BEHIND_VIDEO_MS, CreateGrabBuffers(), cSoftHdAudio::DropSamplesOlderThanPtsMs(), cDrmBuffer::frame, cVideoStream::GetAvPacketsFilled(), GetFramePresentationCount(), cSoftHdAudio::GetHardwareOutputPtsMs(), cSoftHdDevice::GetVideoAudioDelayMs(), cSoftHdDevice::IsBufferingThresholdReached(), cDrmBuffer::IsDirty(), cQueue< T >::IsEmpty(), cSoftHdAudio::IsPaused(), IsStillpicture(), IsTrickSpeed(), L_AV_SYNC, LOGDEBUG2, LogDroppedDuped(), m_displayOneFrameThenPause, m_drmBufferQueue, m_eventQueue, m_framePresentationCounter, m_lastFrameWasDropped, m_pAudio, m_pBufOsd, m_pCurrentlyDisplayed, m_pCurrentlyPipDisplayed, m_pDevice, m_pipDrmBufferQueue, m_resumeAudioScheduled, m_schedulePlaybackStartAtPtsMs, m_scheduleResyncAtPtsMs, m_startCounter, m_timebase, m_videoIsScaled, m_videoPlaybackPaused, PageFlip(), cQueue< T >::Pop(), cDrmBuffer::PresentationFinished(), PtsToMs(), cSoftHdAudio::SetPaused(), Timestamp2String(), VIDEO, and cSoftHdDevice::VideoStream().
Referenced by cDisplayThread::Action().
|
inline |
Definition at line 149 of file videorender.h.
References cDisplayThread::Halt(), and m_pDisplayThread.
Referenced by cSoftHdDevice::Clear(), and cSoftHdDevice::OnEventReceived().
|
inline |
Definition at line 150 of file videorender.h.
References m_pDisplayThread, and cDisplayThread::Resume().
Referenced by cSoftHdDevice::Clear(), cSoftHdDevice::OnEnteringState(), and cSoftHdDevice::OnEventReceived().
| int cVideoRender::DrmHandleEvent | ( | void | ) |
Wrapper for drmHandleEvent()
Definition at line 644 of file videorender.cpp.
References cDrmDevice::HandleEvent(), and m_pDrmDevice.
| void cVideoRender::Exit | ( | void | ) |
Exit and cleanup the renderer.
Definition at line 1233 of file videorender.cpp.
References cDrmDevice::Close(), cDrmBuffer::Destroy(), ExitDisplayThread(), cDrmPlane::FreeProperties(), m_bufBlack, m_pBufOsd, m_pDrmDevice, cDrmDevice::OsdPlane(), cDrmDevice::RestoreCrtc(), and cDrmDevice::VideoPlane().
Referenced by cSoftHdDevice::OnEnteringState().
| 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().
|
private |
Get frame flags.
| frame | AVFrame |
Definition at line 439 of file videorender.cpp.
|
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.
| interFrameGapMs | inter-frame gap in ms |
| number | of 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().
|
inline |
Definition at line 157 of file videorender.h.
References m_drmBufferQueue, and cQueue< T >::Size().
|
inline |
Definition at line 144 of file videorender.h.
References m_grabOsd.
Referenced by cSoftHdGrab::GetGrab().
|
inline |
Definition at line 145 of file videorender.h.
References m_grabPip.
Referenced by cSoftHdGrab::GetGrab().
|
inline |
Definition at line 143 of file videorender.h.
References m_grabVideo.
Referenced by cSoftHdGrab::GetGrab().
|
inline |
Definition at line 167 of file videorender.h.
References m_drmBufferQueue.
Referenced by cSoftHdDevice::OnLeavingState().
| int64_t cVideoRender::GetOutputPtsMs | ( | void | ) |
Get the output PTS in milliseconds.
Returns the presentation timestamp of the next frame to be displayed.
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().
|
inline |
Definition at line 168 of file videorender.h.
References m_pipDrmBufferQueue.
Referenced by cSoftHdDevice::OnLeavingState().
| void cVideoRender::GetStats | ( | int * | duped, |
| int * | dropped, | ||
| int * | counter | ||
| ) |
Get some rendering statistics.
| [out] | duped | number of duplicated frames |
| [out] | dropped | number of dropped frames |
| [out] | counter | number of decoded frames |
Definition at line 1100 of file videorender.cpp.
References m_framesDropped, m_framesDuped, and m_startCounter.
Referenced by cSoftHdDevice::GetStats().
|
inline |
Definition at line 116 of file videorender.h.
References m_pts.
Referenced by GetOutputPtsMs(), cSoftHdDevice::GetSTC(), and PushFrame().
| void cVideoRender::Init | ( | void | ) |
Initialize the renderer.
Definition at line 1127 of file videorender.cpp.
References cDrmDevice::ConnectorId(), cDrmDevice::CreatePropertyBlob(), cDrmDevice::CrtcId(), cDrmDevice::DisplayHeight(), cDrmDevice::DisplayWidth(), cDrmPlane::DumpParameters(), cDrmDevice::Fd(), cDrmBuffer::FillBlack(), cDrmDevice::HasPipPlane(), cDrmBuffer::Height(), cDrmBuffer::Id(), cDrmDevice::Init(), cDrmDevice::InitEvent(), L_DRM, LOGDEBUG2, LOGFATAL, m_bufBlack, m_osdShown, m_pBufOsd, m_pDevice, m_pDisplayThread, m_pDrmDevice, cDrmDevice::OsdPlane(), cDrmDevice::SaveCrtc(), cSoftHdDevice::SetDrmCanDisplayPip(), cDrmPlane::SetParams(), cDrmPlane::SetPlane(), cDrmPlane::SetPlaneZpos(), cDrmDevice::SetPropertyRequest(), cDrmBuffer::Setup(), cDrmPlane::SetZpos(), cDrmDevice::UseZpos(), cDrmDevice::VideoPlane(), cDrmBuffer::Width(), cDrmDevice::ZposOverlay(), and cDrmDevice::ZposPrimary().
Referenced by cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 136 of file videorender.h.
References m_forwardTrickspeed.
Referenced by cVideoStream::CheckForcingFrameDecode().
| bool cVideoRender::IsOutputBufferFull | ( | void | ) |
Check, if the main render output buffer is full.
| true | render output buffer is full |
Definition at line 793 of file videorender.cpp.
References cQueue< T >::IsFull(), and m_drmBufferQueue.
Referenced by cSoftHdDevice::IsBufferingThresholdReached().
|
inline |
Definition at line 138 of file videorender.h.
References m_stillpicture.
Referenced by DisplayFrame().
|
inline |
Definition at line 135 of file videorender.h.
References m_trickspeed.
Referenced by cVideoStream::DecodeInput(), DisplayFrame(), GetFramePresentationCount(), PushMainFrame(), and ResetFrameCounter().
|
private |
Log A/V sync debug message.
| audioPtsMs | audio pts |
| videoPtsMs | video pts |
| audioBehindVideoByMs | audio 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().
| void cVideoRender::OsdClear | ( | void | ) |
Clear the OSD (draw an empty/ transparent OSD)
Definition at line 656 of file videorender.cpp.
References cDrmBuffer::Height(), L_OPENGL, LOGDEBUG2, LOGERROR, m_osdShown, m_pBufOsd, m_pDrmDevice, cDrmBuffer::MarkDirty(), cDrmBuffer::Pitch(), cDrmBuffer::Plane(), and cDrmBuffer::Width().
Referenced by cSoftHdDevice::OsdClose().
| 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.
| xi | x-coordinate in argb image |
| yi | y-coordinate in argb image |
| height | height in pixel in argb image |
| width | width in pixel in argb image |
| pitch | pitch of argb image |
| argb | 32bit ARGB image data |
| x | x-coordinate on screen of argb image |
| y | y-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().
|
private |
Do the pageflip.
| buf | drm buffer |
| pipBuf | drm pip buffer |
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().
| 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().
|
private |
Definition at line 634 of file videorender.cpp.
References m_timebase, and m_timebaseMutex.
Referenced by DisplayFrame().
|
private |
Push the frame into the render ringbuffer.
Definition at line 899 of file videorender.cpp.
References AV_NOPTS_VALUE, cDrmDevice::Fd(), cDrmBuffer::frame, GetVideoClock(), LOGFATAL, m_pDrmDevice, cQueue< T >::Push(), cDrmBuffer::SetPresentationPending(), and SetVideoClock().
Referenced by PushMainFrame(), and PushPipFrame().
| void cVideoRender::PushMainFrame | ( | AVFrame * | frame | ) |
Definition at line 886 of file videorender.cpp.
References IsTrickSpeed(), m_bufferReuseStrategy, m_decodingStrategy, m_drmBufferPool, m_drmBufferQueue, and PushFrame().
Referenced by cSoftHdDevice::OnLeavingState().
| void cVideoRender::PushPipFrame | ( | AVFrame * | frame | ) |
Definition at line 891 of file videorender.cpp.
References m_pipBufferReuseStrategy, m_pipDecodingStrategy, m_pipDrmBufferPool, m_pipDrmBufferQueue, and PushFrame().
Referenced by cSoftHdDevice::OnLeavingState().
| void cVideoRender::Reset | ( | ) |
Definition at line 972 of file videorender.cpp.
References AV_NOPTS_VALUE, m_decodingStrategy, m_framesDropped, m_framesDuped, m_numWrongProgressive, m_startCounter, and SetVideoClock().
Referenced by cSoftHdDevice::Clear(), ExitDisplayThread(), and cSoftHdDevice::OnEnteringState().
|
inline |
Definition at line 124 of file videorender.h.
References m_bufferReuseStrategy.
Referenced by cSoftHdDevice::OnEnteringState(), and cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 125 of file videorender.h.
References m_decodingStrategy.
Referenced by cSoftHdDevice::OnEnteringState().
| 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().
|
inline |
Definition at line 126 of file videorender.h.
References m_pipBufferReuseStrategy.
Referenced by cSoftHdDevice::ResetPipStream().
|
inline |
Definition at line 127 of file videorender.h.
References m_pipDecodingStrategy.
Referenced by cSoftHdDevice::ResetPipStream().
|
inline |
Definition at line 165 of file videorender.h.
References m_schedulePlaybackStartAtPtsMs.
Referenced by cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 166 of file videorender.h.
References m_scheduleResyncAtPtsMs.
Referenced by cSoftHdDevice::OnEventReceived().
|
inline |
Definition at line 164 of file videorender.h.
References m_displayOneFrameThenPause.
Referenced by cSoftHdDevice::Clear(), and cSoftHdDevice::OnLeavingState().
|
private |
Set frame flags.
| frame | AVFrame |
| flags | FRAME_FLAG_TRICKSPEED and/or FRAME_FLAG_STILLPICTURE |
Definition at line 454 of file videorender.cpp.
References LOGFATAL.
|
private |
Modesetting for osd.
| 1 | osd is not dirty, do nothing |
| 0 | osd modesetting was done |
Definition at line 228 of file videorender.cpp.
References cDrmDevice::CrtcId(), cDrmPlane::GetId(), cDrmPlane::GetZpos(), cDrmBuffer::Height(), cDrmBuffer::Id(), cDrmBuffer::IsDirty(), L_DRM, LOGDEBUG2, m_osdShown, m_pBufOsd, m_pDrmDevice, cDrmBuffer::MarkClean(), cDrmDevice::OsdPlane(), cDrmPlane::SetParams(), cDrmPlane::SetPlaneZpos(), cDrmBuffer::SetSizeOnScreen(), cDrmPlane::SetZpos(), cDrmDevice::UseZpos(), cDrmDevice::VideoPlane(), cDrmBuffer::Width(), cDrmDevice::ZposOverlay(), and cDrmDevice::ZposPrimary().
Referenced by CommitBuffer().
|
inline |
Definition at line 182 of file videorender.h.
References m_pipActive.
Referenced by cSoftHdDevice::SetRenderPipActive().
|
private |
Modesetting for pip.
| [in] | buf | drm video buffer to display |
| 1 | no modesetting was done |
| 0 | modesetting was done |
Definition at line 270 of file videorender.cpp.
References ComputeFittedRect(), cDrmDevice::CrtcId(), cDrmDevice::DisplayHeight(), cDrmDevice::DisplayWidth(), cDrmBuffer::frame, sRect::h, cDrmBuffer::Height(), cDrmBuffer::Id(), m_pDrmDevice, m_pipActive, m_pipLeftPercent, m_pipScalePercent, m_pipTopPercent, m_videoIsScaled, m_videoRect, cDrmDevice::PipPlane(), cDrmPlane::SetParams(), cDrmBuffer::SetSizeOnScreen(), sRect::w, and cDrmBuffer::Width().
Referenced by CommitBuffer().
| void cVideoRender::SetPipSize | ( | bool | useAlt | ) |
Definition at line 1297 of file videorender.cpp.
References cSoftHdConfig::ConfigPipAltLeftPercent, cSoftHdConfig::ConfigPipAltScalePercent, cSoftHdConfig::ConfigPipAltTopPercent, cSoftHdConfig::ConfigPipLeftPercent, cSoftHdConfig::ConfigPipScalePercent, cSoftHdConfig::ConfigPipTopPercent, m_pConfig, m_pipLeftPercent, m_pipScalePercent, and m_pipTopPercent.
Referenced by cVideoRender(), and cSoftHdDevice::SetRenderPipSize().
|
inline |
Definition at line 120 of file videorender.h.
References m_videoPlaybackPaused.
Referenced by cSoftHdDevice::HandleStillPicture(), cSoftHdDevice::OnEnteringState(), cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 121 of file videorender.h.
References m_resumeAudioScheduled.
Referenced by cSoftHdDevice::OnEventReceived().
| void cVideoRender::SetScreenSize | ( | int | width, |
| int | height, | ||
| double | refreshRateHz | ||
| ) |
Wrapper to set the screen size in the device.
| width | screen width |
| height | screen height |
| refreshRateHz | screen refresh rate in Hz |
Definition at line 1118 of file videorender.cpp.
References m_pDevice, m_refreshRateHz, and cSoftHdDevice::SetScreenSize().
Referenced by cDrmDevice::Init().
|
inline |
Definition at line 137 of file videorender.h.
References m_stillpicture.
Referenced by cSoftHdDevice::HandleStillPicture(), cSoftHdDevice::OnEnteringState(), and cSoftHdDevice::OnEventReceived().
| void cVideoRender::SetTrickSpeed | ( | double | speed, |
| bool | active, | ||
| bool | forward | ||
| ) |
Set the trickspeed parameters.
| speed | trick speed value from VDR (0 = normal) |
| active | true if trickspeed is active |
| forward | true 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().
|
private |
Modesetting for video.
| [in] | buf | drm video buffer to display |
| 1 | no modesetting was done |
| 0 | modesetting 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().
|
inlineprivate |
Definition at line 255 of file videorender.h.
References m_pts.
Referenced by PageFlip(), PushFrame(), and Reset().
| void cVideoRender::SetVideoOutputPosition | ( | const cRect & | rect | ) |
Set size and position of the video on the screen.
| rect | a 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().
| int cVideoRender::TriggerGrab | ( | void | ) |
Trigger a screen grab.
| 0 | on success, grab was triggered |
| 1 | on timeout, grab was not triggered |
Definition at line 1030 of file videorender.cpp.
References LOGWARNING, m_grabCond, and m_startgrab.
Referenced by cSoftHdGrab::Start().
|
private |
black drm buffer object
Definition at line 226 of file videorender.h.
Referenced by DisplayBlackFrame(), Exit(), and Init().
|
private |
strategy to select drm buffers
Definition at line 239 of file videorender.h.
Referenced by PushMainFrame(), and ResetBufferReuseStrategy().
|
private |
strategy for decoding setup
Definition at line 241 of file videorender.h.
Referenced by PushMainFrame(), Reset(), and ResetDecodingStrategy().
|
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().
|
private |
pool of drm buffers
Definition at line 237 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 194 of file videorender.h.
Referenced by ClearDecoderToDisplayQueue(), DisplayFrame(), GetFramesFilled(), GetMainOutputBuffer(), IsOutputBufferFull(), LogDroppedDuped(), and PushMainFrame().
|
private |
event queue for incoming events
Definition at line 191 of file videorender.h.
Referenced by DisplayFrame(), and ProcessEvents().
|
private |
true, if trickspeed plays forward
Definition at line 198 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 200 of file videorender.h.
Referenced by DisplayFrame(), and SetTrickSpeed().
|
private |
number of frames dropped
Definition at line 212 of file videorender.h.
Referenced by GetStats(), LogDroppedDuped(), and Reset().
|
private |
number of frames duplicated
Definition at line 211 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 205 of file videorender.h.
Referenced by CreateGrabBuffers(), and TriggerGrab().
|
private |
keeps the current grabbed osd
Definition at line 206 of file videorender.h.
Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and GetGrabbedOsdBuffer().
|
private |
keeps the current grabbed pip video
Definition at line 208 of file videorender.h.
Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and GetGrabbedPipBuffer().
|
private |
keeps the current grabbed video
Definition at line 207 of file videorender.h.
Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and GetGrabbedVideoBuffer().
|
private |
true, if the last frame was dropped
Definition at line 213 of file videorender.h.
Referenced by DisplayFrame().
|
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().
|
private |
set, if osd is shown currently
Definition at line 229 of file videorender.h.
Referenced by CommitBuffer(), CreateGrabBuffers(), Init(), OsdClear(), OsdDrawARGB(), and SetOsdBuffer().
|
private |
pointer to cSoftHdAudio
Definition at line 188 of file videorender.h.
Referenced by DisplayFrame(), and LogDroppedDuped().
|
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().
|
private |
pointer to cSoftHdConfig
Definition at line 189 of file videorender.h.
Referenced by cVideoRender(), and SetPipSize().
|
private |
pointer to currently displayed DRM buffer
Definition at line 227 of file videorender.h.
Referenced by ClearDecoderToDisplayQueue(), CommitBuffer(), CreateGrabBuffers(), DisplayBlackFrame(), and DisplayFrame().
|
private |
pointer to currently displayed DRM buffer
Definition at line 228 of file videorender.h.
Referenced by ClearPipDecoderToDisplayQueue(), CommitBuffer(), CreateGrabBuffers(), and DisplayFrame().
|
private |
pointer to cSoftHdDevice
Definition at line 187 of file videorender.h.
Referenced by DisplayFrame(), Init(), LogDroppedDuped(), and SetScreenSize().
|
private |
pointer to display thread
Definition at line 190 of file videorender.h.
Referenced by DisplayThreadHalt(), DisplayThreadResume(), ExitDisplayThread(), Init(), and ~cVideoRender().
|
private |
pointer cDrmDevice object
Definition at line 224 of file videorender.h.
Referenced by CommitBuffer(), DrmHandleEvent(), Exit(), Init(), OsdClear(), OsdDrawARGB(), PageFlip(), PushFrame(), SetOsdBuffer(), SetPipBuffer(), SetVideoBuffer(), and ~cVideoRender().
|
private |
pointer to event receiver
Definition at line 236 of file videorender.h.
Referenced by ProcessEvents().
|
private |
true, if pip should be displayed
Definition at line 251 of file videorender.h.
Referenced by SetPipActive(), and SetPipBuffer().
|
private |
strategy to select drm buffers
Definition at line 240 of file videorender.h.
Referenced by PushPipFrame(), and ResetPipBufferReuseStrategy().
|
private |
strategy for decoding setup
Definition at line 242 of file videorender.h.
Referenced by PushPipFrame(), and ResetPipDecodingStrategy().
|
private |
PIP pool of drm buffers.
Definition at line 238 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 195 of file videorender.h.
Referenced by ClearPipDecoderToDisplayQueue(), DisplayFrame(), GetPipOutputBuffer(), and PushPipFrame().
|
private |
left margin for pip
Definition at line 221 of file videorender.h.
Referenced by SetPipBuffer(), and SetPipSize().
|
private |
scale factor for pip
Definition at line 220 of file videorender.h.
Referenced by SetPipBuffer(), and SetPipSize().
|
private |
top margin for pip
Definition at line 222 of file videorender.h.
Referenced by SetPipBuffer(), and SetPipSize().
|
private |
current video PTS
Definition at line 216 of file videorender.h.
Referenced by GetVideoClock(), and SetVideoClock().
|
private |
screen refresh rate in Hz
Definition at line 192 of file videorender.h.
Referenced by GetFramePresentationCount(), and SetScreenSize().
|
private |
set, if audio resume is scheduled after a pause
Definition at line 231 of file videorender.h.
Referenced by DisplayFrame(), and SetScheduleAudioResume().
|
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().
|
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().
|
private |
counter for displayed frames, indicates a video start
Definition at line 210 of file videorender.h.
Referenced by DisplayFrame(), GetStats(), Reset(), and ResetFrameCounter().
|
private |
internal flag to trigger grabbing
Definition at line 204 of file videorender.h.
Referenced by CreateGrabBuffers(), and TriggerGrab().
|
private |
true, if stillpicture is active
Definition at line 199 of file videorender.h.
Referenced by IsStillpicture(), and SetStillpicture().
|
private |
timebase used for pts, set by first RenderFrame()
Definition at line 214 of file videorender.h.
Referenced by cVideoRender(), DisplayFrame(), GetOutputPtsMs(), and PtsToMs().
|
private |
mutex used around m_timebase
Definition at line 215 of file videorender.h.
Referenced by GetOutputPtsMs(), and PtsToMs().
|
private |
true, if trickspeed is active
Definition at line 197 of file videorender.h.
Referenced by IsTrickSpeed(), and SetTrickSpeed().
|
private |
current trick speed
Definition at line 196 of file videorender.h.
Referenced by GetFramePresentationCount(), and SetTrickSpeed().
|
private |
true, if the currently displayed video is scaled
Definition at line 219 of file videorender.h.
Referenced by DisplayFrame(), SetPipBuffer(), SetVideoBuffer(), and SetVideoOutputPosition().
|
private |
set, if playback is frozen (used for pause)
Definition at line 230 of file videorender.h.
Referenced by DisplayFrame(), and SetPlaybackPaused().
|
private |
rect of the currently displayed video
Definition at line 218 of file videorender.h.
Referenced by SetPipBuffer(), SetVideoBuffer(), and SetVideoOutputPosition().