# GStreamer ML plugin and AI SDK APIs

Qualcomm Linux provides [Qualcomm® Intelligent Multimedia SDK (IM SDK) GStreamer plugin APIs](https://docs.qualcomm.com/doc/80-80021-50/topic/qim-sdk-plugins.html)
to interface with Qualcomm AI Runtime SDK (QAIRT) APIs, to optimally run deep learning models on hardware modules such as neural processing unit (NPU),
graphics processing unit (GPU), and central processing unit (CPU).

The following software block diagram shows how AI applications can call Qualcomm IM SDK GStreamer Plugin APIs (`qtimlsnpe`, `qtimlqnn`, `qtimltflite`) to
interface with and access QAIRT APIs to use a specific hardware accelerator.

<?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 top_level_ai_hw.svg Page-1 -->
<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.1215in" height="7.16319in" viewbox="0 0 800.75 515.75" xml:space="preserve" color-interpolation-filters="sRGB" class="st26" aria-label="Software block diagram showing that applications call Qualcomm APIs to use specific hardware accelerators."><v:documentproperties v:langid="1033" v:viewmarkup="false"></v:documentproperties>
<style>.svg-1 .st1 { fill: #ffffff; stroke: #ffffff; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st2 { fill: #ffffff; stroke: #d8d8d8; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st3 { fill: #000000; font-family: Roboto; font-size: 1.33333em }
.svg-1 .st4 { font-size: 1em }
.svg-1 .st5 { fill: #040a40; stroke: #4a5a75; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st6 { fill: #ffffff; font-family: Roboto; font-size: 1.33333em }
.svg-1 .st7 { fill: #3253dc; stroke: #d8d8d8; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st8 { baseline-shift: 32.4948%; font-size: 0.649895em }
.svg-1 .st9 { fill: #3253dc; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st10 { fill: #ffffff; font-family: Roboto; font-size: 1.24999em }
.svg-1 .st11 { baseline-shift: 32.495%; font-size: 0.6499em }
.svg-1 .st12 { fill: #d2d7e1; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st13 { marker-end: url("#1-mrkr13-54"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st14 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-1 .st15 { marker-end: url("#1-mrkr13-65"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.75 }
.svg-1 .st16 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.40983606557377 }
.svg-1 .st17 { fill: #7ba0ff; stroke: #7ba0ff; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st18 { fill: #ffffff; font-family: Roboto; font-size: 1.16666em }
.svg-1 .st19 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st20 { fill: #000000; font-family: Roboto; font-size: 0.833336em }
.svg-1 .st21 { fill: #2a2aea; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.24 }
.svg-1 .st22 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st23 { fill: #000000; font-family: Roboto; font-size: 0.75em }
.svg-1 .st24 { fill: #d2d7e1; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.24 }
.svg-1 .st25 { fill: #040a40; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.24 }
.svg-1 .st26 { 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-54" class="st14" v:arrowtype="13" v:arrowsize="2" v:setback="6.78" refx="-6.78" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend13" transform="scale(-2.26,-2.26) "></use>	</marker>	<marker id="1-mrkr13-65" class="st16" v:arrowtype="13" v:arrowsize="2" v:setback="7.32" refx="-7.32" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend13" transform="scale(-2.44,-2.44) "></use>	</marker></defs><g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<title>Page-1</title>	<v:pageproperties v:drawingscale="0.0138889" v:pagescale="0.0138889" v:drawingunits="29" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="full" v:index="0"></v:layer>	<g id="shape1313-1" v:mid="1313" v:groupcontext="shape" transform="translate(0.375,-0.375)">		<title>Sheet.1313</title>		<rect x="0" y="0.750002" width="800" height="515" rx="4" ry="4" class="st1"></rect>	</g>	<g id="shape1218-3" v:mid="1218" v:groupcontext="shape" transform="translate(18.584,-39.608)">		<title>Sheet.1218</title>		<desc>Hardware</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="383.583" cy="458.669" width="767.17" height="114.162"></v:textrect>		<rect x="0" y="401.588" width="767.166" height="114.162" rx="4.5" ry="4.5" class="st2"></rect>		<text x="4" y="419.99" class="st3" v:langid="1041"><v:paragraph></v:paragraph><v:tablist></v:tablist>Hardware</text>		</g>	<g id="shape1219-6" v:mid="1219" v:groupcontext="shape" transform="translate(18.584,-175.967)">		<title>Sheet.1219</title>		<desc>AI SDKs</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="383.583" cy="458.669" width="767.17" height="114.162"></v:textrect>		<rect x="0" y="401.588" width="767.166" height="114.162" rx="4.5" ry="4.5" class="st2"></rect>		<text x="4" y="419.99" class="st3" v:langid="1041"><v:paragraph></v:paragraph><v:tablist></v:tablist>AI SDKs</text>		</g>	<g id="shape1220-9" v:mid="1220" v:groupcontext="shape" transform="translate(18.584,-311.375)">		<title>Sheet.1220</title>		<desc>Qualcomm IMSDK Gstreamer plugins</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="383.583" cy="458.669" width="767.17" height="114.162"></v:textrect>		<rect x="0" y="401.588" width="767.166" height="114.162" rx="4.5" ry="4.5" class="st2"></rect>		<text x="4" y="419.99" class="st3" v:langid="1041"><v:paragraph></v:paragraph><v:tablist></v:tablist>Qualcomm <tspan class="st4" v:langid="1033">IMSDK </tspan>Gstreamer <tspan class="st4" v:langid="1033">plugins</tspan></text>		</g>	<g id="shape1221-14" v:mid="1221" v:groupcontext="shape" transform="translate(18.584,-452.637)">		<title>Sheet.1221</title>		<desc>AI applications</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="383.583" cy="491.867" width="767.17" height="47.7652"></v:textrect>		<rect x="0" y="467.985" width="767.166" height="47.7652" rx="4.5" ry="4.5" class="st5"></rect>		<text x="330.8" y="496.67" class="st6" v:langid="1041"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>AI applications</text>		</g>	<g id="shape1222-17" v:mid="1222" v:groupcontext="shape" transform="translate(52.1191,-332.623)">		<title>Sheet.1222</title>		<desc>Qualcomm® Neural Processing Engine plugin (qtimlsnpe)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="155.26" cy="484.333" width="310.52" height="62.8345"></v:textrect>		<rect x="0" y="452.915" width="310.52" height="62.8345" rx="4.5" ry="4.5" class="st7"></rect>		<text x="19.02" y="479.53" class="st6" v:langid="1041"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm<tspan dy="-0.235em" class="st8" v:basefontsize="16">®</tspan><tspan dy="0.153em" class="st4"> </tspan>Neural Processing Engine <tspan x="90.76" dy="1.2em" class="st4">plugin (qtimlsnpe)</tspan></text>		</g>	<g id="shape1223-23" v:mid="1223" v:groupcontext="shape" transform="translate(52.1191,-197.213)">		<title>Sheet.1223</title>		<desc>Qualcomm AI Runtime SDK</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="346.628" cy="484.356" width="693.26" height="62.7889"></v:textrect>		<rect x="0" y="452.961" width="693.256" height="62.7889" rx="4.5" ry="4.5" class="st9"></rect>		<text x="249.75" y="489.16" class="st6" v:langid="1041"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm <tspan class="st4" v:langid="1033">AI Runtime SDK</tspan></text>		</g>	<g id="shape1224-27" v:mid="1224" v:groupcontext="shape" transform="translate(421.561,-332.623)">		<title>Sheet.1224</title>		<desc>Qualcomm® AI Engine Direct plugin (qtimlqnn)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="77.6299" cy="484.333" width="155.26" height="62.8345"></v:textrect>		<rect x="0" y="452.915" width="155.26" height="62.8345" rx="4.5" ry="4.5" class="st7"></rect>		<text x="4.07" y="470.83" class="st10" v:langid="1041"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm<tspan dy="-0.235em" class="st11" v:basefontsize="15">®</tspan><tspan dy="0.153em" class="st4"> </tspan>AI Engine <tspan x="35.82" dy="1.2em" class="st4">Direct plugin </tspan><tspan x="42.99" dy="1.2em" class="st4">(qtimlqnn)</tspan></text>		</g>	<g id="shape1225-34" v:mid="1225" v:groupcontext="shape" transform="translate(588.237,-332.623)">		<title>Sheet.1225</title>		<desc>TensorFlow Lite plugin (qtimltflite)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="77.6299" cy="484.333" width="155.26" height="62.8345"></v:textrect>		<rect x="0" y="452.915" width="155.26" height="62.8345" rx="4.5" ry="4.5" class="st7"></rect>		<text x="24.35" y="470.83" class="st10" v:langid="1041"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>TensorFlow Lite <tspan x="57.3" dy="1.2em" class="st4">plugin<v:lf></v:lf></tspan><tspan x="38.56" dy="1.2em" class="st4"> </tspan>(qtimltflite)</text>		</g>	<g id="shape1226-39" v:mid="1226" v:groupcontext="shape" transform="translate(52.1191,-60.0209)">		<title>Sheet.1226</title>		<desc>NPU (DSP/HMX/HTP)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="91.3293" cy="484.698" width="182.66" height="62.1039"></v:textrect>		<rect x="0" y="453.646" width="182.659" height="62.1039" rx="4.5" ry="4.5" class="st12"></rect>		<text x="75.39" y="479.9" class="st3" v:langid="1041"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>NPU <v:newlinechar></v:newlinechar><v:paragraph v:horizalign="1"></v:paragraph><tspan x="30.95" dy="1.2em" class="st4">(DSP/HMX/HTP)</tspan></text>		</g>	<g id="shape1227-43" v:mid="1227" v:groupcontext="shape" transform="translate(306.479,-60.0209)">		<title>Sheet.1227</title>		<desc>GPU</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="91.3293" cy="484.698" width="182.66" height="62.1039"></v:textrect>		<rect x="0" y="453.646" width="182.659" height="62.1039" rx="4.5" ry="4.5" class="st12"></rect>		<text x="75.65" y="489.5" class="st3" v:langid="1041"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>GPU</text>		</g>	<g id="shape1228-46" v:mid="1228" v:groupcontext="shape" transform="translate(560.838,-60.0209)">		<title>Sheet.1228</title>		<desc>CPU</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="91.3293" cy="484.698" width="182.66" height="62.1039"></v:textrect>		<rect x="0" y="453.646" width="182.659" height="62.1039" rx="4.5" ry="4.5" class="st12"></rect>		<text x="75.89" y="489.5" class="st3" v:langid="1041"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>CPU</text>		</g>	<g id="shape1229-49" v:mid="1229" v:groupcontext="shape" v:layermember="0" transform="translate(917.917,63.1128) rotate(90)">		<title>Sheet.1229</title>		<path d="M0 515.75 L13.54 515.75" class="st13"></path>	</g>	<g id="shape1230-55" v:mid="1230" v:groupcontext="shape" transform="translate(723.129,183.37) rotate(90)">		<title>Sheet.1230</title>		<path d="M0 515.75 L58.82 515.75" class="st13"></path>	</g>	<g id="shape1231-60" v:mid="1231" v:groupcontext="shape" v:layermember="0" transform="translate(917.917,339.783) rotate(90)">		<title>Sheet.1231</title>		<path d="M0 515.75 L9.84 515.75" class="st15"></path>	</g>	<g id="shape1234-66" v:mid="1234" v:groupcontext="shape" transform="translate(1204.45,182.401) rotate(90)">		<title>Sheet.1234</title>		<path d="M0 515.75 L58.77 515.75" class="st13"></path>	</g>	<g id="shape1235-71" v:mid="1235" v:groupcontext="shape" transform="translate(1014.94,182.49) rotate(90)">		<title>Sheet.1235</title>		<path d="M0 515.75 L58.77 515.75" class="st13"></path>	</g>	<g id="shape1240-76" v:mid="1240" v:groupcontext="shape" transform="translate(630.375,-210.851)">		<title>Sheet.1240</title>		<desc>TFLite Delegate</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48.5695" cy="495.772" width="97.14" height="39.9566"></v:textrect>		<rect x="0" y="475.793" width="97.139" height="39.9566" rx="4.5" ry="4.5" class="st17"></rect>		<text x="29.06" y="491.57" class="st18" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>TFLite <tspan x="21.13" dy="1.2em" class="st4">Delegate</tspan></text>		</g>	<g id="shape1314-80" v:mid="1314" v:groupcontext="shape" transform="translate(719.183,-5.37486)">		<title>Sheet.1314</title>		<desc>Third-party</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="31.1918" cy="505.75" width="62.39" height="20"></v:textrect>		<rect x="0" y="495.75" width="62.3835" height="20" rx="4" ry="4" class="st19"></rect>		<text x="7.13" y="508.75" class="st20" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Third-party</text>		</g>	<g id="shape1315-83" v:mid="1315" v:groupcontext="shape" transform="translate(642.704,-9.94343)">		<title>Sheet.1315</title>		<desc>Hardware</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="27.6711" cy="510.318" width="55.35" height="10.8629"></v:textrect>		<rect x="0" y="504.887" width="55.3422" height="10.8629" rx="4" ry="4" class="st19"></rect>		<text x="6.06" y="513.32" class="st20" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Hardware</text>		</g>	<g id="shape1319-86" v:mid="1319" v:groupcontext="shape" transform="translate(546.605,-8.6251)">		<title>Rectangle.69</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<rect x="0" y="502.25" width="13.1696" height="13.5" rx="1.44" ry="1.44" class="st21"></rect>	</g>	<g id="shape1320-88" v:mid="1320" v:groupcontext="shape" transform="translate(559.883,-9.97591)">		<title>Sheet.1320</title>		<desc>Qualcomm</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="27.7457" cy="510.351" width="55.5" height="10.7984"></v:textrect>		<rect x="0" y="504.952" width="55.4915" height="10.7984" class="st22"></rect>		<text x="5.82" y="513.05" class="st23" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm</text>		</g>	<g id="shape1321-91" v:mid="1321" v:groupcontext="shape" transform="translate(628.375,-8.6251)">		<title>Rectangle.1321</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<rect x="0" y="502.25" width="13.1696" height="13.5" rx="1.44" ry="1.44" class="st24"></rect>	</g>	<g id="shape1322-93" v:mid="1322" v:groupcontext="shape" transform="translate(706.375,-8.6251)">		<title>Rectangle.1322</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<rect x="0" y="502.25" width="13.1696" height="13.5" rx="1.44" ry="1.44" class="st25"></rect>	</g></g>
</svg>

## GStreamer Plugin APIs

Three GStreamer ML plugin APIs support the QAIRT SDK and TFLite, which provides flexibility for you to choose the right combination for your needs.

| [Qualcomm IM SDK plugin for Qualcomm Neural Processing Engine (qtimlsnpe)](https://docs.qualcomm.com/doc/80-80021-50/topic/qtimlsnpe.html) | Uses [Qualcomm AI Runtime](https://docs.qualcomm.com/doc/80-63442-10/topic/SNPE_general_api.html) APIs to load and execute models.<br><br><br>Choose this plugin for quick prototyping and high-level API support. |
| --- | --- |
| [Qualcomm IM SDK plugin for Qualcomm AI Engine Direct plugin (qtimlqnn)](https://docs.qualcomm.com/doc/80-80021-50/topic/qtimlqnn.html) | Uses [Qualcomm AI Runtime](https://docs.qualcomm.com/doc/80-63442-10/topic/general_api.html) APIs, which provide low-level, unified API<br>and improved performance to optimize and execute network models on the desired hardware accelerator.<br><br><br>Choose this plugin for advanced graph execution options and optimizations. |
| [Qualcomm IM SDK plugin for LiteRT (qtimltflite)](https://docs.qualcomm.com/doc/80-80021-50/topic/qtimltflite.html) | Accelerates LiteRT models directly using [Qualcomm AI Runtime](https://docs.qualcomm.com/doc/80-63442-10/topic/index_QNN.html)<br>APIs to load and execute models.<br><br><br>Choose this plugin to directly run LiteRT models, without conversion. |

## Qualcomm AI Runtime SDK APIs

Use the [QAIRT](https://docs.qualcomm.com/doc/80-63442-10/) APIs to develop AI applications. The C, C++, and Java APIs support heterogenous computing,
system-level configurations, and direct AI workloads to all accelerator cores. QAIRT provides low-level,
highly customizable APIs to target a specific accelerator core or delegate workloads from popular runtimes
including the LiteRT and ONNX runtimes.

Last Published: Mar 18, 2026

[Previous Topic
AI software overview and architecture](https://docs.qualcomm.com/bundle/publicresource/80-80021-15/topics/overview.md) [Next Topic
Hardware-accelerated sample applications for AI](https://docs.qualcomm.com/bundle/publicresource/80-80021-15/topics/sample-apps.md)