[vlc-devel] [PATCH 1/3] input: add input_item_browsable_e to input_item

Thomas Guillem thomas at gllm.fr
Tue Feb 3 14:55:35 CET 2015



On Mon, Feb 2, 2015, at 17:45, Thomas Guillem wrote:
> Automatically set to ITEM_BROWSABLE when the file type is a directory or
> a
> playlist or during a parse if the demux return DEMUX_IS_PLAYLIST.
> 
> Add input_item_NewWithTypeExt function that can force
> input_item_browsable_e.
> ---
>  include/vlc_input_item.h | 16 ++++++++++++++++
>  src/input/input.c        |  6 ++++++
>  src/input/item.c         | 28 +++++++++++++++++++++++++---
>  src/libvlccore.sym       |  1 +
>  4 files changed, 48 insertions(+), 3 deletions(-)
> 
> diff --git a/include/vlc_input_item.h b/include/vlc_input_item.h
> index 8502dd3..2a9b13f 100644
> --- a/include/vlc_input_item.h
> +++ b/include/vlc_input_item.h
> @@ -85,6 +85,7 @@ struct input_item_t
>      vlc_mutex_t lock;                 /**< Lock for the item */
>  
>      uint8_t     i_type;              /**< Type (file, disc, ... see
>      input_item_type_e) */
> +    uint8_t     i_browsable;         /**< Browsable (see
> input_item_browsable_e) */
>      bool        b_error_when_reading;/**< Error When Reading */
>  };
>  
> @@ -106,6 +107,13 @@ enum input_item_type_e
>      ITEM_TYPE_NUMBER
>  };
>  
> +enum input_item_browsable_e
> +{
> +    ITEM_BROWSABLE_UNKNOWN,
> +    ITEM_BROWSABLE,
> +    ITEM_NOT_BROWSABLE,
> +};
> +
>  struct input_item_node_t
>  {
>      input_item_t *         p_item;
> @@ -258,6 +266,14 @@ VLC_API input_item_t * input_item_NewWithType( const
> char *psz_uri, const char *
>  /**
>   * This function creates a new input_item_t with the provided
>   information.
>   *
> + * XXX You may also use input_item_New, input_item_NewExt, or
> + * input_item_NewWithType as they need less arguments.
> + */
> +VLC_API input_item_t * input_item_NewWithTypeExt( const char *psz_uri,
> const char *psz_name, int i_options, const char *const *ppsz_options,
> unsigned i_option_flags, mtime_t i_duration, int i_type, int i_browsable
> ) VLC_USED;
> +
> +/**
> + * This function creates a new input_item_t with the provided
> information.
> + *
>   * Provided for convenience.
>   */
>  VLC_API input_item_t * input_item_NewExt( const char *psz_uri, const
>  char *psz_name, int i_options, const char *const *ppsz_options, unsigned
>  i_option_flags, mtime_t i_duration ) VLC_USED;
> diff --git a/src/input/input.c b/src/input/input.c
> index 4e9fb49..a0d6659 100644
> --- a/src/input/input.c
> +++ b/src/input/input.c
> @@ -202,7 +202,13 @@ int input_Preparse( vlc_object_t *p_parent,
> input_item_t *p_item )
>                              &b_is_playlist ) )
>              b_is_playlist = false;
>          if( b_is_playlist )
> +        {
> +            vlc_mutex_lock( &p_input->p->p_item->lock );
> +            p_input->p->p_item->i_browsable = ITEM_BROWSABLE;
> +            vlc_mutex_unlock( &p_input->p->p_item->lock );
> +
>              MainLoop( p_input, false );
> +        }
>          End( p_input );
>      }
>  
> diff --git a/src/input/item.c b/src/input/item.c
> index 33c7b26..cb03f90 100644
> --- a/src/input/item.c
> +++ b/src/input/item.c
> @@ -824,9 +824,10 @@ input_item_t *input_item_NewExt( const char
> *psz_uri,
>  
>  
>  input_item_t *
> -input_item_NewWithType( const char *psz_uri, const char *psz_name,
> -                        int i_options, const char *const *ppsz_options,
> -                        unsigned flags, mtime_t duration, int type )
> +input_item_NewWithTypeExt( const char *psz_uri, const char *psz_name,
> +                           int i_options, const char *const
> *ppsz_options,
> +                           unsigned flags, mtime_t duration, int type,
> +                           int browsable )
>  {
>      static atomic_uint last_input_id = ATOMIC_VAR_INIT(0);
>  
> @@ -877,10 +878,31 @@ input_item_NewWithType( const char *psz_uri, const
> char *psz_name,
>  
>      if( type != ITEM_TYPE_UNKNOWN )
>          p_input->i_type = type;
> +    if( browsable == ITEM_BROWSABLE_UNKNOWN )
> +    {
> +        if( p_input->i_type == ITEM_TYPE_DIRECTORY
> +            || p_input->i_type == ITEM_TYPE_PLAYLIST )

Won't build because of stray '\302' character (added at the last time
when doing cosmetics).

> +            p_input->i_browsable = ITEM_BROWSABLE;
> +        else if( p_input->i_type == ITEM_TYPE_FILE )
> +            p_input->i_browsable = ITEM_NOT_BROWSABLE;
> +        else
> +            p_input->i_browsable = ITEM_BROWSABLE_UNKNOWN;
> +    } else
> +        p_input->i_browsable = browsable;
>      p_input->b_error_when_reading = false;
>      return p_input;
>  }
>  
> +input_item_t *
> +input_item_NewWithType( const char *psz_uri, const char *psz_name,
> +                        int i_options, const char *const *ppsz_options,
> +                        unsigned flags, mtime_t duration, int type )
> +{
> +    return input_item_NewWithTypeExt( psz_uri, psz_name, i_options,
> +                                      ppsz_options, flags, duration,
> type,
> +                                      ITEM_BROWSABLE_UNKNOWN );
> +}
> +
>  input_item_t *input_item_Copy( input_item_t *p_input )
>  {
>      vlc_mutex_lock( &p_input->lock );
> diff --git a/src/libvlccore.sym b/src/libvlccore.sym
> index 7f06ed6..42496db 100644
> --- a/src/libvlccore.sym
> +++ b/src/libvlccore.sym
> @@ -199,6 +199,7 @@ input_item_MetaMatch
>  input_item_MergeInfos
>  input_item_NewExt
>  input_item_NewWithType
> +input_item_NewWithTypeExt
>  input_item_Hold
>  input_item_Release
>  input_item_node_AppendItem
> -- 
> 2.1.3
> 



More information about the vlc-devel mailing list