# Develop your own application

You can write AI/ML applications using one of the following
methods.

- Using Qualcomm IM SDK: You can leverage existing reference
applications to deploy your models or extend capabilities of
the Qualcomm IM SDK to add support for your own models and use cases. More
details are provided in the next section.
- Native C/C++ apps using AI SDK APIs: You can leverage AI SDK
samples for native AI/ML application development. You will need to
implement pre-/postprocessing in C/C++.

Qualcomm IM SDK, is a unified SDK enabling seamless multimedia and
AI/ML application deployment. This SDK uses GStreamer, an open-source multimedia
framework, and exposes APIs and plugins in both multimedia and ML
domains. For details, see the
[official SDK documentation](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-50/overview.html).

The Qualcomm IM SDK implements the following plugins for AI/ML
applications. A complete list of plugins can be found in the Qualcomm
IM SDK
[plugin documentation](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-50/qim-sdk-plugins.html).

## Download source code for development

The eSDK (extensible SDK) needs to be setup to develop
application/plugin code. See [Compile application: Qualcomm IM SDK](https://docs.qualcomm.com/doc/80-70017-15B/topic/compile-application-qualcomm-im-sdk.html) for
instructions on setting up the eSDK and downloading and compiling the source code.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export develop-own-app-imsdk-plugins.svg develop-own-app -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="11.5052in" height="5.29646in" viewbox="0 0 828.375 381.345" xml:space="preserve" color-interpolation-filters="sRGB" class="st13 svg-1" aria-label="../_images/develop-own-app-imsdk-plugins.svg" svgdefaultwidth="828"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st2 { fill: #2a2aea; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st3 { fill: #ffffff; font-family: Roboto; font-size: 1.16666em }
.svg-1 .st4 { fill: #f5f6f7; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st5 { fill: #000000; font-family: Roboto; font-size: 1.33333em; font-weight: bold }
.svg-1 .st6 { font-size: 1em }
.svg-1 .st7 { fill: #2a2aea; font-family: Roboto; font-size: 1.16666em }
.svg-1 .st8 { fill: #000000; font-family: Roboto; font-size: 1.16666em }
.svg-1 .st9 { marker-end: url("#1-mrkr13-59"); stroke: #843aff; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st10 { fill: #843aff; fill-opacity: 1; stroke: #843aff; stroke-opacity: 1; stroke-width: 0.35714285714286 }
.svg-1 .st11 { marker-end: url("#1-mrkr4-65"); stroke: #843aff; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st12 { fill: #ffffff; font-family: Roboto; font-size: 1.16666em; letter-spacing: -0.00714292em }
.svg-1 .st13 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend13">		<path d="M 3 1 L 0 0 L 3 -1 L 3 1 " style="stroke:none"></path>	</g>	<marker id="1-mrkr13-59" class="st10" v:arrowtype="13" v:arrowsize="1" v:setback="8.4" refx="-8.4" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend13" transform="scale(-2.8,-2.8) "></use>	</marker>	<g id="lend4">		<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"></path>	</g>	<marker id="1-mrkr4-65" class="st10" v:arrowtype="4" v:arrowsize="1" v:setback="5.6" refx="-5.6" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-2.8,-2.8) "></use>	</marker></defs><g v:mid="5" v:index="1" v:groupcontext="foregroundPage">	<title>develop-own-app</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="19" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Connector" v:index="0"></v:layer>	<g id="shape2-1" v:mid="2" v:groupcontext="shape" transform="translate(18.375,-18.375)">		<title>Sheet.2</title>		<rect x="0" y="36.75" width="791.625" height="344.595" class="st1"></rect>	</g>	<g id="shape1-3" v:mid="1" v:groupcontext="shape" transform="translate(32.5112,-177.814)">		<title>Sheet.1</title>		<desc>qtimlvconverter</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.6127" cy="367.201" width="127.23" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="127.225" height="28.2876" class="st2"></rect>		<text x="15.07" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvconverter</text>		</g>	<g id="shape3-6" v:mid="3" v:groupcontext="shape" transform="translate(226.883,-72)">		<title>Sheet.3</title>		<desc>ML inference plugin selected based on model type</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="118.39" cy="241.003" width="236.79" height="280.683"></v:textrect>		<rect x="0" y="100.661" width="236.781" height="280.683" class="st4"></rect>		<text x="14.2" y="119.06" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>ML inference plugin selected <tspan x="43.72" dy="1.2em" class="st6">based on model type</tspan></text>		</g>	<g id="shape4-10" v:mid="4" v:groupcontext="shape" transform="translate(560.261,-72)">		<title>Sheet.4</title>		<desc>Use cases supported by Qualcomm IM SDK</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="118.39" cy="241.003" width="236.79" height="280.683"></v:textrect>		<rect x="0" y="100.661" width="236.781" height="280.683" class="st4"></rect>		<text x="43.12" y="119.06" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Use cases supported <v:lf></v:lf><tspan x="40.4" dy="1.2em" class="st6">by Qualcomm IM SDK</tspan></text>		</g>	<g id="shape5-14" v:mid="5" v:groupcontext="shape" transform="translate(252.505,-110.953)">		<title>Sheet.5</title>		<desc>qtimlqnn</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="65.27" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlqnn</text>		</g>	<g id="shape6-17" v:mid="6" v:groupcontext="shape" transform="translate(249.855,-177.814)">		<title>Sheet.6</title>		<desc>qtimlsnpe</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="61.86" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlsnpe</text>		</g>	<g id="shape7-20" v:mid="7" v:groupcontext="shape" transform="translate(249.855,-247.248)">		<title>Sheet.7</title>		<desc>qtimltflite</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="62.86" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimltflite</text>		</g>	<g id="shape8-23" v:mid="8" v:groupcontext="shape" transform="translate(583.963,-164.25)">		<title>Sheet.8</title>		<desc>qtimlvsegmentation</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="30.7" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvsegmentation</text>		</g>	<g id="shape9-26" v:mid="9" v:groupcontext="shape" transform="translate(584.705,-205.712)">		<title>Sheet.9</title>		<desc>qtimlvdetection</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="44.43" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvdetection</text>		</g>	<g id="shape10-29" v:mid="10" v:groupcontext="shape" transform="translate(584.705,-247.891)">		<title>Sheet.10</title>		<desc>qtimlvclassification</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="32.05" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvclassification</text>		</g>	<g id="shape11-32" v:mid="11" v:groupcontext="shape" transform="translate(583.963,-123.106)">		<title>Sheet.11</title>		<desc>qtimlvpose</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="58.34" y="371.4" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qtimlvpose</text>		</g>	<g id="shape12-35" v:mid="12" v:groupcontext="shape" transform="translate(226.883,-18)">		<title>Sheet.12</title>		<desc>ML inference plugins</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="118.39" cy="361.87" width="236.79" height="38.949"></v:textrect>		<rect x="0" y="342.396" width="236.781" height="38.949" class="st1"></rect>		<text x="53.45" y="366.07" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>ML inference plugins</text>		</g>	<g id="shape13-38" v:mid="13" v:groupcontext="shape" transform="translate(561.11,-18.7755)">		<title>Sheet.13</title>		<desc>Qualcomm IM SDK postprocessing plugins</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="118.39" cy="361.87" width="236.79" height="38.949"></v:textrect>		<rect x="0" y="342.396" width="236.781" height="38.949" class="st1"></rect>		<text x="59.67" y="357.67" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm IM SDK <v:lf></v:lf><tspan x="45.89" dy="1.2em" class="st6">postprocessing plugins</tspan></text>		</g>	<g id="shape14-42" v:mid="14" v:groupcontext="shape" transform="translate(32.5112,-146.25)">		<title>Sheet.14</title>		<desc>Preprocessing</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.6127" cy="367.201" width="127.23" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="127.225" height="28.2876" class="st1"></rect>		<text x="18.75" y="371.4" class="st7" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Preprocessing</text>		</g>	<g id="shape15-45" v:mid="15" v:groupcontext="shape" transform="translate(252.505,-87.1062)">		<title>Sheet.15</title>		<desc>Used by BIN models</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st1"></rect>		<text x="30.18" y="371.4" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Used by BIN models</text>		</g>	<g id="shape16-48" v:mid="16" v:groupcontext="shape" transform="translate(249.855,-153.962)">		<title>Sheet.16</title>		<desc>Used by DLC models</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st1"></rect>		<text x="28.52" y="371.4" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Used by DLC models</text>		</g>	<g id="shape17-51" v:mid="17" v:groupcontext="shape" transform="translate(249.855,-222.75)">		<title>Sheet.17</title>		<desc>Used by TFLite models</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st1"></rect>		<text x="21.93" y="371.4" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Used by TFLite models</text>		</g>	<g id="shape24-54" v:mid="24" v:groupcontext="shape" v:layermember="0" transform="translate(159.737,-182.958)">		<title>Dynamic connector</title>		<path d="M0 372.34 L58.75 372.34" class="st9"></path>	</g>	<g id="shape26-60" v:mid="26" v:groupcontext="shape" transform="translate(464.253,-191.958)">		<title>Sheet.26</title>		<path d="M0 381.34 L90.41 381.34" class="st11"></path>	</g>	<g id="shape27-66" v:mid="27" v:groupcontext="shape" transform="translate(583.963,-82.6062)">		<title>Sheet.27</title>		<desc>qtimlvsuperresolution</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="92.7686" cy="367.201" width="185.54" height="28.2876"></v:textrect>		<rect x="0" y="353.057" width="185.537" height="28.2876" class="st2"></rect>		<text x="26.08" y="371.4" class="st12" v:langid="1033"><v:paragraph v:spbefore="2.95" v:horizalign="1" v:bulletsize="0.166667"></v:paragraph><v:tablist></v:tablist>qtimlvsuperresolution</text>		</g></g>
</svg>

The following pre-/postprocessing ML plugins are available with
the Qualcomm IM SDK. Use these plugins to develop your own use case.

| **Plugin** | **Functionality** |
| --- | --- |
| qtimlvconverter | Transforms incoming video buffers into neural-network tensors<br>while performing required format conversion and resizing. |
| qtimlvclassification | Performs postprocessing of output tensors for classification use<br>cases. |
| qtimlvdetection | Performs postprocessing of output tensors for detection use<br>cases. |
| qtimlvsegmentation | Performs postprocessing of output tensors for pixel-level use<br>cases, like image segmentation, depth-map, etc. |
| qtimlvpose | Performs postprocessing of output tensors for pose estimation<br>use cases. |
| qtimlvsuperresolution | Performs postprocessing of the output tensors for video super<br>resolution use cases. |

The Qualcomm IM SDK, supports the following use cases and related models.

| **Use cases supported by Qualcomm IM SDK** | **Supported Models** |
| --- | --- |
| Classification | Models like Mobilenet. Currently Qualcomm AI Hub has 11<br>classification models supported. New models will keep getting<br>added to AI Hub. |
| Detection | Models like ssd-mobilenet, yolov5, yolo-nas, and yolov8 |
| Segmentation | Models like deeplabv3\_resnet and ffnet |
| Pose detection | Models like posenet\_mobilenet |
| Super resolution | Models like QuickSRNet, XLSR, etc. |

Note

A list of verified models from Qualcomm AI Hub is available
in a [Integrate AI Hub models in an application](https://docs.qualcomm.com/doc/80-70017-15B/topic/integrate-ai-hub-models.html).

You can use many other models with similar postprocessing
requirements, however it is recommended to verify postprocessing
support in the relevant Qualcomm IM SDK plugins before integrating
your own model.

Last Published: Jan 21, 2026

[Previous Topic
Notes](https://docs.qualcomm.com/bundle/publicresource/80-70017-15B/topics/customize-reference-app.md) [Next Topic
Integrate Custom Model in an Application](https://docs.qualcomm.com/bundle/publicresource/80-70017-15B/topics/integrate-custom-model.md)