# GStreamer ML plugin and AI SDK APIs

Qualcomm Linux provides [Qualcomm® Intelligent Multimedia SDK (IM SDK) GStreamer plugin APIs](https://docs.qualcomm.com/bundle/publicresource/topics/80-70022-50/qim-sdk-plugins.html)
to interface with Qualcomm AI Runtime SDK (QAIRT) APIs, to optimally run deep learning models on hardware modules such as <abbr title="Neural Processing Unit">neural Processing Unit (NPU)</abbr>,
<abbr title="Graphics Processing Unit">graphics Processing Unit (GPU)</abbr>, and <abbr title="Central Processing Unit">central Processing Unit (CPU)</abbr>.

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="8.28453in" viewbox="0 0 800.75 596.486" xml:space="preserve" color-interpolation-filters="sRGB" class="st24" 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: #fafafa; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st2 { fill: #000000; font-family: Roboto; font-size: 1.33333em }
.svg-1 .st3 { font-size: 1em }
.svg-1 .st4 { fill: #040a40; stroke: #4a5a75; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st5 { fill: #ffffff; font-family: Roboto; font-size: 1.33333em }
.svg-1 .st6 { fill: #3253dc; stroke: #d8d8d8; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st7 { baseline-shift: 32.4948%; font-size: 0.649895em }
.svg-1 .st8 { fill: #3253dc; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st9 { fill: #ffffff; font-family: Roboto; font-size: 1.24999em }
.svg-1 .st10 { baseline-shift: 32.495%; font-size: 0.6499em }
.svg-1 .st11 { fill: #7c8aa3; stroke: #7c8aa3; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.75 }
.svg-1 .st12 { fill: #fafafa; font-family: Roboto; font-size: 1.33333em }
.svg-1 .st13 { marker-end: url("#mrkr4-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("#mrkr4-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: #6280cc; stroke: #6280cc; 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: #3253dc; stroke: #f5f6f7; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st20 { fill: #7c8aa3; stroke: #7c8aa3; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st21 { fill: #040a40; stroke: #f5f6f7; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st22 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st23 { fill: #000000; font-family: Roboto; font-size: 1.16666em }
.svg-1 .st24 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend4">		<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"></path>	</g>	<marker id="mrkr4-54" class="st14" v:arrowtype="4" v:arrowsize="2" v:setback="4.52" refx="-4.52" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-2.26,-2.26) "></use>	</marker>	<marker id="mrkr4-65" class="st16" v:arrowtype="4" v:arrowsize="2" v:setback="4.88" refx="-4.88" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" 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.750005" width="800" height="595.736" rx="4" ry="4" class="st1"></rect>	</g>	<g id="shape1218-3" v:mid="1218" v:groupcontext="shape" transform="translate(18.584,-54.6081)">		<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="539.405" width="767.17" height="114.162"></v:textrect>		<rect x="0" y="482.325" width="767.166" height="114.162" rx="4.5" ry="4.5" class="st1"></rect>		<text x="4" y="500.73" class="st2" 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,-190.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="539.405" width="767.17" height="114.162"></v:textrect>		<rect x="0" y="482.325" width="767.166" height="114.162" rx="4.5" ry="4.5" class="st1"></rect>		<text x="4" y="500.73" class="st2" 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,-326.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="519.118" width="767.17" height="154.736"></v:textrect>		<rect x="0" y="441.75" width="767.166" height="154.736" rx="4.5" ry="4.5" class="st1"></rect>		<text x="4" y="460.15" class="st2" v:langid="1041"><v:paragraph></v:paragraph><v:tablist></v:tablist>Qualcomm <tspan class="st3" v:langid="1033">IMSDK </tspan>Gstreamer <tspan class="st3" v:langid="1033">plugins</tspan></text>		</g>	<g id="shape1221-14" v:mid="1221" v:groupcontext="shape" transform="translate(18.584,-510.779)">		<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="572.604" width="767.17" height="47.7652"></v:textrect>		<rect x="0" y="548.721" width="767.166" height="47.7652" rx="4.5" ry="4.5" class="st4"></rect>		<text x="330.8" y="577.4" class="st5" 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,-336.111)">		<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="541.236" width="310.52" height="110.5"></v:textrect>		<rect x="0" y="485.986" width="310.52" height="110.5" rx="4.5" ry="4.5" class="st6"></rect>		<text x="19.02" y="536.44" class="st5" v:langid="1041"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm<tspan dy="-0.235em" class="st7" v:basefontsize="16">®</tspan><tspan dy="0.153em" class="st3"> </tspan>Neural Processing Engine <tspan x="90.76" dy="1.2em" class="st3">plugin (qtimlsnpe)</tspan></text>		</g>	<g id="shape1223-23" v:mid="1223" v:groupcontext="shape" transform="translate(52.1191,-212.213)">		<title>Sheet.1223</title>		<desc>Qualcomm Neural Processing Engine</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="155.26" cy="565.092" width="310.52" height="62.7889"></v:textrect>		<rect x="0" y="533.697" width="310.52" height="62.7889" rx="4.5" ry="4.5" class="st8"></rect>		<text x="23.11" y="569.89" class="st5" v:langid="1041"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm Neural Processing Engine</text>		</g>	<g id="shape1224-26" v:mid="1224" v:groupcontext="shape" transform="translate(421.561,-336.111)">		<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="538.986" width="155.26" height="115"></v:textrect>		<rect x="0" y="481.486" width="155.26" height="115" rx="4.5" ry="4.5" class="st6"></rect>		<text x="37.26" y="525.49" class="st9" v:langid="1041"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm<tspan dy="-0.235em" class="st10" v:basefontsize="15">®</tspan><tspan dy="0.153em" class="st3"> </tspan><tspan x="24.82" dy="1.2em" class="st3">AI </tspan><tspan class="st3" v:langid="1033">E</tspan>ngine Direct <tspan x="20.81" dy="1.2em" class="st3">plugin (qtimlqnn)</tspan></text>		</g>	<g id="shape1225-34" v:mid="1225" v:groupcontext="shape" transform="translate(588.237,-336.111)">		<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="538.986" width="155.26" height="115"></v:textrect>		<rect x="0" y="481.486" width="155.26" height="115" rx="4.5" ry="4.5" class="st6"></rect>		<text x="24.35" y="525.49" class="st9" v:langid="1041"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>TensorFlow Lite <tspan x="57.3" dy="1.2em" class="st3">plugin<v:lf></v:lf></tspan><tspan x="38.56" dy="1.2em" class="st3"> </tspan>(qtimltflite)</text>		</g>	<g id="shape1226-39" v:mid="1226" v:groupcontext="shape" transform="translate(52.1191,-75.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="565.434" width="182.66" height="62.1039"></v:textrect>		<rect x="0" y="534.382" width="182.659" height="62.1039" rx="4.5" ry="4.5" class="st11"></rect>		<text x="75.39" y="560.63" class="st12" 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="st3">(DSP/HMX/HTP)</tspan></text>		</g>	<g id="shape1227-43" v:mid="1227" v:groupcontext="shape" transform="translate(306.479,-75.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="565.434" width="182.66" height="62.1039"></v:textrect>		<rect x="0" y="534.382" width="182.659" height="62.1039" rx="4.5" ry="4.5" class="st11"></rect>		<text x="75.65" y="570.23" class="st12" 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,-75.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="565.434" width="182.66" height="62.1039"></v:textrect>		<rect x="0" y="534.382" width="182.659" height="62.1039" rx="4.5" ry="4.5" class="st11"></rect>		<text x="75.89" y="570.23" class="st12" 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(998.653,85.7072) rotate(90)">		<title>Sheet.1229</title>		<path d="M0 596.49 L18.06 596.49" class="st13"></path>	</g>	<g id="shape1230-55" v:mid="1230" v:groupcontext="shape" transform="translate(803.865,259.76) rotate(90)">		<title>Sheet.1230</title>		<path d="M0 596.49 L52.68 596.49" class="st13"></path>	</g>	<g id="shape1231-60" v:mid="1231" v:groupcontext="shape" v:layermember="0" transform="translate(998.653,405.519) rotate(90)">		<title>Sheet.1231</title>		<path d="M0 596.49 L14.11 596.49" class="st15"></path>	</g>	<g id="shape1233-66" v:mid="1233" v:groupcontext="shape" transform="translate(421.561,-214.434)">		<title>Sheet.1233</title>		<desc>Qualcomm AI Engine Direct</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="160.968" cy="565.092" width="321.94" height="62.7889"></v:textrect>		<rect x="0" y="533.697" width="321.936" height="62.7889" rx="4.5" ry="4.5" class="st8"></rect>		<text x="38" y="559.09" class="st5" v:langid="1033"><v:paragraph v:indentleft="34" v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Q<tspan class="st3" v:langid="1041">ualcomm AI <v:lf></v:lf></tspan><tspan x="38" dy="1.5em" class="st3" v:langid="1041">Engine Direct</tspan></text>		</g>	<g id="shape1234-71" v:mid="1234" v:groupcontext="shape" transform="translate(1285.19,260.486) rotate(90)">		<title>Sheet.1234</title>		<path d="M0 596.49 L50.94 596.49" class="st13"></path>	</g>	<g id="shape1235-76" v:mid="1235" v:groupcontext="shape" transform="translate(1095.68,260.875) rotate(90)">		<title>Sheet.1235</title>		<path d="M0 596.49 L50.64 596.49" class="st13"></path>	</g>	<g id="shape1240-81" v:mid="1240" v:groupcontext="shape" transform="translate(630.375,-225.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="576.508" width="97.14" height="39.9566"></v:textrect>		<rect x="0" y="556.53" width="97.139" height="39.9566" rx="4.5" ry="4.5" class="st17"></rect>		<text x="29.06" y="572.31" 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="st3">Delegate</tspan></text>		</g>	<g id="shape1244-85" v:mid="1244" v:groupcontext="shape" transform="translate(361.541,-237.266) rotate(-0.105469)">		<title>Sheet.1244</title>		<path d="M0 596.49 L49.88 596.49" class="st13"></path>	</g>	<g id="shape1310-90" v:mid="1310" v:groupcontext="shape" transform="translate(453.28,-14.2835)">		<title>Sheet.1310</title>		<rect x="0" y="571.486" width="25" height="25" rx="4" ry="4" class="st19"></rect>	</g>	<g id="shape1311-92" v:mid="1311" v:groupcontext="shape" transform="translate(559.102,-14.2835)">		<title>Sheet.1311</title>		<rect x="0" y="571.486" width="25" height="25" rx="4" ry="4" class="st20"></rect>	</g>	<g id="shape1312-94" v:mid="1312" v:groupcontext="shape" transform="translate(661.081,-14.2835)">		<title>Sheet.1312</title>		<rect x="0" y="571.486" width="25" height="25" rx="4" ry="4" class="st21"></rect>	</g>	<g id="shape1314-96" v:mid="1314" v:groupcontext="shape" transform="translate(454.692,-13.6112)">		<title>Sheet.1314</title>		<desc>Qualcomm</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.1944" cy="583.986" width="126.39" height="25"></v:textrect>		<rect x="0" y="571.486" width="126.389" height="25" rx="4" ry="4" class="st22"></rect>		<text x="29.09" y="588.19" class="st23" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm</text>		</g>	<g id="shape1315-99" v:mid="1315" v:groupcontext="shape" transform="translate(559.692,-13.6112)">		<title>Sheet.1315</title>		<desc>Hardware</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.1944" cy="583.986" width="126.39" height="25"></v:textrect>		<rect x="0" y="571.486" width="126.389" height="25" rx="4" ry="4" class="st22"></rect>		<text x="32.94" y="588.19" class="st23" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Hardware</text>		</g>	<g id="shape1316-102" v:mid="1316" v:groupcontext="shape" transform="translate(661.081,-13.6112)">		<title>Sheet.1316</title>		<desc>Third-party</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63.1944" cy="583.986" width="126.39" height="25"></v:textrect>		<rect x="0" y="571.486" width="126.389" height="25" rx="4" ry="4" class="st22"></rect>		<text x="29.51" y="588.19" class="st23" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Third-party</text>		</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/bundle/publicresource/topics/80-70022-50/qtimlsnpe.html) | Uses [Qualcomm Neural Processing Engine](https://docs.qualcomm.com/bundle/publicresource/topics/80-63442-2) 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/bundle/publicresource/topics/80-70022-50/qtimlqnn.html) | Uses [Qualcomm AI Engine Direct](https://docs.qualcomm.com/bundle/publicresource/topics/80-63442-50) APIs, which provide low-level, unified API 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/bundle/publicresource/topics/80-70022-50/qtimltflite.html) | Accelerates LiteRT models directly using [Qualcomm AI Engine Direct](https://docs.qualcomm.com/bundle/publicresource/topics/80-63442-50) APIs to load and execute models.<br><br><br>Choose this plugin to directly run LiteRT models, without conversion. |

## <abbr title="Qualcomm AI Runtime SDK">qualcomm AI Runtime SDK (QAIRT)</abbr> APIs

Use these APIs to develop AI applications.

| [Qualcomm Neural Processing Engine SDK](https://docs.qualcomm.com/bundle/publicresource/topics/80-63442-2/api.html) | C, C++, and Java APIs to support heterogenous computing, system-level configurations, and direct AI workloads to all accelerator cores.<br><br><br>Provides you with flexibility, such as inter-core collaboration support. |
| --- | --- |
| [Qualcomm AI Engine Direct](https://docs.qualcomm.com/bundle/publicresource/topics/80-63442-50/api.html) | Low-level, highly customizable APIs that speed up AI models on all AI accelerator cores with individual libraries.<br><br><br>Use these APIs to target a specific accelerator core or delegate workloads from popular runtimes including the<br>Qualcomm Neural Processing Engine SDK, LiteRT, and ONNX runtimes. |

Last Published: Sep 15, 2025

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