GStreamer Plugin Writer's Guide (0.10.12)

Richard John Boulton

Erik Walthinsen

Steve Baker

Leif Johnson

Ronald S. Bultje

Stefan Kost

Tim-Philipp Müller

Legal Notice
Table of Contents
I. Introduction
Preface
What is GStreamer?
Who Should Read This Guide?
Preliminary Reading
Structure of This Guide
Foundations
Elements and Plugins
Pads
Data, Buffers and Events
Mimetypes and Properties
II. Building a Plugin
Constructing the Boilerplate
Getting the GStreamer Plugin Templates
Using the Project Stamp
Examining the Basic Code
GstElementDetails
GstStaticPadTemplate
Constructor Functions
The plugin_init function
Specifying the pads
The setcaps-function
The chain function
What are states?
Managing filter state
Adding Arguments
Signals
Building a Test Application
III. Advanced Filter Concepts
Caps negotiation
Caps negotiation use cases
Fixed caps
Downstream caps negotiation
Upstream caps (re)negotiation
Implementing a getcaps function
Different scheduling modes
The pad activation stage
Pads driving the pipeline
Providing random access
Types and Properties
Building a Simple Format for Testing
Typefind Functions and Autoplugging
List of Defined Types
Request and Sometimes pads
Sometimes pads
Request pads
Clocking
Types of time
Clocks
Flow of data between elements and time
Obligations of each element.
Supporting Dynamic Parameters
Getting Started
The Data Processing Loop
MIDI
Interfaces
How to Implement Interfaces
URI interface
Mixer Interface
Tuner Interface
Color Balance Interface
Property Probe Interface
X Overlay Interface
Navigation Interface
Tagging (Metadata and Streaminfo)
Reading Tags from Streams
Writing Tags to Streams
Events: Seeking, Navigation and More
Downstream events
Upstream events
All Events Together
IV. Creating special element types
Pre-made base classes
Writing a sink
Writing a source
Writing a transformation element
Writing a Demuxer or Parser
Writing a N-to-1 Element or Muxer
Writing a Manager
V. Appendices
Things to check when writing an element
About states
Debugging
Querying, events and the like
Testing your element
Porting 0.8 plug-ins to 0.9
List of changes
GStreamer licensing
How to license the code you write for GStreamer