2002-08-02 11:23:05 +00:00
|
|
|
STATUS: pull on srcpads is outdated, they use _get
|
|
|
|
--------------------------------------------------
|
|
|
|
|
2001-01-11 09:42:17 +00:00
|
|
|
0) definitions:
|
|
|
|
|
|
|
|
All pads without further specifiers are assumed to belong to the element
|
|
|
|
in question. The pad's peer is always denoted with ->peer. If there's
|
|
|
|
question, pads will be prefixed with self-> and other-> as necessary.
|
|
|
|
|
|
|
|
All elements in this document have at most one source and one sink pad,
|
|
|
|
called srcpad and sinkpad. Multi-pad cases are supposed to be simple
|
|
|
|
extrapolations except in a couple strange cases, to be covered elsewhere.
|
|
|
|
|
|
|
|
|
|
|
|
1) loop functions:
|
|
|
|
|
|
|
|
A loop function will call gst_pad_pull(sinkpad), do something, and call
|
|
|
|
gst_pad_push(srcpad).
|
|
|
|
|
|
|
|
gst_pad_pull first checks to see if there's a buffer in the pen. If not,
|
|
|
|
it calls that pad's pullfunc handler, passing it the peer pad. When that
|
|
|
|
finishes, we check again and return the buffer. If no buffer, we squawk.
|
|
|
|
The pullfunc handler simply causes a cothread switch to the peer pad's
|
|
|
|
context;
|
|
|
|
|
|
|
|
gst_pad_push places the buffer in the peer pad's pen, and calls the local
|
|
|
|
pad's pushfunc. The pushfunc simply causes a switch to the peer pad's
|
|
|
|
context.
|
|
|
|
|
|
|
|
|
|
|
|
2) chain functions
|
|
|
|
|
|
|
|
The loopfunc constructed around a chain function starts by finding all
|
|
|
|
sink pads. For each sink pad, it calls gst_pad_pull. This causes a
|
|
|
|
switch to the peer pad's context and a buffer to appear, which is
|
|
|
|
returned. The pad is the handed off to the chain function, which
|
|
|
|
presumably does some processing and calls gst_pad_push(), which causes a
|
|
|
|
context switch to that pad's peer.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3) source
|
|
|
|
|
|
|
|
The loopfunc must repeatedly call the srcpad's pull
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------- ---------------------------------
|
|
|
|
srcpad | | sinkpad
|
|
|
|
| |
|
|
|
|
GstPad *peer; | <-p-> | GstPad *peer;
|
|
|
|
pointer to peer pad | | pointer to peer pad
|
|
|
|
| |
|
|
|
|
funcptr *pushfunc; | --s-> | funcptr *pushfunc;
|
|
|
|
causes switch to peer ctx | | element uses buffer in pen,
|
|
|
|
| |
|
|
|
|
funcptr *pullfunc; | <-s-- | funcptr *pullfunc;
|
|
|
|
element puts buffer in pen, | | causes switch to peer ctx
|
|
|
|
calls gst_pad_push() | |
|
|
|
|
| |
|
|
|
|
funcptr *pullregion func | <-s-- | funcptr *pullregionfunc;
|
|
|
|
element puts region in pen | | causes switch to peer ctx
|
|
|
|
calls gst_pad_push() | |
|
|
|
|
--------------------------------- ---------------------------------
|