VLC  4.0.0-dev
Data Structures | Typedefs | Enumerations | Functions
clock.h File Reference

Go to the source code of this file.

Data Structures

struct  vlc_clock_cbs
 Callbacks for the owner of the main clock. More...
 

Typedefs

typedef struct vlc_clock_main_t vlc_clock_main_t
 
typedef struct vlc_clock_t vlc_clock_t
 

Enumerations

enum  vlc_clock_master_source { VLC_CLOCK_MASTER_AUTO = 0, VLC_CLOCK_MASTER_AUDIO, VLC_CLOCK_MASTER_INPUT, VLC_CLOCK_MASTER_MONOTONIC }
 

Functions

vlc_clock_main_tvlc_clock_main_New (void)
 This function creates the vlc_clock_main_t of the program. More...
 
void vlc_clock_main_Delete (vlc_clock_main_t *main_clock)
 Destroy the clock main. More...
 
void vlc_clock_main_Abort (vlc_clock_main_t *main_clock)
 Abort all the pending vlc_clock_Wait. More...
 
void vlc_clock_main_Reset (vlc_clock_main_t *main_clock)
 Reset the vlc_clock_main_t. More...
 
void vlc_clock_main_SetFirstPcr (vlc_clock_main_t *main_clock, vlc_tick_t system_now, vlc_tick_t ts)
 
void vlc_clock_main_SetInputDejitter (vlc_clock_main_t *main_clock, vlc_tick_t delay)
 
void vlc_clock_main_SetDejitter (vlc_clock_main_t *main_clock, vlc_tick_t dejitter)
 This function sets the dejitter delay to absorb the clock jitter. More...
 
void vlc_clock_main_ChangePause (vlc_clock_main_t *clock, vlc_tick_t system_now, bool paused)
 This function allows changing the pause status. More...
 
vlc_clock_tvlc_clock_main_CreateMaster (vlc_clock_main_t *main_clock, const struct vlc_clock_cbs *cbs, void *cbs_data)
 This function creates a new master vlc_clock_t interface. More...
 
vlc_clock_tvlc_clock_main_CreateInputMaster (vlc_clock_main_t *main_clock)
 This function creates a new input master vlc_clock_t interface. More...
 
vlc_clock_tvlc_clock_main_CreateSlave (vlc_clock_main_t *main_clock, enum es_format_category_e cat, const struct vlc_clock_cbs *cbs, void *cbs_data)
 This function creates a new slave vlc_clock_t interface. More...
 
vlc_clock_tvlc_clock_CreateSlave (const vlc_clock_t *clock, enum es_format_category_e cat)
 This function creates a new slave vlc_clock_t interface. More...
 
void vlc_clock_Delete (vlc_clock_t *clock)
 This function free the resources allocated by vlc_clock*Create*() More...
 
vlc_tick_t vlc_clock_Update (vlc_clock_t *clock, vlc_tick_t system_now, vlc_tick_t ts, double rate)
 This function will update the clock drift and returns the drift. More...
 
vlc_tick_t vlc_clock_UpdateVideo (vlc_clock_t *clock, vlc_tick_t system_now, vlc_tick_t ts, double rate, unsigned frame_rate, unsigned frame_rate_base)
 This function will update the video clock drift and returns the drift. More...
 
void vlc_clock_Reset (vlc_clock_t *clock)
 This function resets the clock drift. More...
 
vlc_tick_t vlc_clock_SetDelay (vlc_clock_t *clock, vlc_tick_t ts_delay)
 This functions change the clock delay. More...
 
void vlc_clock_Wait (vlc_clock_t *clock, vlc_tick_t system_now, vlc_tick_t ts, double rate, vlc_tick_t max_duration)
 Wait for a timestamp expressed in stream time. More...
 
vlc_tick_t vlc_clock_ConvertToSystem (vlc_clock_t *clock, vlc_tick_t system_now, vlc_tick_t ts, double rate)
 This function converts a timestamp from stream to system. More...
 
void vlc_clock_ConvertArrayToSystem (vlc_clock_t *clock, vlc_tick_t system_now, vlc_tick_t *ts_array, size_t ts_count, double rate)
 This functon converts an array of timestamp from stream to system. More...
 

Typedef Documentation

◆ vlc_clock_main_t

◆ vlc_clock_t

typedef struct vlc_clock_t vlc_clock_t

Enumeration Type Documentation

