GStreamer Plugin Writer's Guide (0.8.12)

Richard John Boulton

Erik Walthinsen

Steve Baker

Leif Johnson

Ronald S. Bultje

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. Who Should Read This Guide?
1.2. Preliminary Reading
1.3. Structure of This Guide
2. Basic Concepts
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 link function
4.2. The getcaps function
4.3. Explicit caps
5. The chain function
6. What are states?
6.1. Managing filter state
7. Adding Arguments
8. Signals
9. Building a Test Application
10. Creating a Filter with a Filter Factory
III. Advanced Filter Concepts
11. How scheduling works
11.1. The Basic Scheduler
11.2. The Optimal Scheduler
12. How a loopfunc works
12.1. Multi-Input Elements
12.2. The Bytestream Object
12.3. Adding a second output
12.4. Modifying the test application
13. Types and Properties
13.1. Building a Simple Format for Testing
13.2. Typefind Functions and Autoplugging
13.3. List of Defined Types
14. Request and Sometimes pads
14.1. Sometimes pads
14.2. Request pads
15. Clocking
15.1. Types of time
15.2. Clocks
15.3. Flow of data between elements and time
15.4. Obligations of each element.
16. Supporting Dynamic Parameters
16.1. Comparing Dynamic Parameters with GObject Properties
16.2. Getting Started
16.3. Defining Parameter Specifications
16.4. The Data Processing Loop
17. MIDI
18. Interfaces
18.1. How to Implement Interfaces
18.2. Mixer Interface
18.3. Tuner Interface
18.4. Color Balance Interface
18.5. Property Probe Interface
18.6. X Overlay Interface
18.7. Navigation Interface
19. Tagging (Metadata and Streaminfo)
19.1. Reading Tags from Streams
19.2. Writing Tags to Streams
20. Events: Seeking, Navigation and More
20.1. Downstream events
20.2. Upstream events
20.3. All Events Together
IV. Other Element Types
21. Writing a Source
21.1. The get()-function
21.2. Events, querying and converting
21.3. Time, clocking and synchronization
21.4. Using special memory
22. Writing a Sink
22.1. Data processing, events, synchronization and clocks
22.2. Special memory
23. Writing a 1-to-N Element, Demuxer or Parser
23.1. Demuxer Caps Negotiation
23.2. Data processing and downstream events
23.3. Parsing versus interpreting
23.4. Simple seeking and indexes
24. Writing a N-to-1 Element or Muxer
24.1. The Data Loop Function
24.2. Events in the Loop Function
24.3. Negotiation
24.4. Markup vs. data processing
25. Writing a N-to-N element
26. Writing an Autoplugger
27. Writing a Manager
V. Appendices
28. Things to check when writing an element
28.1. About states
28.2. Debugging
28.3. Querying, events and the like
28.4. Testing your element
29. GStreamer licensing
29.1. How to license the code you write for GStreamer
List of Tables
2-1. Table of Basic Types
13-1. Table of Audio Types
13-2. Table of Video Types
13-3. Table of Container Types
13-4. Table of Subtitle Types
13-5. Table of Other Types
List of Examples
3-1. Example Plugin Header File