# Develop a custom GStreamer plugin

Before attempting to write your own GStreamer plugin, you should
familiarize yourself with the core concepts and tutorials.

![../_images/guidelines-gstreamer-plugin.png](data:image/png;base64,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)

**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 10, 2025

[Previous Topic
Add postprocessing support for a custom model](https://docs.qualcomm.com/bundle/publicresource/80-70020-15B/topics/add-postprocessing-support-custom-model.md) [Next Topic
Develop a superresolution plugin](https://docs.qualcomm.com/bundle/publicresource/80-70020-15B/topics/development-process-for-new-plugin.md)