[vlc-devel] [PATCH 2/4] chromaprint: add libvlccore definitions

Rémi Denis-Courmont remi at remlab.net
Mon Feb 11 17:42:42 CET 2013


Le lundi 11 février 2013 15:52:34, Francois Cartegnie a écrit :
> ---
>  include/vlc_fingerprinter.h |   93
> +++++++++++++++++++++++++++++++++++++++++++ src/Makefile.am             | 
>   2 +
>  src/libvlccore.sym          |    2 +
>  src/misc/fingerprinter.c    |   59 +++++++++++++++++++++++++++
>  4 files changed, 156 insertions(+), 0 deletions(-)
>  create mode 100644 include/vlc_fingerprinter.h
>  create mode 100644 src/misc/fingerprinter.c
> 
> diff --git a/include/vlc_fingerprinter.h b/include/vlc_fingerprinter.h
> new file mode 100644
> index 0000000..5954672
> --- /dev/null
> +++ b/include/vlc_fingerprinter.h
> @@ -0,0 +1,93 @@
> +/*************************************************************************
> **** + * vlc_fingerprinter.h: Fingerprinter abstraction layer
> +
> **************************************************************************
> *** + * Copyright (C) 2012 VLC authors and VideoLAN
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU Lesser General Public License as published
> by + * the Free Software Foundation; either version 2.1 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> License + * along with this program; if not, write to the Free Software
> Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA
> 02110-1301, USA. +
> **************************************************************************
> ***/ +
> +#ifndef VLC_FINGERPRINTER_H
> +# define VLC_FINGERPRINTER_H
> +
> +#include <vlc_common.h>
> +#include <vlc_meta.h>
> +#include <vlc_input_item.h>
> +#include <vlc_arrays.h>
> +
> +# ifdef __cplusplus
> +extern "C" {
> +# endif
> +
> +typedef struct fingerprinter_sys_t fingerprinter_sys_t;
> +
> +struct fingerprint_request_t
> +{
> +    input_item_t *p_item;
> +    unsigned int i_duration; /* track length hint in seconds, 0 if unkown
> */ +    struct
> +    {
> +        char *psz_fingerprint;
> +        vlc_array_t metas_array;
> +    } results ;
> +};
> +typedef struct fingerprint_request_t fingerprint_request_t;
> +
> +static inline fingerprint_request_t *new_fingerprint_request( input_item_t
> *p_item ) +{
> +    fingerprint_request_t *p_r =
> +            ( fingerprint_request_t * ) calloc( 1, sizeof(
> fingerprint_request_t ) ); +    if ( !p_r ) return NULL;
> +    p_r->results.psz_fingerprint = NULL;
> +    p_r->i_duration = 0;
> +    vlc_gc_incref( p_item );
> +    p_r->p_item = p_item;
> +    vlc_array_init( & p_r->results.metas_array ); /* shouldn't be needed
> */ +    return p_r;
> +}
> +
> +static inline void delete_fingerprint_request( fingerprint_request_t *p_f
> ) +{
> +    vlc_gc_decref( p_f->p_item );
> +    free( p_f->results.psz_fingerprint );
> +    for ( int i=0; i< vlc_array_count( & p_f->results.metas_array ) ; i++
> ) +        vlc_meta_Delete( (vlc_meta_t *) vlc_array_item_at_index( &
> p_f->results.metas_array, i ) ); +}

Please stick to one single naming convention.

> +
> +struct fingerprinter_thread_t
> +{
> +    VLC_COMMON_MEMBERS
> +
> +    vlc_thread_t thread;

What's that for?

> +
> +    /* Specific interfaces */
> +    fingerprinter_sys_t * p_sys;
> +
> +    module_t *   p_module;
> +    void ( *pf_run ) ( struct fingerprinter_thread_t * );
> +
> +    void ( *pf_enqueue ) ( struct fingerprinter_thread_t *f,
> fingerprint_request_t *r ); +    fingerprint_request_t * ( *pf_getresults
> ) ( struct fingerprinter_thread_t *f ); +    void ( *pf_apply ) (
> fingerprint_request_t *, int i_resultid ); +};
> +typedef struct fingerprinter_thread_t fingerprinter_thread_t;
> +
> +VLC_API fingerprinter_thread_t *fingerprinter_Create( vlc_object_t *p_this
> ); +VLC_API void fingerprinter_Destroy( fingerprinter_thread_t
> *p_fingerprint ); +
> +# ifdef __cplusplus
> +}
> +# endif
> +
> +#endif
> diff --git a/src/Makefile.am b/src/Makefile.am
> index fa283f3..ca63be5 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -77,6 +77,7 @@ pluginsinclude_HEADERS = \
>  	../include/vlc_rand.h \
>  	../include/vlc_services_discovery.h \
>  	../include/vlc_sql.h \
> +	../include/vlc_fingerprinter.h \
>  	../include/vlc_sout.h \
>  	../include/vlc_spu.h \
>  	../include/vlc_stream.h \
> @@ -471,6 +472,7 @@ SOURCES_libvlc_common = \
>  	misc/filter_chain.c \
>  	misc/http_auth.c \
>  	misc/sql.c \
> +	misc/fingerprinter.c \
>  	misc/text_style.c \
>  	misc/subpicture.c \
>  	misc/subpicture.h \
> diff --git a/src/libvlccore.sym b/src/libvlccore.sym
> index 956fc7c..41e769b 100644
> --- a/src/libvlccore.sym
> +++ b/src/libvlccore.sym
> @@ -641,3 +641,5 @@ xml_ReaderDelete
>  xml_ReaderReset
>  vlc_keycode2str
>  vlc_str2keycode
> +fingerprinter_Create
> +fingerprinter_Destroy
> diff --git a/src/misc/fingerprinter.c b/src/misc/fingerprinter.c
> new file mode 100644
> index 0000000..863c9ff
> --- /dev/null
> +++ b/src/misc/fingerprinter.c
> @@ -0,0 +1,59 @@
> +/*************************************************************************
> **** + * fingerprinter.c: Fingerprinter creator and destructor
> +
> **************************************************************************
> *** + * Copyright (C) 2012 VLC authors and VideoLAN
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU Lesser General Public License as published
> by + * the Free Software Foundation; either version 2.1 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> License + * along with this program; if not, write to the Free Software
> Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA
> 02110-1301, USA. +
> **************************************************************************
> ***/ +
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
> +#include <vlc_common.h>
> +#include <vlc_fingerprinter.h>
> +#include <vlc_modules.h>
> +#include <assert.h>
> +#include "libvlc.h"
> +
> +fingerprinter_thread_t *fingerprinter_Create( vlc_object_t *p_this )
> +{
> +    fingerprinter_thread_t *p_fingerprint;
> +
> +    p_fingerprint = ( fingerprinter_thread_t * )
> +            vlc_custom_create( p_this, sizeof( *p_fingerprint ),
> "fingerprinter" ); +    if( !p_fingerprint )
> +    {
> +        msg_Err( p_this, "unable to create fingerprinter" );
> +        return NULL;
> +    }
> +
> +    p_fingerprint->p_module = module_need( p_fingerprint, "fingerprinter",
> +                                           "acoustid", false );
> +    if( !p_fingerprint->p_module )
> +    {
> +        vlc_object_release( p_fingerprint );
> +        msg_Err( p_this, "AcoustID fingerprinter not found" );
> +        return NULL;
> +    }
> +
> +    return p_fingerprint;
> +}
> +
> +void fingerprinter_Destroy( fingerprinter_thread_t *p_fingerprint )
> +{
> +    module_unneed( p_fingerprint, p_fingerprint->p_module );
> +    vlc_object_release( p_fingerprint );
> +}

-- 
Rémi Denis-Courmont
http://www.remlab.net/



More information about the vlc-devel mailing list