[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