OUTDATED
--------

The point of the metadata is to provide some context for each buffer.  In
the case of audio data, for instance, it would provide the samplerate, bit
depth, and channel count.

The trick is that there may be multiple types of metadata ganged onto a
single buffer.  This is why they're going to be a GList.  This does mean
extra overhead in all cases, but I think it's minimal.  The GList type
uses a chunk allocater so we're not wasting too much memory or time when
adding to the list.

The trick is dealing with these structs as they pass through a pipeline,
since they have potentially different mutability properties.  For
instance, if you've got a mp3 decoder connected to a tee, which sends the
buffers off to both the decoder and a spectrum analyzer (and then a
visualization element).  The preferred setup would be where every time a
audio/raw metadata comes down the pipe (indicating a potential change in
audio format), the audiosink and spectrum would just save off pointers.

So when exactly does this metadata go away (deallocated)?  Well, that
means metadata has to be refcounted.  But that gets rather hairy.  OK, in
the simple case you create a metadata struct, it comes with refcount set
to 1.  You pass it through, it stays one, eventually someone drops the
last reference on the buffer it's tied to, you free the metadata too.
Easy.  What if you tee?  You could go through and for every metadata in
the buffer, increment the refcount by the same as the buffer.  So in the
above case (tee'd), the audiosink and spectrum would get the buffer with a
refcount of 2, and it'd have a metadata with refcount 2.  Do they ref it
each themselves, then unref the buffer?  Or do they remove the metadata?
Removing the metadata would require a buffer CoW, which would suck, so
yes, they'd just ref the metadata.

But....  what if they're all in different threads?  Then we're off into
the magical world of mutexes.  Everything with a refcount in a threaded
world must be mutexed, else you can do atomic increment and atomic
dec&test.  Can this be done from C easily?  Perhaps it needs to be found
from kernel includes via autoconf?




The goal in designing the way metadata will be defined and used is to keep
it as simple as possible.  The basis for accomplishing this is the fact
that in order to actually use (rather than just pass) the metadata, you
have to know what the fields are, which means you have to have compiled in
support for that metadata at build time.  Therefore, if you're using
metadata, you must have build-time access to the necessary include file
that defines it.

So, given that you've got an include file, it would be nice if the whole
thing could be contained there.  This would limit the need to be linked
against something, or have load-time requirements as to that has to be
loaded before you are.

Given that really all metadata is is a region of memory of a given size
with a certain signature, this isn't all that hard.  First you lay out the
struct that defines the metadata.  Then you set up #defines that expand to
the size of the struct in question, as well as the four-cc code that
defines the type.

The work is done by a few #defines, a la the #defines used in all Gtk
objects.  The first is a NEW() method that allocates the memory for the
metadata and fills in all the normal fields (type, size, utility
functions).  Because of the way it's defined (as a #define, no less),
you'll have to invoke it as META_NEW(meta), since it can't return()
anything.

Another #define will check to make sure a meta is indeed that type by
verifying the type code and size.  Theoretically, meta types can overlap
with the same fourcc code, as long as they have different sizes.  But I
probably ought to have a global public registry so people writing things
don't conflict.  MSFT got that right, at least.

So, a hairy problem is what to do when there are utility functions
associated with one of these things.  One option is to not bother with
them.  This is very likely a possible solution, since metadata is supposed
to be flat memory of a given size.  Not much to do to either free or copy
it, is there?
