|
vdr-plugin-softhddevice-drm-gles 1.6.4-d0291bb
|
Video Renderer. More...
#include <videorender.h>
Protected Member Functions | |
| virtual void | Action (void) |
| Thread loop, which tries to display frames and processes events. | |
Private Member Functions | |
| int | GetFrameFlags (AVFrame *) |
| Get frame flags. | |
| void | SetFrameFlags (AVFrame *, int) |
| Set frame flags. | |
| void | SetVideoClock (int64_t pts) |
| bool | PageFlip (cDrmBuffer *, cDrmBuffer *) |
| Do the pageflip. | |
| int | SetVideoBuffer (cDrmBuffer *) |
| Modesetting for video. | |
| int | SetOsdBuffer (drmModeAtomicReqPtr) |
| Modesetting for osd. | |
| int | SetPipBuffer (cDrmBuffer *) |
| Modesetting for pip. | |
| int | CommitBuffer (cDrmBuffer *, cDrmBuffer *) |
| Commit the frame to the hardware. | |
| void | CreateGrabBuffers (bool) |
| Copy current video, osd and pip buffers to dedicated grabbing buffers. | |
| void | LogDroppedDuped (int64_t, int64_t, int) |
| Log A/V sync debug message. | |
| int64_t | PtsToMs (int64_t) |
| Convert a PTS to milliseconds. | |
| void | PushFrame (AVFrame *, bool, std::atomic< cBufferStrategy * > &, std::atomic< cDecodingStrategy * > &, cQueue< cDrmBuffer > *, cDrmBufferPool *) |
| Push the frame into the render ringbuffer. | |
| int | GetFramePresentationCount (int64_t) |
| Get the number of times the current frame shall be presented in trickspeed mode. | |
| void | SetHdrBlob (struct hdr_output_metadata) |
| Create an hdr blob and set it for the connector. | |
| void | SetColorSpace (drmColorRange) |
| Set kms color space, color encoding and color range. | |
| void | RestoreColorSpace () |
| Restore color space, color encoding and color range to BT709 and the original color range. | |
Private Attributes | |
| cSoftHdDevice * | m_pDevice |
| pointer to cSoftHdDevice | |
| cSoftHdAudio * | m_pAudio |
| pointer to cSoftHdAudio | |
| cSoftHdConfig * | m_pConfig |
| pointer to cSoftHdConfig | |
| std::mutex | m_mutex |
| mutex for thread control | |
| std::vector< Event > | m_eventQueue |
| event queue for incoming events | |
| double | m_refreshRateHz |
| screen refresh rate in Hz | |
| cQueue< cDrmBuffer > | m_drmBufferQueue {VIDEO_SURFACES_MAX} |
| queue for DRM buffers to be displayed (VIDEO_SURFACES_MAX is defined in thread.h) | |
| cQueue< cDrmBuffer > | m_pipDrmBufferQueue {VIDEO_SURFACES_MAX} |
| queue for PIP DRM buffers to be displayed (VIDEO_SURFACES_MAX is defined in thread.h) | |
| std::atomic< double > | m_trickspeedFactor = 0 |
| current trick speed | |
| std::atomic< bool > | m_trickspeed = false |
| true, if trickspeed is active | |
| std::atomic< bool > | m_forwardTrickspeed = true |
| true, if trickspeed plays forward | |
| std::atomic< bool > | m_stillpicture = false |
| true, if stillpicture is active | |
| std::atomic< int > | m_framePresentationCounter = 0 |
| number of times the current frame has to be shown (for slow-motion) | |
| int | m_numWrongProgressive |
| counter for progressive frames sent in an interlaced stream (only used for logging) | |
| bool | m_startgrab = false |
| internal flag to trigger grabbing | |
| cCondVar | m_grabCond |
| condition gets signalled, if renederer finished to clone the grabbed buffers | |
| cGrabBuffer | m_grabOsd |
| keeps the current grabbed osd | |
| cGrabBuffer | m_grabVideo |
| keeps the current grabbed video | |
| cGrabBuffer | m_grabPip |
| keeps the current grabbed pip video | |
| int | m_startCounter = 0 |
| counter for displayed frames, indicates a video start | |
| int | m_framesDuped = 0 |
| number of frames duplicated | |
| int | m_framesDropped = 0 |
| number of frames dropped | |
| bool | m_lastFrameWasDropped = false |
| true, if the last frame was dropped | |
| AVRational | m_timebase |
| timebase used for pts, set by first RenderFrame() | |
| std::mutex | m_timebaseMutex |
| mutex used around m_timebase | |
| std::atomic< int64_t > | m_pts = AV_NOPTS_VALUE |
| current video PTS | |
| cRect | m_videoRect |
| rect of the currently displayed video | |
| bool | m_videoIsScaled = false |
| true, if the currently displayed video is scaled | |
| int | m_pipScalePercent |
| scale factor for pip | |
| int | m_pipLeftPercent |
| left margin for pip | |
| int | m_pipTopPercent |
| top margin for pip | |
| cDrmDevice * | m_pDrmDevice |
| pointer cDrmDevice object | |
| cDrmBuffer * | m_pBufOsd = nullptr |
| pointer to osd drm buffer object | |
| cDrmBuffer | m_bufBlack |
| black drm buffer object | |
| cDrmBuffer * | m_pCurrentlyDisplayed = nullptr |
| pointer to currently displayed DRM buffer | |
| cDrmBuffer * | m_pCurrentlyPipDisplayed = nullptr |
| pointer to currently displayed DRM buffer | |
| bool | m_osdShown = false |
| set, if osd is shown currently | |
| std::atomic< bool > | m_videoPlaybackPaused = true |
| set, if playback is frozen (used for pause) | |
| std::atomic< bool > | m_resumeAudioScheduled = false |
| set, if audio resume is scheduled after a pause | |
| std::atomic< int64_t > | m_videoPlaybackPauseScheduledAt = AV_NOPTS_VALUE |
| if set, video will be paused at the given pts | |
| std::atomic< bool > | m_displayOneFrameThenPause = false |
| set, if only one frame shall be displayed and then pause playback | |
| std::atomic< int64_t > | m_schedulePlaybackStartAtPtsMs = AV_NOPTS_VALUE |
| if set, frames with PTS older than this will be dropped | |
| std::atomic< int64_t > | m_scheduleResyncAtPtsMs = AV_NOPTS_VALUE |
| if set, a resync (enter state BUFFERING) will be forced at the given pts | |
| IEventReceiver * | m_pEventReceiver |
| pointer to event receiver | |
| cDrmBufferPool | m_drmBufferPool |
| pool of drm buffers | |
| cDrmBufferPool | m_pipDrmBufferPool |
| PIP pool of drm buffers. | |
| std::atomic< cBufferStrategy * > | m_bufferReuseStrategy = nullptr |
| strategy to select drm buffers | |
| std::atomic< cBufferStrategy * > | m_pipBufferReuseStrategy = nullptr |
| strategy to select drm buffers | |
| std::atomic< cDecodingStrategy * > | m_decodingStrategy = nullptr |
| strategy for decoding setup | |
| std::atomic< cDecodingStrategy * > | m_pipDecodingStrategy = nullptr |
| strategy for decoding setup | |
| cHdrMetadata | m_pHdrMetadata |
| hdr metadata object | |
| bool | m_hasDoneHdrModeset = false |
| true, if we ever created an hdr blob and did a modesetting | |
| std::atomic< bool > | m_enableHdr = false |
| hdr is enabled | |
| drmColorRange | m_originalColorRange = COLORRANGE_LIMITED |
| initial color range | |
| bool | m_colorRangeStored = false |
| true, if the original color range was stored | |
| bool | m_disableOglOsd |
| set, if ogl osd is disabled | |
| struct gbm_bo * | m_bo |
| pointer to current gbm buffer object | |
| struct gbm_bo * | m_pOldBo |
| pointer to old gbm buffer object (for later free) | |
| struct gbm_bo * | m_pNextBo |
| pointer to next gbm buffer object (for later free) | |
| std::atomic< bool > | m_pipActive = false |
| true, if pip should be displayed | |
Video Renderer.
This part is responsible to put all the parts together and display them on the screen
Definition at line 163 of file videorender.h.
| cVideoRender::cVideoRender | ( | cSoftHdDevice * | device | ) |
Create the video renderer.
| device | pointer to cSoftHdDevice |
Definition at line 58 of file videorender.cpp.
References cSoftHdConfig::ConfigDisableOglOsd, cSoftHdConfig::ConfigPipUseAlt, m_bo, m_disableOglOsd, m_pConfig, m_pNextBo, m_pOldBo, m_timebase, and SetPipSize().
| cVideoRender::~cVideoRender | ( | void | ) |
Destroy the video renderer.
Definition at line 81 of file videorender.cpp.
References L_DRM, LOGDEBUG2, m_pDrmDevice, and Stop().
Thread loop, which tries to display frames and processes events.
Definition at line 620 of file videorender.cpp.
References DisplayFrame(), LOGDEBUG, m_mutex, and ProcessEvents().
Return true, if the device can handle HDR.
Definition at line 824 of file videorender.cpp.
References cDrmDevice::CanHandleHdr(), and m_pDrmDevice.
Referenced by cHdrMetadata::Build().
Clear (empty) the decoder to display queue.
Definition at line 93 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().
Clear the grab drm buffers.
Definition at line 1168 of file videorender.cpp.
References cGrabBuffer::FreeDrmBuf(), cGrabBuffer::GetDrmBuf(), m_grabOsd, m_grabPip, and m_grabVideo.
Referenced by cSoftHdGrab::Start().
Clear (empty) the decoder to display queue.
Definition at line 105 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 443 of file videorender.cpp.
References L_DRM, LOGDEBUG2, LOGERROR, m_osdShown, m_pCurrentlyDisplayed, m_pCurrentlyPipDisplayed, m_pDrmDevice, cDrmDevice::ModeAtomicAlloc(), cDrmDevice::ModeAtomicCommit(), cDrmDevice::ModeAtomicFree(), cDrmDevice::OsdPlane(), cDrmDevice::PipPlane(), SetOsdBuffer(), SetPipBuffer(), SetVideoBuffer(), and cDrmDevice::VideoPlane().
Referenced by PageFlip().
Copy current video, osd and pip buffers to dedicated grabbing buffers.
| grabPip | true, if the pip buffer should be grabbed |
Definition at line 1137 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().
Definition at line 230 of file videorender.h.
References m_disableOglOsd.
Referenced by cSoftHdDevice::SetDisableOglOsd().
Display a black video frame.
Definition at line 790 of file videorender.cpp.
References cDrmBuffer::Destroy(), cDrmBuffer::frame, L_DRM, LOGDEBUG2, m_bufBlack, m_pCurrentlyDisplayed, and PageFlip().
Referenced by cSoftHdDevice::OnEnteringState().
Display the frame (video and/or osd)
Definition at line 657 of file videorender.cpp.
References AV_NOPTS_VALUE, AV_SYNC_THRESHOLD_AUDIO_AHEAD_VIDEO_MS, AV_SYNC_THRESHOLD_AUDIO_BEHIND_VIDEO_MS, CreateGrabBuffers(), cSoftHdAudio::DropSamplesOlderThanPtsMs(), cDrmBuffer::frame, cVideoStream::GetAvPacketsFilled(), cSoftHdAudio::GetAvResyncBorderMs(), cSoftHdDevice::GetChannelSwitchFirstPacketTime(), cSoftHdDevice::GetChannelSwitchStartTime(), GetFramePresentationCount(), cSoftHdAudio::GetHardwareOutputPtsMs(), cSoftHdDevice::GetVideoAudioDelayMs(), cSoftHdDevice::IsBufferingThresholdReached(), cDrmBuffer::IsDirty(), cQueue< T >::IsEmpty(), cSoftHdAudio::IsPaused(), IsStillpicture(), IsTrickSpeed(), cSoftHdDevice::IsVideoOnlyPlayback(), L_AV_SYNC, LOGDEBUG, 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, m_videoPlaybackPauseScheduledAt, PageFlip(), cQueue< T >::Pop(), cDrmBuffer::PresentationFinished(), PtsToMs(), cSoftHdAudio::SetPaused(), Timestamp2String(), VIDEO, and cSoftHdDevice::VideoStream().
Referenced by Action().
Wrapper for drmHandleEvent()
Definition at line 816 of file videorender.cpp.
References cDrmDevice::HandleEvent(), and m_pDrmDevice.
|
inline |
Definition at line 235 of file videorender.h.
References cDrmDevice::EglContext(), and m_pDrmDevice.
Referenced by cOglThread::eglAcquireContext().
|
inline |
Definition at line 234 of file videorender.h.
References cDrmDevice::EglDisplay(), and m_pDrmDevice.
Referenced by cOglThread::eglAcquireContext().
|
inline |
Definition at line 233 of file videorender.h.
References cDrmDevice::EglSurface(), and m_pDrmDevice.
Referenced by cOglThread::eglAcquireContext().
Definition at line 231 of file videorender.h.
References m_disableOglOsd.
Referenced by cSoftHdDevice::SetEnableOglOsd().
Exit and cleanup the renderer.
Definition at line 1315 of file videorender.cpp.
References cDrmDevice::Close(), cDrmBuffer::Destroy(), LOGDEBUG, m_bufBlack, m_disableOglOsd, m_hasDoneHdrModeset, m_pBufOsd, m_pDrmDevice, m_pNextBo, m_pOldBo, cDrmDevice::OsdPlane(), Reset(), RestoreColorSpace(), cDrmDevice::RestoreCrtc(), Stop(), and cDrmDevice::VideoPlane().
Referenced by cSoftHdDevice::OnEnteringState().
Get frame flags.
| frame | AVFrame |
Definition at line 551 of file videorender.cpp.
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 1092 of file videorender.cpp.
References IsTrickSpeed(), m_refreshRateHz, and m_trickspeedFactor.
Referenced by DisplayFrame().
Definition at line 215 of file videorender.h.
References m_drmBufferQueue, and cQueue< T >::Size().
|
inline |
Definition at line 205 of file videorender.h.
References m_grabOsd.
Referenced by cSoftHdGrab::GetGrab().
|
inline |
Definition at line 206 of file videorender.h.
References m_grabPip.
Referenced by cSoftHdGrab::GetGrab().
|
inline |
Definition at line 204 of file videorender.h.
References m_grabVideo.
Referenced by cSoftHdGrab::GetGrab().
|
inline |
Definition at line 225 of file videorender.h.
References m_drmBufferQueue.
Referenced by cSoftHdDevice::OnLeavingState().
Get the output PTS in milliseconds.
Returns the presentation timestamp of the next frame to be displayed.
Definition at line 1035 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 226 of file videorender.h.
References m_pipDrmBufferQueue.
Referenced by cSoftHdDevice::OnLeavingState().
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 1185 of file videorender.cpp.
References m_framesDropped, m_framesDuped, and m_startCounter.
Referenced by cSoftHdDevice::GetStats().
Definition at line 176 of file videorender.h.
References m_pts.
Referenced by GetOutputPtsMs(), cSoftHdDevice::GetSTC(), and PushFrame().
Definition at line 236 of file videorender.h.
References cDrmDevice::GlInitiated(), and m_pDrmDevice.
Referenced by cOglThread::InitOpenGL().
Definition at line 171 of file videorender.h.
References m_mutex.
Referenced by cSoftHdDevice::Clear(), and cSoftHdDevice::OnEventReceived().
Initialize the renderer.
Definition at line 1212 of file videorender.cpp.
References cDrmDevice::CreateModeBlob(), cDrmDevice::CrtcId(), cDrmDevice::DisplayHeight(), cDrmDevice::DisplayWidth(), cDrmDevice::Fd(), cDrmBuffer::FillBlack(), cDrmDevice::HasPipPlane(), cDrmBuffer::Height(), cDrmBuffer::Id(), cDrmDevice::Init(), cDrmDevice::InitEvent(), L_DRM, LOGDEBUG2, LOGFATAL, m_bufBlack, m_disableOglOsd, m_osdShown, m_pBufOsd, m_pDevice, m_pDrmDevice, cDrmDevice::ModeAtomicAlloc(), cDrmDevice::ModeAtomicCommit(), cDrmDevice::ModeAtomicFree(), cDrmDevice::OsdPlane(), cDrmDevice::SaveCrtc(), cDrmDevice::SetConnectorCrtcId(), cDrmDevice::SetCrtcActive(), cDrmDevice::SetCrtcModeId(), cSoftHdDevice::SetDrmCanDisplayPip(), cDrmBuffer::Setup(), cDrmDevice::UseZpos(), cDrmDevice::VideoPlane(), cDrmBuffer::Width(), cDrmDevice::ZposOverlay(), and cDrmDevice::ZposPrimary().
Referenced by cSoftHdDevice::OnLeavingState().
Definition at line 197 of file videorender.h.
References m_forwardTrickspeed.
Referenced by cVideoStream::CheckForcingFrameDecode().
Check, if the main render output buffer is full.
| true | render output buffer is full |
Definition at line 957 of file videorender.cpp.
References cQueue< T >::IsFull(), and m_drmBufferQueue.
Referenced by cSoftHdDevice::IsBufferingThresholdReached().
Definition at line 199 of file videorender.h.
References m_stillpicture.
Referenced by DisplayFrame().
Definition at line 196 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 522 of file videorender.cpp.
References cVideoStream::GetAvPacketsFilled(), cSoftHdAudio::GetHardwareOutputDelayMs(), 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().
Definition at line 232 of file videorender.h.
References m_disableOglOsd.
Referenced by cDrmDevice::Init().
Clear the OSD (draw an empty/ transparent OSD)
Definition at line 836 of file videorender.cpp.
References EGL_CHECK, cDrmDevice::EglDisplay(), cDrmDevice::EglSurface(), cDrmDevice::GbmSurface(), cDrmDevice::GetBufFromBo(), cDrmBuffer::Height(), L_OPENGL, LOGDEBUG2, LOGERROR, m_bo, m_disableOglOsd, m_osdShown, m_pBufOsd, m_pDrmDevice, m_pNextBo, m_pOldBo, cDrmBuffer::MarkDirty(), cDrmBuffer::Pitch(), and cDrmBuffer::Plane().
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 890 of file videorender.cpp.
References EGL_CHECK, cDrmDevice::EglDisplay(), cDrmDevice::EglSurface(), cDrmDevice::GbmSurface(), cDrmDevice::GetBufFromBo(), L_OPENGL, L_OSD, LOGDEBUG2, LOGERROR, m_bo, m_disableOglOsd, m_osdShown, m_pBufOsd, m_pDrmDevice, m_pNextBo, m_pOldBo, cDrmBuffer::MarkDirty(), MIN, cDrmBuffer::Pitch(), and cDrmBuffer::Plane().
Referenced by cSoftHdDevice::OsdDrawARGB().
|
private |
Do the pageflip.
| buf | drm buffer |
| pipBuf | drm pip buffer |
Definition at line 587 of file videorender.cpp.
References AV_NOPTS_VALUE, CommitBuffer(), cDrmDevice::HandleEvent(), L_PACKET, LOGDEBUG2, LOGERROR, m_pDrmDevice, SetVideoClock(), and Timestamp2String().
Referenced by DisplayBlackFrame(), and DisplayFrame().
Process queued events and forward to event receiver.
Definition at line 1377 of file videorender.cpp.
References m_eventQueue, m_pEventReceiver, and IEventReceiver::OnEventReceived().
Referenced by Action().
Convert a PTS to milliseconds.
Definition at line 806 of file videorender.cpp.
References m_timebase, and m_timebaseMutex.
Referenced by DisplayFrame().
|
private |
Push the frame into the render ringbuffer.
Definition at line 981 of file videorender.cpp.
References AV_NOPTS_VALUE, cDrmDevice::Fd(), GetVideoClock(), LOGFATAL, m_pDrmDevice, and SetVideoClock().
Referenced by PushMainFrame(), and PushPipFrame().
Push a main frame into the render ringbuffer.
Definition at line 965 of file videorender.cpp.
References IsTrickSpeed(), m_bufferReuseStrategy, m_decodingStrategy, m_drmBufferPool, m_drmBufferQueue, and PushFrame().
Referenced by cSoftHdDevice::OnLeavingState().
Push a PiP frame into the render ringbuffer.
Definition at line 973 of file videorender.cpp.
References m_pipBufferReuseStrategy, m_pipDecodingStrategy, m_pipDrmBufferPool, m_pipDrmBufferQueue, and PushFrame().
Referenced by cSoftHdDevice::OnLeavingState().
Reset the renderer.
Definition at line 1057 of file videorender.cpp.
References AV_NOPTS_VALUE, m_decodingStrategy, m_framesDropped, m_framesDuped, m_numWrongProgressive, m_startCounter, and SetVideoClock().
Referenced by cSoftHdDevice::Clear(), Exit(), and cSoftHdDevice::OnEnteringState().
|
inline |
Definition at line 185 of file videorender.h.
References m_bufferReuseStrategy.
Referenced by cSoftHdDevice::OnEnteringState(), and cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 186 of file videorender.h.
References m_decodingStrategy.
Referenced by cSoftHdDevice::OnEnteringState().
Send start condition to video thread.
Definition at line 1048 of file videorender.cpp.
References IsTrickSpeed(), LOGDEBUG, and m_startCounter.
Referenced by cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
|
inline |
Definition at line 187 of file videorender.h.
References m_pipBufferReuseStrategy.
Referenced by cSoftHdDevice::ResetPipStream().
|
inline |
Definition at line 188 of file videorender.h.
References m_pipDecodingStrategy.
Referenced by cSoftHdDevice::ResetPipStream().
Restore color space, color encoding and color range to BT709 and the original color range.
Definition at line 245 of file videorender.cpp.
References COLORENCODING_BT709, COLORRANGE_LIMITED, COLORSPACE_BT709_YCC, cDrmDevice::CreateModeBlob(), cDrmDevice::DestroyModeBlob(), LOGFATAL, m_colorRangeStored, m_hasDoneHdrModeset, m_originalColorRange, m_pDrmDevice, cDrmDevice::ModeAtomicAlloc(), cDrmDevice::ModeAtomicCommit(), cDrmDevice::ModeAtomicFree(), cDrmDevice::SetConnectorColorspace(), cDrmDevice::SetConnectorCrtcId(), cDrmDevice::SetConnectorHdrOutputMetadata(), cDrmDevice::SetCrtcActive(), cDrmDevice::SetCrtcModeId(), cDrmDevice::SetVideoPlaneColorEncoding(), and cDrmDevice::SetVideoPlaneColorRange().
Referenced by Exit().
Definition at line 172 of file videorender.h.
References m_mutex.
Referenced by cSoftHdDevice::Clear(), cSoftHdDevice::OnEnteringState(), and cSoftHdDevice::OnEventReceived().
Definition at line 223 of file videorender.h.
References m_schedulePlaybackStartAtPtsMs.
Referenced by cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
Definition at line 224 of file videorender.h.
References m_scheduleResyncAtPtsMs.
Referenced by cSoftHdDevice::OnEventReceived().
Definition at line 182 of file videorender.h.
References m_videoPlaybackPauseScheduledAt.
Referenced by cSoftHdDevice::OnEventReceived().
|
private |
Set kms color space, color encoding and color range.
depending on the hdr data
| colorRange | color range to set |
Definition at line 203 of file videorender.cpp.
References COLORENCODING_BT2020, COLORENCODING_BT709, COLORRANGE_FULL, COLORSPACE_BT2020_RGB, COLORSPACE_BT709_YCC, cDrmDevice::ConnectorId(), cDrmDevice::CreateModeBlob(), cDrmDevice::DestroyModeBlob(), cHdrMetadata::GetColorPrimaries(), cDrmPlane::GetId(), L_DRM, LOGDEBUG2, LOGFATAL, m_hasDoneHdrModeset, m_pDrmDevice, m_pHdrMetadata, cDrmDevice::ModeAtomicAlloc(), cDrmDevice::ModeAtomicCommit(), cDrmDevice::ModeAtomicFree(), cDrmDevice::SetConnectorColorspace(), cDrmDevice::SetConnectorCrtcId(), cDrmDevice::SetCrtcActive(), cDrmDevice::SetCrtcModeId(), cDrmDevice::SetVideoPlaneColorEncoding(), cDrmDevice::SetVideoPlaneColorRange(), and cDrmDevice::VideoPlane().
Referenced by SetVideoBuffer().
Definition at line 222 of file videorender.h.
References m_displayOneFrameThenPause.
Referenced by cSoftHdDevice::Clear(), and cSoftHdDevice::OnLeavingState().
Definition at line 211 of file videorender.h.
References m_enableHdr.
Referenced by cSoftHdDevice::SetEnableHdr().
Set frame flags.
| frame | AVFrame |
| flags | FRAME_FLAG_TRICKSPEED and/or FRAME_FLAG_STILLPICTURE |
Definition at line 566 of file videorender.cpp.
References LOGFATAL.
|
private |
Create an hdr blob and set it for the connector.
| hdrData | hdr metadata |
Definition at line 175 of file videorender.cpp.
References cDrmDevice::CreateHdrBlob(), cDrmDevice::DestroyHdrBlob(), cDrmDevice::GetVideoPlaneColorRange(), LOGERROR, m_colorRangeStored, m_originalColorRange, m_pDrmDevice, and cDrmDevice::SetConnectorHdrBlobProperty().
Referenced by SetVideoBuffer().
|
private |
Modesetting for osd.
| 1 | osd is not dirty, do nothing |
| 0 | osd modesetting was done |
Definition at line 340 of file videorender.cpp.
References cDrmDevice::CrtcId(), cDrmBuffer::Height(), cDrmBuffer::Id(), cDrmBuffer::IsDirty(), L_DRM, LOGDEBUG2, m_osdShown, m_pBufOsd, m_pDrmDevice, cDrmBuffer::MarkClean(), cDrmDevice::OsdPlane(), cDrmBuffer::SetSizeOnScreen(), cDrmDevice::UseZpos(), cDrmDevice::VideoPlane(), cDrmBuffer::Width(), cDrmDevice::ZposOverlay(), and cDrmDevice::ZposPrimary().
Referenced by CommitBuffer().
Definition at line 240 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 382 of file videorender.cpp.
References ComputeFittedRect(), cDrmDevice::CrtcId(), cDrmDevice::DisplayHeight(), cDrmDevice::DisplayWidth(), m_pDrmDevice, m_pipActive, m_pipLeftPercent, m_pipScalePercent, m_pipTopPercent, m_videoIsScaled, m_videoRect, and cDrmDevice::PipPlane().
Referenced by CommitBuffer().
Set the size and position of the pip window.
| useAlt | true, if the alternative position and size (see setup menu) should be used |
Definition at line 1390 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().
Definition at line 180 of file videorender.h.
References m_videoPlaybackPaused.
Referenced by cSoftHdDevice::HandleStillPicture(), cSoftHdDevice::OnEnteringState(), cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
Definition at line 181 of file videorender.h.
References m_resumeAudioScheduled.
Referenced by cSoftHdDevice::OnEventReceived().
Wrapper to set the screen size in the device.
| width | screen width |
| height | screen height |
| refreshRateHz | screen refresh rate in Hz |
Definition at line 1203 of file videorender.cpp.
References m_pDevice, m_refreshRateHz, and cSoftHdDevice::SetScreenSize().
Referenced by cDrmDevice::Init().
Definition at line 198 of file videorender.h.
References m_stillpicture.
Referenced by cSoftHdDevice::HandleStillPicture(), cSoftHdDevice::OnEnteringState(), and cSoftHdDevice::OnEventReceived().
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 1076 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 287 of file videorender.cpp.
References cHdrMetadata::Build(), COLORRANGE_LIMITED, ComputeFittedRect(), cDrmDevice::CrtcId(), cDrmDevice::DisplayHeight(), cDrmDevice::DisplayWidth(), m_enableHdr, m_pDrmDevice, m_pHdrMetadata, m_videoIsScaled, m_videoRect, SetColorSpace(), SetHdrBlob(), and cDrmDevice::VideoPlane().
Referenced by CommitBuffer().
Definition at line 323 of file videorender.h.
References m_pts.
Referenced by PageFlip(), PushFrame(), and Reset().
Set size and position of the video on the screen.
| rect | a cRect, where the video should be rendered in |
Definition at line 1362 of file videorender.cpp.
References LOGDEBUG, m_videoIsScaled, and m_videoRect.
Referenced by cSoftHdDevice::ScaleVideo().
Stop the thread.
Definition at line 643 of file videorender.cpp.
References LOGDEBUG.
Referenced by Exit(), and ~cVideoRender().
Trigger a screen grab.
| 0 | on success, grab was triggered |
| 1 | on timeout, grab was not triggered |
Definition at line 1115 of file videorender.cpp.
References LOGWARNING, m_grabCond, and m_startgrab.
Referenced by cSoftHdGrab::Start().
pointer to current gbm buffer object
Definition at line 314 of file videorender.h.
Referenced by cVideoRender(), OsdClear(), and OsdDrawARGB().
|
private |
black drm buffer object
Definition at line 287 of file videorender.h.
Referenced by DisplayBlackFrame(), Exit(), and Init().
|
private |
strategy to select drm buffers
Definition at line 301 of file videorender.h.
Referenced by PushMainFrame(), and ResetBufferReuseStrategy().
true, if the original color range was stored
Definition at line 310 of file videorender.h.
Referenced by RestoreColorSpace(), and SetHdrBlob().
|
private |
strategy for decoding setup
Definition at line 303 of file videorender.h.
Referenced by PushMainFrame(), Reset(), and ResetDecodingStrategy().
|
private |
set, if ogl osd is disabled
Definition at line 313 of file videorender.h.
Referenced by cVideoRender(), DisableOglOsd(), EnableOglOsd(), Exit(), Init(), OglOsdDisabled(), OsdClear(), and OsdDrawARGB().
set, if only one frame shall be displayed and then pause playback
Definition at line 294 of file videorender.h.
Referenced by DisplayFrame(), and SetDisplayOneFrameThenPause().
|
private |
pool of drm buffers
Definition at line 299 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 255 of file videorender.h.
Referenced by ClearDecoderToDisplayQueue(), DisplayFrame(), GetFramesFilled(), GetMainOutputBuffer(), IsOutputBufferFull(), LogDroppedDuped(), and PushMainFrame().
hdr is enabled
Definition at line 308 of file videorender.h.
Referenced by SetEnableHdr(), and SetVideoBuffer().
|
private |
event queue for incoming events
Definition at line 252 of file videorender.h.
Referenced by DisplayFrame(), and ProcessEvents().
true, if trickspeed plays forward
Definition at line 259 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 261 of file videorender.h.
Referenced by DisplayFrame(), and SetTrickSpeed().
|
private |
number of frames dropped
Definition at line 273 of file videorender.h.
Referenced by GetStats(), LogDroppedDuped(), and Reset().
|
private |
number of frames duplicated
Definition at line 272 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 266 of file videorender.h.
Referenced by CreateGrabBuffers(), and TriggerGrab().
|
private |
keeps the current grabbed osd
Definition at line 267 of file videorender.h.
Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and GetGrabbedOsdBuffer().
|
private |
keeps the current grabbed pip video
Definition at line 269 of file videorender.h.
Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and GetGrabbedPipBuffer().
|
private |
keeps the current grabbed video
Definition at line 268 of file videorender.h.
Referenced by ClearGrabBuffers(), CreateGrabBuffers(), and GetGrabbedVideoBuffer().
true, if we ever created an hdr blob and did a modesetting
Definition at line 307 of file videorender.h.
Referenced by Exit(), RestoreColorSpace(), and SetColorSpace().
true, if the last frame was dropped
Definition at line 274 of file videorender.h.
Referenced by DisplayFrame().
|
private |
mutex for thread control
Definition at line 251 of file videorender.h.
|
private |
counter for progressive frames sent in an interlaced stream (only used for logging)
Definition at line 262 of file videorender.h.
Referenced by Reset().
|
private |
initial color range
Definition at line 309 of file videorender.h.
Referenced by RestoreColorSpace(), and SetHdrBlob().
set, if osd is shown currently
Definition at line 290 of file videorender.h.
Referenced by CommitBuffer(), CreateGrabBuffers(), Init(), OsdClear(), OsdDrawARGB(), and SetOsdBuffer().
|
private |
pointer to cSoftHdAudio
Definition at line 249 of file videorender.h.
Referenced by DisplayFrame(), and LogDroppedDuped().
|
private |
pointer to osd drm buffer object
Definition at line 286 of file videorender.h.
Referenced by CreateGrabBuffers(), DisplayFrame(), Exit(), Init(), OsdClear(), OsdDrawARGB(), and SetOsdBuffer().
|
private |
pointer to cSoftHdConfig
Definition at line 250 of file videorender.h.
Referenced by cVideoRender(), and SetPipSize().
|
private |
pointer to currently displayed DRM buffer
Definition at line 288 of file videorender.h.
Referenced by ClearDecoderToDisplayQueue(), CommitBuffer(), CreateGrabBuffers(), DisplayBlackFrame(), and DisplayFrame().
|
private |
pointer to currently displayed DRM buffer
Definition at line 289 of file videorender.h.
Referenced by ClearPipDecoderToDisplayQueue(), CommitBuffer(), CreateGrabBuffers(), and DisplayFrame().
|
private |
pointer to cSoftHdDevice
Definition at line 248 of file videorender.h.
Referenced by DisplayFrame(), Init(), LogDroppedDuped(), and SetScreenSize().
|
private |
pointer cDrmDevice object
Definition at line 285 of file videorender.h.
Referenced by CanHandleHdr(), CommitBuffer(), DrmHandleEvent(), EglContext(), EglDisplay(), EglSurface(), Exit(), GlInitiated(), Init(), OsdClear(), OsdDrawARGB(), PageFlip(), PushFrame(), RestoreColorSpace(), SetColorSpace(), SetHdrBlob(), SetOsdBuffer(), SetPipBuffer(), SetVideoBuffer(), and ~cVideoRender().
|
private |
pointer to event receiver
Definition at line 298 of file videorender.h.
Referenced by ProcessEvents().
|
private |
hdr metadata object
Definition at line 306 of file videorender.h.
Referenced by SetColorSpace(), and SetVideoBuffer().
true, if pip should be displayed
Definition at line 319 of file videorender.h.
Referenced by SetPipActive(), and SetPipBuffer().
|
private |
strategy to select drm buffers
Definition at line 302 of file videorender.h.
Referenced by PushPipFrame(), and ResetPipBufferReuseStrategy().
|
private |
strategy for decoding setup
Definition at line 304 of file videorender.h.
Referenced by PushPipFrame(), and ResetPipDecodingStrategy().
|
private |
PIP pool of drm buffers.
Definition at line 300 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 256 of file videorender.h.
Referenced by ClearPipDecoderToDisplayQueue(), DisplayFrame(), GetPipOutputBuffer(), and PushPipFrame().
|
private |
left margin for pip
Definition at line 282 of file videorender.h.
Referenced by SetPipBuffer(), and SetPipSize().
|
private |
scale factor for pip
Definition at line 281 of file videorender.h.
Referenced by SetPipBuffer(), and SetPipSize().
|
private |
top margin for pip
Definition at line 283 of file videorender.h.
Referenced by SetPipBuffer(), and SetPipSize().
pointer to next gbm buffer object (for later free)
Definition at line 316 of file videorender.h.
Referenced by cVideoRender(), Exit(), OsdClear(), and OsdDrawARGB().
pointer to old gbm buffer object (for later free)
Definition at line 315 of file videorender.h.
Referenced by cVideoRender(), Exit(), OsdClear(), and OsdDrawARGB().
|
private |
current video PTS
Definition at line 277 of file videorender.h.
Referenced by GetVideoClock(), and SetVideoClock().
|
private |
screen refresh rate in Hz
Definition at line 253 of file videorender.h.
Referenced by GetFramePresentationCount(), and SetScreenSize().
set, if audio resume is scheduled after a pause
Definition at line 292 of file videorender.h.
Referenced by DisplayFrame(), and SetScheduleAudioResume().
|
private |
if set, frames with PTS older than this will be dropped
Definition at line 295 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 296 of file videorender.h.
Referenced by DisplayFrame(), and ScheduleResyncAtPtsMs().
|
private |
counter for displayed frames, indicates a video start
Definition at line 271 of file videorender.h.
Referenced by DisplayFrame(), GetStats(), Reset(), and ResetFrameCounter().
internal flag to trigger grabbing
Definition at line 265 of file videorender.h.
Referenced by CreateGrabBuffers(), and TriggerGrab().
true, if stillpicture is active
Definition at line 260 of file videorender.h.
Referenced by IsStillpicture(), and SetStillpicture().
|
private |
timebase used for pts, set by first RenderFrame()
Definition at line 275 of file videorender.h.
Referenced by cVideoRender(), DisplayFrame(), GetOutputPtsMs(), and PtsToMs().
|
private |
mutex used around m_timebase
Definition at line 276 of file videorender.h.
Referenced by GetOutputPtsMs(), and PtsToMs().
true, if trickspeed is active
Definition at line 258 of file videorender.h.
Referenced by IsTrickSpeed(), and SetTrickSpeed().
|
private |
current trick speed
Definition at line 257 of file videorender.h.
Referenced by GetFramePresentationCount(), and SetTrickSpeed().
true, if the currently displayed video is scaled
Definition at line 280 of file videorender.h.
Referenced by DisplayFrame(), SetPipBuffer(), SetVideoBuffer(), and SetVideoOutputPosition().
set, if playback is frozen (used for pause)
Definition at line 291 of file videorender.h.
Referenced by DisplayFrame(), and SetPlaybackPaused().
|
private |
if set, video will be paused at the given pts
Definition at line 293 of file videorender.h.
Referenced by DisplayFrame(), and ScheduleVideoPlaybackPauseAt().
|
private |
rect of the currently displayed video
Definition at line 279 of file videorender.h.
Referenced by SetPipBuffer(), SetVideoBuffer(), and SetVideoOutputPosition().