vlc | branch: master | Thomas Guillem <[email protected]> | Wed Aug 28 10:03:21 2019 +0200| [6f50e9fea5278ca3f6e97c2ad073cbe4f6528070] | committer: Thomas Guillem
clock: add vlc_clock_UpdateVideo() Used to send the fps of the current point. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6f50e9fea5278ca3f6e97c2ad073cbe4f6528070 --- src/clock/clock.c | 36 ++++++++++++++++++++++++++---------- src/clock/clock.h | 13 +++++++++++++ 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/clock/clock.c b/src/clock/clock.c index d8b8482601..83649edc07 100644 --- a/src/clock/clock.c +++ b/src/clock/clock.c @@ -59,7 +59,8 @@ struct vlc_clock_main_t struct vlc_clock_t { vlc_tick_t (*update)(vlc_clock_t *clock, vlc_tick_t system_now, - vlc_tick_t ts, double rate); + vlc_tick_t ts, double rate, + unsigned frame_rate, unsigned frame_rate_base); void (*reset)(vlc_clock_t *clock); vlc_tick_t (*set_delay)(vlc_clock_t *clock, vlc_tick_t delay); void (*set_dejitter)(vlc_clock_t *clock, vlc_tick_t delay); @@ -97,15 +98,20 @@ static void vlc_clock_main_reset(vlc_clock_main_t *main_clock) static inline void vlc_clock_on_update(vlc_clock_t *clock, vlc_tick_t system_now, - vlc_tick_t ts, double rate) + vlc_tick_t ts, double rate, + unsigned frame_rate, + unsigned frame_rate_base) { if (clock->cbs) - clock->cbs->on_update(system_now, ts, rate, clock->cbs_data); + clock->cbs->on_update(system_now, ts, rate, frame_rate, frame_rate_base, + clock->cbs_data); } static vlc_tick_t vlc_clock_master_update(vlc_clock_t *clock, vlc_tick_t system_now, - vlc_tick_t original_ts, double rate) + vlc_tick_t original_ts, double rate, + unsigned frame_rate, + unsigned frame_rate_base) { vlc_clock_main_t *main_clock = clock->owner; @@ -142,7 +148,8 @@ static vlc_tick_t vlc_clock_master_update(vlc_clock_t *clock, vlc_mutex_unlock(&main_clock->lock); - vlc_clock_on_update(clock, system_now, original_ts, rate); + vlc_clock_on_update(clock, system_now, original_ts, rate, frame_rate, + frame_rate_base); return VLC_TICK_INVALID; } @@ -173,7 +180,7 @@ static void vlc_clock_master_reset(vlc_clock_t *clock) vlc_mutex_unlock(&main_clock->lock); - vlc_clock_on_update(clock, VLC_TICK_INVALID, VLC_TICK_INVALID, 1.f); + vlc_clock_on_update(clock, VLC_TICK_INVALID, VLC_TICK_INVALID, 1.f, 0, 0); } static vlc_tick_t vlc_clock_master_set_delay(vlc_clock_t *clock, vlc_tick_t delay) @@ -277,7 +284,9 @@ static vlc_tick_t vlc_clock_master_to_system_locked(vlc_clock_t *clock, static vlc_tick_t vlc_clock_slave_update(vlc_clock_t *clock, vlc_tick_t system_now, - vlc_tick_t ts, double rate) + vlc_tick_t ts, double rate, + unsigned frame_rate, + unsigned frame_rate_base) { vlc_clock_main_t *main_clock = clock->owner; vlc_mutex_lock(&main_clock->lock); @@ -286,7 +295,7 @@ static vlc_tick_t vlc_clock_slave_update(vlc_clock_t *clock, vlc_mutex_unlock(&main_clock->lock); - vlc_clock_on_update(clock, computed, ts, rate); + vlc_clock_on_update(clock, computed, ts, rate, frame_rate, frame_rate_base); return computed != INT64_MAX ? computed - system_now : INT64_MAX; } @@ -299,7 +308,7 @@ static void vlc_clock_slave_reset(vlc_clock_t *clock) vlc_mutex_unlock(&main_clock->lock); - vlc_clock_on_update(clock, VLC_TICK_INVALID, VLC_TICK_INVALID, 1.0f); + vlc_clock_on_update(clock, VLC_TICK_INVALID, VLC_TICK_INVALID, 1.0f, 0, 0); } static vlc_tick_t vlc_clock_slave_set_delay(vlc_clock_t *clock, vlc_tick_t delay) @@ -458,7 +467,14 @@ void vlc_clock_main_Delete(vlc_clock_main_t *main_clock) vlc_tick_t vlc_clock_Update(vlc_clock_t *clock, vlc_tick_t system_now, vlc_tick_t ts, double rate) { - return clock->update(clock, system_now, ts, rate); + return clock->update(clock, system_now, ts, rate, 0, 0); +} + +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) +{ + return clock->update(clock, system_now, ts, rate, frame_rate, frame_rate_base); } void vlc_clock_Reset(vlc_clock_t *clock) diff --git a/src/clock/clock.h b/src/clock/clock.h index 1ab9ab7aa2..6b7db29694 100644 --- a/src/clock/clock.h +++ b/src/clock/clock.h @@ -45,9 +45,12 @@ struct vlc_clock_cbs * @param ts stream timestamp or VLC_TICK_INVALID when the clock is reset, * should be subtracted with VLC_TICK_0 to get the original value * @param rate rate used when updated + * @param frame_rate fps of the video owning the clock + * @param frame_rate_base fps denominator * @param data opaque pointer set from vlc_clock_main_New() */ void (*on_update)(vlc_tick_t system_ts, vlc_tick_t ts, double rate, + unsigned frame_rate, unsigned frame_rate_base, void *data); }; @@ -127,6 +130,16 @@ 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 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. + */ +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 resets the clock drift */ void vlc_clock_Reset(vlc_clock_t *clock); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
