Capsnego patterns
-----------------




src negotiation recovery
------------------------

common pipelines like 

 filesrc -> mad -> osssink

perform negotiation strictly left to right. At some point during
iterate, mad will know the caps of the media stream and will need
to inform osssink of this before pushing out a buffer.
mad only has one set of fixed caps.

1) try_set_caps

 mad does a try_set_caps with the caps if all goes well, osssink
 accepts and negotiation succeeds.

 if the try_set_caps function fails, the application should have 
 a change to recover.
 
 - mad therefore calls gst_pad_caps_error_try_recover, this will
   emit a signal on the pad that the app can catch. One of the
   signal arguments will contain a list of possible caps.

 - the app can use the allowed caps to find another element that
   is compatible with the caps and the peer element caps.

 - the app will connect the new element with mad, negotiation
   will happen again, the link will fail or succeed, if it fails,
   thr app knows because the link function returns FALSE.

 - if the link succeeds, pad caps are set and the try_recover 
   function returns TRUE, mad then knows the issue was resolved
   and can continue. It will have received the final caps in its
   srclink function.

 - if no signal handler is connected to the caps_nego_failure signal
   the issue will remain unresolved and a big debug warning is
   printed on the console to debug the issue. mad will get a
   return value of FALSE and may stop. 
 

