# Architecture

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

The video software stack consists of a client application that interacts with the Adreno
            VPU using the V4L2 framework. The following figures show the software architecture for
            decoder and encoder:

Figure : Video decoder software architecture
                
                <?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 Video decoder 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="9.51042in" viewbox="0 0 743 684.75" xml:space="preserve" color-interpolation-filters="sRGB" class="st23"><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: #f7f8fa; stroke: #c8c8c8; 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: #ffffff; font-family: Arial; font-size: 0.75em }
.svg-1 .st13 { fill: #000000; font-family: Arial; font-size: 0.75em }
.svg-1 .st14 { marker-end: url("#mrkr4-49"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st15 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.28409090909091 }
.svg-1 .st16 { fill: #ffffff; stroke: none; stroke-linecap: butt; stroke-width: 7.2 }
.svg-1 .st17 { fill: #ffffff; stroke: none; stroke-linecap: butt }
.svg-1 .st18 { font-size: 0.888885em }
.svg-1 .st19 { marker-start: url("#mrkr4-72"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st20 { fill: #acbacf; stroke: #000000; stroke-width: 0.25 }
.svg-1 .st21 { fill: #000000; font-family: Arial; font-size: 0.833336em }
.svg-1 .st22 { fill: #ffffff; stroke: #666666; stroke-width: 0.25 }
.svg-1 .st23 { 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-49" class="st15" 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-72" class="st15" 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>	<v:layer v:name="Flowchart" v:index="1"></v:layer>	<g id="shape46-1" v:mid="46" v:groupcontext="shape" transform="translate(18,-18)">		<title></title>		<rect x="0" y="36" width="707" height="648.75" class="st1"></rect>	</g>	<g id="shape1-3" v:mid="1" v:groupcontext="shape" transform="translate(148.75,-603.5)">		<title></title>		<desc>Applications (V4L2, GStreamer)</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="180" cy="657.75" width="360.01" height="54"></v:textrect>		<rect x="0" y="630.75" width="360" height="54" rx="9" ry="9" class="st2"></rect>		<text x="95.3" y="661.35" 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,-387.5)">		<title></title>		<desc>V4L2 framework</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="180" cy="657.75" width="360.01" height="54"></v:textrect>		<rect x="0" y="630.75" width="360" height="54" rx="9" ry="9" class="st2"></rect>		<text x="136.31" y="661.35" 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,-261.5)">		<title></title>		<desc>Adreno VPU driver</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="180" cy="657.75" width="360.01" height="54"></v:textrect>		<rect x="0" y="630.75" width="360" height="54" rx="9" ry="9" class="st4"></rect>		<text x="129.98" y="661.35" 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,-135.5)">		<title></title>		<desc>Adreno VPU</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="180" cy="657.75" width="360.01" height="54"></v:textrect>		<rect x="0" y="630.75" width="360" height="54" rx="9" ry="9" class="st4"></rect>		<text x="146.65" y="661.35" 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,-468.5)">		<title></title>		<path d="M0 684.75 L648 684.75" class="st6"></path>	</g>	<g id="shape7-18" v:mid="7" v:groupcontext="shape" transform="translate(40.75,-243.5)">		<title></title>		<path d="M0 684.75 L648 684.75" class="st6"></path>	</g>	<g id="shape8-21" v:mid="8" v:groupcontext="shape" transform="translate(607.75,-486.5)">		<title></title>		<desc>User space</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="675.75" width="81" height="18"></v:textrect>		<rect x="0" y="666.75" width="81" height="18" class="st7"></rect>		<text x="13.82" y="678.75" 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,-243.5)">		<title></title>		<desc>Kernel space</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="675.75" width="81" height="18"></v:textrect>		<rect x="0" y="666.75" width="81" height="18" class="st7"></rect>		<text x="9.37" y="678.75" 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,-207.5)">		<title></title>		<desc>Hardware</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="675.75" width="81" height="18"></v:textrect>		<rect x="0" y="666.75" width="81" height="18" class="st7"></rect>		<text x="17.71" y="678.75" 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,-144.5)">		<title></title>		<desc>Adreno VPU firmware</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="666.75" width="81" height="36"></v:textrect>		<rect x="0" y="648.75" width="81" height="36" rx="9" ry="9" class="st9"></rect>		<text x="12.71" y="663.75" 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(637,-45)">		<title></title>		<rect x="0" y="666.75" width="63" height="18" rx="9" ry="9" class="st2"></rect>	</g>	<g id="shape13-36" v:mid="13" v:groupcontext="shape" transform="translate(558.25,-45)">		<title></title>		<rect x="0" y="666.75" width="63" height="18" rx="9" ry="9" class="st4"></rect>	</g>	<g id="shape21-38" v:mid="21" v:groupcontext="shape" transform="translate(558,-45)">		<title></title>		<desc>Qualcomm</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="31.5" cy="675.75" width="63" height="18"></v:textrect>		<rect x="0" y="666.75" width="63" height="18" class="st7"></rect>		<text x="9.74" y="678.45" class="st12" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm</text>		</g>	<g id="shape23-41" v:mid="23" v:groupcontext="shape" transform="translate(636.75,-45)">		<title></title>		<desc>Open source</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="31.5" cy="675.75" width="63" height="18"></v:textrect>		<rect x="0" y="666.75" width="63" height="18" class="st7"></rect>		<text x="5.73" y="678.45" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Open source</text>		</g>	<g id="shape26-44" v:mid="26" v:groupcontext="shape" transform="translate(977.5,81.25) rotate(90)">		<title></title>		<desc>Bitstream buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="81" cy="684.75" width="162.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M0 684.75 L154.96 684.75" class="st14"></path>		<rect v:rectcontext="textBkgnd" x="-716.511" y="75.5999" width="63.5229" height="10.7998" transform="rotate(-90)" class="st16"></rect>		<text x="-716.51" y="83.7" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Bitstream buffer</text>		</g>	<g id="shape27-52" v:mid="27" v:groupcontext="shape" transform="translate(977.5,297.25) rotate(90)">		<title></title>		<desc>Bitstream buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="36" cy="684.75" width="72.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M0 684.75 L64.96 684.75" class="st14"></path>		<rect v:rectcontext="textBkgnd" x="-716.511" y="30.5999" width="63.5229" height="10.7998" transform="rotate(-90)" class="st17"></rect>		<text x="-716.51" y="38.7" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Bitstream buffer</text>		</g>	<g id="shape28-59" v:mid="28" v:groupcontext="shape" transform="translate(977.5,423.25) rotate(90)">		<title></title>		<desc>Bitstream buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="36" cy="684.75" width="72.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M0 684.75 L64.96 684.75" class="st14"></path>		<rect v:rectcontext="textBkgnd" x="-715.233" y="30.5999" width="60.9656" height="10.7998" transform="rotate(-90)" class="st16"></rect>		<text x="-715.23" y="38.7" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Bitstream <tspan class="st18">buffer</tspan></text>		</g>	<g id="shape29-67" v:mid="29" v:groupcontext="shape" transform="translate(1085.5,81.25) rotate(90)">		<title></title>		<desc>YUV buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="81" cy="684.75" width="162.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M6.68 684.75 L7.04 684.75 L162 684.75" class="st19"></path>		<rect v:rectcontext="textBkgnd" x="-706.76" y="75.5999" width="44.02" height="10.7998" transform="rotate(-90)" class="st16"></rect>		<text x="-706.76" y="83.7" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>YUV buffer</text>		</g>	<g id="shape30-75" v:mid="30" v:groupcontext="shape" transform="translate(1085.5,297.25) rotate(90)">		<title></title>		<desc>YUV buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="36" cy="684.75" width="72.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M6.68 684.75 L7.04 684.75 L72 684.75" class="st19"></path>		<rect v:rectcontext="textBkgnd" x="-706.76" y="30.5999" width="44.02" height="10.7998" transform="rotate(-90)" class="st17"></rect>		<text x="-706.76" y="38.7" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>YUV buffer</text>		</g>	<g id="shape31-82" v:mid="31" v:groupcontext="shape" transform="translate(1085.5,423.25) rotate(90)">		<title></title>		<desc>YUV buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="36" cy="684.75" width="72.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M6.68 684.75 L7.04 684.75 L72 684.75" class="st19"></path>		<rect v:rectcontext="textBkgnd" x="-706.76" y="30.5999" width="44.02" height="10.7998" transform="rotate(-90)" class="st16"></rect>		<text x="-706.76" y="38.7" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>YUV buffer</text>		</g>	<g id="shape33-89" v:mid="33" v:groupcontext="shape" transform="translate(148.75,-540.5)">		<title></title>		<desc>Demuxer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="675.75" width="81" height="18"></v:textrect>		<rect x="0" y="666.75" width="81" height="18" rx="9" ry="9" class="st20"></rect>		<text x="20.22" y="678.75" class="st21" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Demuxer</text>		</g>	<g id="shape34-92" v:mid="34" v:groupcontext="shape" transform="translate(148.75,-477.5)">		<title></title>		<desc>FileSource</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="675.75" width="81" height="18"></v:textrect>		<rect x="0" y="666.75" width="81" height="18" rx="9" ry="9" class="st9"></rect>		<text x="16.6" y="678.75" class="st21" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>FileSource</text>		</g>	<g id="shape35-95" v:mid="35" v:groupcontext="shape" transform="translate(580.75,-603.5)">		<title></title>		<desc>Display</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="67.5" cy="657.75" width="135.01" height="54"></v:textrect>		<rect x="0" y="630.75" width="135" height="54" rx="9" ry="9" class="st22"></rect>		<text x="47.83" y="661.35" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Display</text>		</g>	<g id="shape36-98" v:mid="36" v:groupcontext="shape" transform="translate(508.75,-630.5)">		<title></title>		<desc>YUV buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="36" cy="684.75" width="72.01" height="0"></v:textrect>		<path d="M0 684.75 L64.96 684.75" class="st14"></path>		<rect v:rectcontext="textBkgnd" x="13.99" y="679.35" width="44.02" height="10.7998" class="st17"></rect>		<text x="13.99" y="687.45" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>YUV buffer</text>		</g>	<g id="shape39-105" v:mid="39" v:groupcontext="shape" transform="translate(869.5,81.25) rotate(90)">		<title></title>		<desc>Bitstream buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="22.5" cy="684.75" width="45.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M6.68 684.75 L7.04 684.75 L45 684.75" class="st19"></path>		<rect v:rectcontext="textBkgnd" x="-703.754" y="11.7002" width="38.0083" height="21.5997" transform="rotate(-90)" class="st16"></rect>		<text x="-703.75" y="19.8" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Bitstream <tspan x="-696.26" dy="1.2em" class="st11">buffer</tspan></text>		</g>	<g id="shape44-113" v:mid="44" v:groupcontext="shape" transform="translate(869.5,144.25) rotate(90)">		<title></title>		<desc>Container file</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="22.5" cy="684.75" width="45.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M6.68 684.75 L7.04 684.75 L45 684.75" class="st19"></path>		<rect v:rectcontext="textBkgnd" x="-704.262" y="11.7002" width="39.0234" height="21.5997" transform="rotate(-90)" class="st16"></rect>		<text x="-704.26" y="19.8" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Container <tspan x="-690.5" dy="1.2em" class="st11">file</tspan></text>		</g></g>
</svg>

Figure : Video encoder software architecture
                
                <?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 Video encoder 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="9.00694in" viewbox="0 0 743 648.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st21"><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-2 .st1 { fill: #f7f8fa; stroke: #c8c8c8; stroke-width: 0.25 }
.svg-2 .st2 { fill: #acbacf; stroke: #666666; stroke-width: 0.25 }
.svg-2 .st3 { fill: #000000; font-family: Arial; font-size: 1.00001em }
.svg-2 .st4 { fill: #3253dc; stroke: #3253dc; stroke-width: 0.25 }
.svg-2 .st5 { fill: #ffffff; font-family: Arial; font-size: 1.00001em }
.svg-2 .st6 { stroke: #000000; stroke-dasharray: 7, 5; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-2 .st7 { fill: none; stroke: none; stroke-width: 0.25 }
.svg-2 .st8 { fill: #000000; font-family: Arial; font-size: 0.833336em; font-weight: bold }
.svg-2 .st9 { fill: none; stroke: #000000; stroke-width: 0.25 }
.svg-2 .st10 { fill: #ffffff; font-family: Arial; font-size: 0.833336em }
.svg-2 .st11 { font-size: 1em }
.svg-2 .st12 { fill: #f7f8fa; font-family: Arial; font-size: 0.75em }
.svg-2 .st13 { fill: #000000; font-family: Arial; font-size: 0.75em }
.svg-2 .st14 { marker-end: url("#mrkr4-49"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-2 .st15 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.28409090909091 }
.svg-2 .st16 { fill: #ffffff; stroke: none; stroke-linecap: butt }
.svg-2 .st17 { fill: #ffffff; stroke: none; stroke-linecap: butt; stroke-width: 7.2 }
.svg-2 .st18 { font-size: 0.888885em }
.svg-2 .st19 { marker-start: url("#mrkr4-72"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-2 .st20 { fill: #000000; font-family: Arial; font-size: 0.833336em }
.svg-2 .st21 { 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-49" class="st15" 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-72" class="st15" 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>	<v:layer v:name="Flowchart" v:index="1"></v:layer>	<g id="shape46-1" v:mid="46" v:groupcontext="shape" transform="translate(18,-18)">		<title></title>		<rect x="0" y="36" width="707" height="612.5" class="st1"></rect>	</g>	<g id="shape1-3" v:mid="1" v:groupcontext="shape" transform="translate(124,-567.25)">		<title></title>		<desc>Applications (V4L2, GStreamer)</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="180" cy="621.5" width="360.01" height="54"></v:textrect>		<rect x="0" y="594.5" width="360" height="54" rx="9" ry="9" class="st2"></rect>		<text x="95.3" y="625.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(124,-380.5)">		<title></title>		<desc>V4L2 framework</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="180" cy="621.5" width="360.01" height="54"></v:textrect>		<rect x="0" y="594.5" width="360" height="54" rx="9" ry="9" class="st2"></rect>		<text x="136.31" y="625.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(124,-254.5)">		<title></title>		<desc>Adreno VPU driver</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="180" cy="621.5" width="360.01" height="54"></v:textrect>		<rect x="0" y="594.5" width="360" height="54" rx="9" ry="9" class="st4"></rect>		<text x="129.98" y="625.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(124,-128.5)">		<title></title>		<desc>Adreno VPU</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="180" cy="621.5" width="360.01" height="54"></v:textrect>		<rect x="0" y="594.5" width="360" height="54" rx="9" ry="9" class="st4"></rect>		<text x="146.65" y="625.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,-459.25)">		<title></title>		<path d="M0 648.5 L648 648.5" class="st6"></path>	</g>	<g id="shape7-18" v:mid="7" v:groupcontext="shape" transform="translate(40.75,-207.25)">		<title></title>		<path d="M0 648.5 L648 648.5" class="st6"></path>	</g>	<g id="shape8-21" v:mid="8" v:groupcontext="shape" transform="translate(607.75,-477.25)">		<title></title>		<desc>User space</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="639.5" width="81" height="18"></v:textrect>		<rect x="0" y="630.5" width="81" height="18" class="st7"></rect>		<text x="13.82" y="642.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,-207.25)">		<title></title>		<desc>Kernel space</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="639.5" width="81" height="18"></v:textrect>		<rect x="0" y="630.5" width="81" height="18" class="st7"></rect>		<text x="9.37" y="642.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,-171.25)">		<title></title>		<desc>Hardware</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="639.5" width="81" height="18"></v:textrect>		<rect x="0" y="630.5" width="81" height="18" class="st7"></rect>		<text x="17.71" y="642.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(398.5,-137.5)">		<title></title>		<desc>Adreno VPU firmware</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="630.5" width="81" height="36"></v:textrect>		<rect x="0" y="612.5" width="81" height="36" rx="9" ry="9" class="st9"></rect>		<text x="12.71" y="627.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(643.75,-45)">		<title></title>		<rect x="0" y="630.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(567.25,-45.25)">		<title></title>		<rect x="0" y="630.5" width="63" height="18" rx="9" ry="9" class="st4"></rect>	</g>	<g id="shape21-38" v:mid="21" v:groupcontext="shape" transform="translate(567,-45)">		<title></title>		<desc>Qualcomm</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="31.5" cy="639.5" width="63" height="18"></v:textrect>		<rect x="0" y="630.5" width="63" height="18" class="st7"></rect>		<text x="9.74" y="642.2" class="st12" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Qualcomm</text>		</g>	<g id="shape23-41" v:mid="23" v:groupcontext="shape" transform="translate(643.5,-45)">		<title></title>		<desc>Open source</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="31.5" cy="639.5" width="63" height="18"></v:textrect>		<rect x="0" y="630.5" width="63" height="18" class="st7"></rect>		<text x="5.73" y="642.2" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Open source</text>		</g>	<g id="shape26-44" v:mid="26" v:groupcontext="shape" transform="translate(916.5,81.25) rotate(90)">		<title></title>		<desc>YUV buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="66" cy="648.5" width="132.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M0 648.5 L124.96 648.5" class="st14"></path>		<rect v:rectcontext="textBkgnd" x="-670.51" y="60.6" width="44.02" height="10.7998" transform="rotate(-90)" class="st16"></rect>		<text x="-670.51" y="68.7" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>YUV buffer</text>		</g>	<g id="shape27-52" v:mid="27" v:groupcontext="shape" transform="translate(916.5,268) rotate(90)">		<title></title>		<desc>YUV buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="36" cy="648.5" width="72.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M0 648.5 L64.96 648.5" class="st14"></path>		<rect v:rectcontext="textBkgnd" x="-670.51" y="30.5999" width="44.02" height="10.7998" transform="rotate(-90)" class="st16"></rect>		<text x="-670.51" y="38.7" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>YUV buffer</text>		</g>	<g id="shape28-59" v:mid="28" v:groupcontext="shape" transform="translate(916.5,394) rotate(90)">		<title></title>		<desc>YUV buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="36" cy="648.5" width="72.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M0 648.5 L64.96 648.5" class="st14"></path>		<rect v:rectcontext="textBkgnd" x="-669.231" y="30.5999" width="41.4627" height="10.7998" transform="rotate(-90)" class="st17"></rect>		<text x="-669.23" y="38.7" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>YUV <tspan class="st18">buffer</tspan></text>		</g>	<g id="shape29-67" v:mid="29" v:groupcontext="shape" transform="translate(1024.5,81.25) rotate(90)">		<title></title>		<desc>Bitstream buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="67.125" cy="648.5" width="134.26" height="0" transform="rotate(-90)"></v:textrect>		<path d="M6.68 648.5 L7.04 648.5 L134.25 648.5" class="st19"></path>		<rect v:rectcontext="textBkgnd" x="-680.261" y="61.725" width="63.5229" height="10.7998" transform="rotate(-90)" class="st17"></rect>		<text x="-680.26" y="69.82" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Bitstream buffer</text>		</g>	<g id="shape30-75" v:mid="30" v:groupcontext="shape" transform="translate(1024.5,268) rotate(90)">		<title></title>		<desc>Bitstream buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="36" cy="648.5" width="72.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M6.68 648.5 L7.04 648.5 L72 648.5" class="st19"></path>		<rect v:rectcontext="textBkgnd" x="-680.261" y="30.5999" width="63.5229" height="10.7998" transform="rotate(-90)" class="st16"></rect>		<text x="-680.26" y="38.7" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Bitstream buffer</text>		</g>	<g id="shape31-82" v:mid="31" v:groupcontext="shape" transform="translate(1024.5,394) rotate(90)">		<title></title>		<desc>Bitstream buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="36" cy="648.5" width="72.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M6.68 648.5 L7.04 648.5 L72 648.5" class="st19"></path>		<rect v:rectcontext="textBkgnd" x="-680.261" y="30.5999" width="63.5229" height="10.7998" transform="rotate(-90)" class="st17"></rect>		<text x="-680.26" y="38.7" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Bitstream buffer</text>		</g>	<g id="shape34-89" v:mid="34" v:groupcontext="shape" transform="translate(124,-504.25)">		<title></title>		<desc>Camera Source</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="40.5" cy="639.5" width="81" height="18"></v:textrect>		<rect x="0" y="630.5" width="81" height="18" rx="9" ry="9" class="st9"></rect>		<text x="5.49" y="642.5" class="st20" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Camera Source</text>		</g>	<g id="shape35-92" v:mid="35" v:groupcontext="shape" transform="translate(580.75,-567.25)">		<title></title>		<desc>FileMuxer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="67.5" cy="621.5" width="135.01" height="54"></v:textrect>		<rect x="0" y="594.5" width="135" height="54" rx="9" ry="9" class="st2"></rect>		<text x="41.16" y="625.1" class="st3" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>FileMuxer</text>		</g>	<g id="shape36-95" v:mid="36" v:groupcontext="shape" transform="translate(484,-594.25)">		<title></title>		<desc>Bitstream buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="48.375" cy="648.5" width="96.76" height="0"></v:textrect>		<path d="M0 648.5 L89.71 648.5" class="st14"></path>		<rect v:rectcontext="textBkgnd" x="16.6135" y="643.1" width="63.5229" height="10.7998" class="st16"></rect>		<text x="16.61" y="651.2" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Bitstream buffer</text>		</g>	<g id="shape44-102" v:mid="44" v:groupcontext="shape" transform="translate(808.5,81.25) rotate(90)">		<title></title>		<desc>YUV buffer</desc>		<v:textblock v:margins="rect(2,2,2,2)"></v:textblock>		<v:textrect cx="22.5" cy="648.5" width="45.01" height="0" transform="rotate(-90)"></v:textrect>		<path d="M6.68 648.5 L7.04 648.5 L45 648.5" class="st19"></path>		<rect v:rectcontext="textBkgnd" x="-660.007" y="11.7002" width="23.0142" height="21.5997" transform="rotate(-90)" class="st17"></rect>		<text x="-657.75" y="19.8" transform="rotate(-90)" class="st13" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>YUV <tspan x="-660.01" dy="1.2em" class="st11">buffer</tspan></text>		</g></g>
</svg>

The following table lists the components of the video software architecture:

| Component | Description |
| --- | --- |
| User application | <ul class="ul" id="concept_gh2_1sh_bzb__ul_dd3_pv1_ybc_eputla_07-03-24-1546-23-577"><br>                                    <li class="li">Based on V4L2/GStreamer that interacts with the FileSource<br>                                        for decoder and the CameraSource for encoder. </li><br><br>                                </ul> |
| V4L2 framework | <ul class="ul" id="concept_gh2_1sh_bzb__ul_jcs_rv1_ybc_eputla_07-03-24-1547-5-469"><br>                                    <li class="li">Interacts with user application and the Adreno VPU<br>                                        driver</li><br><br>                                    <li class="li">Handles events, callbacks, and buffer management</li><br><br>                                </ul> |
| Adreno VPU driver | <ul class="ul" id="concept_gh2_1sh_bzb__ul_wlt_yv1_ybc_eputla_07-03-24-1549-9-424"><br>                                    <li class="li">Acts as an entry point to the video kernel mode driver<br>                                        (KMD)</li><br><br>                                    <li class="li">Common driver for the encoder and decoder that controls the<br>                                        Adreno VPU</li><br><br>                                    <li class="li">Manages the video driver state machine, buffer allocation,<br>                                        clock/bus management, and communication with Adreno VPU<br>                                        using the Host Firmware Interface (HFI)</li><br><br>                                </ul> |
| Adreno VPU | <ul class="ul" id="concept_gh2_1sh_bzb__ul_zcj_dw1_ybc_eputla_07-03-24-1550-30-313"><br>                                    <li class="li">A hardware accelerated engine that performs the video<br>                                        decoding and encoding operations with minimal power<br>                                        consumption.</li><br><br>                                </ul> |

Last Published: Jul 12, 2024

[Previous Topic
Features](https://docs.qualcomm.com/bundle/publicresource/80-70014-20/topics/features.md) [Next Topic
Interfaces](https://docs.qualcomm.com/bundle/publicresource/80-70014-20/topics/interfaces.md)