Browse Source

player: add support for video delay

Thomas Guillem 5 years ago
committed by Alexandre Janniaux
parent
commit
e6b3a0a687
  1. 20
      include/vlc_player.h
  2. 9
      src/input/es_out.c
  3. 3
      src/input/input.c
  4. 2
      src/player/player.c

20
include/vlc_player.h

@ -1979,6 +1979,26 @@ vlc_player_SetAudioDelay(vlc_player_t *player, vlc_tick_t delay,
vlc_player_SetCategoryDelay(player, AUDIO_ES, delay, whence);
}
/**
* Helper to get the audio delay
*/
static inline vlc_tick_t
vlc_player_GetVideoDelay(vlc_player_t *player)
{
return vlc_player_GetCategoryDelay(player, VIDEO_ES);
}
/**
* Helper to set the audio delay
*/
static inline void
vlc_player_SetVideoDelay(vlc_player_t *player, vlc_tick_t delay,
enum vlc_player_whence whence)
{
vlc_player_SetCategoryDelay(player, VIDEO_ES, delay, whence);
}
/**
* Helper to get the subtitle delay
*/

9
src/input/es_out.c

@ -203,6 +203,7 @@ typedef struct
/* delay */
vlc_tick_t i_audio_delay;
vlc_tick_t i_spu_delay;
vlc_tick_t i_video_delay;
/* Clock configuration */
vlc_tick_t i_pts_delay;
@ -842,7 +843,7 @@ static void EsOutSetEsDelay(es_out_t *out, es_out_id_t *es, vlc_tick_t delay)
{
es_out_sys_t *p_sys = container_of(out, es_out_sys_t, out);
assert(es->fmt.i_cat == AUDIO_ES || es->fmt.i_cat == SPU_ES);
assert(es->fmt.i_cat == AUDIO_ES || es->fmt.i_cat == SPU_ES || es->fmt.i_cat == VIDEO_ES);
es->delay = delay;
@ -855,6 +856,8 @@ static void EsOutSetEsDelay(es_out_t *out, es_out_id_t *es, vlc_tick_t delay)
static void EsOutSetDelay( es_out_t *out, int i_cat, vlc_tick_t i_delay )
{
fprintf(stderr, "EsOutSetDelay(%d): %" PRId64 "\n", i_cat, i_delay);
es_out_sys_t *p_sys = container_of(out, es_out_sys_t, out);
es_out_id_t *es;
@ -862,6 +865,8 @@ static void EsOutSetDelay( es_out_t *out, int i_cat, vlc_tick_t i_delay )
p_sys->i_audio_delay = i_delay;
else if( i_cat == SPU_ES )
p_sys->i_spu_delay = i_delay;
else if( i_cat == VIDEO_ES )
p_sys->i_video_delay = i_delay;
foreach_es_then_es_slaves(es)
EsOutDecoderChangeDelay(out, es);
@ -1235,6 +1240,8 @@ static void EsOutDecoderChangeDelay( es_out_t *out, es_out_id_t *p_es )
i_delay = p_sys->i_audio_delay;
else if( p_es->fmt.i_cat == SPU_ES )
i_delay = p_sys->i_spu_delay;
else if( p_es->fmt.i_cat == VIDEO_ES )
i_delay = p_sys->i_video_delay;
else
return;

3
src/input/input.c

@ -2193,7 +2193,8 @@ static bool Control( input_thread_t *p_input,
case INPUT_CONTROL_SET_CATEGORY_DELAY:
assert(param.cat_delay.cat == AUDIO_ES
|| param.cat_delay.cat == SPU_ES);
|| param.cat_delay.cat == SPU_ES
|| param.cat_delay.cat == VIDEO_ES);
es_out_SetDelay(priv->p_es_out_display,
param.cat_delay.cat, param.cat_delay.delay);
break;

2
src/player/player.c

@ -1666,7 +1666,7 @@ vlc_player_SetCategoryDelay(vlc_player_t *player, enum es_format_category_e cat,
if (!input)
return VLC_EGENERIC;
if (cat != AUDIO_ES && cat != SPU_ES)
if (cat != AUDIO_ES && cat != SPU_ES && cat != VIDEO_ES)
return VLC_EGENERIC;
vlc_tick_t *cat_delay = &input->cat_delays[cat];

Loading…
Cancel
Save