Kodi Documentation 22.0
Kodi is an open source media player and entertainment hub.
Loading...
Searching...
No Matches
CRenderManager Class Reference

#include <RenderManager.h>

Classes

struct  CClockSync
 
struct  SPresent
 

Public Member Functions

 CRenderManager (CDVDClock &clock, IRenderMsg *player)
 
virtual ~CRenderManager ()
 
void GetVideoRect (CRect &source, CRect &dest, CRect &view) const
 
float GetAspectRatio () const
 
unsigned int GetOrientation () const
 
void FrameMove ()
 
void FrameWait (std::chrono::milliseconds duration)
 
void Render (bool clear, DWORD flags=0, DWORD alpha=255, bool gui=true)
 
bool IsVideoLayer ()
 
RESOLUTION GetResolution ()
 
void UpdateResolution ()
 
void TriggerUpdateResolution (float fps, int width, int height, std::string &stereomode)
 
void SetViewMode (int iViewMode)
 
void PreInit ()
 
void UnInit ()
 
bool Flush (bool wait, bool saveBuffers)
 
bool IsConfigured () const
 
void ToggleDebug ()
 
void ToggleDebugVideo ()
 
void SetSubtitleVerticalPosition (const int value, bool save)
 Set the subtitle vertical position, it depends on current screen resolution.
 
unsigned int AllocRenderCapture ()
 
void ReleaseRenderCapture (unsigned int captureId)
 
void StartRenderCapture (unsigned int captureId, unsigned int width, unsigned int height, int flags)
 
bool RenderCaptureGetPixels (unsigned int captureId, unsigned int millis, uint8_t *buffer, unsigned int size)
 
bool Supports (ERENDERFEATURE feature) const
 
bool Supports (ESCALINGMETHOD method) const
 
int GetSkippedFrames ()
 
bool Configure (const VideoPicture &picture, float fps, unsigned int orientation, int buffers=0)
 
bool AddVideoPicture (const VideoPicture &picture, volatile std::atomic_bool &bStop, EINTERLACEMETHOD deintMethod, bool wait)
 
void AddOverlay (std::shared_ptr< CDVDOverlay > o, double pts)
 
void ShowVideo (bool enable)
 
int WaitForBuffer (volatile std::atomic_bool &bStop, std::chrono::milliseconds timeout=std::chrono::milliseconds(100))
 
bool GetStats (int &lateframes, double &pts, int &queued, int &discard)
 
void DiscardBuffer ()
 
void SetDelay (int delay)
 
int GetDelay ()
 
void SetVideoSettings (const CVideoSettings &settings)
 

Protected Types

enum  EPRESENTSTEP {
  PRESENT_IDLE = 0 , PRESENT_FLIP , PRESENT_FRAME , PRESENT_FRAME2 ,
  PRESENT_READY
}
 
enum  EPRESENTMETHOD { PRESENT_METHOD_SINGLE = 0 , PRESENT_METHOD_BLEND , PRESENT_METHOD_BOB }
 
enum  ERENDERSTATE { STATE_UNCONFIGURED = 0 , STATE_CONFIGURING , STATE_CONFIGURED }
 

Protected Member Functions

void PresentSingle (bool clear, DWORD flags, DWORD alpha)
 
void PresentFields (bool clear, DWORD flags, DWORD alpha)
 
void PresentBlend (bool clear, DWORD flags, DWORD alpha)
 
void PrepareNextRender ()
 
bool IsPresenting ()
 
bool IsGuiLayer ()
 
bool Configure ()
 
void CreateRenderer ()
 
void DeleteRenderer ()
 
void ManageCaptures ()
 
void UpdateLatencyTweak ()
 
void CheckEnableClockSync ()
 
void RenderCapture (CRenderCapture *capture)
 
void RemoveCaptures ()
 

Protected Attributes

CBaseRendererm_pRenderer = nullptr
 
OVERLAY::CRenderer m_overlays
 
CDebugRenderer m_debugRenderer
 
CCriticalSection m_statelock
 
CCriticalSection m_presentlock
 
CCriticalSection m_datalock
 
bool m_bTriggerUpdateResolution = false
 
bool m_bRenderGUI = true
 
bool m_renderedOverlay = false
 
bool m_renderDebug = false
 
bool m_renderDebugVideo = false
 
