[vlc-devel] [PATCH 13/18] codec: get_display_date: add system_now
Thomas Guillem
thomas at gllm.fr
Thu Mar 7 15:25:35 CET 2019
---
include/vlc_codec.h | 8 +++++---
modules/codec/avcodec/video.c | 2 +-
modules/codec/synchro.c | 14 +++++++-------
3 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/include/vlc_codec.h b/include/vlc_codec.h
index f001b03768..118adc0330 100644
--- a/include/vlc_codec.h
+++ b/include/vlc_codec.h
@@ -61,7 +61,7 @@ struct decoder_owner_callbacks
/* Display date
* cf. decoder_GetDisplayDate */
- vlc_tick_t (*get_display_date)( decoder_t *, vlc_tick_t );
+ vlc_tick_t (*get_display_date)( decoder_t *, vlc_tick_t, vlc_tick_t );
/* Display rate
* cf. decoder_GetDisplayRate */
float (*get_display_rate)( decoder_t * );
@@ -447,14 +447,16 @@ static inline int decoder_GetInputAttachments( decoder_t *dec,
* You MUST use it *only* for gathering statistics about speed.
*/
VLC_USED
-static inline vlc_tick_t decoder_GetDisplayDate( decoder_t *dec, vlc_tick_t i_ts )
+static inline vlc_tick_t decoder_GetDisplayDate( decoder_t *dec,
+ vlc_tick_t system_now,
+ vlc_tick_t i_ts )
{
vlc_assert( dec->fmt_in.i_cat == VIDEO_ES && dec->cbs != NULL );
if( !dec->cbs->video.get_display_date )
return VLC_TICK_INVALID;
- return dec->cbs->video.get_display_date( dec, i_ts );
+ return dec->cbs->video.get_display_date( dec, system_now, i_ts );
}
/**
diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
index 4f3c496c8a..d194e68b42 100644
--- a/modules/codec/avcodec/video.c
+++ b/modules/codec/avcodec/video.c
@@ -799,7 +799,7 @@ static void update_late_frame_count( decoder_t *p_dec, block_t *p_block,
/* Update frame late count (except when doing preroll) */
vlc_tick_t i_display_date = VLC_TICK_INVALID;
if( !p_block || !(p_block->i_flags & BLOCK_FLAG_PREROLL) )
- i_display_date = decoder_GetDisplayDate( p_dec, i_pts );
+ i_display_date = decoder_GetDisplayDate( p_dec, current_time, i_pts );
vlc_tick_t i_threshold = i_next_pts != VLC_TICK_INVALID
? (i_next_pts - i_pts) / 2 : VLC_TICK_FROM_MS(20);
diff --git a/modules/codec/synchro.c b/modules/codec/synchro.c
index e7f62b119d..d06c0204d7 100644
--- a/modules/codec/synchro.c
+++ b/modules/codec/synchro.c
@@ -233,11 +233,11 @@ bool decoder_SynchroChoose( decoder_synchro_t * p_synchro, int i_coding_type,
case I_CODING_TYPE:
if( b_low_delay )
{
- pts = decoder_GetDisplayDate( p_synchro->p_dec, S.current_pts );
+ pts = decoder_GetDisplayDate( p_synchro->p_dec, now, S.current_pts );
}
else if( S.backward_pts != VLC_TICK_INVALID )
{
- pts = decoder_GetDisplayDate( p_synchro->p_dec, S.backward_pts );
+ pts = decoder_GetDisplayDate( p_synchro->p_dec, now, S.backward_pts );
}
else
{
@@ -246,7 +246,7 @@ bool decoder_SynchroChoose( decoder_synchro_t * p_synchro, int i_coding_type,
* | +- current picture
* +- current PTS
*/
- pts = decoder_GetDisplayDate( p_synchro->p_dec, S.current_pts ) + period * (S.i_n_b + 2);
+ pts = decoder_GetDisplayDate( p_synchro->p_dec, now, S.current_pts ) + period * (S.i_n_b + 2);
}
if( (1 + S.i_n_p * (S.i_n_b + 1)) * period > S.p_tau[I_CODING_TYPE] )
@@ -270,15 +270,15 @@ bool decoder_SynchroChoose( decoder_synchro_t * p_synchro, int i_coding_type,
case P_CODING_TYPE:
if( b_low_delay )
{
- pts = decoder_GetDisplayDate( p_synchro->p_dec, S.current_pts );
+ pts = decoder_GetDisplayDate( p_synchro->p_dec, now, S.current_pts );
}
else if( S.backward_pts != VLC_TICK_INVALID )
{
- pts = decoder_GetDisplayDate( p_synchro->p_dec, S.backward_pts );
+ pts = decoder_GetDisplayDate( p_synchro->p_dec, now, S.backward_pts );
}
else
{
- pts = decoder_GetDisplayDate( p_synchro->p_dec, S.current_pts + period * (S.i_n_b + 1) );
+ pts = decoder_GetDisplayDate( p_synchro->p_dec, now, S.current_pts + period * (S.i_n_b + 1) );
}
if( p_synchro->i_nb_ref < 1 )
@@ -313,7 +313,7 @@ bool decoder_SynchroChoose( decoder_synchro_t * p_synchro, int i_coding_type,
break;
case B_CODING_TYPE:
- pts = decoder_GetDisplayDate( p_synchro->p_dec, S.current_pts );
+ pts = decoder_GetDisplayDate( p_synchro->p_dec, now, S.current_pts );
if( p_synchro->i_nb_ref < 2 )
{
--
2.20.1
More information about the vlc-devel
mailing list