VLC 4.0.0-dev
|
Go to the source code of this file.
Data Structures | |
struct | vlc_clock_cbs |
Callbacks for the owner of the main clock. More... | |
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_t * | vlc_clock_main_New (struct vlc_logger *parent_logger, struct vlc_tracer *parent_tracer) |
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_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_t * | vlc_clock_main_CreateMaster (vlc_clock_main_t *main_clock, const char *track_str_id, const struct vlc_clock_cbs *cbs, void *cbs_data) |
This function creates a new master vlc_clock_t interface. More... | |
vlc_clock_t * | vlc_clock_main_CreateInputMaster (vlc_clock_main_t *main_clock) |
This function creates a new input master vlc_clock_t interface. More... | |
vlc_clock_t * | vlc_clock_main_CreateSlave (vlc_clock_main_t *main_clock, const char *track_str_id, 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_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. 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_Lock (vlc_clock_t *clock) |
Lock the clock mutex. More... | |
void | vlc_clock_Unlock (vlc_clock_t *clock) |
Unlock the clock mutex. More... | |
bool | vlc_clock_IsPaused (vlc_clock_t *clock) |
Indicate if the clock is paused. More... | |
int | vlc_clock_Wait (vlc_clock_t *clock, vlc_tick_t system_deadline) |
Wait for a timestamp expressed in system time. More... | |
void | vlc_clock_Wake (vlc_clock_t *clock) |
Wake up any vlc_clock_Wait() More... | |
vlc_tick_t | vlc_clock_ConvertToSystemLocked (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... | |
static vlc_tick_t | vlc_clock_ConvertToSystem (vlc_clock_t *clock, vlc_tick_t system_now, vlc_tick_t ts, double rate) |
|
inlinestatic |
References vlc_clock_ConvertToSystemLocked(), vlc_clock_Lock(), and vlc_clock_Unlock().
Referenced by ModuleThread_GetDisplayDate(), PreparePicture(), PrerenderPicture(), RenderPicture(), stream_Silence(), stream_Synchronize(), UpdateCurrentPicture(), vlc_aout_stream_ChangePause(), and vlc_aout_stream_Play().
vlc_tick_t vlc_clock_ConvertToSystemLocked | ( | vlc_clock_t * | clock, |
vlc_tick_t | system_now, | ||
vlc_tick_t | ts, | ||
double | rate | ||
) |
This function converts a timestamp from stream to system.
The clock mutex must be locked.
References vlc_clock_t::to_system_locked.
Referenced by RenderPicture(), spu_channel_UpdateDates(), spu_PutSubpicture(), and vlc_clock_ConvertToSystem().
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, vlc_clock_t::track_str_id, and vlc_clock_main_CreateSlave().
Referenced by aout_filter_GetVout().
void vlc_clock_Delete | ( | vlc_clock_t * | clock | ) |
This function free the resources allocated by vlc_clock*Create*()
References vlc_clock_main_t::input_master, vlc_clock_main_t::lock, vlc_clock_main_t::master, vlc_clock_t::owner, vlc_clock_main_t::rc, vlc_clock_main_reset(), vlc_mutex_lock(), and vlc_mutex_unlock().
Referenced by aout_filter_GetVout(), aout_FiltersPipelineDestroy(), AppendFilter(), EsOutCreateDecoder(), EsOutDestroyDecoder(), input_clock_Delete(), and sout_ClockDelete().
bool vlc_clock_IsPaused | ( | vlc_clock_t * | clock | ) |
Indicate if the clock is paused.
The clock mutex must be locked.
true | if the clock is paused |
false | if the clock is not paused |
References AssertLocked(), vlc_clock_t::owner, vlc_clock_main_t::pause_date, and VLC_TICK_INVALID.
Referenced by RenderPicture().
void vlc_clock_Lock | ( | vlc_clock_t * | clock | ) |
Lock the clock mutex.
References vlc_clock_main_t::lock, vlc_clock_t::owner, and vlc_mutex_lock().
Referenced by RenderPicture(), spu_channel_UpdateDates(), spu_PutSubpicture(), vlc_clock_ConvertToSystem(), and VoutRenderWakeUpUrgent().
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_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.
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_t * vlc_clock_main_CreateMaster | ( | vlc_clock_main_t * | main_clock, |
const char * | track_str_id, | ||
const struct vlc_clock_cbs * | cbs, | ||
void * | cbs_data | ||
) |
This function creates a new master vlc_clock_t interface.
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_t * vlc_clock_main_CreateSlave | ( | vlc_clock_main_t * | main_clock, |
const char * | track_str_id, | ||
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(), sout_ClockCreate(), and vlc_clock_CreateSlave().
void vlc_clock_main_Delete | ( | vlc_clock_main_t * | main_clock | ) |
Destroy the clock main.
References vlc_clock_main_t::logger, vlc_clock_main_t::rc, and vlc_LogDestroy().
Referenced by EsOutProgramAdd(), ProgramDelete(), and sout_ClockMainDelete().
vlc_clock_main_t * vlc_clock_main_New | ( | struct vlc_logger * | parent_logger, |
struct vlc_tracer * | parent_tracer | ||
) |
This function creates the vlc_clock_main_t of the program.
References AOUT_MAX_PTS_ADVANCE, AvgInit(), AvgResetAndFill(), clock_point_Create(), vlc_clock_main_t::coeff, vlc_clock_main_t::coeff_avg, vlc_clock_main_t::cond, DEFAULT_PTS_DELAY, vlc_clock_main_t::delay, vlc_clock_main_t::first_pcr, vlc_clock_main_t::input_dejitter, vlc_clock_main_t::input_master, vlc_clock_main_t::last, vlc_clock_main_t::lock, vlc_clock_main_t::logger, vlc_clock_main_t::master, vlc_clock_main_t::offset, vlc_clock_main_t::output_dejitter, vlc_clock_main_t::pause_date, vlc_clock_main_t::rate, vlc_clock_main_t::rc, vlc_clock_main_t::tracer, vlc_cond_init(), vlc_LogHeaderCreate(), vlc_mutex_init(), VLC_TICK_INVALID, vlc_clock_main_t::wait_sync_ref, and vlc_clock_main_t::wait_sync_ref_priority.
Referenced by EsOutProgramAdd(), and sout_ClockMainCreate().
void vlc_clock_main_Reset | ( | vlc_clock_main_t * | main_clock | ) |
Reset the vlc_clock_main_t.
References clock_point_Create(), vlc_clock_main_t::first_pcr, vlc_clock_main_t::lock, vlc_clock_main_reset(), vlc_mutex_lock(), vlc_mutex_unlock(), and VLC_TICK_INVALID.
Referenced by EsOutDecodersStopBuffering(), and sout_ClockMainSetFirstPcr().
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().
void vlc_clock_main_SetFirstPcr | ( | vlc_clock_main_t * | main_clock, |
vlc_tick_t | system_now, | ||
vlc_tick_t | ts | ||
) |
References clock_point_Create(), vlc_clock_main_t::first_pcr, vlc_clock_main_t::lock, clock_point_t::system, vlc_mutex_lock(), vlc_mutex_unlock(), VLC_TICK_INVALID, vlc_clock_main_t::wait_sync_ref, and vlc_clock_main_t::wait_sync_ref_priority.
Referenced by EsOutDecodersStopBuffering(), and sout_ClockMainSetFirstPcr().
void vlc_clock_main_SetInputDejitter | ( | vlc_clock_main_t * | main_clock, |
vlc_tick_t | delay | ||
) |
References vlc_clock_main_t::input_dejitter, vlc_clock_main_t::lock, vlc_mutex_lock(), and vlc_mutex_unlock().
Referenced by EsOutProgramAdd(), and EsOutVaPrivControlLocked().
void vlc_clock_Reset | ( | vlc_clock_t * | clock | ) |
This function resets the clock drift.
References vlc_clock_t::reset.
Referenced by aout_FiltersPipelineResetClock(), input_clock_Reset(), spu_ClearChannel(), stream_Reset(), and vout_FlushUnlocked().
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_FiltersPipelineSetClockDelay(), spu_ClearChannel(), spu_SetClockDelay(), stream_Reset(), vlc_aout_stream_Play(), vout_ChangeDelay(), and vout_FlushUnlocked().
void vlc_clock_Unlock | ( | vlc_clock_t * | clock | ) |
Unlock the clock mutex.
References vlc_clock_main_t::lock, vlc_clock_t::owner, and vlc_mutex_unlock().
Referenced by RenderPicture(), spu_channel_UpdateDates(), spu_PutSubpicture(), vlc_clock_ConvertToSystem(), and VoutRenderWakeUpUrgent().
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.
system_now | valid system time or VLC_TICK_MAX is the updated point is forced (when paused for example) |
References vlc_clock_t::update.
Referenced by stream_Synchronize(), UpdateListener(), vlc_aout_stream_NotifyTiming(), and vlc_aout_stream_Play().
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 RenderPicture().
int vlc_clock_Wait | ( | vlc_clock_t * | clock, |
vlc_tick_t | system_deadline | ||
) |
Wait for a timestamp expressed in system time.
The wait will be interrupted (signaled) on clock state changes which could invalidate the computed deadline. In that case, the caller must recompute the new deadline and call it again.
The clock mutex must be locked.
References AssertLocked(), vlc_clock_main_t::cond, vlc_clock_main_t::lock, vlc_clock_t::owner, and vlc_cond_timedwait().
Referenced by RenderPicture().
void vlc_clock_Wake | ( | vlc_clock_t * | clock | ) |
Wake up any vlc_clock_Wait()
References vlc_clock_main_t::cond, vlc_clock_t::owner, and vlc_cond_broadcast().
Referenced by VoutRenderWakeUpUrgent().