# Creating your Qualcomm IM SDK plugin Source: [https://docs.qualcomm.com/doc/80-70015-15B/topic/esdk-create-own-plugin.html](https://docs.qualcomm.com/doc/80-70015-15B/topic/esdk-create-own-plugin.html) This section explains how to create a new plugin and compile it as part of the Qualcomm Intelligent Multimedia Product SDK. Each ML plugin is integrated into as an independent bitbake recipe. **Steps to update bitbake files for custom plugin compilation** 1. Setup 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. Add a new bitbake file under $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.bb 1. Copy the contents from an existing plugin like $ESDK\_ROOT/layers/meta-qcom-qim-product-sdk/recipes-gst/gstreamer/qcom-gstreamer1.0-plugins-oss-mlvclassification.bb to this new file. 2. Update the following variables as shown below. SUMMARY = "My custom plugin for ML image categorization" SRC_URI = "file://gst-plugin-sample-mlvclassification" S = "${WORKDIR}/gst-plugin-sample-mlvclassification"Copy to clipboard ... 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" 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 named `files` in the $ESDK\_ROOT/layers/meta-qcom-qim-product-sdk/recipes-gst/gstreamer/files path. Create the gst-plugin-sample-mlvclassification directory under the files directory and copy the Qualcomm IM SDK plugin source code inside the directory. files | +-- gst-plugin-sample-mlvclassification | +-- CMakeLists.txt +-- config.h.in +-- mlvclassification.c +-- mlvclassification.h +-- modules | +-- CMakeLists.txt +-- ml-vclassification-ocr.c +-- ml-vclassification-qfr.c +-- READMECopy to clipboard Note: This assumes that source code is available for the `sample-mlvclassification` plugin. 4. Update $ESDK\_ROOT/layers/meta-qcom-qim-product-sdk/recipes-gst/packagegroups/packagegroup-qcom-gst.bb to add `qcom-gstreamer1.0-plugins-oss-sample-mlvclassification` in `RDEPENDS`. RDEPENDS:${PN}:qcom-custom-bsp = " \ ${PN}-dependencies \ ${PN}-basic \ . . . qcom-gstreamer1.0-plugins-oss-sample-mlvclassification \ "Copy to clipboard 5. Update $ESDK\_ROOT/layers/meta-qcom-qim-product-sdk/classes/qimsdk-pkg.bbclass to add `qcom-gstreamer1.0-plugins-oss-sample-mlvclassification:do_package_write_ipk` in `do_generate_qim_sdk[depends]`. 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 source code. cd $ESDK_ROOTCopy to clipboard devtool modify qcom-gstreamer1.0-plugins-oss-sample-mlvclassificationCopy to clipboard Where *qcom-gstreamer1.0-plugins-oss-sample-mlvclassification* is the bitbake recipe that downloads the plugin sources. 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 to $ESDK\_ROOT/workspace/sources/qcom-gstreamer1.0-plugins-oss-sample-mlvclassification. 7. After customizing, use 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. Generate the plugin installer (.ipk) to install the application on the device. devtool package qcom-gstreamer1.0-plugins-oss-sample-mlvclassificationCopy to clipboard 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 Verify that the installable package is present at the following path. ls $ESDK_ROOT/tmp/deploy/ipk/armv8-2a | grep qcom-gstreamer1.0-plugins-oss-sample-mlvclassificationCopy to clipboard qcom-gstreamer1.0-plugins-oss-sample-mlvclassification_1.0-r0_armv8-2a.ipk qcom-gstreamer1.0-plugins-oss-sample-mlvclassification_dbg_1.0-r0_armv8-2a.ipk qcom-gstreamer1.0-plugins-oss-sample-mlvclassification_dev_1.0-r0_armv8-2a.ipk qcom-gstreamer1.0-plugins-oss-sample-mlvclassification_src_1.0-r0_armv8-2a.ipk [/local/mnt/workspace/Platform_eSDK_plus_QIM]$Copy to clipboard 9. Setup an SSH connection with the device by following the steps [here](https://docs.qualcomm.com/bundle/publicresource/topics/80-70015-254/how_to.html#use-ssh). Once successful, the RB3Gen2 device is accessible through its configured IP address. 10. Copy the qcom-gstreamer1.0-plugins-oss-sample-mlvclassification\_1.0-r0\_armv8-2a.ipk to the RB3Gen2 device to install the compiled reference apps. 11. Log in to SSH shell: ssh root@Copy to clipboard Note: If prompted, enter oelinux123 as the password for the ssh shell. Run the following command on the target device. mount -o remount,rw / exitCopy to clipboard Do the following on the host machine: cd $ESDK_ROOT/tmp/deploy/ipk/armv8-2a/ scp qcom-gstreamer1.0-plugins-oss-sample-mlvclassification_1.0-r0_armv8-2a.ipk root@< IP addr of the target device>:/opt/Copy to clipboard Log in to SSH shell: ssh root@Copy to clipboard Do the following on the target device: opkg --force-depends --force-reinstall --force-overwrite install /opt/qcom-gstreamer1.0-plugins-oss-sample-mlvclassification_1.0-r0_armv8-2a.ipkCopy to clipboard The new plugin is now installed and can be used by applications that need the plugin. Last Published: Jan 21, 2026 [Previous Topic Creating your own application](https://docs.qualcomm.com/bundle/publicresource/80-70015-15B/topics/esdk-create-own-app.md) [Next Topic Troubleshooting](https://docs.qualcomm.com/bundle/publicresource/80-70015-15B/topics/troubleshooting.md)