[vlc-devel] [PATCH 2/4] chromaprint: add libvlccore definitions
Francois Cartegnie
fcvlcdev at free.fr
Mon Feb 11 14:52:34 CET 2013
---
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 ) );
+}
+
+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 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 );
+}
--
1.7.9
More information about the vlc-devel
mailing list