VLC 4.0.0-dev
Loading...
Searching...
No Matches
input_clock.h File Reference
Include dependency graph for input_clock.h:

Go to the source code of this file.

Data Structures

struct  vlc_input_clock_cbs
 Callbacks for the input_clock_t listener. More...
 

Typedefs

typedef struct input_clock_t input_clock_t
 

Functions

input_clock_tinput_clock_New (float rate)
 This function creates a new input_clock_t.
 
void input_clock_AttachListener (input_clock_t *clock, const struct vlc_input_clock_cbs *clock_listener, void *opaque)
 This function attach a clock listener to the input clock.
 
void input_clock_Delete (input_clock_t *)
 This function destroys a input_clock_t created by input_clock_New.
 
vlc_tick_t input_clock_Update (input_clock_t *clock, vlc_object_t *p_log, bool b_can_pace_control, bool b_buffering_allowed, vlc_tick_t i_clock, vlc_tick_t i_system)
 This function will update a input_clock_t with a new clock reference point.
 
void input_clock_Reset (input_clock_t *)
 This function will reset the drift of a input_clock_t.
 
vlc_tick_t input_clock_GetWakeup (input_clock_t *)
 This functions will return a deadline used to control the reading speed.
 
void input_clock_ChangeRate (input_clock_t *, float rate)
 This functions allows changing the actual reading speed.
 
void input_clock_ChangePause (input_clock_t *, bool b_paused, vlc_tick_t i_date)
 This function allows changing the pause status.
 
void input_clock_ChangeSystemOrigin (input_clock_t *, bool b_absolute, vlc_tick_t i_system)
 This function allows rebasing the original system value date (a valid reference point must have been set).
 
float input_clock_GetRate (input_clock_t *)
 This function returns the current rate.
 
int input_clock_GetState (input_clock_t *, vlc_tick_t *pi_stream_start, vlc_tick_t *pi_system_start, vlc_tick_t *pi_stream_duration, vlc_tick_t *pi_system_duration)
 This function returns current clock state or VLC_EGENERIC if there is not a reference point.
 
void input_clock_SetJitter (input_clock_t *, vlc_tick_t i_pts_delay, int i_cr_average)
 This function allows the set the minimal configuration for the jitter estimation algo.
 
vlc_tick_t input_clock_GetJitter (input_clock_t *)
 This function returns an estimation of the pts_delay needed to avoid rebufferization.
 

Typedef Documentation

◆ input_clock_t

typedef struct input_clock_t input_clock_t

Function Documentation

◆ input_clock_AttachListener()

void input_clock_AttachListener ( input_clock_t clock,
const struct vlc_input_clock_cbs clock_listener,
void *  opaque 
)

This function attach a clock listener to the input clock.

It can be called only one time, with a valid clock, before the first update (input_clock_Update()).

Parameters
clockthe input clock to attach the listener to
listeneran input clock listener virtual table
opaquean opaque pointer forwarded to the listener

References input_clock_t::b_has_reference, input_clock_t::cbs, input_clock_t::listener, and input_clock_t::opaque.

Referenced by EsOutProgramHandleClockSource().

◆ input_clock_ChangePause()

void input_clock_ChangePause ( input_clock_t cl,
bool  b_paused,
vlc_tick_t  i_date 
)

◆ input_clock_ChangeRate()

void input_clock_ChangeRate ( input_clock_t cl,
float  rate 
)

This functions allows changing the actual reading speed.

References input_clock_t::b_has_reference, input_clock_t::last, input_clock_t::rate, input_clock_t::ref, clock_point_t::system, and UpdateListener().

Referenced by EsOutProgramsChangeRate().

◆ input_clock_ChangeSystemOrigin()

void input_clock_ChangeSystemOrigin ( input_clock_t cl,
bool  b_absolute,
vlc_tick_t  i_system 
)

This function allows rebasing the original system value date (a valid reference point must have been set).

When using the absolute mode, it will create a discontinuity unless called immediately after a input_clock_Update.

References input_clock_t::b_has_external_clock, input_clock_t::b_has_reference, ClockGetTsOffset(), input_clock_t::i_external_clock, input_clock_t::last, input_clock_t::ref, clock_point_t::system, and UpdateListener().

