[vlc-commits] [Git][videolan/vlc][master] 2 commits: fingerprinter: move `chroma_fingerprint` from stack to the module structure

Steve Lhomme (@robUx4) gitlab at videolan.org
Sat May 30 17:37:56 UTC 2026



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
206bd508 by Fatih Uzunoglu at 2026-05-30T17:26:53+00:00
fingerprinter: move `chroma_fingerprint` from stack to the module structure

This is done because chromaprint may access the variable after `DoFingerprint()`
returns (observed when fingerprinting is aborted).

- - - - -
310220af by Fatih Uzunoglu at 2026-05-30T17:26:53+00:00
fingerprinter: set `fingerprint-data` in `Open()` instead of `DoFingerprint()`

- - - - -


1 changed file:

- modules/misc/fingerprinter.c


Changes:

=====================================
modules/misc/fingerprinter.c
=====================================
@@ -46,6 +46,7 @@ struct fingerprinter_sys_t
     vlc_thread_t thread;
     vlc_player_t *player;
     vlc_player_listener_id *listener_id;
+    chromaprint_fingerprint_t chroma_fingerprint;
 
     atomic_bool abort;
 
@@ -184,13 +185,8 @@ static void DoFingerprint( fingerprinter_thread_t *p_fingerprinter,
     }
     input_item_SetURI( p_item, psz_uri ) ;
 
-    chromaprint_fingerprint_t chroma_fingerprint;
-
-    chroma_fingerprint.psz_fingerprint = NULL;
-    chroma_fingerprint.i_duration = fp->i_duration;
-
-    var_Create( p_fingerprinter, "fingerprint-data", VLC_VAR_ADDRESS );
-    var_SetAddress( p_fingerprinter, "fingerprint-data", &chroma_fingerprint );
+    p_fingerprinter->p_sys->chroma_fingerprint.psz_fingerprint = NULL;
+    p_fingerprinter->p_sys->chroma_fingerprint.i_duration = fp->i_duration;
 
     vlc_player_t *player = p_fingerprinter->p_sys->player;
     vlc_player_Lock(player);
@@ -208,9 +204,13 @@ static void DoFingerprint( fingerprinter_thread_t *p_fingerprinter,
             vlc_player_CondWait(player,
                                 &p_fingerprinter->p_sys->processing.cond);
 
-        fp->psz_fingerprint = chroma_fingerprint.psz_fingerprint;
-        if( !fp->i_duration ) /* had not given hint */
-            fp->i_duration = chroma_fingerprint.i_duration;
+        if( !p_fingerprinter->p_sys->abort )
+        {
+            fp->psz_fingerprint = p_fingerprinter->p_sys->chroma_fingerprint.psz_fingerprint;
+            p_fingerprinter->p_sys->chroma_fingerprint.psz_fingerprint = NULL;
+            if( !fp->i_duration ) /* had not given hint */
+                fp->i_duration = p_fingerprinter->p_sys->chroma_fingerprint.i_duration;
+        }
     }
 
     vlc_player_Unlock(player);
@@ -277,6 +277,9 @@ static int Open(vlc_object_t *p_this)
         goto error;
     }
 
+    var_Create( p_fingerprinter, "fingerprint-data", VLC_VAR_ADDRESS );
+    var_SetAddress( p_fingerprinter, "fingerprint-data", &p_fingerprinter->p_sys->chroma_fingerprint );
+
     return VLC_SUCCESS;
 
 error:



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/2406b5f1b49dde462b7f3ac720a7a40e9e52cd5d...310220aff81e35fe0c4b056f0c020fcc0ea2e039

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/2406b5f1b49dde462b7f3ac720a7a40e9e52cd5d...310220aff81e35fe0c4b056f0c020fcc0ea2e039
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help




More information about the vlc-commits mailing list