# Overview

Source: [https://docs.qualcomm.com/doc/80-70014-20/topic/overview.html](https://docs.qualcomm.com/doc/80-70014-20/topic/overview.html)

The Qualcomm® Adreno™ Video Processing Unit (VPU) supports the hardware-based video
            decoding and encoding for various video codecs. The video encoding and decoding in
            Qualcomm-based SDKs are offloaded to the video engines to ensure that the CPU and GPU
            are free for other operations.

The video features of the Adreno VPU engines are exposed through the Qualcomm Linux
            Intelligent Multimedia Software Development Kit (QIM SDK) framework and the V4L2 (Video
            for Linux, version 2) APIs. For more information, see [Qualcomm Linux Intelligent Multimedia Software
                Development Kit (QIM SDK) Reference](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-50/overview.html).

The following figure shows the high-level architecture of the video software.
            Applications based on the V4L2 or GStreamer APIs can offload the encoding or decoding to
            Adreno VPU using the V4L2 API framework.

Figure : High-level architecture of the video software
                
                <?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 Highlevel video sw architecture.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="10.3194in" height="7.50694in" viewbox="0 0 743 540.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st17"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(0):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: #ffffff; stroke: #000000; stroke-width: 0.25 }
.svg-1 .st2 { fill: #acbacf; stroke: #666666; stroke-width: 0.25 }
.svg-1 .st3 { fill: #000000; font-family: Arial; font-size: 1.00001em }
.svg-1 .st4 { fill: #3253dc; stroke: #3253dc; stroke-width: 0.25 }
.svg-1 .st5 { fill: #ffffff; font-family: Arial; font-size: 1.00001em }
.svg-1 .st6 { stroke: #000000; stroke-dasharray: 7, 5; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st7 { fill: none; stroke: none; stroke-width: 0.25 }
.svg-1 .st8 { fill: #000000; font-family: Arial; font-size: 0.833336em; font-weight: bold }
.svg-1 .st9 { fill: none; stroke: #000000; stroke-width: 0.25 }
.svg-1 .st10 { fill: #ffffff; font-family: Arial; font-size: 0.833336em }
.svg-1 .st11 { font-size: 1em }
.svg-1 .st12 { fill: #000000; font-family: Arial; font-size: 0.75em }
.svg-1 .st13 { marker-end: url("#mrkr4-46"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st14 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.28409090909091 }
.svg-1 .st15 { marker-start: url("#mrkr4-62"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st16 { fill: #ffffff; font-family: Arial; font-size: 0.75em }
.svg-1 .st17 { 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-46" class="st14" v:arrowtype="4" v:arrowsize="2" v:setback="7.04" refx="-7.04" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-3.52,-3.52) "></use>	</marker>	<marker id="mrkr4-62" class="st14" v:arrowtype="4" v:arrowsize="2" v:setback="6.68" refx="6.68" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(3.52) "></use>	</marker></defs><g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<v:userdefs>		<v:ud v:nameu="msvThemeOrder" v:val="VT0(0):26"></v:ud>	</v:userdefs>	<title>Page-1</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="0" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Connector" v:index="0"></v:layer>	<g id="shape32-1" v:mid="32" v:groupcontext="shape" transform="translate(18,-18)">		<title></title>		<rect x="0" y="36.5" width="706.5" height="504" class="st1"></rect>	</g>	<g id="shape1-3" v:mid="1" v:groupcontext="shape" transform="translate(148.75,-450.25)">		<title></title>		<desc>Applications (V4L2, GStreamer)</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="180" cy="513.5" width="360.01" height="54"></v:textrect>		<rect x="0" y="486.5" width="360" height="54" rx="9" ry="9" class="st2"></rect>		<text x="95.3" y="517.1" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Applications (V4L2, GStreamer)</text>		</g>	<g id="shape2-6" v:mid="2" v:groupcontext="shape" transform="translate(148.75,-342.25)">		<title></title>		<desc>V4L2 framework</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="180" cy="513.5" width="360.01" height="54"></v:textrect>		<rect x="0" y="486.5" width="360" height="54" rx="9" ry="9" class="st2"></rect>		<text x="136.31" y="517.1" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>V4L2 framework</text>		</g>	<g id="shape3-9" v:mid="3" v:groupcontext="shape" transform="translate(148.75,-252.25)">		<title></title>		<desc>Adreno VPU driver</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="180" cy="513.5" width="360.01" height="54"></v:textrect>		<rect x="0" y="486.5" width="360" height="54" rx="9" ry="9" class="st4"></rect>		<text x="129.98" y="517.1" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Adreno VPU driver</text>		</g>	<g id="shape4-12" v:mid="4" v:groupcontext="shape" transform="translate(148.75,-144.25)">		<title></title>		<desc>Adreno VPU</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="180" cy="513.5" width="360.01" height="54"></v:textrect>		<rect x="0" y="486.5" width="360" height="54" rx="9" ry="9" class="st4"></rect>		<text x="146.65" y="517.1" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Adreno VPU</text>		</g>	<g id="shape6-15" v:mid="6" v:groupcontext="shape" transform="translate(40.75,-414.25)">		<title></title>		<path d="M0 540.5 L648 540.5" class="st6"></path>	</g>	<g id="shape7-18" v:mid="7" v:groupcontext="shape" transform="translate(40.75,-234.25)">		<title></title>		<path d="M0 540.5 L648 540.5" class="st6"></path>	</g>	<g id="shape8-21" v:mid="8" v:groupcontext="shape" transform="translate(607.75,-414.25)">		<title></title>		<desc>User space</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="531.5" width="81" height="18"></v:textrect>		<rect x="0" y="522.5" width="81" height="18" class="st7"></rect>		<text x="13.82" y="534.5" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>User space</text>		</g>	<g id="shape9-24" v:mid="9" v:groupcontext="shape" transform="translate(607.75,-234.25)">		<title></title>		<desc>Kernel space</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="531.5" width="81" height="18"></v:textrect>		<rect x="0" y="522.5" width="81" height="18" class="st7"></rect>		<text x="9.37" y="534.5" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Kernel space</text>		</g>	<g id="shape10-27" v:mid="10" v:groupcontext="shape" transform="translate(612.25,-180.25)">		<title></title>		<desc>Hardware</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="531.5" width="81" height="18"></v:textrect>		<rect x="0" y="522.5" width="81" height="18" class="st7"></rect>		<text x="17.71" y="534.5" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Hardware</text>		</g>	<g id="shape11-30" v:mid="11" v:groupcontext="shape" transform="translate(423.25,-153.25)">		<title></title>		<desc>Adreno VPU firmware</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="522.5" width="81" height="36"></v:textrect>		<rect x="0" y="504.5" width="81" height="36" rx="9" ry="9" class="st9"></rect>		<text x="12.71" y="519.5" class="st10" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Adreno VPU <tspan x="21.33" dy="1.2em" class="st11">firmware</tspan></text>		</g>	<g id="shape12-34" v:mid="12" v:groupcontext="shape" transform="translate(648,-36.25)">		<title></title>		<rect x="0" y="522.5" width="63" height="18" rx="9" ry="9" class="st2"></rect>	</g>	<g id="shape13-36" v:mid="13" v:groupcontext="shape" transform="translate(576,-36)">		<title></title>		<rect x="0" y="522.5" width="63" height="18" rx="9" ry="9" class="st4"></rect>	</g>	<g id="shape23-38" v:mid="23" v:groupcontext="shape" transform="translate(647.75,-36.25)">		<title></title>		<desc>Open source</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="31.5" cy="531.5" width="63" height="18"></v:textrect>		<rect x="0" y="522.5" width="63" height="18" class="st7"></rect>		<text x="5.73" y="534.2" class="st12" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Open source</text>		</g>	<g id="shape26-41" v:mid="26" v:groupcontext="shape" transform="translate(797.25,90.25) rotate(90)">		<title></title>		<path d="M0 540.5 L46.96 540.5" class="st13"></path>	</g>	<g id="shape27-47" v:mid="27" v:groupcontext="shape" transform="translate(797.25,198.25) rotate(90)">		<title></title>		<path d="M0 540.5 L28.96 540.5" class="st13"></path>	</g>	<g id="shape28-52" v:mid="28" v:groupcontext="shape" transform="translate(797.25,288.25) rotate(90)">		<title></title>		<path d="M0 540.5 L46.96 540.5" class="st13"></path>	</g>	<g id="shape29-57" v:mid="29" v:groupcontext="shape" transform="translate(941.25,90.25) rotate(90)">		<title></title>		<path d="M6.68 540.5 L7.04 540.5 L54 540.5" class="st15"></path>	</g>	<g id="shape30-63" v:mid="30" v:groupcontext="shape" transform="translate(941.25,198.25) rotate(90)">		<title></title>		<path d="M6.68 540.5 L7.04 540.5 L36 540.5" class="st15"></path>	</g>	<g id="shape31-68" v:mid="31" v:groupcontext="shape" transform="translate(941.25,288.25) rotate(90)">		<title></title>		<path d="M6.68 540.5 L7.04 540.5 L54 540.5" class="st15"></path>	</g>	<g id="shape21-73" v:mid="21" v:groupcontext="shape" transform="translate(575.75,-36)">		<title></title>		<desc>Qualcomm</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="31.5" cy="531.5" width="63" height="18"></v:textrect>		<rect x="0" y="522.5" width="63" height="18" class="st7"></rect>		<text x="9.74" y="534.2" class="st16" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm</text>		</g></g>
</svg>

Note: The Qualcomm Linux platform allows you to develop applications
            for QCS6490 and QCS5430.

Last Published: Jul 12, 2024

[Next Topic
Getting started](https://docs.qualcomm.com/bundle/publicresource/80-70014-20/topics/samples.md)