vlc | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Mon Nov 19 19:34:24 2012 +0100| [b4b7f5db5f45600dce718eb32f50eb048990cc55] | committer: Francois Cartegnie
chromaprint: add libvlccore definitions > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b4b7f5db5f45600dce718eb32f50eb048990cc55 --- include/vlc_fingerprinter.h | 93 +++++++++++++++++++++++++++++++++++++++++++ src/Makefile.am | 2 + src/libvlccore.sym | 2 + src/misc/fingerprinter.c | 59 +++++++++++++++++++++++++++ 4 files changed, 156 insertions(+) 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 ) ); +} + +struct fingerprinter_thread_t +{ + VLC_COMMON_MEMBERS + + vlc_thread_t thread; + + /* 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 f87581d..04f4e4a 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 \ @@ -477,6 +478,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 f917612..bd143bc 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -654,3 +654,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 ); +} _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org http://mailman.videolan.org/listinfo/vlc-commits