GStreamer Plugin Writer's Guide (1.0.1)

Richard John Boulton

Erik Walthinsen

Steve Baker

Leif Johnson

Ronald S. Bultje

Stefan Kost

Tim-Philipp Müller

Wim Taymans

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. GstMiniObject, Buffers and Events
2.4. Media types 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. Element metadata
3.5. GstStaticPadTemplate
3.6. Constructor Functions
3.7. The plugin_init function
4. Specifying the pads
5. The chain function
6. The event function
7. What are states?
7.1. Managing filter state
8. Adding Properties
9. Signals
10. Building a Test Application
III. Advanced Filter Concepts
11. Caps negotiation
11.1. Caps negotiation use cases
11.2. Fixed caps
11.3. Downstream caps negotiation
11.4. Upstream caps (re)negotiation
11.5. Implementing a CAPS query function
12. Memory allocation
12.1. GstMemory
12.2. GstBuffer
12.3. GstMeta
12.4. GstBufferPool
12.5. GST_QUERY_ALLOCATION
13. Different scheduling modes
13.1. The pad activation stage
13.2. Pads driving the pipeline
13.3. Providing random access
14. Types and Properties
14.1. Building a Simple Format for Testing
14.2. Typefind Functions and Autoplugging
14.3. List of Defined Types
15. Request and Sometimes pads
15.1. Sometimes pads
15.2. Request pads
16. Clocking
16.1. Clocks
16.2. Clock running-time
16.3. Buffer running-time
16.4. Obligations of each element.
17. Supporting Dynamic Parameters
17.1. Getting Started
17.2. The Data Processing Loop
18. Interfaces
18.1. How to Implement Interfaces
18.2. URI interface
18.3. Color Balance Interface
18.4. Video Overlay Interface
18.5. Navigation Interface
19. Tagging (Metadata and Streaminfo)
19.1. Overview
19.2. Reading Tags from Streams
19.3. Writing Tags to Streams
20. Events: Seeking, Navigation and More
20.1. Downstream events
20.2. Upstream events
20.3. All Events Together
IV. Creating special element types
21. Pre-made base classes
21.1. Writing a sink
21.2. Writing a source
21.3. Writing a transformation element
22. Writing a Demuxer or Parser
23. Writing a N-to-1 Element or Muxer
24. Writing a Manager
V. Appendices
25. Things to check when writing an element
25.1. About states
25.2. Debugging
25.3. Querying, events and the like
25.4. Testing your element
26. Porting 0.8 plug-ins to 0.10
26.1. List of changes
27. Porting 0.10 plug-ins to 1.0
28. GStreamer licensing
28.1. How to license the code you write for GStreamer
List of Tables
2-1. Table of Example Types
14-1. Table of Audio Types
14-2. Table of Video Types
14-3. Table of Container Types
14-4. Table of Subtitle Types
14-5. Table of Other Types
List of Examples
3-1. Example Plugin Header File