[vlc-commits] fingerprinter: remove cancellation cleanup, simplify

Rémi Denis-Courmont git at videolan.org
Wed Jul 8 20:16:31 CEST 2015


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Jul  8 19:44:10 2015 +0300| [2ecaf892a50e358821072f6723a42fe7c8909892] | committer: Rémi Denis-Courmont

fingerprinter: remove cancellation cleanup, simplify

Cancellation cannot occur here.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2ecaf892a50e358821072f6723a42fe7c8909892
---

 modules/misc/fingerprinter.c |   96 ++++++++++++++++++------------------------
 1 file changed, 41 insertions(+), 55 deletions(-)

diff --git a/modules/misc/fingerprinter.c b/modules/misc/fingerprinter.c
index 229a1d9..d7b24b1 100644
--- a/modules/misc/fingerprinter.c
+++ b/modules/misc/fingerprinter.c
@@ -55,11 +55,6 @@ struct fingerprinter_sys_t
         vlc_array_t         *queue;
     } processing;
 
-    /* tracked in sys for cancelability */
-    input_item_t            *p_item;
-    input_thread_t          *p_input;
-    chromaprint_fingerprint_t chroma_fingerprint;
-
     /* clobberable by cleanups */
     int                     i_cancel_state;
     int                     i;
@@ -132,30 +127,12 @@ static void ApplyResult( fingerprint_request_t *p_r, int i_resultid )
     vlc_mutex_unlock( &p_item->lock );
 }
 
-static void cancelDoFingerprint( void *p_arg )
-{
-    fingerprinter_sys_t *p_sys = ( fingerprinter_sys_t * ) p_arg;
-    if ( p_sys->p_input )
-    {
-        input_Close( p_sys->p_input );
-    }
-    /* cleanup temporary result */
-    if ( p_sys->chroma_fingerprint.psz_fingerprint )
-        FREENULL( p_sys->chroma_fingerprint.psz_fingerprint );
-    if ( p_sys->p_item )
-        input_item_Release( p_sys->p_item );
-}
-
-static void DoFingerprint( vlc_object_t *p_this, fingerprinter_sys_t *p_sys,
-                           acoustid_fingerprint_t *fp, const char *psz_uri )
+static void DoFingerprint( vlc_object_t *p_this, acoustid_fingerprint_t *fp,
+                           const char *psz_uri )
 {
-    p_sys->p_input = NULL;
-    p_sys->p_item = NULL;
-    p_sys->chroma_fingerprint.psz_fingerprint = NULL;
-    vlc_cleanup_push( cancelDoFingerprint, p_sys );
-
-    p_sys->p_item = input_item_New( NULL, NULL );
-    if ( ! p_sys->p_item ) goto end;
+    input_item_t *p_item = input_item_New( NULL, NULL );
+    if ( unlikely(p_item == NULL) )
+         return;
 
     char *psz_sout_option;
     /* Note: need at -max- 2 channels, but we can't guess it before playing */
@@ -163,40 +140,49 @@ static void DoFingerprint( vlc_object_t *p_this, fingerprinter_sys_t *p_sys,
     if ( asprintf( &psz_sout_option,
                    "sout=#transcode{acodec=%s,channels=2}:chromaprint",
                    ( VLC_CODEC_S16L == VLC_CODEC_S16N ) ? "s16l" : "s16b" )
-         == -1 ) goto end;
-    input_item_AddOption( p_sys->p_item, psz_sout_option, VLC_INPUT_OPTION_TRUSTED );
+         == -1 )
+    {
+        input_item_Release( p_item );
+        return;
+    }
+
+    input_item_AddOption( p_item, psz_sout_option, VLC_INPUT_OPTION_TRUSTED );
     free( psz_sout_option );
-    input_item_AddOption( p_sys->p_item, "vout=dummy", VLC_INPUT_OPTION_TRUSTED );
-    input_item_AddOption( p_sys->p_item, "aout=dummy", VLC_INPUT_OPTION_TRUSTED );
+    input_item_AddOption( p_item, "vout=dummy", VLC_INPUT_OPTION_TRUSTED );
+    input_item_AddOption( p_item, "aout=dummy", VLC_INPUT_OPTION_TRUSTED );
     if ( fp->i_duration )
     {
-        if ( asprintf( &psz_sout_option, "stop-time=%u", fp->i_duration ) == -1 ) goto end;
-        input_item_AddOption( p_sys->p_item, psz_sout_option, VLC_INPUT_OPTION_TRUSTED );
+        if ( asprintf( &psz_sout_option, "stop-time=%u", fp->i_duration ) == -1 )
+        {
+            input_item_Release( p_item );
+            return;
+        }
+        input_item_AddOption( p_item, psz_sout_option, VLC_INPUT_OPTION_TRUSTED );
         free( psz_sout_option );
     }
-    input_item_SetURI( p_sys->p_item, psz_uri ) ;
+    input_item_SetURI( p_item, psz_uri ) ;
 
-    p_sys->p_input = input_Create( p_this, p_sys->p_item, "fingerprinter", NULL );
-    if ( p_sys->p_input )
-    {
-        p_sys->chroma_fingerprint.i_duration = fp->i_duration;
-        var_Create( p_sys->p_input, "fingerprint-data", VLC_VAR_ADDRESS );
-        var_SetAddress( p_sys->p_input, "fingerprint-data", & p_sys->chroma_fingerprint );
+    input_thread_t *p_input = input_Create( p_this, p_item, "fingerprinter", NULL );
+    input_item_Release( p_item );
 
-        input_Start( p_sys->p_input );
-        input_Stop( p_sys->p_input );
-        input_Close( p_sys->p_input );
-        p_sys->p_input = NULL;
+    if( p_input == NULL )
+        return;
 
-        if ( p_sys->chroma_fingerprint.psz_fingerprint )
-        {
-            fp->psz_fingerprint = strdup( p_sys->chroma_fingerprint.psz_fingerprint );
-            if ( ! fp->i_duration ) /* had not given hint */
-                fp->i_duration = p_sys->chroma_fingerprint.i_duration;
-        }
-    }
-end:
-    vlc_cleanup_run( );
+    chromaprint_fingerprint_t chroma_fingerprint;
+
+    chroma_fingerprint.psz_fingerprint = NULL;
+    chroma_fingerprint.i_duration = fp->i_duration;
+
+    var_Create( p_input, "fingerprint-data", VLC_VAR_ADDRESS );
+    var_SetAddress( p_input, "fingerprint-data", &chroma_fingerprint );
+
+    input_Start( p_input );
+    input_Stop( p_input );
+    input_Close( p_input );
+
+    fp->psz_fingerprint = chroma_fingerprint.psz_fingerprint;
+    if( !fp->i_duration ) /* had not given hint */
+        fp->i_duration = chroma_fingerprint.i_duration;
 }
 
 /*****************************************************************************
@@ -318,7 +304,7 @@ static void *Run( void *opaque )
                 if ( p_data->i_duration )
                      acoustid_print.i_duration = p_data->i_duration;
 
-                DoFingerprint( VLC_OBJECT(p_fingerprinter), p_sys,
+                DoFingerprint( VLC_OBJECT(p_fingerprinter),
                                &acoustid_print, psz_uri );
                 free( psz_uri );
 



More information about the vlc-commits mailing list