[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