XbmcThreads::EndTime m_debugTimer
 
std::atomic_bool m_showVideo = {false}
 
ERENDERSTATE m_renderState = STATE_UNCONFIGURED
 
CEvent m_stateEvent
 
double m_latencyTweak = 0.0
 
double m_displayLatency = 0.0
 Display latency updated in PrepareNextRender in DVD clock units, includes m_latencyTweak.
 
std::atomic_int m_videoDelay = {}
 
int m_QueueSize = 2
 
int m_QueueSkip = 0
 
struct CRenderManager::SPresent m_Queue [NUM_BUFFERS]
 
std::deque< intm_free
 
std::deque< intm_queued
 
std::deque< intm_discard
 
std::unique_ptr< VideoPicturem_pConfigPicture
 
VideoPicture m_picture {}
 
float m_fps = 0.0
 
unsigned int m_orientation = 0
 
int m_NumberBuffers = 0
 
int m_lateframes = -1
 
double m_presentpts = 0.0
 
EPRESENTSTEP m_presentstep = PRESENT_IDLE
 
XbmcThreads::EndTime m_presentTimer
 
bool m_forceNext = false
 
int m_presentsource = 0
 
int m_presentsourcePast = -1
 
XbmcThreads::ConditionVariable m_presentevent
 
CEvent m_flushEvent
 
CEvent m_initEvent
 
CDVDClockm_dvdClock
 
IRenderMsgm_playerPort
 
CClockSync m_clockSync
 
CCriticalSection m_captCritSect
 
std::map< unsigned int, CRenderCapture * > m_captures
 
unsigned int m_captureWaitCounter = 0
 
bool m_hasCaptures = false
 

Static Protected Attributes

static unsigned int m_nextCaptureId = 0
 

Member Enumeration Documentation

◆ EPRESENTMETHOD

Enumerator
PRESENT_METHOD_SINGLE 
PRESENT_METHOD_BLEND 
PRESENT_METHOD_BOB 

◆ EPRESENTSTEP

Enumerator
PRESENT_IDLE 
PRESENT_FLIP 
PRESENT_FRAME 
PRESENT_FRAME2 
PRESENT_READY 

◆ ERENDERSTATE

Enumerator
STATE_UNCONFIGURED 
STATE_CONFIGURING 
STATE_CONFIGURED 

Constructor & Destructor Documentation

◆ CRenderManager()

CRenderManager::CRenderManager ( CDVDClock & clock,
IRenderMsg * player )

◆ ~CRenderManager()

CRenderManager::~CRenderManager ( )
virtual

Member Function Documentation

◆ AddOverlay()

void CRenderManager::AddOverlay ( std::shared_ptr< CDVDOverlay > o,
double pts )

◆ AddVideoPicture()

bool CRenderManager::AddVideoPicture ( const VideoPicture & picture,
volatile std::atomic_bool & bStop,
EINTERLACEMETHOD deintMethod,
bool wait )

◆ AllocRenderCapture()

unsigned int CRenderManager::AllocRenderCapture ( )

◆ CheckEnableClockSync()

void CRenderManager::CheckEnableClockSync ( )
protected

◆ Configure() [1/2]

bool CRenderManager::Configure ( )
protected

◆ Configure() [2/2]

bool CRenderManager::Configure ( const VideoPicture & picture,
float fps,
unsigned int orientation,
int buffers = 0 )

◆ CreateRenderer()

void CRenderManager::CreateRenderer ( )
protected

◆ DeleteRenderer()

void CRenderManager::DeleteRenderer ( )
protected

◆ DiscardBuffer()

void CRenderManager::DiscardBuffer ( )

Video player call this on flush in oder to discard any queued frames

◆ Flush()

bool CRenderManager::Flush ( bool wait,
bool saveBuffers )

◆ FrameMove()

void CRenderManager::FrameMove ( )

◆ FrameWait()

void CRenderManager::FrameWait ( std::chrono::milliseconds duration)

◆ GetAspectRatio()

float CRenderManager::GetAspectRatio ( ) const

◆ GetDelay()

int CRenderManager::GetDelay ( )
inline

◆ GetOrientation()

unsigned int CRenderManager::GetOrientation ( ) const

◆ GetResolution()

RESOLUTION CRenderManager::GetResolution ( )

◆ GetSkippedFrames()

