diff options
Diffstat (limited to 'subprojects/gstreamer/docs/random/wtay/capsnego-cases')
-rw-r--r-- | subprojects/gstreamer/docs/random/wtay/capsnego-cases | 349 |
1 files changed, 349 insertions, 0 deletions
diff --git a/subprojects/gstreamer/docs/random/wtay/capsnego-cases b/subprojects/gstreamer/docs/random/wtay/capsnego-cases new file mode 100644 index 0000000000..2df8b7d532 --- /dev/null +++ b/subprojects/gstreamer/docs/random/wtay/capsnego-cases @@ -0,0 +1,349 @@ +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 +also call negotiate until it matches template + +++- -> -+- + +check caps against padtemplate, if match, connect + ++++ -> -+- + +check caps against padtemplate, if match, connect +also 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); + + + + + + |