[vlc-devel] [PATCH] Changes to libvlc required for plugin API improvement (input.meta method)
jean-michel Lambert
jean-michel.lambert7 at wanadoo.fr
Fri Dec 23 19:15:53 CET 2011
thanks Pierre, I was reinventing the wheel. Have recoded and will submit
a patch for the plugin now.
cheers, JM
On 23/12/2011 18:00, Pierre d'Herbemont wrote:
> 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