int CRenderManager::GetSkippedFrames ( )
inline

◆ GetStats()

bool CRenderManager::GetStats ( int & lateframes,
double & pts,
int & queued,
int & discard )

Can be called by player for lateness detection. This is done best by looking at the end of the queue.

◆ GetVideoRect()

void CRenderManager::GetVideoRect ( CRect & source,
CRect & dest,
CRect & view ) const

◆ IsConfigured()

bool CRenderManager::IsConfigured ( ) const

◆ IsGuiLayer()

bool CRenderManager::IsGuiLayer ( )
protected

◆ IsPresenting()

bool CRenderManager::IsPresenting ( )
protected

◆ IsVideoLayer()

bool CRenderManager::IsVideoLayer ( )

◆ ManageCaptures()

void CRenderManager::ManageCaptures ( )
protected

◆ PreInit()

void CRenderManager::PreInit ( )

◆ PrepareNextRender()

void CRenderManager::PrepareNextRender ( )
protected

◆ PresentBlend()

void CRenderManager::PresentBlend ( bool clear,
DWORD flags,
DWORD alpha )
protected

◆ PresentFields()

void CRenderManager::PresentFields ( bool clear,
DWORD flags,
DWORD alpha )
protected

◆ PresentSingle()

void CRenderManager::PresentSingle ( bool clear,
DWORD flags,
DWORD alpha )
protected

◆ ReleaseRenderCapture()

void CRenderManager::ReleaseRenderCapture ( unsigned int captureId)

◆ RemoveCaptures()

void CRenderManager::RemoveCaptures ( )
protected

◆ Render()

void CRenderManager::Render ( bool clear,
DWORD flags = 0,
DWORD alpha = 255,
bool gui = true )

◆ RenderCapture()

void CRenderManager::RenderCapture ( CRenderCapture * capture)
protected

◆ RenderCaptureGetPixels()

bool CRenderManager::RenderCaptureGetPixels ( unsigned int captureId,
unsigned int millis,
uint8_t * buffer,
unsigned int size )

◆ SetDelay()

void CRenderManager::SetDelay ( int delay)
inline

◆ SetSubtitleVerticalPosition()

void CRenderManager::SetSubtitleVerticalPosition ( const int value,
bool save )

Set the subtitle vertical position, it depends on current screen resolution.

Parameters
valueThe subtitle position in pixels
saveIf true, the value will be saved to resolution info

◆ SetVideoSettings()

void CRenderManager::SetVideoSettings ( const CVideoSettings & settings)

◆ SetViewMode()

void CRenderManager::SetViewMode ( int iViewMode)

◆ ShowVideo()

void CRenderManager::ShowVideo ( bool enable)

◆ StartRenderCapture()

void CRenderManager::StartRenderCapture ( unsigned int captureId,
unsigned int width,
unsigned int height,
int flags )

◆ Supports() [1/2]

bool CRenderManager::Supports ( ERENDERFEATURE feature) const

◆ Supports() [2/2]

bool CRenderManager::Supports ( ESCALINGMETHOD method) const

◆ ToggleDebug()

void CRenderManager::ToggleDebug ( )

◆ ToggleDebugVideo()

void CRenderManager::ToggleDebugVideo ( )

◆ TriggerUpdateResolution()

void CRenderManager::TriggerUpdateResolution ( float fps,
int width,
int height,
std::string & stereomode )

◆ UnInit()

void CRenderManager::UnInit ( )

◆ UpdateLatencyTweak()

void CRenderManager::UpdateLatencyTweak ( )
protected

◆ UpdateResolution()

void CRenderManager::UpdateResolution ( )

◆ WaitForBuffer()

int CRenderManager::WaitForBuffer ( volatile std::atomic_bool & bStop,
std::chrono::milliseconds timeout = std::chrono::milliseconds(100) )

If player uses buffering it has to wait for a buffer before it calls AddVideoPicture and AddOverlay. It waits for max 50 ms before it returns -1 in case no buffer is available. Player may call this in a loop and decides by itself when it wants to drop a frame.

Member Data Documentation

◆ m_bRenderGUI

bool CRenderManager::m_bRenderGUI = true
protected

◆ m_bTriggerUpdateResolution

bool CRenderManager::m_bTriggerUpdateResolution = false
protected

◆ m_captCritSect

