VLC 4.0.0-dev
|
Data Structures | |
struct | input_clock_t |
This structure is used to manage clock drift and reception jitters. More... | |
Macros | |
#define | CR_MEAN_PTS_GAP VLC_TICK_FROM_MS(300) |
#define | CR_MAX_GAP CR_MEAN_PTS_GAP |
#define | CR_BUFFERING_RATE (48) |
#define | CR_BUFFERING_TARGET VLC_TICK_FROM_MS(100) |
#define | INPUT_CLOCK_LATE_COUNT (3) |
Functions | |
static vlc_tick_t | ClockStreamToSystem (input_clock_t *, vlc_tick_t i_stream) |
static vlc_tick_t | ClockSystemToStream (input_clock_t *, vlc_tick_t i_system) |
static vlc_tick_t | ClockGetTsOffset (input_clock_t *cl) |
It returns timestamp display offset due to ref/last modified on rate changes It ensures that currently converted dates are not changed. | |
static void | UpdateListener (input_clock_t *cl, bool discontinuity) |
input_clock_t * | input_clock_New (float rate) |
This function creates a new input_clock_t. | |
void | input_clock_Delete (input_clock_t *cl) |
This function destroys a input_clock_t created by input_clock_New. | |
void | input_clock_AttachListener (input_clock_t *cl, const struct vlc_input_clock_cbs *cbs, void *opaque) |
This function attach a clock listener to the input clock. | |
vlc_tick_t | input_clock_Update (input_clock_t *cl, vlc_object_t *p_log, bool b_can_pace_control, bool b_buffering, bool b_extra_buffering_allowed, vlc_tick_t i_ck_stream, vlc_tick_t i_ck_system) |
This function will update a input_clock_t with a new clock reference point. | |
void | input_clock_Reset (input_clock_t *cl) |
This function will reset the drift of a input_clock_t. | |
void | input_clock_ChangeRate (input_clock_t *cl, float rate) |
This functions allows changing the actual reading speed. | |
void | input_clock_ChangePause (input_clock_t *cl, bool b_paused, vlc_tick_t i_date) |
This function allows changing the pause status. | |
vlc_tick_t | input_clock_GetWakeup (input_clock_t *cl) |
This functions will return a deadline used to control the reading speed. | |
float | input_clock_GetRate (input_clock_t *cl) |
This function returns the current rate. | |
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. | |
void | input_clock_ChangeSystemOrigin (input_clock_t *cl, vlc_tick_t i_system) |
This function allows rebasing the original system value date (a valid reference point must have been set). | |
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. | |
vlc_tick_t | input_clock_GetJitter (input_clock_t *cl) |
This function returns an estimation of the pts_delay needed to avoid rebufferization. | |
#define CR_BUFFERING_RATE (48) |
#define CR_BUFFERING_TARGET VLC_TICK_FROM_MS(100) |
#define CR_MAX_GAP CR_MEAN_PTS_GAP |
#define CR_MEAN_PTS_GAP VLC_TICK_FROM_MS(300) |
#define INPUT_CLOCK_LATE_COUNT (3) |
|
static |
It returns timestamp display offset due to ref/last modified on rate changes It ensures that currently converted dates are not changed.
References input_clock_t::i_pts_delay, and input_clock_t::rate.
Referenced by input_clock_ChangeSystemOrigin(), and UpdateListener().
|
static |
References input_clock_t::b_has_reference, input_clock_t::rate, input_clock_t::ref, clock_point_t::stream, clock_point_t::system, and VLC_TICK_INVALID.
Referenced by input_clock_GetWakeup(), input_clock_Update(), and UpdateListener().
|
static |
References input_clock_t::b_has_reference, input_clock_t::rate, input_clock_t::ref, clock_point_t::stream, and clock_point_t::system.
Referenced by input_clock_Update().
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()).
clock | the input clock to attach the listener to |
listener | an input clock listener virtual table |
opaque | an 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().
void input_clock_ChangePause | ( | input_clock_t * | cl, |
bool | b_paused, | ||
vlc_tick_t | i_date | ||
) |
This function allows changing the pause status.
References input_clock_t::b_has_reference, input_clock_t::b_paused, input_clock_t::i_pause_date, input_clock_t::last, input_clock_t::ref, clock_point_t::system, and UpdateListener().
Referenced by EsOutProgramAdd(), and EsOutProgramChangePause().
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().
void input_clock_ChangeSystemOrigin | ( | input_clock_t * | cl, |
vlc_tick_t | i_system | ||
) |
This function allows rebasing the original system value date (a valid reference point must have been set).
References input_clock_t::b_has_reference, input_clock_t::b_origin_changed, ClockGetTsOffset(), input_clock_t::last, input_clock_t::ref, clock_point_t::system, and UpdateListener().
Referenced by EsOutDecodersStopBuffering().
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().
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().
float input_clock_GetRate | ( | input_clock_t * | cl | ) |
This function returns the current rate.
References input_clock_t::rate.
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().
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_t * input_clock_New | ( | float | rate | ) |
This function creates a new input_clock_t.
You must use input_clock_Delete to delete it once unused.
References AvgInit(), input_clock_t::b_has_reference, input_clock_t::b_origin_changed, input_clock_t::b_paused, input_clock_t::cbs, clock_point_Create(), 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_pause_date, input_clock_t::i_pts_delay, INPUT_CLOCK_LATE_COUNT, input_clock_t::last, input_clock_t::late, input_clock_t::listener, input_clock_t::opaque, input_clock_t::pi_value, input_clock_t::rate, input_clock_t::ref, and VLC_TICK_INVALID.
Referenced by EsOutProgramAdd().
void input_clock_Reset | ( | input_clock_t * | cl | ) |
This function will reset the drift of a input_clock_t.
The actual jitter estimation will not be reset by it.
References input_clock_t::b_has_reference, input_clock_t::b_origin_changed, input_clock_t::cbs, clock_point_Create(), input_clock_t::last, input_clock_t::listener, input_clock_t::opaque, input_clock_t::ref, vlc_input_clock_cbs::reset, and VLC_TICK_INVALID.
Referenced by EsOutChangePosition().
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().
vlc_tick_t input_clock_Update | ( | input_clock_t * | clock, |
vlc_object_t * | p_log, | ||
bool | b_can_pace_control, | ||
bool | b_buffering, | ||
bool | b_extra_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.
clock | the input clock object to update with the new point |
p_log | the logger object to use |
b_can_pace_control | whether the input can control the speed of playback |
b_buffering | whether the input is buffering |
b_extra_buffering_allowed | tells if we are allowed to bufferize more data in advance (if possible). |
i_clock | the new clock reference value |
i_system | the timestmap at which the new reference has been reported |
References AvgGet(), AvgReset(), AvgUpdate(), input_clock_t::b_has_reference, input_clock_t::b_origin_changed, 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::rate, input_clock_t::ref, clock_point_t::stream, clock_point_t::system, UpdateListener(), VLC_TICK_FROM_MS, and VLC_TICK_INVALID.
Referenced by EsOutVaControlLocked().
|
static |
References AvgGet(), input_clock_t::cbs, ClockGetTsOffset(), ClockStreamToSystem(), input_clock_t::drift, input_clock_t::i_pts_delay, input_clock_t::last, input_clock_t::listener, input_clock_t::opaque, input_clock_t::rate, clock_point_t::stream, and vlc_input_clock_cbs::update.
Referenced by input_clock_ChangePause(), input_clock_ChangeRate(), input_clock_ChangeSystemOrigin(), and input_clock_Update().