Commit 7ccd46a8 authored by Laurent Aimar's avatar Laurent Aimar

Privatized i_pts_delay (input_thread_t).

parent 571abf2d
...@@ -415,9 +415,6 @@ struct input_thread_t ...@@ -415,9 +415,6 @@ struct input_thread_t
bool b_can_pace_control; bool b_can_pace_control;
int64_t i_time; /* Current time */ int64_t i_time; /* Current time */
/* Internal caching common to all inputs */
mtime_t i_pts_delay;
/* All other data is input_thread is PRIVATE. You can't access it /* All other data is input_thread is PRIVATE. You can't access it
* outside of src/input */ * outside of src/input */
input_thread_private_t *p; input_thread_private_t *p;
......
...@@ -653,7 +653,7 @@ static mtime_t DecoderGetDisplayDate( decoder_t *p_dec, mtime_t i_ts ) ...@@ -653,7 +653,7 @@ static mtime_t DecoderGetDisplayDate( decoder_t *p_dec, mtime_t i_ts )
if( !p_owner->p_clock || !i_ts ) if( !p_owner->p_clock || !i_ts )
return i_ts; return i_ts;
return input_clock_GetTS( p_owner->p_clock, NULL, p_owner->p_input->i_pts_delay, i_ts ); return input_clock_GetTS( p_owner->p_clock, NULL, p_owner->p_input->p->i_pts_delay, i_ts );
} }
static int DecoderGetDisplayRate( decoder_t *p_dec ) static int DecoderGetDisplayRate( decoder_t *p_dec )
{ {
...@@ -1044,7 +1044,7 @@ static void DecoderFixTs( decoder_t *p_dec, mtime_t *pi_ts0, mtime_t *pi_ts1, ...@@ -1044,7 +1044,7 @@ static void DecoderFixTs( decoder_t *p_dec, mtime_t *pi_ts0, mtime_t *pi_ts1,
vlc_assert_locked( &p_owner->lock ); vlc_assert_locked( &p_owner->lock );
const mtime_t i_ts_delay = p_owner->p_input->i_pts_delay; const mtime_t i_ts_delay = p_owner->p_input->p->i_pts_delay;
const mtime_t i_es_delay = p_owner->i_ts_delay; const mtime_t i_es_delay = p_owner->i_ts_delay;
if( p_clock ) if( p_clock )
......
...@@ -545,7 +545,7 @@ static void EsOutChangePause( es_out_t *out, bool b_paused, mtime_t i_date ) ...@@ -545,7 +545,7 @@ static void EsOutChangePause( es_out_t *out, bool b_paused, mtime_t i_date )
if( !i_ret ) if( !i_ret )
{ {
/* FIXME pcr != exactly what wanted */ /* FIXME pcr != exactly what wanted */
const mtime_t i_used = /*(i_stream_duration - p_sys->p_input->i_pts_delay)*/ p_sys->i_buffering_extra_system - p_sys->i_buffering_extra_initial; const mtime_t i_used = /*(i_stream_duration - p_sys->p_input->p->i_pts_delay)*/ p_sys->i_buffering_extra_system - p_sys->i_buffering_extra_initial;
i_date -= i_used; i_date -= i_used;
} }
p_sys->i_buffering_extra_initial = 0; p_sys->i_buffering_extra_initial = 0;
...@@ -622,7 +622,7 @@ static void EsOutDecodersStopBuffering( es_out_t *out, bool b_forced ) ...@@ -622,7 +622,7 @@ static void EsOutDecodersStopBuffering( es_out_t *out, bool b_forced )
if( p_sys->i_preroll_end >= 0 ) if( p_sys->i_preroll_end >= 0 )
i_preroll_duration = __MAX( p_sys->i_preroll_end - i_stream_start, 0 ); i_preroll_duration = __MAX( p_sys->i_preroll_end - i_stream_start, 0 );
const mtime_t i_buffering_duration = p_sys->p_input->i_pts_delay + const mtime_t i_buffering_duration = p_sys->p_input->p->i_pts_delay +
i_preroll_duration + i_preroll_duration +
p_sys->i_buffering_extra_stream - p_sys->i_buffering_extra_initial; p_sys->i_buffering_extra_stream - p_sys->i_buffering_extra_initial;
...@@ -787,7 +787,7 @@ static void EsOutFrameNext( es_out_t *out ) ...@@ -787,7 +787,7 @@ static void EsOutFrameNext( es_out_t *out )
if( i_ret ) if( i_ret )
return; return;
p_sys->i_buffering_extra_initial = 1 + i_stream_duration - p_sys->p_input->i_pts_delay; /* FIXME < 0 ? */ p_sys->i_buffering_extra_initial = 1 + i_stream_duration - p_sys->p_input->p->i_pts_delay; /* FIXME < 0 ? */
p_sys->i_buffering_extra_system = p_sys->i_buffering_extra_system =
p_sys->i_buffering_extra_stream = p_sys->i_buffering_extra_initial; p_sys->i_buffering_extra_stream = p_sys->i_buffering_extra_initial;
} }
...@@ -842,7 +842,7 @@ static mtime_t EsOutGetBuffering( es_out_t *out ) ...@@ -842,7 +842,7 @@ static mtime_t EsOutGetBuffering( es_out_t *out )
} }
const mtime_t i_consumed = i_system_duration * INPUT_RATE_DEFAULT / p_sys->i_rate - i_stream_duration; const mtime_t i_consumed = i_system_duration * INPUT_RATE_DEFAULT / p_sys->i_rate - i_stream_duration;
i_delay = p_sys->p_input->i_pts_delay - i_consumed; i_delay = p_sys->p_input->p->i_pts_delay - i_consumed;
} }
if( i_delay < 0 ) if( i_delay < 0 )
return 0; return 0;
......
...@@ -183,7 +183,7 @@ static input_thread_t *Create( vlc_object_t *p_parent, input_item_t *p_item, ...@@ -183,7 +183,7 @@ static input_thread_t *Create( vlc_object_t *p_parent, input_item_t *p_item,
p_input->p->p_es_out = NULL; p_input->p->p_es_out = NULL;
p_input->p->p_sout = NULL; p_input->p->p_sout = NULL;
p_input->p->b_out_pace_control = false; p_input->p->b_out_pace_control = false;
p_input->i_pts_delay = 0; p_input->p->i_pts_delay = 0;
p_input->p->i_cr_average = 0; p_input->p->i_cr_average = 0;
vlc_gc_incref( p_item ); /* Released in Destructor() */ vlc_gc_incref( p_item ); /* Released in Destructor() */
...@@ -906,17 +906,17 @@ static void InitTitle( input_thread_t * p_input ) ...@@ -906,17 +906,17 @@ static void InitTitle( input_thread_t * p_input )
p_input->p->b_can_rate_control = p_master->b_can_rate_control; p_input->p->b_can_rate_control = p_master->b_can_rate_control;
/* Fix pts delay */ /* Fix pts delay */
if( p_input->i_pts_delay < 0 ) if( p_input->p->i_pts_delay < 0 )
p_input->i_pts_delay = 0; p_input->p->i_pts_delay = 0;
/* If the desynchronisation requested by the user is < 0, we need to /* If the desynchronisation requested by the user is < 0, we need to
* cache more data. */ * cache more data. */
const int i_desynch = var_GetInteger( p_input, "audio-desync" ); const int i_desynch = var_GetInteger( p_input, "audio-desync" );
if( i_desynch < 0 ) if( i_desynch < 0 )
p_input->i_pts_delay -= i_desynch * 1000; p_input->p->i_pts_delay -= i_desynch * 1000;
/* Update cr_average depending on the caching */ /* Update cr_average depending on the caching */
p_input->p->i_cr_average *= (10 * p_input->i_pts_delay / 200000); p_input->p->i_cr_average *= (10 * p_input->p->i_pts_delay / 200000);
p_input->p->i_cr_average /= 10; p_input->p->i_cr_average /= 10;
if( p_input->p->i_cr_average < 10 ) if( p_input->p->i_cr_average < 10 )
p_input->p->i_cr_average = 10; p_input->p->i_cr_average = 10;
...@@ -2344,7 +2344,7 @@ static int InputSourceInit( input_thread_t *p_input, ...@@ -2344,7 +2344,7 @@ static int InputSourceInit( input_thread_t *p_input,
/* Get infos from access_demux */ /* Get infos from access_demux */
demux_Control( in->p_demux, demux_Control( in->p_demux,
DEMUX_GET_PTS_DELAY, &i_pts_delay ); DEMUX_GET_PTS_DELAY, &i_pts_delay );
p_input->i_pts_delay = __MAX( p_input->i_pts_delay, i_pts_delay ); p_input->p->i_pts_delay = __MAX( p_input->p->i_pts_delay, i_pts_delay );
in->b_title_demux = true; in->b_title_demux = true;
if( demux_Control( in->p_demux, DEMUX_GET_TITLE_INFO, if( demux_Control( in->p_demux, DEMUX_GET_TITLE_INFO,
...@@ -2418,7 +2418,7 @@ static int InputSourceInit( input_thread_t *p_input, ...@@ -2418,7 +2418,7 @@ static int InputSourceInit( input_thread_t *p_input,
{ {
access_Control( in->p_access, access_Control( in->p_access,
ACCESS_GET_PTS_DELAY, &i_pts_delay ); ACCESS_GET_PTS_DELAY, &i_pts_delay );
p_input->i_pts_delay = __MAX( p_input->i_pts_delay, i_pts_delay ); p_input->p->i_pts_delay = __MAX( p_input->p->i_pts_delay, i_pts_delay );
in->b_title_demux = false; in->b_title_demux = false;
if( access_Control( in->p_access, ACCESS_GET_TITLE_INFO, if( access_Control( in->p_access, ACCESS_GET_TITLE_INFO,
......
...@@ -80,6 +80,9 @@ struct input_thread_private_t ...@@ -80,6 +80,9 @@ struct input_thread_private_t
bool b_can_rate_control; bool b_can_rate_control;
double f_fps; double f_fps;
/* Internal caching common to all sources */
mtime_t i_pts_delay;
/* Current state */ /* Current state */
int i_rate; int i_rate;
bool b_recording; bool b_recording;
......
...@@ -777,7 +777,7 @@ static int EsDelayCallback ( vlc_object_t *p_this, char const *psz_cmd, ...@@ -777,7 +777,7 @@ static int EsDelayCallback ( vlc_object_t *p_this, char const *psz_cmd,
/* Change i_pts_delay to make sure es are decoded in time */ /* Change i_pts_delay to make sure es are decoded in time */
if( newval.i_int < 0 || oldval.i_int < 0 ) if( newval.i_int < 0 || oldval.i_int < 0 )
{ {
p_input->i_pts_delay -= newval.i_int - oldval.i_int; p_input->p->i_pts_delay -= newval.i_int - oldval.i_int;
} }
input_ControlPush( p_input, INPUT_CONTROL_SET_AUDIO_DELAY, &newval ); input_ControlPush( p_input, INPUT_CONTROL_SET_AUDIO_DELAY, &newval );
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment