Kodi Documentation 18.0
Kodi is an open source media player and entertainment hub.
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)
 
float GetAspectRatio ()
 
void FrameMove ()
 
void FrameWait (int ms)
 
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 ()
 
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)
 
bool Supports (ESCALINGMETHOD method)
 
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 (CDVDOverlay *o, double pts)
 
void ShowVideo (bool enable)
 
int WaitForBuffer (volatile std::atomic_bool &bStop, int timeout=100)
 
bool GetStats (int &lateframes, double &pts, int &queued, int &discard)
 
void DiscardBuffer ()
 
void SetDelay (int delay)
 
int GetDelay ()
 
void SetVideoSettings (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
 
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. More...
 
std::atomic_int m_videoDelay = {0}
 
int m_QueueSize = 2
 
int m_QueueSkip = 0
 
struct CRenderManager::SPresent m_Queue [NUM_BUFFERS]
 
std::deque< int > m_free
 
std::deque< int > m_queued
 
std::deque< int > m_discard
 
std::unique_ptr< VideoPicturem_pConfigPicture
 
unsigned int m_width = 0
 
unsigned int m_height = 0
 
unsigned int m_dwidth = 0
 
unsigned int m_dheight = 0
 
float m_fps = 0.0
 
unsigned int m_orientation = 0
 
int m_NumberBuffers = 0
 
std::string m_stereomode
 
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 ( 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 ( int  ms)

◆ GetAspectRatio()

float CRenderManager::GetAspectRatio ( )

◆ GetDelay()

int CRenderManager::GetDelay ( )
inline

◆ 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 
)

◆ 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

◆ SetVideoSettings()

void CRenderManager::SetVideoSettings ( 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)

◆ Supports() [2/2]

bool CRenderManager::Supports ( ESCALINGMETHOD  method)

◆ ToggleDebug()

void CRenderManager::ToggleDebug ( )

◆ 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,
int  timeout = 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_dheight

unsigned int CRenderManager::m_dheight = 0
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_dwidth

unsigned int CRenderManager::m_dwidth = 0
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_height

unsigned int CRenderManager::m_height = 0
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_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_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_stereomode

std::string CRenderManager::m_stereomode
protected

◆ m_videoDelay

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

◆ m_width

unsigned int CRenderManager::m_width = 0
protected

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