# Create your Qualcomm IM SDK plugin 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. ## Update bitbake files for custom plugin compilation 1. Setup the environment. cd $ESDK_ROOT Copy to clipboard source environment-setup-armv8-2a-qcom-linux Copy 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" # Install directories. INSTALL_INCDIR := "${includedir}" ... Copy to clipboard 3. Create a directory named files in `$ESDK_ROOT/layers/meta-qcom-qim-product-sdk/recipes-gst/gstreamer/`. 4. 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 +-- README Copy to clipboard Note This assumes that source code is available for the `sample-mlvclassification` plugin. 5. 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 6. 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 7. Download the Qualcomm IM SDK plugin source code. cd $ESDK_ROOT Copy to clipboard devtool modify qcom-gstreamer1.0-plugins-oss-sample-mlvclassification Copy to clipboard Where `qcom-gstreamer1.0-plugins-oss-sample-mlvclassification` is the bitbake recipe that downloads the plugin source code. 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-mlvclassification Copy to clipboard 8. After customizing, use the following command to rebuild the plugin. devtool build qcom-gstreamer1.0-plugins-oss-sample-mlvclassification Copy to clipboard NOTE: Starting bitbake server ... Loading cache: 100% | | ETA -:--:-- Loaded 0 entries from dependency cache. ... Copy to clipboard 9. Generate the plugin installer (.ipk) to install the application on the device. devtool package qcom-gstreamer1.0-plugins-oss-sample-mlvclassification Copy 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/ipk Copy to clipboard 10. 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-mlvclassification Copy 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 11. Setup an SSH connection with the device by following the steps [here](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/how_to.html#use-ssh). Once successful, the RB3Gen2 device is accessible through its configured IP address. 12. 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. 13. Connect to the device through the SSH shell: ssh root@ Copy to clipboard Note If prompted, enter `oelinux123` as the password for the ssh shell. 14. Run the following command on the target device. mount -o remount,rw / exit Copy to clipboard 15. Run the following on the host computer: 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@< IP addr of the target device>:/opt/ Copy to clipboard 16. Connect to the device through the SSH shell: ssh root@ Copy to clipboard 17. Run 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.ipk Copy 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 Develop using devtool method](https://docs.qualcomm.com/bundle/publicresource/80-70017-15B/topics/create-your-own-application.md) [Next Topic Troubleshooting and FAQ](https://docs.qualcomm.com/bundle/publicresource/80-70017-15B/topics/troubleshooting.md)