CCriticalSection CRenderManager::m_captCritSect
protected

◆ m_captures

std::map<unsigned int, CRenderCapture*> CRenderManager::m_captures
protected

◆ m_captureWaitCounter

unsigned int CRenderManager::m_captureWaitCounter = 0
protected

◆ m_clockSync

CClockSync CRenderManager::m_clockSync
protected

◆ m_datalock

CCriticalSection CRenderManager::m_datalock
protected

◆ m_debugRenderer

CDebugRenderer CRenderManager::m_debugRenderer
protected

◆ m_debugTimer

XbmcThreads::EndTime CRenderManager::m_debugTimer
protected

◆ m_discard

std::deque<int> CRenderManager::m_discard
protected

◆ m_displayLatency

double CRenderManager::m_displayLatency = 0.0
protected

Display latency updated in PrepareNextRender in DVD clock units, includes m_latencyTweak.

◆ m_dvdClock

CDVDClock& CRenderManager::m_dvdClock
protected

◆ m_flushEvent

CEvent CRenderManager::m_flushEvent
protected

◆ m_forceNext

bool CRenderManager::m_forceNext = false
protected

◆ m_fps

float CRenderManager::m_fps = 0.0
protected

◆ m_free

std::deque<int> CRenderManager::m_free
protected

◆ m_hasCaptures

bool CRenderManager::m_hasCaptures = false
protected

◆ m_initEvent

CEvent CRenderManager::m_initEvent
protected

◆ m_lateframes

int CRenderManager::m_lateframes = -1
protected

◆ m_latencyTweak

double CRenderManager::m_latencyTweak = 0.0
protected

Display latency tweak value from AdvancedSettings for the current refresh rate in milliseconds

◆ m_nextCaptureId

unsigned int CRenderManager::m_nextCaptureId = 0
staticprotected

◆ m_NumberBuffers

int CRenderManager::m_NumberBuffers = 0
protected

◆ m_orientation

unsigned int CRenderManager::m_orientation = 0
protected

◆ m_overlays

OVERLAY::CRenderer CRenderManager::m_overlays
protected

◆ m_pConfigPicture

std::unique_ptr<VideoPicture> CRenderManager::m_pConfigPicture
protected

◆ m_picture

VideoPicture CRenderManager::m_picture {}
protected

◆ m_playerPort

IRenderMsg* CRenderManager::m_playerPort
protected

◆ m_pRenderer

CBaseRenderer* CRenderManager::m_pRenderer = nullptr
protected

◆ m_presentevent

XbmcThreads::ConditionVariable CRenderManager::m_presentevent
protected

◆ m_presentlock

CCriticalSection CRenderManager::m_presentlock
protected

◆ m_presentpts

double CRenderManager::m_presentpts = 0.0
protected

◆ m_presentsource

int CRenderManager::m_presentsource = 0
protected

◆ m_presentsourcePast

int CRenderManager::m_presentsourcePast = -1
protected

◆ m_presentstep

EPRESENTSTEP CRenderManager::m_presentstep = PRESENT_IDLE
protected

◆ m_presentTimer

XbmcThreads::EndTime CRenderManager::m_presentTimer
protected

◆ m_Queue

struct CRenderManager::SPresent CRenderManager::m_Queue[NUM_BUFFERS]
protected

◆ m_queued

std::deque<int> CRenderManager::m_queued
protected

◆ m_QueueSize

int CRenderManager::m_QueueSize = 2
protected

◆ m_QueueSkip

int CRenderManager::m_QueueSkip = 0
protected

◆ m_renderDebug

bool CRenderManager::m_renderDebug = false
protected

◆ m_renderDebugVideo

bool CRenderManager::m_renderDebugVideo = false
protected

◆ m_renderedOverlay

bool CRenderManager::m_renderedOverlay = false
protected

◆ m_renderState

ERENDERSTATE CRenderManager::m_renderState = STATE_UNCONFIGURED
protected

◆ m_showVideo

std::atomic_bool CRenderManager::m_showVideo = {false}
protected

◆ m_stateEvent

CEvent CRenderManager::m_stateEvent
protected

◆ m_statelock

CCriticalSection CRenderManager::m_statelock
mutableprotected

◆ m_videoDelay

std::atomic_int CRenderManager::m_videoDelay = {}
protected

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