◆ vlc_clock_master_source

Enumerator
VLC_CLOCK_MASTER_AUTO 
VLC_CLOCK_MASTER_AUDIO 
VLC_CLOCK_MASTER_INPUT 
VLC_CLOCK_MASTER_MONOTONIC 

Function Documentation

◆ vlc_clock_ConvertArrayToSystem()

void vlc_clock_ConvertArrayToSystem ( vlc_clock_t clock,
vlc_tick_t  system_now,
vlc_tick_t ts_array,
size_t  ts_count,
double  rate 
)

This functon converts an array of timestamp from stream to system.

References vlc_clock_main_t::lock, vlc_clock_t::owner, vlc_clock_t::to_system_locked, vlc_mutex_lock(), and vlc_mutex_unlock().

Referenced by spu_channel_UpdateDates(), and spu_PutSubpicture().

◆ vlc_clock_ConvertToSystem()

vlc_tick_t vlc_clock_ConvertToSystem ( vlc_clock_t clock,
vlc_tick_t  system_now,
vlc_tick_t  ts,
double  rate 
)

This function converts a timestamp from stream to system.

Returns
the valid system time or INT64_MAX when the clock is paused

References vlc_clock_main_t::lock, vlc_clock_t::owner, vlc_clock_t::to_system_locked, vlc_mutex_lock(), and vlc_mutex_unlock().

Referenced by aout_DecPlay(), aout_DecSilence(), aout_DecSynchronize(), ModuleThread_GetDisplayDate(), ThreadDisplayPicture(), ThreadDisplayPreparePicture(), and ThreadDisplayRenderPicture().

◆ vlc_clock_CreateSlave()

vlc_clock_t* vlc_clock_CreateSlave ( const vlc_clock_t clock,
enum es_format_category_e  cat 
)

This function creates a new slave vlc_clock_t interface.

You must use vlc_clock_Delete to free it.

References vlc_clock_t::owner, and vlc_clock_main_CreateSlave().

Referenced by aout_FiltersNewWithClock().

◆ vlc_clock_Delete()

void vlc_clock_Delete ( vlc_clock_t clock)

◆ vlc_clock_main_Abort()

void vlc_clock_main_Abort ( vlc_clock_main_t main_clock)

◆ vlc_clock_main_ChangePause()

void vlc_clock_main_ChangePause ( vlc_clock_main_t clock,
vlc_tick_t  system_now,
bool  paused 
)

This function allows changing the pause status.

Only apply a delay if the clock has a reference point to avoid messing up the timings if the stream was paused then seeked

References vlc_clock_main_t::cond, vlc_clock_main_t::first_pcr, vlc_clock_main_t::last, vlc_clock_main_t::lock, vlc_clock_main_t::offset, vlc_clock_main_t::pause_date, clock_point_t::system, vlc_cond_broadcast(), vlc_mutex_lock(), vlc_mutex_unlock(), VLC_TICK_INVALID, and vlc_clock_main_t::wait_sync_ref.

Referenced by EsOutProgramChangePause().

◆ vlc_clock_main_CreateInputMaster()

vlc_clock_t* vlc_clock_main_CreateInputMaster ( vlc_clock_main_t main_clock)

This function creates a new input master vlc_clock_t interface.

Once the input master is created, the current or future master clock created from vlc_clock_main_CreateMaster() will be demoted as slave.

Warning
There can be only one input master at a given time.

You must use vlc_clock_Delete to free it.

References vlc_clock_main_t::input_master, vlc_clock_main_t::lock, vlc_clock_main_t::master, vlc_clock_main_t::offset, vlc_clock_main_t::rc, vlc_clock_main_Create(), vlc_clock_set_master_callbacks(), vlc_clock_set_slave_callbacks(), vlc_mutex_lock(), vlc_mutex_unlock(), and VLC_TICK_INVALID.

Referenced by EsOutProgramHandleClockSource().

◆ vlc_clock_main_CreateMaster()

vlc_clock_t* vlc_clock_main_CreateMaster ( vlc_clock_main_t main_clock,
const struct vlc_clock_cbs cbs,
void *  cbs_data 
)

This function creates a new master vlc_clock_t interface.

Warning
There can be only one master at a given time.

You must use vlc_clock_Delete to free it.

