[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