III. Advanced Filter Concepts

By now, you should be able to create basic filter elements that can receive and send data. This is the simple model that GStreamer stands for. But GStreamer can do much more than only this! In this chapter, various advanced topics will be discussed, such as scheduling, special pad types, clocking, events, interfaces, tagging and more. These topics are the sugar that makes GStreamer so easy to use for applications.

Table of Contents
10. Caps negotiation
10.1. Caps negotiation use cases
10.2. Fixed caps
10.3. Downstream caps negotiation
10.3.1. Negotiating caps embedded in input caps
10.3.2. Parsing and setting caps
10.4. Upstream caps (re)negotiation
10.5. Implementing a getcaps function
11. Different scheduling modes
11.1. The pad activation stage
11.2. Pads driving the pipeline
11.3. Providing random access
12. Types and Properties
12.1. Building a Simple Format for Testing
12.2. Typefind Functions and Autoplugging
12.3. List of Defined Types
13. Request and Sometimes pads
13.1. Sometimes pads
13.2. Request pads
14. Clocking
14.1. Types of time
14.2. Clocks
14.3. Flow of data between elements and time
14.4. Obligations of each element.
14.4.1. Source elements
14.4.2. Sink elements
15. Supporting Dynamic Parameters
15.1. Getting Started
15.2. The Data Processing Loop
15.2.1. The Data Processing Loop for Video Elements
15.2.2. The Data Processing Loop for Audio Elements
16. MIDI
17. Interfaces
17.1. How to Implement Interfaces
17.2. URI interface
17.3. Mixer Interface
17.4. Tuner Interface
17.5. Color Balance Interface
17.6. Property Probe Interface
17.7. X Overlay Interface
17.8. Navigation Interface
18. Tagging (Metadata and Streaminfo)
18.1. Reading Tags from Streams
18.2. Writing Tags to Streams
19. Events: Seeking, Navigation and More
19.1. Downstream events
19.2. Upstream events
19.3. All Events Together
19.3.1. End of Stream (EOS)
19.3.2. Flush Start
19.3.3. Flush Stop
19.3.4. New Segment
19.3.5. Seek Request
19.3.6. Navigation
19.3.7. Tag (metadata)