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
12. Request and Sometimes pads
12.1. Sometimes pads
12.2. Request pads
13. Different scheduling modes
13.1. The pad activation stage
13.2. Pads driving the pipeline
13.3. Providing random access
14. Caps negotiation
14.1. Caps negotiation basics
14.2. Caps negotiation use cases
14.2.1. Fixed negotiation
14.2.2. Transform negotiation
14.2.3. Dynamic negotiation
14.3. Upstream caps (re)negotiation
14.4. Implementing a CAPS query function
14.5. Pull-mode Caps negotiation
15. Memory allocation
15.1. GstMemory
15.1.1. GstMemory API example
15.1.2. Implementing a GstAllocator
15.2. GstBuffer
15.2.1. GstBuffer writability
15.2.2. GstBuffer API examples
15.3. GstMeta
15.3.1. GstMeta API example
15.3.2. Implementing new GstMeta
15.4. GstBufferPool
15.4.1. GstBufferPool API example
15.4.2. Implementing a new GstBufferPool
15.5. GST_QUERY_ALLOCATION
15.5.1. ALLOCATION query example
15.5.2. The ALLOCATION query in base classes
16. Types and Properties
16.1. Building a Simple Format for Testing
16.2. Typefind Functions and Autoplugging
16.3. List of Defined Types
17. Events: Seeking, Navigation and More
17.1. Downstream events
17.2. Upstream events
17.3. All Events Together
17.3.1. Stream Start
17.3.2. Caps
17.3.3. Segment
17.3.4. Tag (metadata)
17.3.5. End of Stream (EOS)
17.3.6. Table Of Contents
17.3.7. Gap
17.3.8. Flush Start
17.3.9. Flush Stop
17.3.10. Quality Of Service (QOS)
17.3.11. Seek Request
17.3.12. Navigation
18. Clocking
18.1. Clocks
18.2. Clock running-time
18.3. Buffer running-time
18.4. Obligations of each element.
18.4.1. Non-live source elements
18.4.2. Live source elements
18.4.3. Parser/Decoder/Encoder elements
18.4.4. Demuxer elements
18.4.5. Muxer elements
18.4.6. Sink elements
19. Quality Of Service (QoS)
19.1. Measuring QoS
19.2. Handling QoS
19.2.1. Short term correction
19.2.2. Long term correction
19.3. Throttling
19.4. QoS Messages
20. Supporting Dynamic Parameters
20.1. Getting Started
20.2. The Data Processing Loop
20.2.1. The Data Processing Loop for Video Elements
20.2.2. The Data Processing Loop for Audio Elements
21. Interfaces
21.1. How to Implement Interfaces
21.2. URI interface
21.3. Color Balance Interface
21.4. Video Overlay Interface
21.5. Navigation Interface
22. Tagging (Metadata and Streaminfo)
22.1. Overview
22.2. Reading Tags from Streams
22.3. Writing Tags to Streams