Lazy Caps
=========

The idea is to have caps where we evaluate the structures as needed. We can have
these variants of lazy caps:

- construction (e.g. from_string)
  - need user_data (the string/string-array)
  - need a free_func for the user_data
  - need a get_structure_func to fill structure slots as needed
  - we can more easily make this iterator based too
- operations (e.g. intersect) (see [1]).
  - need user_data (the iterator)
  - need a free_func for the user_data
  - need a get_structure_func to fill structure slots as needed

We should add PERFORMANCE category logging to methods that cause lazy caps to be
fully evaluated. To get maximum speed benefit we need to inspect places that 
loop over structures of a caps and turn them into while() loops where possible.

We can use GST_CAPS_FLAGS_LAZY to indicate that caps are not fully constructed.
Once caps are fully evaluated, we can remove the flag (and call the free_func).

Lazy caps might need a lock to protect multiple threads requesting a structure
(get_structure_func).

Accessors
---------
guint gst_caps_get_size (const GstCaps *caps);
- needs to fully evaluate the caps if iterator based :/

GstStructure *gst_caps_get_structure (const GstCaps *caps, guint index);- needs to fully evaluate the caps if iterator based :/
- needs to evaluate all entries up to index if iterator based
- needs to only evaluate requested index if e.g. parse based

gchar *gst_caps_to_string (const GstCaps * caps)
- needs to fully evaluate the caps
- it is used in debugging and serialisation

Construction
------------

Manipulation
------------
void gst_caps_append (GstCaps *caps1, GstCaps *caps2);
- use an iterator

void gst_caps_merge (GstCaps *caps1, GstCaps *caps2);
- use an iterator

void gst_caps_append_structure (GstCaps *caps, GstStructure *structure);
void gst_caps_remove_structure (GstCaps *caps, guint idx);
void gst_caps_merge_structure (GstCaps *caps,
- fully evaluate caps?

GstCaps * gst_caps_copy_nth (const GstCaps *caps, guint nth);
- eval stucture and copy

void gst_caps_truncate (GstCaps *caps);
- eval first structure as needed and remove GST_CAPS_FLAGS_LAZY + call free_func

void gst_caps_set_value (GstCaps *caps, const char *field, const GValue *value);
void gst_caps_set_simple (GstCaps *caps, const char *field, ...);
void gst_caps_set_simple_valist (GstCaps *caps, const char *field, va_list varargs);
- fully evaluate caps


Operations
----------


[1] https://bugzilla.gnome.org/show_bug.cgi?id=618853
