# Develop a custom GStreamer plugin Before attempting to write your own GStreamer plugin, you should familiarize yourself with the core concepts and tutorials. **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. Key tutorials, guides, and resources - 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) Key points Keep the following key points in mind when you develop a new plugin: - 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 don’t 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. Notes - These instructions are based on the `imsdk.lnx.2.0.0.r1-rel` release . - This guidance is for experienced developers creating a Qualcomm IM SDK plugin to handle unsupported use cases, such as super resolution, by building upon existing plugins. - Creating a custom GStreamer plugin is an advanced task and is intended only for experienced GStreamer developers. - Extensive tutorials are available in the open-source domain and on the official GStreamer portal for this task. - Use this guide as a template and use the open-source resources to learn about developing custom plugins. Last Published: Oct 13, 2025 [Previous Topic Add postprocessing support for a custom model](https://docs.qualcomm.com/bundle/publicresource/80-70018-15B/topics/add-postprocessing-support-custom-model.md) [Next Topic Develop a superresolution plugin](https://docs.qualcomm.com/bundle/publicresource/80-70018-15B/topics/development-process-for-new-plugin.md)