OUTDATED
--------


pad has caps
| pad has template
|/ pad has negotiate function
||/
--- -> ---

always compatible

--+ -> ---

call negotiate function, set the resulting caps

-+- -> ---

always compatible

-++ -> ---

call negotiate function, set the resulting caps

+-- -> ---

always compatible, caps are those of the pad

+-+ -> ---

always compatible, caps are those of the pad

++- -> ---

always compatible, caps are those of the pad

+++ -> ---

always compatible, caps are those of the pad

=====================================
pad has caps
| pad has template
|/ pad has negotiate function
||/

--- -> --+

call negotiate function, set the resulting caps

--+ -> --+

negotiate until agreed

-+- -> --+

call negotiate until caps match padtemplate

-++ -> --+

negotiate until agreed, caps only got send to the
other pad if they match the padtemplate

+-- -> --+

call negotiate function with src caps, set caps if ok

+-+ -> --+

call negotiate function with src caps, negotiate until agreed

++- -> --+

call negotiate function with src caps, set caps if ok

+++ -> --+

call negotiate function with src caps, negotiate until agreed

=====================================
pad has caps
| pad has template
|/ pad has negotiate function
||/

--- -> -+-

always compatible

--+ -> -+-

call negotiate until caps match padtemplate

-+- -> -+-

check padtemplates, if compatible connect

-++ -> -+-

check templates, if compatible,
call negotiate, until it matches the padtemplate

+-- -> -+-

check caps against padtemplate, if compatible, connect

+-+ -> -+-

check caps against padtemplate, if compatible: connect
alse call negotiate until it matches template

++- -> -+-

check caps against padtemplate, if match, connect

+++ -> -+-

check caps against padtemplate, if match, connect
alse check padtemplates if compatible,
call negotiate until match template


=====================================

pad has caps
| pad has template
|/ pad has negotiate function
||/

--- -> -++

call negotiate, set resulting caps

--+ -> -++

call negotiate until agree, check src caps against
padtemplate before calling sink negotiate

-+- -> -++

check padtemplates, if match call negotiate until
match src padtemplate.

-++ -> -++

check padtemplates, if match call negotiate until
agree

+-- -> -++

check caps against padtemplate
call negotiate with caps, if agree, set caps

+-+ -> -++

check caps against padtemplate
call negotiate with caps, negotiate until agree

++- -> -++

check caps against padtemplate
call negotiate with caps, call negotiate until
sink caps match src padtemplate

+++ -> -++

check caps against padtemplate
call negotiate with caps, negotiate until agree


=====================================


pad has caps
| pad has template
|/ pad has negotiate function
||/

--- -> +--

connection fails

--+ -> +--



-+- -> +--


-++ -> +--


+-- -> +--


+-+ -> +--


++- -> +--


+++ -> +--

check caps, 
call src negotiate with caps


=====================================

pad has caps
| pad has template
|/ pad has negotiate function
||/

--- -> +-+


--+ -> +-+


-+- -> +-+


-++ -> +-+


+-- -> +-+


+-+ -> +-+


++- -> +-+


+++ -> +-+


=====================================

pad has caps
| pad has template
|/ pad has negotiate function
||/

--- -> ++-


--+ -> ++-


-+- -> ++-


-++ -> ++-


+-- -> ++-


+-+ -> ++-


++- -> ++-


+++ -> ++-


=====================================

pad has caps
| pad has template
|/ pad has negotiate function
||/

--- -> +++


--+ -> +++


-+- -> +++


-++ -> +++


+-- -> +++


+-+ -> +++


++- -> +++


+++ -> +++


=====================================

  srccaps = GST_PAD_CAPS (srcpad);
  srctempl = FALSE;

  do {

    //no caps, get one
    if (!srccaps) 
    {
      if (srcpad->negotiatefunc && !srctempl) 
      {
        srccaps = srcpad->negotiatefunc (srpad, srcaps, counter);
        srctempl = FALSE;
      }
      else 
      {
        srccaps = gst_pad_get_caps (srcpad);    
	srctempl = TRUE;
      }
    }

    /* check against other pad */
    
    // the other pad doesn't want to negotiate
    if (!sinkpad->negotiatefunc) 
    {
      sinkcaps = gst_pad_get_caps (sinkpad);

      if (!sinkcaps)
        break;

      if (gst_caps_check_compatibility (srccaps, sinkcaps)) 
      {
        // cool
        break;
      }
    }
    else {
      switch pads;      
    }

  } while (counter < 100);






