[vlc-devel] [PATCH] Changes to libvlc required for plugin API improvement (input.meta method)

Pierre d'Herbemont pdherbemont at gmail.com
Fri Dec 23 18:00:49 CET 2011


Hi,

The same functionality can be achieved by:
m = libvlc_media_player_get_media(mp);
libvlc_media_get_meta(m);

That means that, there is no need to:
1- modify libvlccore
2- require a running input thread to retrieve the meta data

Also the prototype of libvlc_media_get_meta() is better, as it takes a meta data key instead of an index.

Finally, adding a wrapper around the above function calls seems like a better approach... If you thinks such a wrapper is valuable.

Pierre.

On Dec 22, 2011, at 9:40, JM Lambert <jeanmichel.lambert7 at gmail.com> wrote:

> ---
> include/vlc/libvlc_media_player.h |    8 ++++++++
> include/vlc_input.h               |    2 ++
> lib/libvlc.sym                    |    1 +
> lib/media_player.c                |   19 +++++++++++++++++++
> src/input/control.c               |   12 ++++++++++++
> 5 files changed, 42 insertions(+), 0 deletions(-)
> 
> diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h
> index 152a95d..d361ce2 100644
> --- a/include/vlc/libvlc_media_player.h
> +++ b/include/vlc/libvlc_media_player.h
> @@ -756,6 +756,14 @@ LIBVLC_API int libvlc_media_player_set_rate( libvlc_media_player_t *p_mi, float
> LIBVLC_API libvlc_state_t libvlc_media_player_get_state( libvlc_media_player_t *p_mi );
> 
> /**
> + * Get media meta
> + *
> + * \param p_mi the Media Player
> + * \return ith elemet of meta structure
> + */
> +LIBVLC_API char* libvlc_media_player_get_meta( libvlc_media_player_t *p_mi, int i);
> +
> +/**
>  * Get movie fps rate
>  *
>  * \param p_mi the Media Player
> diff --git a/include/vlc_input.h b/include/vlc_input.h
> index 7d8320a..accb384 100644
> --- a/include/vlc_input.h
> +++ b/include/vlc_input.h
> @@ -516,6 +516,8 @@ enum input_query_e
>     /* External clock managments */
>     INPUT_GET_PCR_SYSTEM,   /* arg1=mtime_t *, arg2=mtime_t *       res=can fail */
>     INPUT_MODIFY_PCR_SYSTEM,/* arg1=int absolute, arg2=mtime_t      res=can fail */
> +    INPUT_GET_META,/* arg1=vlc_meta_t *      res=can fail */
> +
> };
> 
> /** @}*/
> diff --git a/lib/libvlc.sym b/lib/libvlc.sym
> index 45327d5..2607f99 100644
> --- a/lib/libvlc.sym
> +++ b/lib/libvlc.sym
> @@ -120,6 +120,7 @@ libvlc_media_player_get_agl
> libvlc_media_player_get_chapter
> libvlc_media_player_get_chapter_count
> libvlc_media_player_get_chapter_count_for_title
> +libvlc_media_player_get_meta
> libvlc_media_player_get_fps
> libvlc_media_player_get_hwnd
> libvlc_media_player_get_length
> diff --git a/lib/media_player.c b/lib/media_player.c
> index b426637..1978e72 100644
> --- a/lib/media_player.c
> +++ b/lib/media_player.c
> @@ -1217,6 +1217,25 @@ void libvlc_media_player_previous_chapter( libvlc_media_player_t *p_mi )
>     vlc_object_release( p_input_thread );
> }
> 
> +char * libvlc_media_player_get_meta( libvlc_media_player_t *p_mi , int index)
> +{
> +    input_thread_t *p_input_thread = libvlc_get_input_thread ( p_mi );
> +    vlc_meta_t *p_meta;
> +
> +    if( p_input_thread )
> +    {
> +        if( input_Control( p_input_thread, INPUT_GET_META, &p_meta ) )
> +                vlc_meta_Set( p_meta, vlc_meta_Title, "unknown" );
> +        vlc_object_release( p_input_thread );
> +        if (vlc_meta_Get(p_meta,index)) return vlc_meta_Get(p_meta,index);
> +        else return "";
> +    }
> +    else
> +    {
> +        return "";
> +    }
> +}
> +
> float libvlc_media_player_get_fps( libvlc_media_player_t *p_mi )
> {
>     input_thread_t *p_input_thread = libvlc_get_input_thread ( p_mi );
> diff --git a/src/input/control.c b/src/input/control.c
> index d50ea97..4e95661 100644
> --- a/src/input/control.c
> +++ b/src/input/control.c
> @@ -65,6 +65,8 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
>     seekpoint_t *p_bkmk, ***ppp_bkmk;
>     int i_bkmk = 0;
>     int *pi_bkmk;
> +    vlc_meta_t ** p_meta;
> +
> 
>     int i_int, *pi_int;
>     bool b_bool, *pb_bool;
> @@ -357,6 +359,16 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
>             vlc_mutex_unlock( &p_input->p->p_item->lock );
>             return VLC_SUCCESS;
> 
> +        case INPUT_GET_META:
> +            p_meta = (vlc_meta_t **)va_arg( args, vlc_meta_t ** );
> +
> +            vlc_mutex_lock( &p_input->p->p_item->lock );
> +            input_item_t *p_item = input_GetItem( p_input );
> +            *p_meta = p_item->p_meta;
> +            vlc_mutex_unlock( &p_input->p->p_item->lock );
> +            return VLC_SUCCESS;
> +
> +
>         case INPUT_ADD_SLAVE:
>             psz = (char*)va_arg( args, char * );
>             if( psz && *psz )
> -- 
> 1.7.5.4
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> http://mailman.videolan.org/listinfo/vlc-devel



More information about the vlc-devel mailing list