Referenced by EsOutDecodersStopBuffering().

◆ input_clock_Delete()

void input_clock_Delete ( input_clock_t cl)

This function destroys a input_clock_t created by input_clock_New.

References AvgClean(), and input_clock_t::drift.

Referenced by ProgramDelete().

◆ input_clock_GetJitter()

vlc_tick_t input_clock_GetJitter ( input_clock_t cl)

This function returns an estimation of the pts_delay needed to avoid rebufferization.

XXX in the current implementation, the pts_delay will never be decreased.

References input_clock_t::i_pts_delay, INPUT_CLOCK_LATE_COUNT, input_clock_t::late, p, and input_clock_t::pi_value.

Referenced by EsOutVaControlLocked().

◆ input_clock_GetRate()

float input_clock_GetRate ( input_clock_t cl)

This function returns the current rate.

References input_clock_t::rate.

◆ input_clock_GetState()

int input_clock_GetState ( input_clock_t cl,
vlc_tick_t pi_stream_start,
vlc_tick_t pi_system_start,
vlc_tick_t pi_stream_duration,
vlc_tick_t pi_system_duration 
)

This function returns current clock state or VLC_EGENERIC if there is not a reference point.

References input_clock_t::b_has_reference, input_clock_t::last, input_clock_t::ref, clock_point_t::stream, clock_point_t::system, VLC_EGENERIC, and VLC_SUCCESS.

Referenced by EsOutChangePause(), EsOutDecodersStopBuffering(), and EsOutGetBuffering().

◆ input_clock_GetWakeup()

vlc_tick_t input_clock_GetWakeup ( input_clock_t cl)

This functions will return a deadline used to control the reading speed.

References AvgGet(), input_clock_t::b_has_reference, ClockStreamToSystem(), input_clock_t::drift, input_clock_t::i_buffering_duration, input_clock_t::last, and clock_point_t::stream.

Referenced by EsOutGetWakeup().

◆ input_clock_New()

◆ input_clock_Reset()

void input_clock_Reset ( input_clock_t cl)

◆ input_clock_SetJitter()

void input_clock_SetJitter ( input_clock_t cl,
vlc_tick_t  i_pts_delay,
int  i_cr_average 
)

This function allows the set the minimal configuration for the jitter estimation algo.

References AvgRescale(), input_clock_t::drift, input_clock_t::i_index, input_clock_t::i_pts_delay, INPUT_CLOCK_LATE_COUNT, input_clock_t::late, input_clock_t::pi_value, and average_t::range.

Referenced by EsOutProgramAdd(), and EsOutVaPrivControlLocked().

◆ input_clock_Update()

vlc_tick_t input_clock_Update ( input_clock_t clock,
vlc_object_t p_log,
bool  b_can_pace_control,
bool  b_buffering_allowed,
vlc_tick_t  i_clock,
vlc_tick_t  i_system 
)

This function will update a input_clock_t with a new clock reference point.

It will also tell if the clock point is late regarding our buffering.

Parameters
clockthe input clock object to update with the new point
p_logthe logger object to use
b_can_pace_controlwhether the input can control the speed of playback
b_buffering_allowedtells if we are allowed to bufferize more data in advanced (if possible).
i_clockthe new clock reference value
i_systemthe timestmap at which the new reference has been reported
Returns
clock update delay

References AvgGet(), AvgReset(), AvgUpdate(), input_clock_t::b_has_external_clock, input_clock_t::b_has_reference, clock_point_Create(), ClockStreamToSystem(), ClockSystemToStream(), CR_BUFFERING_RATE, CR_BUFFERING_TARGET, CR_MAX_GAP, CR_MEAN_PTS_GAP, input_clock_t::drift, input_clock_t::i_buffering_duration, input_clock_t::i_index, input_clock_t::i_next_drift_update, input_clock_t::i_pts_delay, INPUT_CLOCK_LATE_COUNT, input_clock_t::last, input_clock_t::late, msg_Warn, input_clock_t::pi_value, input_clock_t::ref, clock_point_t::stream, UpdateListener(), VLC_TICK_FROM_MS, and VLC_TICK_INVALID.

Referenced by EsOutVaControlLocked().