# Develop plugins using Qualcomm IM SDK
Source: [https://docs.qualcomm.com/doc/80-70020-50/topic/develop-plugins-for-sdk.html](https://docs.qualcomm.com/doc/80-70020-50/topic/develop-plugins-for-sdk.html)
The GStreamer plugins allow you to effectively use and implement the Qualcomm IM SDK
functionality. [Download and install eSDK](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-51/install-sdk.html#download-and-install-esdk) to develop or customize
plugins.
Using Qualcomm IM SDK, you can do the following:
- Update or customize the existing plugins for improvements, or make them compatible
with the latest version of the GStreamer framework.
- Develop preprocessing and postprocessing plugins for AI/ML models.
## Customize a
plugin
Source: [https://docs.qualcomm.com/doc/80-70020-50/topic/develop-plugins-for-sdk.html](https://docs.qualcomm.com/doc/80-70020-50/topic/develop-plugins-for-sdk.html)
Customize a Qualcomm GStreamer plugin and install it on the target
device.
### About this task
As an example, the following procedure uses the `mlvdetection` plugin.
### Procedure
1. Set up the environment:
cd $ESDK_ROOTCopy to clipboard
source environment-setup-armv8-2a-qcom-linuxCopy to clipboard
The following message is displayed:
SDK environment now set up; additionally you may now run devtool to perform development tasks.
Run devtool --help for further details.
[/local/mnt/workspace/QIMSDK_ESDK_6490/]Copy to clipboard
2. Download the Qualcomm IM SDK plugin sources.
cd $ESDK_ROOTCopy to clipboard
devtool modify qcom-gstreamer1.0-plugins-oss-mlvdetectionCopy to clipboard
In this command, `qcom-gstreamer1.0-plugins-oss-mlvdetection`
is the BitBake recipe that downloads the sources of the plugin.
NOTE: Starting bitbake server...
Loading cache: 100% |######################################| Time: 0:00:00
Loaded 9816 entries from dependency cache.
Parsing recipes: 100% |####################################| Time: 0:00:01
Parsing of 6700 .bb files complete (6678 cached, 22 parsed). 9838 targets, 842 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |#################################| Time: 0:00:55
Sstate summary: Wanted 10 local 0 mirrors 0 Missed 10 Current 10 (0% match, 50% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 93 tasks of which 90 didn't need to be rerun and all succeeded.
INFO: Source tree extracted to /local/mnt/workspace/QIMSDK_ESDK_6490/workspace/sources/qcom-gstreamer1.0-plugins-oss-mlvdetection
INFO: Recipe qcom-gstreamer1.0-plugins-oss-mlvdetection now setup to build from /local/mnt/workspace/QIMSDK_ESDK_6490/workspace/sources/qcom-gstreamer1.0-plugins-oss-mlvdetectionCopy to clipboard
The plugin source code is downloaded to
$ESDK\_ROOT/workspace/sources/qcom-gstreamer1.0-plugins-oss-mlvdetection.
[/local/mnt/workspace/QIMSDK_ESDK_6490/workspace/sources/qcom-gstreamer1.0-plugins-oss-mlvdetection]$ ls
CMakeLists.txt config.h.in mlvdetection.h modules
[/local/mnt/workspace/QIMSDK_ESDK_6490/workspace/sources/qcom-gstreamer1.0-plugins-oss-mlvdetection]$Copy to clipboard
3. Perform the required customization and run the following command to rebuild the
plugin:
devtool build qcom-gstreamer1.0-plugins-oss-mlvdetectionCopy to clipboard
The following message is displayed:
NOTE: Starting bitbake server...
Loading cache: 100% |################################################| Time: 0:00:00
Loaded 9816 entries from dependency cache.
Parsing recipes: 100% |##############################################| Time: 0:00:01
Parsing of 6700 .bb files complete (6678 cached, 22 parsed). 9838 targets, 842 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |###########################################| Time: 0:00:55
Checking sstate mirror object availability: 100% |###################| Time: 0:01:06
Sstate Summary: Wanted 264 Local 0 Mirrors 0 Missed 264 Current 255 (0% match, 49% complete)
Removing 1 stale sstate objects for arch qcs6490_rb3gen2_vision_kit: 100% |################################################| Time: 0:00:12
Removing 1 stale sstate objects for arch armv8-2a: 100% |##################################################################| Time: 0:00:16
NOTE: Executing Tasks
NOTE: qcom-gstreamer1.0-plugins-oss-mlvdetection: compiling from external source tree /local/mnt/workspace/QIMSDK_ESDK_6490/workspace/sources/qcom-gstreamer1.0-plugins-oss-mlvdetection
NOTE: Task Summary: Attempted 1836 tasks of which 1827 didn't need to be rerun and all succeeded.Copy to clipboard
4. To install the application on the target device, generate the plugin installer
(ipk):
devtool package qcom-gstreamer1.0-plugins-oss-mlvdetectionCopy to clipboard
The installable package is at `ls -1
$ESDK_ROOT/tmp/deploy/ipk/armv8-2a/`.
qcom-gstreamer1.0-plugins-oss-mlvdetection_1.0-r0_armv8-2a.ipk
qcom-gstreamer1.0-plugins-oss-mlvdetection_dbg_1.0-r0_armv8-2a.ipk
qcom-gstreamer1.0-plugins-oss-mlvdetection_dev_1.0-r0_armv8-2a.ipk
qcom-gstreamer1.0-plugins-oss-mlvdetection_src_1.0-r0_armv8-2a.ipk
[/local/mnt/workspace/QIMSDK_ESDK_6490/workspace/sources/qcom-gstreamer1.0-plugins-oss-mlvdetection]$Copy to clipboard
5. Set up a connection with the target device through SSH. For instructions, see
[Sign in using SSH](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-254/how_to.html#use-ssh).
The development kit is accessible through its configured IP address.
6. Install the compiled reference application on the target device through the SSH
shell:
ssh root@[IP Address of the device]Copy to clipboard
Note: If prompted for a password, enter
oelinux123.
7. On the target device, reconfigure the file system partition to support read and
write operations:
mount -o remount,rw /Copy to clipboard
exitCopy to clipboard
8. On the host computer, transfer the application installer to the target
device:
cd $ESDK_ROOT/tmp/deploy/ipk/armv8-2a/Copy to clipboard
scp qcom-gstreamer1.0-plugins-oss-mlvdetection_1.0-r0_armv8-2a.ipk root@:/optCopy to clipboard
9. Sign in to the SSH shell:
ssh root@[IP Address of the device]Copy to clipboard
10. On the target device, install the application:
opkg --force-depends --force-reinstall --force-overwrite install /opt/qcom-gstreamer1.0-plugins-oss-mlvdetection_1.0-r0_armv8-2a.ipkCopy to clipboard
11. Verify if the IPK installation is successful:
Installing qcom-gstreamer1.0-plugins-oss-mlvdetection (1.0) on root
Configuring qcom-gstreamer1.0-plugins-oss-mlvdetection.Copy to clipboard
## Create a plugin
Source: [https://docs.qualcomm.com/doc/80-70020-50/topic/develop-plugins-for-sdk.html](https://docs.qualcomm.com/doc/80-70020-50/topic/develop-plugins-for-sdk.html)
Create your own plugin and compile it as part of the Qualcomm IM SDK. Each ML plugin
is integrated into the SDK as an independent BitBake recipe.
### About this task
To update the BitBake files for custom plugin compilation, do the following:
### Procedure
1. Set up the
environment:
cd $ESDK_ROOTCopy to clipboard
source environment-setup-armv8-2a-qcom-linuxCopy to clipboard
SDK environment now set up; additionally you may now run devtool to perform development tasks.
Run devtool --help for further details.
[/local/mnt/workspace/Platform_eSDK_plus_QIM]$Copy to clipboard
2. Create a BitBake file at
$ESDK\_ROOT/layers/meta-qcom-qim-product-sdk/recipes-gst/gstreamer/.
For example:
$ESDK_ROOT/layers/meta-qcom-qim-product-sdk/recipes-gst/gstreamer/qcom-gstreamer1.0-plugins-oss-sample-mlvclassification.bbCopy to clipboard
1. Copy the contents of the existing plugin to the new file created in step
2.
2. Update the `SUMMARY`, `SRC_URI`, and
`S`
variables:
...
inherit cmake pkgconfig
SUMMARY = "My custom plugin for ML image categorization"
SECTION= "multimedia"
LICENSE = "BSD-3-Clause-Clear"
LIC_FILES_CHKSUM - "file://${COMMON_LICENSE_DIR}/${LICENSE};md5=7a43440b65lf4a472ca93716d01033a"
# Dependencies.
DEPENDS := "gstreamer1.0"
DEPENDS += "gstreamer1.0-plugins-base"
DEPENDS += "qcom-gstreamer1.0-plugins-oss-base"
DEPENDS += "cairo"
#SRCPROJECT = "git://git.codelinaro.org/clo/le/platform/vendor/qcom-opensource/gst-plugins-qti-oss.git;protocol=https"
#SRCBRANCH = "imsdk.lnx.2.0.0.r2-rel"
#SRCREV = "49256b26148d10257959b2b8d55879f72888cb0f"
#SRC_URI = "${SRCPROJECT};branch=${SRCBRANCH};rev=${SRCREV};subpath=gst-plugin-mlvclassification"
#S = "${WORKDIR}/gst-plugin-mlvclassification"
SRC_URI += "file://gst-plugin-sample-mlvclassification"
S = "${WORKDIR}/gst-plugin-sample-mlvclassification"
# Instal directories.
INSTALL_INCDIR := "${includedir}"
...Copy to clipboard
3. Create a directory called `files` at
$ESDK\_ROOT/layers/meta-qcom-qim-product-sdk/recipes-gst/gstreamer/files.
Under `files`, create the
`gst-plugin-sample-mlvclassification` directory, and then
copy the Qualcomm IM SDK plugin source code in this directory.
Note: Ensure that the source code is available for the
`sample-mlvclassification` plugin.
files
|
├── gst-plugin-sample-mlvclassification
|
├── CMakeLists.txt
├── config.h.in
├── mlvclassification.c
├── mlvclassification.h
└── modules
├── CMakeLists.txt
├── ml-vclassification-mobilenet.c
├── ml-vclassification-ocr.c
├── ml-vclassification-qfr.c
└── READMECopy to clipboard
4. To include
`qcom-gstreamer1.0-plugins-oss-sample-mlvclassification` in
the package group, add it under `RDEPENDS` in the
$ESDK\_ROOT/layers/meta-qcom-qim-product-sdk/recipes-gst/packagegroups/packagegroup-qcom-gst.bb
directory.
RDEPENDS:${PN}:qcom-custom-bsp = " \
${PN}-dependencies \
${PN}-basic \
. . .
qcom-gstreamer1.0-plugins-oss-sample-mlvclassification \
"Copy to clipboard
5. To include
`qcom-gstreamer1.0-plugins-oss-sample-mlvclassification:do_package_write_ipk`
in package group bbclass, add it under `do_package_write_ipk` in
the
$ESDK\_ROOT/layers/meta-qcom-qim-product-sdk/classes/qimsdk-pkg.bbclass
directory.
GST_PLUGINS = " \
gstd:do_package_write_ipk \
gstreamer1.0:do_package_write_ipk \
. . .
qcom-gstreamer1.0-plugins-oss-sample-mlvclassification:do_package_write_ipk \
"Copy to clipboard
6. Download the Qualcomm IM SDK plugin sources:
cd $ESDK_ROOTCopy to clipboard
devtool modify qcom-gstreamer1.0-plugins-oss-sample-mlvclassificationCopy to clipboard
In this command,
`qcom-gstreamer1.0-plugins-oss-sample-mlvclassification`
is the BitBake recipe that downloads the plugin source.
NOTE: Starting bitbake server ...
Loading cache: 100% |###################################################################################| Time 0:00:02
Loaded 9814 entries from dependency cache.
Parsing recipes: 100% |#################################################################################| Time 0:00:03
Parsing of 6702 .bb files complete (6670 cached, 32 parsed). 9840 targets, 842 skipped, 0 masked, 0 errors.
Summary: There were 0 WARNING messages.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |##############################################################################| Time 0:00:08
Sstate summary: Wanted 10 Local 0 Mirrors 0 Missed 10 Current 10 (0% match, 50% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 93 tasks of which 90 didn't need to be rerun and all succeeded.
INFO: Source tree extracted to /local/mnt/workspace/QIMSDK_ESDK_6490/workspace/sources/qcom-gstreamer1.0-plugins-oss-sample-mlvclassification
INFO: Recipe qcom-gstreamer1.0-plugins-oss-sample-mlvclassification now set up to build from /local/mnt/workspace/QIMSDK_ESDK_6490/workspace/sources/qcom-gstreamer1.0-plugins-oss-sample-mlvclassificationCopy to clipboard
The plugin source code is downloaded at
$ESDK\_ROOT/workspace/sources/qcom-gstreamer1.0-plugins-oss-sample-mlvclassification.
7. Perform the required customizations and run the following command to rebuild
the plugin:
devtool build qcom-gstreamer1.0-plugins-oss-sample-mlvclassificationCopy to clipboard
NOTE: Starting bitbake server ...
Loading cache: 100% | | ETA -:--:--
Loaded 0 entries from dependency cache.
...Copy to clipboard
8. To install the application on the target device, generate the plugin installer
(ipk):
devtool package qcom-gstreamer1.0-plugins-oss-sample-mlvclassificationCopy to clipboard
The installable package is at
`$ESDK_ROOT/tmp/deploy/ipk/armv8-2a/`.
NOTE: Starting bitbake server ...
Loading cache: 100% |###################################################################| ETA 0:00:14
Loaded 9812 entries from dependency cache.
Parsing recipes: 100% |#################################################################################| Time 0:00:03
Parsing of 6702 .bb files complete (6674 cached, 28 parsed). 9840 targets, 842 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |##############################################################################| Time 0:00:10
Checking sstate mirror object availability: 100% |######################################################| Time 0:00:00
Sstate summary: Wanted 262 Local 0 Mirrors 0 Missed 262 Current 259 (0% match, 49% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 1847 tasks of which 1847 didn't need to be rerun and all succeeded.
Summary: There were 0 WARNING messages.
INFO: Your packages are in /local/mnt/workspace/QIMSDK_ESDK_6490/tmp/deploy/ipkCopy to clipboard
9. Set up a connection with the target device through SSH. For instructions, see
[Sign in using SSH](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-254/how_to.html#use-ssh).
Qualcomm Linux is accessible through its configured IP
address.
10. On the Qualcomm EVK, install the compiled reference applications:
qcom-gstreamer1.0-plugins-oss-sample-mlvclassification_1.0-r0_armv8-2a.ipkCopy to clipboard
11. Sign in to the SSH shell:
ssh root@[ip-addr]Copy to clipboard
Note: If prompted for a password, enter oelinux123.
12. On the target device, reconfigure the file system partition to support
*read* and *write*:
mount -o remount,rw /Copy to clipboard
exitCopy to clipboard
13. On the host computer, transfer the application installer to the target
device:
cd $ESDK_ROOT/tmp/deploy/ipk/armv8-2a/Copy to clipboard
scp qcom-gstreamer1.0-plugins-oss-sample-mlvclassification_1.0-r0_armv8-2a.ipk root@:/opt/Copy to clipboard
14. In the SSH shell, run the command on the target device to install the
application:
opkg --force-depends --force-reinstall --force-overwrite install /opt/qcom-gstreamer1.0-plugins-oss-sample-mlvclassification_1.0-r0_armv8-2a.ipkCopy to clipboard
Last Published: Jan 30, 2026
[Previous Topic
qtismartvencbin](https://docs.qualcomm.com/bundle/publicresource/80-70020-50/topics/qtismartvencbin.md) [Next Topic
Use GStreamer utilities for custom plugins](https://docs.qualcomm.com/bundle/publicresource/80-70020-50/topics/im-sdk-base-uitilities.md)