# General guidelines for developing a GStreamer plugin Source: [https://docs.qualcomm.com/doc/80-70015-15B/topic/general-guidelines-gstreamer.html](https://docs.qualcomm.com/doc/80-70015-15B/topic/general-guidelines-gstreamer.html) Before attempting to write your own GStreamer plugin, you should familiarize yourself with the core concepts. Figure : High-level workflow for implementing a new GStreamer plugin To implement a custom plugin, you will need to: - Decide whether to inherit from an existing base template class or directly from the GstElement skeleton class. - Specify pads, elements, and caps (capabilities). - Implement key functions like init, set\_caps, set\_property, transform, etc. - Register the plugin. Before attempting to a write custom GStreamer plugin, you should refer to the official tutorials. - Tutorials: [https://gstreamer.freedesktop.org/documentation/tutorials/index.html?gi-language=c](https://gstreamer.freedesktop.org/documentation/tutorials/index.html?gi-language=c) - Plugin writer’s guide: [https://gstreamer.freedesktop.org/documentation/plugin-development/index.html?gi-language=c](https://gstreamer.freedesktop.org/documentation/plugin-development/index.html?gi-language=c) - Additional documentation: [https://gstreamer.freedesktop.org/documentation/additional/index.html?gi-language=c](https://gstreamer.freedesktop.org/documentation/additional/index.html?gi-language=c) - API references: [https://gstreamer.freedesktop.org/documentation/libs.html?gi-language=c](https://gstreamer.freedesktop.org/documentation/libs.html?gi-language=c) - Caps features: [https://gstreamer.freedesktop.org/documentation/gstreamer/gstcapsfeatures.html?gi-language=c](https://gstreamer.freedesktop.org/documentation/gstreamer/gstcapsfeatures.html?gi-language=c) - Caps negotiations: [https://gstreamer.freedesktop.org/documentation/plugin-development/advanced/negotiation.html?gi-language=c](https://gstreamer.freedesktop.org/documentation/plugin-development/advanced/negotiation.html?gi-language=c) Here are some key points to keep in mind: - Inheritance and base classes - Each GStreamer plugin is inherited either from a base template class or directly from the GstElement skeleton class. - The GstElement class serves as a minimal framework and developers are responsible for implementing event handling, queries, buffer management, and other essential functionality. - When no existing base template class suits the plugin’s requirements, developers can use GstElement as a starting point. - Base template classes - GStreamer provides base template classes that handle most events and queries; however, these base classes do not manage buffer handling. - Buffer management - Depending on the chosen base class, developers must implement buffer management and override relevant virtual methods. - Some methods have default implementations, while others are pure virtual functions. - Capabilities - Caps are exposed on GstPadTemplates to specify supported media types for a pad. - Pads exchange information about their supported formats using caps. The intersection of caps from connected pads determines the actual data format for communication. - Advantages of base classes - Base classes offer virtual methods that developers can override with custom implementations. - By leveraging existing base class functionality, developers can focus on specific customizations required by their plugin design. Last Published: Jan 21, 2026 [Previous Topic Implement new use case](https://docs.qualcomm.com/bundle/publicresource/80-70015-15B/topics/implement-new-use-case.md) [Next Topic Development process for new plugin](https://docs.qualcomm.com/bundle/publicresource/80-70015-15B/topics/development-process-new-plugin.md)