[vlc-devel] [PATCH] Allow the demux to update its title list

Rémi Denis-Courmont remi at remlab.net
Thu Dec 6 08:27:02 CET 2012


Looks OK to me.

Le jeudi 6 décembre 2012 00:07:18, Denis Charmet a écrit :
> ---
>  include/vlc_input.h |    1 +
>  src/input/input.c   |   30 ++++++++++++++++++++++++++++++
>  2 files changed, 31 insertions(+)
> 
> diff --git a/include/vlc_input.h b/include/vlc_input.h
> index 7882b6c..4400304 100644
> --- a/include/vlc_input.h
> +++ b/include/vlc_input.h
> @@ -245,6 +245,7 @@ static inline void vlc_input_attachment_Delete(
> input_attachment_t *a ) #define INPUT_UPDATE_SEEKPOINT  0x0020
>  #define INPUT_UPDATE_META       0x0040
>  #define INPUT_UPDATE_SIGNAL     0x0080
> +#define INPUT_UPDATE_TITLE_LIST 0x0100
> 
>  /**
>   * This defines private core storage for an input.
> diff --git a/src/input/input.c b/src/input/input.c
> index afc01ad..bb58d84 100644
> --- a/src/input/input.c
> +++ b/src/input/input.c
> @@ -82,6 +82,7 @@ static void UpdateGenericFromAccess( input_thread_t * );
> 
>  static int  UpdateTitleSeekpointFromDemux( input_thread_t * );
>  static void UpdateGenericFromDemux( input_thread_t * );
> +static void UpdateTitleListfromDemux( input_thread_t * );
> 
>  static void MRLSections( const char *, int *, int *, int *, int *);
> 
> @@ -584,6 +585,11 @@ static void MainLoopDemux( input_thread_t *p_input,
> bool *pb_changed, bool *pb_d {
>          if( p_input->p->input.p_demux->info.i_update )
>          {
> +            if( p_input->p->input.p_demux->info.i_update &
> INPUT_UPDATE_TITLE_LIST ) +            {
> +                UpdateTitleListfromDemux( p_input );
> +                p_input->p->input.p_demux->info.i_update &=
> ~INPUT_UPDATE_TITLE_LIST; +            }
>              if( p_input->p->input.b_title_demux )
>              {
>                  i_ret = UpdateTitleSeekpointFromDemux( p_input );
> @@ -2267,6 +2273,30 @@ static void UpdateGenericFromDemux( input_thread_t
> *p_input ) p_demux->info.i_update &= ~INPUT_UPDATE_SIZE;
>  }
> 
> +static void UpdateTitleListfromDemux( input_thread_t *p_input )
> +{
> +    input_source_t *in = &p_input->p->input;
> +
> +    /* Delete the preexisting titles */
> +    if(in->i_title > 0)
> +    {
> +        for( int i = 0; i < in->i_title; i++ )
> +            vlc_input_title_Delete( in->title[i] );
> +        TAB_CLEAN( in->i_title, in->title );
> +        in->b_title_demux = false;
> +    }
> +
> +    /* Get the new title list */
> +    if( demux_Control( in->p_demux, DEMUX_GET_TITLE_INFO,
> +                       &in->title, &in->i_title,
> +                       &in->i_title_offset, &in->i_seekpoint_offset ))
> +        TAB_INIT( in->i_title, in->title );
> +    else
> +        in->b_title_demux = true;
> +
> +    InitTitle( p_input );
> +}
> +
> 
>  /*************************************************************************
> **** * Update*FromAccess:

-- 
Rémi Denis-Courmont
http://www.remlab.net/



More information about the vlc-devel mailing list