OUTDATED
--------


A type properties system might look like following:


1) Type definition includes the properties and their ranges:

audio/mp3
	layer:		1 - 3
	bitrate:	8 - 320

audio/raw
	format:		bitfield (using asound.h definitions)
	depth:		8 - 32
	rate:		4000 - 96000
	channels:	1 - n
	interleave:	boolean

video/raw
	format:		32-bit FOURCC
	bpp:		1 - 32
	width:		1 - n
	height:		1 - n
	framerate:	32-bit float

etc.


2) An element can specify what subtypes it can deal with by creating a list of property tables:

mpg123: audio/mp3
	layer:		1 - 3
	bitrate:	8 - 320

osssink:
	format:		S8, S16, etc.
	depth:		8 - 16
	rate:		8000 - 48000
	channels:	1 - 2
	interleave:	true

And you could list several of these, so for instance if the card only supports 8-bit at up to 22KHz in
mono, you can remove S8 from the above list and add a second entry:

osssink:
	format:		S8
	depth:		8
	rate:		8000 - 22050
	channels:	1
	interleave:	false (irrelevant)

The obvious problem with these examples is that the rate isn't really 8000 - 48000, it's 8000, 11025,
16000, 22050, 44100, and 48000.  However, we may be able to leave these to pad connect time.





struct _type_definition {
  char *mime_type;

  ....

  GData *properties;
}

gst_type_add_property_int(_type *type,gchar *propname,int min,int max) {
  struct _type_prop_int prop_int;
  GQuark quark = g_quark_from_string(propname);

  prop_int->id = quark;
  prop_int->min = min;
  prop_int->max = max;
  g_datalist_id_set_data(type->properties,quark,&prop_int);
}
