# 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)