References vlc_clock_main_t::input_master, vlc_clock_main_t::lock, vlc_clock_main_t::master, vlc_clock_main_t::rc, vlc_clock_main_Create(), vlc_clock_set_master_callbacks(), vlc_clock_set_slave_callbacks(), vlc_mutex_lock(), and vlc_mutex_unlock().

Referenced by EsOutCreateDecoder().

◆ vlc_clock_main_CreateSlave()

vlc_clock_t* vlc_clock_main_CreateSlave ( vlc_clock_main_t main_clock,
enum es_format_category_e  cat,
const struct vlc_clock_cbs cbs,
void *  cbs_data 
)

This function creates a new slave vlc_clock_t interface.

You must use vlc_clock_Delete to free it.

References AUDIO_ES, vlc_clock_main_t::lock, vlc_clock_main_t::rc, SPU_ES, VIDEO_ES, vlc_clock_main_Create(), vlc_clock_set_slave_callbacks(), vlc_mutex_lock(), and vlc_mutex_unlock().

Referenced by EsOutCreateDecoder(), and vlc_clock_CreateSlave().

◆ vlc_clock_main_Delete()

void vlc_clock_main_Delete ( vlc_clock_main_t main_clock)

Destroy the clock main.

References vlc_clock_main_t::rc.

Referenced by EsOutProgramAdd(), and ProgramDelete().

◆ vlc_clock_main_New()

vlc_clock_main_t* vlc_clock_main_New ( void  )

◆ vlc_clock_main_Reset()

void vlc_clock_main_Reset ( vlc_clock_main_t main_clock)

◆ vlc_clock_main_SetDejitter()

void vlc_clock_main_SetDejitter ( vlc_clock_main_t main_clock,
vlc_tick_t  dejitter 
)

This function sets the dejitter delay to absorb the clock jitter.

Also used as the maximum delay before the synchro is considered to kick in.

References vlc_clock_main_t::lock, vlc_clock_main_t::output_dejitter, vlc_mutex_lock(), and vlc_mutex_unlock().

Referenced by EsOutProgramAdd().

◆ vlc_clock_main_SetFirstPcr()

void vlc_clock_main_SetFirstPcr ( vlc_clock_main_t main_clock,
vlc_tick_t  system_now,
vlc_tick_t  ts 
)

◆ vlc_clock_main_SetInputDejitter()

void vlc_clock_main_SetInputDejitter ( vlc_clock_main_t main_clock,
vlc_tick_t  delay 
)

◆ vlc_clock_Reset()

void vlc_clock_Reset ( vlc_clock_t clock)

◆ vlc_clock_SetDelay()

vlc_tick_t vlc_clock_SetDelay ( vlc_clock_t clock,
vlc_tick_t  ts_delay 
)

This functions change the clock delay.

It returns the amount of time the clock owner need to wait in order to reach the time introduced by the new positive delay.

References vlc_clock_t::set_delay.

Referenced by aout_DecFlush(), aout_DecPlay(), aout_FiltersSetClockDelay(), spu_ClearChannel(), spu_SetClockDelay(), vout_ChangeDelay(), and vout_FlushUnlocked().

◆ vlc_clock_Update()

vlc_tick_t vlc_clock_Update ( vlc_clock_t clock,
vlc_tick_t  system_now,
vlc_tick_t  ts,
double  rate 
)

This function will update the clock drift and returns the drift.

Parameters
system_nowvalid system time or INT64_MAX is the updated point is forced (when paused for example)
Returns
a valid drift relative time, VLC_TICK_INVALID if there is no drift (clock is master) or INT64_MAX if the clock is paused

References vlc_clock_t::update.

Referenced by aout_RequestRetiming(), and UpdateListener().

◆ vlc_clock_UpdateVideo()

vlc_tick_t vlc_clock_UpdateVideo ( vlc_clock_t clock,
vlc_tick_t  system_now,
vlc_tick_t  ts,
double  rate,
unsigned  frame_rate,
unsigned  frame_rate_base 
)

This function will update the video clock drift and returns the drift.

Same behavior than vlc_clock_Update() except that the video is passed to the clock, this will be used for clock update callbacks.

References vlc_clock_t::update.

Referenced by ThreadDisplayRenderPicture().

◆ vlc_clock_Wait()

void vlc_clock_Wait ( vlc_clock_t clock,
vlc_tick_t  system_now,
vlc_tick_t  ts,
double  rate,
vlc_tick_t  max_duration 
)