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

Francois Cartegnie fcvlcdev at free.fr
Sat Feb 16 16:18:29 CET 2013


---
 include/vlc_fingerprinter.h |   91 +++++++++++++++++++++++++++++++++++++++++++
 src/Makefile.am             |    2 +
 src/libvlccore.sym          |    2 +
 src/misc/fingerprinter.c    |   58 +++++++++++++++++++++++++++
 4 files changed, 153 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..9bbb5ca
--- /dev/null
+++ b/include/vlc_fingerprinter.h
@@ -0,0 +1,91 @@
+/*****************************************************************************
+ * 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 *fingerprint_request_New( 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 fingerprint_request_Delete( 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
+
+    /* 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..9e70755
--- /dev/null
+++ b/src/misc/fingerprinter.c
@@ -0,0 +1,58 @@
+/*****************************************************************************
+ * 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 "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