Using deep stream in custom application

Re: other thread, it’s probably better if it stays in one thread since this is related.

A pipeline is comprised of Elements, which have Pads that connect each other like pieces of equipment are connected via ports. Pads have:

  • Direction: source or sink
  • Caps: what is sent over a pad (video, audio, text, etc).
  • Availability: always, sometimes, request

All of those affect whether an element can be linked via it’s pads. A source cannot be linked to a source, for example, a video paid cannot be linked to an audio pad, and a pad that does not exist because it has not been created or requested cannot be connected to an static pad that always exists.

In this case, the former part (video/x-raw) is the what. The (memory:NVMM) specifies where.

In this case, yes. You can use converter elements to send buffers back and forth if you need to.

A bit more than function. If you look at the source code of an element there are a whole bunch of them related to setup, teardown, property setting, and the business of how to handle buffers that flow through the element. You don’t really need to know any of that, however. You can treat elements like a black boxes and just interact with their publicly exposed properties. (eg. a file source might have a property so you can set/get the source file)

4- Each element only have one sink pad and one source pads? Is it possible to have one more sink/src pads in one element?

Yes, it’s possible to have any number of sources or sinks on a given pad. Sometimes they are always/static pads, which always exist. Sometimes they are “sometimes” pads that are created by the element themselves in reponse to something (eg. a source that might or might not have an audio pad). Sometimes they are request pads that you request from an element. You’ll see examples of all of them if you do the tutorials and it’s proably better explained at the above link.