[gstreamer-bugs] [Bug 351309] New: New Element: gst-puid

GStreamer (bugzilla.gnome.org) bugzilla-daemon at bugzilla.gnome.org
Mon Aug 14 08:38:18 PDT 2006


Do not reply to this via email (we are currently unable to handle email
responses and they get discarded).  You can add comments to this bug at
http://bugzilla.gnome.org/show_bug.cgi?id=351309
 GStreamer | gst-plugins-bad | Ver: HEAD CVS

           Summary: New Element: gst-puid
           Product: GStreamer
           Version: HEAD CVS
          Platform: Other
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: Normal
         Component: gst-plugins-bad
        AssignedTo: gstreamer-bugs at lists.sourceforge.net
        ReportedBy: internalerror at gmail.com
         QAContact: gstreamer-bugs at lists.sourceforge.net
     GNOME version: Unspecified
   GNOME milestone: Unspecified


This element allows for PUID finding for a particular track using
MusicnDNS/MusicIP and MusicBrainz. It's the replacement for the currently in
use TRM audio fingerprinting system used by MusicBrainz. For more information
on both please check here: http://wiki.musicbrainz.org/HowPUIDsWork,
http://wiki.musicbrainz.org/TRM, and this page explains why TRM is being phased
out: http://wiki.musicbrainz.org/GettingRidOfTRM.

Short description of the element: libofa (Open Fingerprint Architecture,
http://musicdns.org), requires 135 seconds of raw pcm data of a file to be
scanned to create a fingerprint. The element requires the data in a specific
format, that's why its sink caps requirements are so strict. You can plug it
into a pipeline like filesrc ! decodebin ! audioconvert ! puid ! fakesink (with
sync=0 preferrably). It will automatically EOS after 135 seconds and create the
fingerprint and request the metadata from musicdns using libneon.

A practical, real world example usage is:

filesrc location=<file> ! decodebin ! audioconvert ! puid
musicdns-id=<musicdns-id> ! fakesink sync=0

You can obtain a free musicdns-id right here without any kind of application
form or anything: http://musicdns.org/get_client_key/prd_clientid/congrats.

After it is done running, the metadata is available as properties 'artist',
'title', and 'puid', as well as the whole xml document as property 'xmldoc'

It is _not_ suitable for generally plugging it into any possible pipeline, even
if the automatic EOS restriction was to be removed because it needs insane
amounts of memory (there is no way to feed the data to libofa in chunks, so it
has to buffer all the 135 seconds of raw pcm data until it can feed it to
libofa, in addition libofa uses libfftw3, which does some kind of FT/FA so this
uses even more memory).

To my code: I'd appreciate constructive comments how to improve what's wrong.
Aside from potential general cleanliness issues, there are a few things that
are probably badly/wrong implemented, which are mostly:

- How to know when i should stop and clean up all my local data (when parent
state changes to NULL?)

- Currently i decided to not make the resulting metadata available as tags sent
as a bus message, for one because GST has no tag for PUIDs, and secondly an
artist and title tag might and most likely will clash with existing artist and
title tags; Instead, the XML document with the metadata received is available
trough a property, as well as the individual parsed fields artist, title, PUID
(parsed from the XML using GMarkup parser).

(- Code formatting?)

- I'm rather sure that the place in the code which checks if caps are already
negotiated and present is wrong (in transform_ip), what would be the more
appropriate place?


-- 
Configure bugmail: http://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.




More information about the Gstreamer-bugs mailing list