GStreamer Plugin Writer's Guide (0.10.10)

Richard John Boulton

Erik Walthinsen

Steve Baker

Leif Johnson

Ronald S. Bultje

Stefan Kost

Tim-Philipp Müller

This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/).


Table of Contents
I. Introduction
1. Preface
1.1. What is GStreamer?
1.2. Who Should Read This Guide?
1.3. Preliminary Reading
1.4. Structure of This Guide
2. Foundations
2.1. Elements and Plugins
2.2. Pads
2.3. Data, Buffers and Events
2.4. Mimetypes and Properties
II. Building a Plugin
3. Constructing the Boilerplate
3.1. Getting the GStreamer Plugin Templates
3.2. Using the Project Stamp
3.3. Examining the Basic Code
3.4. GstElementDetails
3.5. GstStaticPadTemplate
3.6. Constructor Functions
3.7. The plugin_init function
4. Specifying the pads
4.1. The setcaps-function
5. The chain function
6. What are states?
6.1. Managing filter state
7. Adding Arguments
8. Signals
9. Building a Test Application
III. Advanced Filter Concepts
10. Caps negotiation
10.1. Caps negotiation use cases
10.2. Fixed caps
10.3. Downstream caps negotiation
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.
15. Supporting Dynamic Parameters
15.1. Getting Started
15.2. The Data Processing Loop
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
IV. Creating special element types
20. Pre-made base classes
20.1. Writing a sink
20.2. Writing a source
20.3. Writing a transformation element
21. Writing a Demuxer or Parser
22. Writing a N-to-1 Element or Muxer
23. Writing a Manager
V. Appendices
24. Things to check when writing an element
24.1. About states
24.2. Debugging
24.3. Querying, events and the like
24.4. Testing your element
25. Porting 0.8 plug-ins to 0.9
25.1. List of changes
26. GStreamer licensing
26.1. How to license the code you write for GStreamer
List of Tables
2-1. Table of Example Types
12-1. Table of Audio Types
12-2. Table of Video Types
12-3. Table of Container Types
12-4. Table of Subtitle Types
12-5. Table of Other Types
List of Examples
3-1. Example Plugin Header File