mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 17:50:36 +00:00
3534e68563
Original commit message from CVS: Reworked the capsnegotiation function audiosink now uses capsnego to set its parameters mpg123/ac3dec use capsnego instead of metadata Added the beginnings of a testsuite for capsnego.
346 lines
4.3 KiB
Text
346 lines
4.3 KiB
Text
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
|