|
vdr-plugin-softhddevice-drm-gles 1.4.0
|
cVideoRender - Video render class More...
#include <videorender.h>

Public Member Functions | |
| cVideoRender (cSoftHdDevice *) | |
| cVideoRender constructor More... | |
| virtual | ~cVideoRender (void) |
| cVideoRender destructor More... | |
| void | Init (void) |
| Initialize the renderer. More... | |
| void | Exit (void) |
| Exit and cleanup the renderer. More... | |
| void | SetVideoOutputPosition (const cRect &) |
| Set size and position of the video on the screen. More... | |
| void | SetScreenSize (int, int, uint32_t) |
| Wrapper to set the screen size in the device. More... | |
| int64_t | GetVideoClock (void) |
| Wrapper to get the video clock (m_pts) More... | |
| void | GetStats (int *, int *, int *) |
| Get some rendering statistics. More... | |
| void | ResetFrameCounter (void) |
| Send start condition to video thread. More... | |
| void | Reset () |
| void | SetPlaybackPaused (bool pause) |
| void | SetScheduleAudioResume (bool resume) |
| void | ProcessEvents (void) |
| Process queued events and forward to event receiver. More... | |
| void | ResetBufferReuseStrategy () |
| void | ResetDecodingStrategy () |
| void | OsdClear (void) |
| Clear the OSD (draw an empty/ transparent OSD) More... | |
| void | OsdDrawARGB (int, int, int, int, int, const uint8_t *, int, int) |
| Draw an OSD ARGB image. More... | |
| void | SetTrickSpeed (int, int) |
| Set the trickspeed parameters. More... | |
| int | GetTrickSpeed (void) |
| Get the current trickspeed. More... | |
| int | GetTrickForward (void) |
| Get the current trickspeed direction. More... | |
| int | TriggerGrab (void) |
| Trigger a screen grab. More... | |
| void | ConvertVideoBufToRgb (void) |
| Convert the video drm buffer to an rgb image. More... | |
| void | ConvertOsdBufToRgb (void) |
| Convert the osd drm buffer to an rgb image. More... | |
| void | ConvertPipBufToRgb (void) |
| Convert the pip drm buffer to an rgb image. More... | |
| void | ClearGrab (void) |
| Clear the grab drm buffers. More... | |
| cSoftHdGrab * | GetGrab (int *, int *, int *, int *, int *, int) |
| Get the grabbed image. More... | |
| void | ExitDisplayThread (void) |
| Stop display thread. More... | |
| void | DisplayThreadHalt (void) |
| void | DisplayThreadResume (void) |
| int | DrmHandleEvent (void) |
| Wrapper for drmHandleEvent() More... | |
| bool | DisplayFrame () |
| Display the frame (video and/or osd) More... | |
| int | GetFramesFilled (void) |
| void | PushMainFrame (AVFrame *) |
| void | PushPipFrame (AVFrame *) |
| int64_t | GetOutputPtsMs (void) |
| Get the output PTS in milliseconds. More... | |
| void | DisplayBlackFrame (void) |
| void | ClearDecoderToDisplayQueue (void) |
| Clear (empty) the decoder to display queue. More... | |
| bool | IsOutputBufferFull (void) |
| Check, if the main render output buffer is full. More... | |
| void | SetDisplayOneFrameThenPause (bool pause) |
| void | SchedulePlaybackStartAtPtsMs (int64_t ptsMs) |
| cQueue< cDrmBuffer > * | GetMainOutputBuffer (void) |
| cQueue< cDrmBuffer > * | GetPipOutputBuffer (void) |
| void | SetPipActive (bool on) |
| bool | IsPipActive (void) |
| void | ClearPipDecoderToDisplayQueue (void) |
| Clear (empty) the decoder to display queue. More... | |
| void | SetPipSize (bool) |
Private Member Functions | |
| int | GetFrameFlags (AVFrame *) |
| Get frame flags. More... | |
| void | SetFrameFlags (AVFrame *, int) |
| Set frame flags. More... | |
| void | SetVideoClock (int64_t) |
| Wrapper to set the video clock (m_pts) More... | |
| bool | PageFlip (cDrmBuffer *, cDrmBuffer *) |
| Do the pageflip. More... | |
| void | SetVideoBuffer (cDrmBuffer *) |
| Modesetting for video. More... | |
| int | SetOsdBuffer (drmModeAtomicReqPtr) |
| Modesetting for osd. More... | |
| void | SetPipBuffer (cDrmBuffer *) |
| Modesetting for pip. More... | |
| int | CommitBuffer (cDrmBuffer *, cDrmBuffer *) |
| Commit the frame to the hardware. More... | |
| void | Grab (cDrmBuffer *, cDrmBuffer *) |
| Grab video and osd. More... | |
| void | LogDroppedDuped (int64_t, int64_t, int) |
| Log A/V sync debug message. More... | |
| 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. More... | |
Private Attributes | |
| cSoftHdDevice * | m_pDevice |
| pointer to cSoftHdDevice More... | |
| cSoftHdAudio * | m_pAudio |
| pointer to cSoftHdAudio More... | |
| cSoftHdConfig * | m_pConfig |
| pointer to cSoftHdConfig More... | |
| cDisplayThread * | m_pDisplayThread |
| pointer to display thread More... | |
| cMutex | m_trickspeedMutex |
| mutex used while accessing trickspeed parameters More... | |
| cMutex | m_videoClockMutex |
| mutex used around m_pts More... | |
| std::vector< Event > | m_eventQueue |
| event queue for incoming events More... | |
| cQueue< cDrmBuffer > | m_drmBufferQueue {VIDEO_SURFACES_MAX} |
| queue for DRM buffers to be displayed (VIDEO_SURFACES_MAX is defined in thread.h) More... | |
| cQueue< cDrmBuffer > | m_pipDrmBufferQueue {VIDEO_SURFACES_MAX} |
| queue for PIP DRM buffers to be displayed (VIDEO_SURFACES_MAX is defined in thread.h) More... | |
| int | m_trickSpeed |
| current trick speed More... | |
| bool | m_trickForward |
| true, if trickspeed plays forward More... | |
| int | m_framePresentationCounter = 0 |
| number of times the current frame has to be shown (for slow motion) More... | |
| int | m_numWrongProgressive |
| counter for progressive frames sent in an interlaced stream (only used for logging) More... | |
| bool | m_startgrab |
| internal flag to trigger grabbing More... | |
| cCondVar | m_grabCond |
| condition gets signalled, if renederer finished to clone the grabbed buffers More... | |
| cSoftHdGrab | m_grabOsd |
| keeps the current grabbed osd More... | |
| cSoftHdGrab | m_grabVideo |
| keeps the current grabbed video More... | |
| cSoftHdGrab | m_grabPip |
| keeps the current grabbed pip video More... | |
| cRect | m_lastVideoGrab |
| crtc rect of the last shown video frame More... | |
| cRect | m_lastPipGrab |
| crtc rect of the last shown pip frame More... | |
| int | m_startCounter |
| counter for displayed frames, indicates a video start More... | |
| int | m_framesDuped = 0 |
| number of frames duplicated More... | |
| int | m_framesDropped = 0 |
| number of frames dropped More... | |
| bool | m_lastFrameWasDropped = false |
| true, if the last frame was dropped More... | |
| AVRational | m_timebase |
| timebase used for pts, set by first RenderFrame() More... | |
| cMutex | m_timebaseMutex |
| mutex used around m_timebase More... | |
| int64_t | m_pts = AV_NOPTS_VALUE |
| current video PTS More... | |
| cRect | m_videoRect |
| rect of the currently displayed video More... | |
| bool | m_videoIsScaled |
| true, if the currently displayed video is scaled More... | |
| int | m_pipScalePercent |
| scale factor for pip More... | |
| int | m_pipLeftPercent |
| left margin for pip More... | |
| int | m_pipTopPercent |
| top margin for pip More... | |
| cDrmDevice * | m_pDrmDevice |
| pointer cDrmDevice object More... | |
| cDrmBuffer * | m_pBufOsd |
| pointer to osd drm buffer object More... | |
| cDrmBuffer | m_bufBlack |
| black drm buffer object More... | |
| cDrmBuffer * | m_pCurrentlyDisplayed = nullptr |
| pointer to currently displayed DRM buffer More... | |
| cDrmBuffer * | m_pCurrentlyPipDisplayed = nullptr |
| pointer to currently displayed DRM buffer More... | |
| bool | m_osdShown |
| set, if osd is shown currently More... | |
| std::atomic< bool > | m_videoPlaybackPaused = true |
| set, if playback is frozen (used for pause) More... | |
| std::atomic< bool > | m_resumeAudioScheduled = false |
| set, if audio resume is scheduled after a pause More... | |
| std::atomic< bool > | m_displayOneFrameThenPause = false |
| set, if only one frame shall be displayed and then pause playback More... | |
| std::atomic< int64_t > | m_schedulePlaybackStartAtPtsMs = AV_NOPTS_VALUE |
| if set, frames with PTS older than this will be dropped More... | |
| IEventReceiver * | m_pEventReceiver |
| pointer to event receiver More... | |
| cDrmBufferPool | m_drmBufferPool |
| pool of drm buffers More... | |
| cDrmBufferPool | m_pipDrmBufferPool |
| PIP pool of drm buffers. More... | |
| std::atomic< cBufferStrategy * > | m_bufferReuseStrategy = nullptr |
| strategy to select drm buffers More... | |
| std::atomic< cBufferStrategy * > | m_pipBufferReuseStrategy = nullptr |
| strategy to select drm buffers More... | |
| std::atomic< cDecodingStrategy * > | m_decodingStrategy = nullptr |
| strategy for decoding setup More... | |
| std::atomic< cDecodingStrategy * > | m_pipDecodingStrategy = nullptr |
| strategy for decoding setup More... | |
| std::atomic< bool > | m_pipActive = false |
| true, if pip should be displayed More... | |
cVideoRender - Video render class
Definition at line 121 of file videorender.h.
| cVideoRender::cVideoRender | ( | cSoftHdDevice * | device | ) |
cVideoRender constructor
| device | pointer to cSoftHdDevice |
Definition at line 80 of file videorender.cpp.
References cSoftHdDevice::Audio(), cSoftHdDevice::Config(), cSoftHdConfig::ConfigDisplayResolution, cSoftHdConfig::ConfigPipUseAlt, m_pAudio, m_pBufOsd, m_pConfig, m_pDevice, m_pDrmDevice, m_pEventReceiver, m_startCounter, m_startgrab, m_timebase, m_trickForward, m_trickSpeed, m_videoIsScaled, and SetPipSize().
|
virtual |
cVideoRender destructor
Definition at line 111 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 124 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::ClearGrab | ( | void | ) |
Clear the grab drm buffers.
Definition at line 1213 of file videorender.cpp.
References cSoftHdGrab::FreeBuf(), cSoftHdGrab::GetBuf(), m_grabOsd, m_grabPip, and m_grabVideo.
Referenced by cSoftHdDevice::GrabImage().
| void cVideoRender::ClearPipDecoderToDisplayQueue | ( | void | ) |
Clear (empty) the decoder to display queue.
Definition at line 136 of file videorender.cpp.
References cQueue< T >::Clear(), cDrmBufferPool::DestroyAllExcept(), m_pCurrentlyPipDisplayed, m_pipDrmBufferPool, and m_pipDrmBufferQueue.
Referenced by cSoftHdDevice::DelPip().
|
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 376 of file videorender.cpp.
References cDrmPlane::ClearPlane(), cDrmPlane::DumpParameters(), cDrmDevice::Fd(), cDrmPlane::GetFbId(), Grab(), IsPipActive(), L_DRM, LOGDEBUG2, LOGERROR, m_osdShown, m_pCurrentlyDisplayed, m_pCurrentlyPipDisplayed, m_pDrmDevice, m_startgrab, cDrmDevice::OsdPlane(), cDrmDevice::PipPlane(), SetOsdBuffer(), SetPipBuffer(), cDrmPlane::SetPlane(), SetVideoBuffer(), and cDrmDevice::VideoPlane().
Referenced by PageFlip().
| void cVideoRender::ConvertOsdBufToRgb | ( | void | ) |
Convert the osd drm buffer to an rgb image.
Definition at line 1184 of file videorender.cpp.
References BufToRgb(), cSoftHdGrab::FreeBuf(), cSoftHdGrab::GetBuf(), cSoftHdGrab::GetHeight(), cSoftHdGrab::GetWidth(), L_GRAB, LOGDEBUG2, m_grabOsd, cDrmBuffer::NumPlanes(), cDrmBuffer::Offset(), cDrmBuffer::Pitch(), cDrmBuffer::Plane(), cDrmBuffer::PrimeHandle(), cSoftHdGrab::SetData(), cSoftHdGrab::SetSize(), and cDrmBuffer::Size().
Referenced by cSoftHdDevice::GrabImage().
| void cVideoRender::ConvertPipBufToRgb | ( | void | ) |
Convert the pip drm buffer to an rgb image.
Definition at line 1154 of file videorender.cpp.
References BufToRgb(), cSoftHdGrab::FreeBuf(), cSoftHdGrab::GetBuf(), cSoftHdGrab::GetHeight(), cSoftHdGrab::GetWidth(), L_GRAB, LOGDEBUG2, m_grabPip, cDrmBuffer::NumPlanes(), cDrmBuffer::Offset(), cDrmBuffer::Pitch(), cDrmBuffer::Plane(), cDrmBuffer::PrimeHandle(), cSoftHdGrab::SetData(), cSoftHdGrab::SetSize(), and cDrmBuffer::Size().
Referenced by cSoftHdDevice::GrabImage().
| void cVideoRender::ConvertVideoBufToRgb | ( | void | ) |
Convert the video drm buffer to an rgb image.
Definition at line 1125 of file videorender.cpp.
References BufToRgb(), cSoftHdGrab::FreeBuf(), cSoftHdGrab::GetBuf(), cSoftHdGrab::GetHeight(), cSoftHdGrab::GetWidth(), L_GRAB, LOGDEBUG2, m_grabVideo, cDrmBuffer::NumPlanes(), cDrmBuffer::Offset(), cDrmBuffer::Pitch(), cDrmBuffer::Plane(), cDrmBuffer::PrimeHandle(), cSoftHdGrab::SetData(), cSoftHdGrab::SetSize(), and cDrmBuffer::Size().
Referenced by cSoftHdDevice::GrabImage().
| void cVideoRender::DisplayBlackFrame | ( | void | ) |
Definition at line 662 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 563 of file videorender.cpp.
References AV_NOPTS_VALUE, AV_SYNC_THRESHOLD_AUDIO_AHEAD_VIDEO_MS, AV_SYNC_THRESHOLD_AUDIO_BEHIND_VIDEO_MS, cSoftHdAudio::DropSamplesOlderThanPtsMs(), cDrmBuffer::frame, cVideoStream::GetAvPacketsFilled(), cSoftHdAudio::GetHardwareOutputPtsMs(), GetTrickSpeed(), cSoftHdDevice::GetVideoAudioDelayMs(), cSoftHdDevice::IsBufferingThresholdReached(), cDrmBuffer::IsDirty(), cQueue< T >::IsEmpty(), cSoftHdAudio::IsPaused(), L_AV_SYNC, LOGDEBUG2, LogDroppedDuped(), m_bufBlack, 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_startCounter, m_startgrab, m_timebase, m_videoPlaybackPaused, PageFlip(), cQueue< T >::Pop(), cDrmBuffer::PresentationFinished(), PtsToMs(), cSoftHdAudio::SetPaused(), Timestamp2String(), VIDEO, and cSoftHdDevice::VideoStream().
Referenced by cDisplayThread::Action().
|
inline |
Definition at line 162 of file videorender.h.
References cDisplayThread::Halt(), and m_pDisplayThread.
Referenced by cSoftHdDevice::Clear(), and cSoftHdDevice::OnEventReceived().
|
inline |
Definition at line 163 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 687 of file videorender.cpp.
References cDrmDevice::HandleEvent(), and m_pDrmDevice.
| void cVideoRender::Exit | ( | void | ) |
Exit and cleanup the renderer.
Definition at line 1405 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 812 of file videorender.cpp.
References LOGDEBUG, m_pDisplayThread, Reset(), and cDisplayThread::Stop().
Referenced by Exit().
|
private |
Get frame flags.
| frame | AVFrame |
Definition at line 497 of file videorender.cpp.
|
inline |
Definition at line 170 of file videorender.h.
References m_drmBufferQueue, and cQueue< T >::Size().
| cSoftHdGrab * cVideoRender::GetGrab | ( | int * | size, |
| int * | width, | ||
| int * | height, | ||
| int * | x, | ||
| int * | y, | ||
| int | type | ||
| ) |
Get the grabbed image.
| [out] | size | returns output size (memory) |
| [out] | width | returns output width |
| [out] | height | returns output height |
| [in] | type | 0: video, 1: osd, 2: pip |
Definition at line 1233 of file videorender.cpp.
References cSoftHdGrab::GetData(), cSoftHdGrab::GetHeight(), cSoftHdGrab::GetSize(), cSoftHdGrab::GetWidth(), cSoftHdGrab::GetX(), cSoftHdGrab::GetY(), L_GRAB, LOGDEBUG2, LOGERROR, m_grabOsd, m_grabPip, and m_grabVideo.
Referenced by cSoftHdDevice::GrabImage().
|
inline |
Definition at line 179 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 991 of file videorender.cpp.
References AV_NOPTS_VALUE, m_pts, m_timebase, and m_timebaseMutex.
Referenced by cSoftHdDevice::GetFirstAudioPtsMsToPlay(), cSoftHdDevice::GetFirstVideoPtsMsToPlay(), cSoftHdDevice::IsBufferingThresholdReached(), and cSoftHdDevice::OnEventReceived().
|
inline |
Definition at line 180 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 1275 of file videorender.cpp.
References m_framesDropped, m_framesDuped, and m_startCounter.
Referenced by cSoftHdDevice::GetStats().
| int cVideoRender::GetTrickForward | ( | void | ) |
Get the current trickspeed direction.
| 1 | if forward trickspeed |
| 0 | if backward trickspeed |
Definition at line 1086 of file videorender.cpp.
References m_trickForward, and m_trickspeedMutex.
Referenced by cVideoStream::DecodeInput().
| int cVideoRender::GetTrickSpeed | ( | void | ) |
Get the current trickspeed.
Definition at line 1071 of file videorender.cpp.
References cVideoStream::IsInterlaced(), m_pDevice, m_trickSpeed, m_trickspeedMutex, and cSoftHdDevice::VideoStream().
Referenced by cVideoStream::DecodeInput(), DisplayFrame(), PushMainFrame(), and ResetFrameCounter().
| int64_t cVideoRender::GetVideoClock | ( | void | ) |
Wrapper to get the video clock (m_pts)
Definition at line 1020 of file videorender.cpp.
References m_pts, and m_videoClockMutex.
Referenced by cSoftHdDevice::GetSTC().
|
private |
Grab video and osd.
| buf | video drm buffer if buf was (currently) set, it is used for the grab, otherwise the last displayed buffer is used (pause mode) |
Definition at line 337 of file videorender.cpp.
References cDrmBuffer::Height(), L_GRAB, LOGDEBUG2, m_grabCond, m_grabOsd, m_grabPip, m_grabVideo, m_lastPipGrab, m_lastVideoGrab, m_osdShown, m_pBufOsd, m_pCurrentlyDisplayed, m_pCurrentlyPipDisplayed, cSoftHdGrab::SetBuf(), cSoftHdGrab::SetRect(), and cDrmBuffer::Width().
Referenced by CommitBuffer().
| void cVideoRender::Init | ( | void | ) |
Initialize the renderer.
Definition at line 1301 of file videorender.cpp.
References cDrmDevice::ConnectorId(), cDrmDevice::CreatePropertyBlob(), cDrmDevice::CrtcId(), cDrmDevice::DisplayHeight(), cDrmDevice::DisplayWidth(), cDrmPlane::DumpParameters(), cDrmDevice::Fd(), cDrmBuffer::FillBlack(), cDrmBuffer::Height(), cDrmBuffer::Id(), cDrmDevice::Init(), cDrmDevice::InitEvent(), L_DRM, LOGDEBUG2, LOGFATAL, m_bufBlack, m_osdShown, m_pBufOsd, m_pDisplayThread, m_pDrmDevice, cDrmDevice::OsdPlane(), cDrmDevice::SaveCrtc(), 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().
| bool cVideoRender::IsOutputBufferFull | ( | void | ) |
Check, if the main render output buffer is full.
| true | render output buffer is full |
Definition at line 836 of file videorender.cpp.
References cQueue< T >::IsFull(), and m_drmBufferQueue.
Referenced by cSoftHdDevice::IsBufferingThresholdReached().
|
inline |
|
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 469 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 699 of file videorender.cpp.
References EGL_CHECK, 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 753 of file videorender.cpp.
References EGL_CHECK, 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 533 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 1461 of file videorender.cpp.
References m_eventQueue, m_pEventReceiver, and IEventReceiver::OnEventReceived().
Referenced by cDisplayThread::Action().
|
private |
Definition at line 675 of file videorender.cpp.
References m_timebase, and m_timebaseMutex.
Referenced by DisplayFrame().
|
private |
Push the frame into the render ringbuffer.
Definition at line 942 of file videorender.cpp.
References AV_NOPTS_VALUE, cDrmDevice::Fd(), LOGFATAL, m_pDrmDevice, m_pts, and cQueue< T >::Push().
Referenced by PushMainFrame(), and PushPipFrame().
| void cVideoRender::PushMainFrame | ( | AVFrame * | frame | ) |
Definition at line 929 of file videorender.cpp.
References GetTrickSpeed(), m_bufferReuseStrategy, m_decodingStrategy, m_drmBufferPool, m_drmBufferQueue, and PushFrame().
Referenced by cSoftHdDevice::OnLeavingState().
| void cVideoRender::PushPipFrame | ( | AVFrame * | frame | ) |
Definition at line 934 of file videorender.cpp.
References m_pipBufferReuseStrategy, m_pipDecodingStrategy, m_pipDrmBufferPool, m_pipDrmBufferQueue, and PushFrame().
Referenced by cSoftHdDevice::OnLeavingState().
| void cVideoRender::Reset | ( | void | ) |
Definition at line 1038 of file videorender.cpp.
References AV_NOPTS_VALUE, m_decodingStrategy, m_framesDropped, m_framesDuped, m_numWrongProgressive, m_pts, and m_startCounter.
Referenced by cSoftHdDevice::Clear(), ExitDisplayThread(), and cSoftHdDevice::OnEnteringState().
|
inline |
Definition at line 140 of file videorender.h.
References m_bufferReuseStrategy.
Referenced by cSoftHdDevice::OnEnteringState(), and cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 141 of file videorender.h.
References m_decodingStrategy.
Referenced by cSoftHdDevice::OnEnteringState().
| void cVideoRender::ResetFrameCounter | ( | void | ) |
Send start condition to video thread.
Definition at line 1032 of file videorender.cpp.
References GetTrickSpeed(), LOGDEBUG, and m_startCounter.
Referenced by cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 178 of file videorender.h.
References m_schedulePlaybackStartAtPtsMs.
Referenced by cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 177 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 512 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 243 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(), cDrmPlane::SetZpos(), cDrmDevice::UseZpos(), cDrmDevice::VideoPlane(), cDrmBuffer::Width(), cDrmDevice::ZposOverlay(), and cDrmDevice::ZposPrimary().
Referenced by CommitBuffer().
|
inline |
Definition at line 194 of file videorender.h.
References m_pipActive.
Referenced by cSoftHdDevice::SetEnablePip().
|
private |
Modesetting for pip.
| [in] | buf | drm video buffer to display |
Definition at line 281 of file videorender.cpp.
References ComputeFittedRect(), cDrmDevice::CrtcId(), cDrmDevice::DisplayHeight(), cDrmDevice::DisplayWidth(), cDrmBuffer::frame, sRect::h, cDrmBuffer::Height(), cDrmBuffer::Id(), m_lastPipGrab, m_pDrmDevice, m_pipLeftPercent, m_pipScalePercent, m_pipTopPercent, m_videoIsScaled, m_videoRect, cDrmDevice::PipPlane(), cDrmPlane::SetParams(), sRect::w, and cDrmBuffer::Width().
Referenced by CommitBuffer().
| void cVideoRender::SetPipSize | ( | bool | useAlt | ) |
Definition at line 1469 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(), cSoftHdDevice::SetPipSize(), and cSoftHdDevice::SwapPipPosition().
|
inline |
Definition at line 136 of file videorender.h.
References m_videoPlaybackPaused.
Referenced by cSoftHdDevice::OnEnteringState(), cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 137 of file videorender.h.
References m_resumeAudioScheduled.
Referenced by cSoftHdDevice::OnEventReceived().
| void cVideoRender::SetScreenSize | ( | int | width, |
| int | height, | ||
| uint32_t | refreshRate | ||
| ) |
Wrapper to set the screen size in the device.
| width | screen width |
| height | screen height |
| refreshRate | screen refresh rate |
Definition at line 1293 of file videorender.cpp.
References m_pDevice, and cSoftHdDevice::SetScreenSize().
Referenced by cDrmDevice::Init().
| void cVideoRender::SetTrickSpeed | ( | int | speed, |
| int | forward | ||
| ) |
Set the trickspeed parameters.
| speed | trick speed value from VDR (0 = normal) |
| forward | 1 if forward trick speed, 0 if backward |
Definition at line 1056 of file videorender.cpp.
References L_TRICK, LOGDEBUG2, m_framePresentationCounter, m_trickForward, m_trickSpeed, and m_trickspeedMutex.
Referenced by cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
|
private |
Modesetting for video.
| [in] | buf | drm video buffer to display |
Definition at line 205 of file videorender.cpp.
References ComputeFittedRect(), cDrmDevice::CrtcId(), cDrmDevice::DisplayHeight(), cDrmDevice::DisplayWidth(), cDrmBuffer::frame, sRect::h, cDrmBuffer::Height(), cDrmBuffer::Id(), m_lastVideoGrab, m_pDrmDevice, m_videoIsScaled, m_videoRect, cDrmPlane::SetParams(), cDrmDevice::VideoPlane(), sRect::w, cDrmBuffer::Width(), sRect::x, and sRect::y.
Referenced by CommitBuffer().
|
private |
Wrapper to set the video clock (m_pts)
| pts | the pts to be set |
Definition at line 1008 of file videorender.cpp.
References m_pts, and m_videoClockMutex.
Referenced by PageFlip().
| 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 1446 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 1105 of file videorender.cpp.
References LOGWARNING, m_grabCond, and m_startgrab.
Referenced by cSoftHdDevice::GrabImage().
|
private |
black drm buffer object
Definition at line 240 of file videorender.h.
Referenced by DisplayBlackFrame(), DisplayFrame(), Exit(), and Init().
|
private |
strategy to select drm buffers
Definition at line 252 of file videorender.h.
Referenced by PushMainFrame(), and ResetBufferReuseStrategy().
|
private |
strategy for decoding setup
Definition at line 254 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 246 of file videorender.h.
Referenced by DisplayFrame(), and SetDisplayOneFrameThenPause().
|
private |
pool of drm buffers
Definition at line 250 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 208 of file videorender.h.
Referenced by ClearDecoderToDisplayQueue(), DisplayFrame(), GetFramesFilled(), GetMainOutputBuffer(), IsOutputBufferFull(), LogDroppedDuped(), and PushMainFrame().
|
private |
event queue for incoming events
Definition at line 206 of file videorender.h.
Referenced by DisplayFrame(), and ProcessEvents().
|
private |
number of times the current frame has to be shown (for slow motion)
Definition at line 212 of file videorender.h.
Referenced by DisplayFrame(), and SetTrickSpeed().
|
private |
number of frames dropped
Definition at line 226 of file videorender.h.
Referenced by GetStats(), LogDroppedDuped(), and Reset().
|
private |
number of frames duplicated
Definition at line 225 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 217 of file videorender.h.
Referenced by Grab(), and TriggerGrab().
|
private |
keeps the current grabbed osd
Definition at line 218 of file videorender.h.
Referenced by ClearGrab(), ConvertOsdBufToRgb(), GetGrab(), and Grab().
|
private |
keeps the current grabbed pip video
Definition at line 220 of file videorender.h.
Referenced by ClearGrab(), ConvertPipBufToRgb(), GetGrab(), and Grab().
|
private |
keeps the current grabbed video
Definition at line 219 of file videorender.h.
Referenced by ClearGrab(), ConvertVideoBufToRgb(), GetGrab(), and Grab().
|
private |
true, if the last frame was dropped
Definition at line 227 of file videorender.h.
Referenced by DisplayFrame().
|
private |
crtc rect of the last shown pip frame
Definition at line 222 of file videorender.h.
Referenced by Grab(), and SetPipBuffer().
|
private |
crtc rect of the last shown video frame
Definition at line 221 of file videorender.h.
Referenced by Grab(), and SetVideoBuffer().
|
private |
counter for progressive frames sent in an interlaced stream (only used for logging)
Definition at line 213 of file videorender.h.
Referenced by Reset().
|
private |
set, if osd is shown currently
Definition at line 243 of file videorender.h.
Referenced by CommitBuffer(), Grab(), Init(), OsdClear(), OsdDrawARGB(), and SetOsdBuffer().
|
private |
pointer to cSoftHdAudio
Definition at line 201 of file videorender.h.
Referenced by cVideoRender(), DisplayFrame(), and LogDroppedDuped().
|
private |
pointer to osd drm buffer object
Definition at line 239 of file videorender.h.
Referenced by cVideoRender(), DisplayFrame(), Exit(), Grab(), Init(), OsdClear(), OsdDrawARGB(), and SetOsdBuffer().
|
private |
pointer to cSoftHdConfig
Definition at line 202 of file videorender.h.
Referenced by cVideoRender(), and SetPipSize().
|
private |
pointer to currently displayed DRM buffer
Definition at line 241 of file videorender.h.
Referenced by ClearDecoderToDisplayQueue(), CommitBuffer(), DisplayBlackFrame(), DisplayFrame(), and Grab().
|
private |
pointer to currently displayed DRM buffer
Definition at line 242 of file videorender.h.
Referenced by ClearPipDecoderToDisplayQueue(), CommitBuffer(), DisplayFrame(), and Grab().
|
private |
pointer to cSoftHdDevice
Definition at line 200 of file videorender.h.
Referenced by cVideoRender(), DisplayFrame(), GetTrickSpeed(), LogDroppedDuped(), and SetScreenSize().
|
private |
pointer to display thread
Definition at line 203 of file videorender.h.
Referenced by DisplayThreadHalt(), DisplayThreadResume(), ExitDisplayThread(), Init(), and ~cVideoRender().
|
private |
pointer cDrmDevice object
Definition at line 238 of file videorender.h.
Referenced by CommitBuffer(), cVideoRender(), DrmHandleEvent(), Exit(), Init(), OsdClear(), OsdDrawARGB(), PageFlip(), PushFrame(), SetOsdBuffer(), SetPipBuffer(), SetVideoBuffer(), and ~cVideoRender().
|
private |
pointer to event receiver
Definition at line 249 of file videorender.h.
Referenced by cVideoRender(), and ProcessEvents().
|
private |
true, if pip should be displayed
Definition at line 264 of file videorender.h.
Referenced by IsPipActive(), and SetPipActive().
|
private |
strategy to select drm buffers
Definition at line 253 of file videorender.h.
Referenced by PushPipFrame().
|
private |
strategy for decoding setup
Definition at line 255 of file videorender.h.
Referenced by PushPipFrame().
|
private |
PIP pool of drm buffers.
Definition at line 251 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 209 of file videorender.h.
Referenced by ClearPipDecoderToDisplayQueue(), DisplayFrame(), GetPipOutputBuffer(), and PushPipFrame().
|
private |
left margin for pip
Definition at line 235 of file videorender.h.
Referenced by SetPipBuffer(), and SetPipSize().
|
private |
scale factor for pip
Definition at line 234 of file videorender.h.
Referenced by SetPipBuffer(), and SetPipSize().
|
private |
top margin for pip
Definition at line 236 of file videorender.h.
Referenced by SetPipBuffer(), and SetPipSize().
|
private |
current video PTS
Definition at line 230 of file videorender.h.
Referenced by GetOutputPtsMs(), GetVideoClock(), PushFrame(), Reset(), and SetVideoClock().
|
private |
set, if audio resume is scheduled after a pause
Definition at line 245 of file videorender.h.
Referenced by DisplayFrame(), and SetScheduleAudioResume().
|
private |
if set, frames with PTS older than this will be dropped
Definition at line 247 of file videorender.h.
Referenced by DisplayFrame(), and SchedulePlaybackStartAtPtsMs().
|
private |
counter for displayed frames, indicates a video start
Definition at line 224 of file videorender.h.
Referenced by cVideoRender(), DisplayFrame(), GetStats(), Reset(), and ResetFrameCounter().
|
private |
internal flag to trigger grabbing
Definition at line 216 of file videorender.h.
Referenced by CommitBuffer(), cVideoRender(), DisplayFrame(), and TriggerGrab().
|
private |
timebase used for pts, set by first RenderFrame()
Definition at line 228 of file videorender.h.
Referenced by cVideoRender(), DisplayFrame(), GetOutputPtsMs(), and PtsToMs().
|
private |
mutex used around m_timebase
Definition at line 229 of file videorender.h.
Referenced by GetOutputPtsMs(), and PtsToMs().
|
private |
true, if trickspeed plays forward
Definition at line 211 of file videorender.h.
Referenced by cVideoRender(), GetTrickForward(), and SetTrickSpeed().
|
private |
current trick speed
Definition at line 210 of file videorender.h.
Referenced by cVideoRender(), GetTrickSpeed(), and SetTrickSpeed().
|
private |
mutex used while accessing trickspeed parameters
Definition at line 204 of file videorender.h.
Referenced by GetTrickForward(), GetTrickSpeed(), and SetTrickSpeed().
|
private |
mutex used around m_pts
Definition at line 205 of file videorender.h.
Referenced by GetVideoClock(), and SetVideoClock().
|
private |
true, if the currently displayed video is scaled
Definition at line 233 of file videorender.h.
Referenced by cVideoRender(), SetPipBuffer(), SetVideoBuffer(), and SetVideoOutputPosition().
|
private |
set, if playback is frozen (used for pause)
Definition at line 244 of file videorender.h.
Referenced by DisplayFrame(), and SetPlaybackPaused().
|
private |
rect of the currently displayed video
Definition at line 232 of file videorender.h.
Referenced by SetPipBuffer(), SetVideoBuffer(), and SetVideoOutputPosition().