# Customize audio graph

Each audio use case is a graph with subgraphs of
a specific type. Each subgraph has one or more functional
software blocks (referred to as modules) that perform a specific
function.

## Audio graph terms

Audio graph terms

| **Use case** | A graph of modules from source endpoint(s) to sink endpoint(s)<br>that meets the product defined use case. |
| --- | --- |
| **Graph** | A logical interpretation of a group of one or more subgraphs<br>connected together to create a specific use case. |
| **Subgraph** | A logical abstraction for a group of modules that connect<br>and are manipulated as a single entity. |
| **Container** | Object that allows the system designer to group and run<br>audio processing modules together in a single software thread. |
| **Module** | The smallest independent processing unit in the signal<br>processing framework. |
| **Key value (KV) pair** | The individual key and associated values in a key vector.<br>For example, a key can be a sound device and a value can be<br>headphone, speaker, or some other sound device. |
| **Key vector** | Uniquely identifies a graph or subgraph through a set of KV<br>pairs. |
| **Graph key vector (GKV)** | GKV is a unique identifier that gets a graph, which is<br>represented by KV pairs. The graph or system<br>designer associates a set of unique &lt;keys&gt; and &lt;values&gt; when<br>creating a subgraph from the QACT UI canvas. |
| **Calibration key vector (CKV)** | CKV is a unique identifier that gets calibration data,<br>which is represented by KV pairs. The graph<br>or system designer associates a set of unique &lt;keys&gt; and<br>&lt;values&gt; when storing calibration data. |
| **Tag and tag key vector (TKV)** | A tag is an identifier that sets runtime parameters for one or<br>more modules. It allows updating module configurations (for example,<br>enabling/disabling features like echo cancellation or<br>equalization) in a graph at runtime. |

## Graph segments

An audio use case has the following segments.

The front-end
represents stream and streamPP subgraphs, while the back-end
represents the per-stream per-device (PSPD), devicePP, and device subgraphs.

Graph segments

| **Stream** | Gives a data write/read interface and performs decoding and<br>encoding of compressed data. |
| --- | --- |
| **StreamPP** | Has stream-based processing modules (for example,<br>equalizer). |
| **PSPD** | Has a module to convert the stream media format to the<br>device media format. |
| **DevicePP** | Has processing modules for sound device tuning. |
| **Device** | Hardware endpoint such as CodecDMA (SoundWire), I2S, or TDM port. |

Once a front-end connects to a back-end using a routing mixer control,
the full GKV forms by concatenating the subgraph GKVs and the CKVs
assigned using mixer controls. Upon opening the front-end PCM or compress
device, AGM invokes GSL APIs with concatenated GKVs and CKVs to set up
the graph in ARE and apply calibration. At the same time, AGM opens a
kernel PCM device corresponding to the connected back-ends to begin
audio peripheral setup.

## Sample audio graph

The following figure shows an example audio graph for a playback scenario.

<?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 sample_audio_graph.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="39.0208in" height="5.52083in" viewbox="0 0 2809.5 397.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st15" aria-label="../../_images/sample_audio_graph.svg"><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: #ffffff; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-1 .st2 { fill: #ffffff; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st3 { fill: #fafafa; stroke: #d2d7e1; stroke-dasharray: 14, 10; stroke-width: 2 }
.svg-1 .st4 { fill: #d2d7e1; fill-opacity: 1; stroke: #d2d7e1; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-1 .st5 { fill: #6280cc; stroke: none; stroke-width: 2 }
.svg-1 .st6 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-1 .st7 { fill: #ffffff; font-family: Roboto; font-size: 1.33333em }
.svg-1 .st8 { fill: none; stroke: #ffffff; stroke-width: 2 }
.svg-1 .st9 { fill: #ffffff; fill-opacity: 1; stroke: #ffffff; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-1 .st10 { marker-end: url("#1-mrkr4-21"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st11 { font-size: 1em }
.svg-1 .st12 { fill: none; marker-end: url("#1-mrkr4-21"); stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st13 { fill: #000000; font-family: Roboto; font-size: 1.33333em; letter-spacing: 0.0625002em }
.svg-1 .st14 { fill: #d2d7e1; marker-end: url("#1-mrkr4-21"); stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st15 { 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="1-mrkr4-8" class="st4" 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="1-mrkr4-21" class="st6" 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="1-mrkr4-26" class="st9" 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></defs><g v:mid="4" v:index="1" v:groupcontext="backgroundPage">	<v:userdefs>		<v:ud v:nameu="msvVisioCreated" v:prompt="" v:val="VT0(0):26"></v:ud>	</v:userdefs>	<title>VBackground-1</title>	<v:pageproperties width="39.0208" height="5.52083" v:drawingscale="0.0138889" v:pagescale="0.0138889" v:drawingunits="29" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<g id="shape1-1" v:mid="1" v:groupcontext="shape">		<title>Solid</title>		<v:userdefs>			<v:ud v:nameu="Background" v:val="VT0(0):26"></v:ud>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="msvShapeCategories" v:prompt="" v:val="VT4(DoNotContain)"></v:ud>			<v:ud v:nameu="msvVisioCreated" v:prompt="" v:val="VT0(0):26"></v:ud>		</v:userdefs>		<rect x="0" y="0" width="2809.5" height="397.5" rx="4.5" ry="4.5" class="st1"></rect>	</g></g><g v:mid="0" v:index="2" 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="Connector" v:index="0"></v:layer>	<g id="shape37-3" v:mid="37" v:groupcontext="shape" transform="translate(18.75,-18.75)">		<title>Sheet.37</title>		<rect x="0" y="37.5" width="2772" height="360" rx="4.5" ry="4.5" class="st2"></rect>	</g>	<g id="shape24-5" v:mid="24" v:groupcontext="shape" transform="translate(272.409,-135.436)">		<title>Round Corner Rectangle.36</title>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.6063408302163):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.66146292589118):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.6063408302163):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.66146292589118):1"></v:ud>		</v:userdefs>		<path d="M43.66 397.5 L1202.54 397.5 A47.6246 47.6246 -180 0 0 1250.16 349.87 L1250.16 230.81 A47.6246 47.6246 -180 0					 0 1202.54 183.19 L43.66 183.19 A43.6558 43.6558 -180 0 0 0 226.84 L0 353.84 A43.6558 43.6558 -180 0 0 43.66					 397.5 Z" class="st3"></path>	</g>	<g id="shape25-9" v:mid="25" v:groupcontext="shape" transform="translate(1541.61,-135.436)">		<title>Round Corner Rectangle.41</title>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.50726662352512):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.55658621490365):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.61751044211753):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.50146430560743):1"></v:ud>		</v:userdefs>		<path d="M44.46 397.5 L234.96 397.5 A36.1048 36.1048 -180 0 0 271.07 361.39 L271.07 223.26 A40.0736 40.0736 -180 0 0					 230.99 183.19 L36.52 183.19 A36.5226 36.5226 -180 0 0 0 219.71 L0 353.04 A44.46 44.46 -180 0 0 44.46 397.5					 Z" class="st3"></path>	</g>	<g id="shape26-12" v:mid="26" v:groupcontext="shape" transform="translate(2491.47,-135.366)">		<title>Round Corner Rectangle.42</title>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.50726662352512):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.55658621490365):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.61751044211753):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.50146430560743):1"></v:ud>		</v:userdefs>		<path d="M44.46 397.5 L234.96 397.5 A36.1048 36.1048 -180 0 0 271.07 361.39 L271.07 223.26 A40.0736 40.0736 -180 0 0					 230.99 183.19 L36.52 183.19 A36.5226 36.5226 -180 0 0 0 219.71 L0 353.04 A44.46 44.46 -180 0 0 44.46 397.5					 Z" class="st3"></path>	</g>	<g id="shape27-15" v:mid="27" v:groupcontext="shape" transform="translate(1859.92,-135.436)">		<title>Round Corner Rectangle.43</title>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.67208710592186):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.64637809311804):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.67208710592186):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.5386484109317):1"></v:ud>		</v:userdefs>		<path d="M48.39 397.5 L552.57 397.5 A38.7821 38.7821 -180 0 0 591.35 358.72 L591.35 229.73 A46.5385 46.5385 -180 0 0					 544.81 183.19 L48.39 183.19 A48.3895 48.3895 -180 0 0 0 231.58 L0 349.11 A48.3895 48.3895 -180 0 0 48.39					 397.5 Z" class="st3"></path>	</g>	<g id="shape1-18" v:mid="1" v:groupcontext="shape" transform="translate(289.606,-153.487)">		<title>Round Corner Rectangle</title>		<desc>CONT#1</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.25812531377467):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.35435277926234):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.25812531377467):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.35435277926234):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="283.107" cy="307.306" width="566.22" height="180.388"></v:textrect>		<path d="M18.59 397.5 L540.7 397.5 A25.513 25.513 -180 0 0 566.21 371.99 L566.21 242.63 A25.513 25.513 -180 0 0 540.7					 217.11 L18.59 217.11 A18.5847 18.5847 -180 0 0 0 235.7 L0 378.91 A18.5847 18.5847 -180 0 0 18.59 397.5 Z" class="st5"></path>		<text x="252.51" y="239.11" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>CONT#1</text>		</g>	<g id="shape2-23" v:mid="2" v:groupcontext="shape" transform="translate(683.627,-194.028)">		<title>Round Corner Rectangle.1017</title>		<desc>PCM Converter</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="18.42" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PCM Converter</text>		</g>	<g id="shape3-28" v:mid="3" v:groupcontext="shape" transform="translate(500.507,-194.028)">		<title>Round Corner Rectangle.1024</title>		<desc>PCM Decoder</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="23.3" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PCM Decoder</text>		</g>	<g id="shape4-32" v:mid="4" v:groupcontext="shape" transform="translate(317.387,-194.028)">		<title>Round Corner Rectangle.1025</title>		<desc>Write SHMEM EP</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="11.09" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Write SHMEM EP</text>		</g>	<g id="shape5-36" v:mid="5" v:groupcontext="shape" v:layermember="0" transform="translate(461.797,-221.215)">		<title>Dynamic connector.1032</title>		<path d="M0 385 L29.67 385" class="st10"></path>	</g>	<g id="shape6-41" v:mid="6" v:groupcontext="shape" v:layermember="0" transform="translate(644.917,-221.215)">		<title>Dynamic connector.1033</title>		<path d="M0 385 L29.67 385" class="st10"></path>	</g>	<g id="shape7-46" v:mid="7" v:groupcontext="shape" transform="translate(1554.32,-151.172)">		<title>Round Corner Rectangle.7</title>		<desc>CONT#6</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.13561996870824):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.14031184847638):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.13561996870824):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.14031184847638):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="122.823" cy="306.148" width="245.65" height="182.703"></v:textrect>		<path d="M9.76 397.5 L235.54 397.5 A10.1023 10.1023 -180 0 0 245.65 387.4 L245.65 224.9 A10.1023 10.1023 -180 0 0 235.54					 214.8 L9.76 214.8 A9.76448 9.76448 -180 0 0 0 224.56 L0 387.74 A9.76448 9.76448 -180 0 0 9.76 397.5 Z" class="st5"></path>		<text x="92.22" y="236.8" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>CONT#6</text>		</g>	<g id="shape8-50" v:mid="8" v:groupcontext="shape" transform="translate(1604.94,-193.035)">		<title>Round Corner Rectangle.8</title>		<desc>Media Format Converter</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="22.53" y="351.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Media Format <tspan x="37.64" dy="1.5em" class="st11">Converter</tspan></text>		</g>	<g id="shape9-55" v:mid="9" v:groupcontext="shape" transform="translate(921.965,-153.487)">		<title>Round Corner Rectangle.9</title>		<desc>CONT#2</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.29486714878089):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.31761094425612):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.29486714878089):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.31761094425612):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="283.107" cy="307.306" width="566.22" height="180.388"></v:textrect>		<path d="M21.23 397.5 L543.35 397.5 A22.8676 22.8676 -180 0 0 566.21 374.63 L566.21 239.98 A22.8676 22.8676 -180 0 0					 543.35 217.11 L21.23 217.11 A21.2301 21.2301 -180 0 0 0 238.34 L0 376.27 A21.2301 21.2301 -180 0 0 21.23					 397.5 Z" class="st5"></path>		<text x="252.51" y="239.11" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>CONT#2</text>		</g>	<g id="shape10-59" v:mid="10" v:groupcontext="shape" transform="translate(1315.99,-194.028)">		<title>Round Corner Rectangle.10</title>		<desc>Splitter</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="46.92" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Splitter</text>		</g>	<g id="shape11-63" v:mid="11" v:groupcontext="shape" transform="translate(1132.87,-194.028)">		<title>Round Corner Rectangle.11</title>		<desc>PP2</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="57.62" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PP2</text>		</g>	<g id="shape12-67" v:mid="12" v:groupcontext="shape" transform="translate(949.746,-194.028)">		<title>Round Corner Rectangle.21</title>		<desc>PP1</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="57.62" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PP1</text>		</g>	<g id="shape13-71" v:mid="13" v:groupcontext="shape" v:layermember="0" transform="translate(1094.16,-221.215)">		<title>Dynamic connector.13</title>		<path d="M0 385 L29.67 385" class="st10"></path>	</g>	<g id="shape14-76" v:mid="14" v:groupcontext="shape" v:layermember="0" transform="translate(1277.28,-221.215)">		<title>Dynamic connector.23</title>		<path d="M0 385 L29.67 385" class="st10"></path>	</g>	<g id="shape15-81" v:mid="15" v:groupcontext="shape" transform="translate(2504.18,-151.172)">		<title>Round Corner Rectangle.15</title>		<desc>CONT#8</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.34117560584466):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.34117560584466):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.34117560584466):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.34117560584466):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="122.823" cy="306.148" width="245.65" height="182.703"></v:textrect>		<path d="M24.56 397.5 L221.08 397.5 A24.5642 24.5642 -180 0 0 245.65 372.94 L245.65 239.36 A24.5642 24.5642 -180 0 0					 221.08 214.8 L24.56 214.8 A24.5642 24.5642 -180 0 0 -0 239.36 L0 372.94 A24.5642 24.5642 -180 0 0 24.56					 397.5 Z" class="st5"></path>		<text x="92.22" y="236.8" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>CONT#8</text>		</g>	<g id="shape16-85" v:mid="16" v:groupcontext="shape" transform="translate(2554.8,-193.035)">		<title>Round Corner Rectangle.16</title>		<desc>HW EP</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.081795931854436):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.086500394831487):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.081795931854436):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.086500394831487):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M5.89 397.5 L138.18 397.5 A6.22793 6.22793 -180 0 0 144.41 391.27 L144.41 324.35 A6.22793 6.22793 -180 0 0 138.18					 318.12 L5.89 318.12 A5.88921 5.88921 -180 0 0 0 324.01 L0 391.61 A5.88921 5.88921 -180 0 0 5.89 397.5 Z" class="st8"></path>		<text x="47.83" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>HW EP</text>		</g>	<g id="shape17-89" v:mid="17" v:groupcontext="shape" transform="translate(1871.83,-153.487)">		<title>Round Corner Rectangle.17</title>		<desc>CONT#7</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.23361457182648):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.18287450613166):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.23361457182648):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.18287450613166):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="283.107" cy="307.306" width="566.22" height="180.388"></v:textrect>		<path d="M16.82 397.5 L553.05 397.5 A13.1667 13.1667 -180 0 0 566.21 384.33 L566.21 230.28 A13.1667 13.1667 -180 0 0					 553.05 217.11 L16.82 217.11 A16.82 16.82 -180 0 0 0 233.93 L0 380.68 A16.82 16.82 -180 0 0 16.82 397.5 Z" class="st5"></path>		<text x="252.51" y="239.11" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>CONT#7</text>		</g>	<g id="shape18-93" v:mid="18" v:groupcontext="shape" transform="translate(2265.85,-194.028)">		<title>Round Corner Rectangle.28</title>		<desc>PP6</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="57.62" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PP6</text>		</g>	<g id="shape19-97" v:mid="19" v:groupcontext="shape" transform="translate(2082.73,-194.028)">		<title>Round Corner Rectangle.29</title>		<desc>PP5</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="57.62" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PP5</text>		</g>	<g id="shape20-101" v:mid="20" v:groupcontext="shape" transform="translate(1899.61,-194.028)">		<title>Round Corner Rectangle.30</title>		<desc>Mixer</desc>		<v:userdefs>			<v:ud v:nameu="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockHoriz" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockVert" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="CornerLockDiag" v:prompt="" v:val="VT0(0):5"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"></v:ud>			<v:ud v:nameu="visVersion" v:prompt="" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="TopLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="TopRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotLeftOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>			<v:ud v:nameu="BotRightOffset" v:prompt="" v:val="VT0(0.20056939067748):1"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="72.205" cy="357.812" width="144.41" height="79.3755"></v:textrect>		<path d="M14.44 397.5 L129.97 397.5 A14.4408 14.4408 -180 0 0 144.41 383.06 L144.41 332.57 A14.4408 14.4408 -180 0 0					 129.97 318.12 L14.44 318.12 A14.4408 14.4408 -180 0 0 -0 332.57 L0 383.06 A14.4408 14.4408 -180 0 0 14.44					 397.5 Z" class="st8"></path>		<text x="52.37" y="363.81" class="st7" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Mixer</text>		</g>	<g id="shape21-105" v:mid="21" v:groupcontext="shape" v:layermember="0" transform="translate(2044.02,-221.215)">		<title>Dynamic connector.21</title>		<path d="M0 385 L29.67 385" class="st10"></path>	</g>	<g id="shape22-110" v:mid="22" v:groupcontext="shape" v:layermember="0" transform="translate(2227.14,-221.215)">		<title>Dynamic connector.22</title>		<path d="M0 385 L29.67 385" class="st10"></path>	</g>	<g id="shape23-115" v:mid="23" v:groupcontext="shape" transform="translate(35.75,-228.111)">		<title>Sheet.23</title>		<desc>Client PCM Data</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="87.8643" cy="379.861" width="175.73" height="35.278"></v:textrect>		<rect x="0" y="362.222" width="175.729" height="35.278" rx="4.5" ry="4.5" class="st12"></rect>		<text x="4" y="385.86" class="st13" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Client PCM Data</text>		</g>	<g id="shape28-119" v:mid="28" v:groupcontext="shape" v:layermember="0" transform="translate(828.037,-221.215)">		<title>Dynamic connector.46</title>		<path d="M0 385 L112.67 385" class="st10"></path>	</g>	<g id="shape29-124" v:mid="29" v:groupcontext="shape" v:layermember="0" transform="translate(1460.4,-245.719)">		<title>Dynamic connector.47</title>		<path d="M0 409.5 L135.51 410.43" class="st10"></path>	</g>	<g id="shape30-129" v:mid="30" v:groupcontext="shape" v:layermember="0" transform="translate(1749.35,-220.719)">		<title>Dynamic connector.48</title>		<path d="M0 385.5 L141.22 384.56" class="st10"></path>	</g>	<g id="shape31-134" v:mid="31" v:groupcontext="shape" v:layermember="0" transform="translate(2410.26,-245.719)">		<title>Dynamic connector.49</title>		<path d="M0 409.5 L135.51 410.43" class="st10"></path>	</g>	<g id="shape32-139" v:mid="32" v:groupcontext="shape" v:layermember="0" transform="translate(187.479,-256.215)">		<title>Dynamic connector.50</title>		<path d="M0 409.97 L0 410.03 L93.09 410.03" class="st10"></path>	</g>	<g id="shape33-144" v:mid="33" v:groupcontext="shape" transform="translate(681.634,-71.9356)">		<title>Sheet.33</title>		<desc>SGKV: [StreamRx: PCM Low Latency Playback Instance: instance 1]</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="215.857" cy="361.428" width="431.72" height="72.1435"></v:textrect>		<rect x="0" y="325.356" width="431.715" height="72.1435" rx="4.5" ry="4.5" class="st14"></rect>		<text x="4" y="355.43" class="st13" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>SGKV: [StreamRx: PCM Low Latency Playback<v:lf></v:lf><tspan x="4" dy="1.5em" class="st11">Instance: instance 1]</tspan></text>		</g>	<g id="shape34-149" v:mid="34" v:groupcontext="shape" transform="translate(1541.61,-37.75)">		<title>Sheet.34</title>		<desc>SGKV: [StreamRx: PCM Low Latency Playback Device: Speaker Ins...</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="135.534" cy="344.335" width="271.07" height="106.329"></v:textrect>		<rect x="0" y="291.171" width="271.068" height="106.329" rx="4.5" ry="4.5" class="st14"></rect>		<text x="4" y="314.34" class="st13" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>SGKV: [StreamRx: PCM Low <tspan x="4" dy="1.5em" class="st11">Latency Playback Device: </tspan><tspan x="4" dy="1.5em" class="st11">Speaker<v:lf></v:lf></tspan><tspan x="4" dy="1.5em" class="st11">Instance: instance 1]</tspan></text>		</g>	<g id="shape35-156" v:mid="35" v:groupcontext="shape" transform="translate(2046.45,-71.9356)">		<title>Sheet.35</title>		<desc>SGKV: [DeviceRx:Speaker DevicePP rx: Speaker PP]</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="135.534" cy="361.428" width="271.07" height="72.1435"></v:textrect>		<rect x="0" y="325.356" width="271.068" height="72.1435" rx="4.5" ry="4.5" class="st14"></rect>		<text x="4" y="355.43" class="st13" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>SGKV: [DeviceRx:Speaker<v:newlinechar></v:newlinechar><tspan x="4" dy="1.5em" class="st11">DevicePP rx: Speaker PP]</tspan></text>		</g>	<g id="shape36-161" v:mid="36" v:groupcontext="shape" transform="translate(2516.9,-71.9356)">		<title>Sheet.36</title>		<desc>SGKV: [DeviceRx:Speaker]</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="112.046" cy="361.428" width="224.1" height="72.1435"></v:textrect>		<rect x="0" y="325.356" width="224.093" height="72.1435" rx="4.5" ry="4.5" class="st14"></rect>		<text x="4" y="367.43" class="st13" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>SGKV: [DeviceRx:Speaker]</text>		</g></g>
</svg>

Sample audio graph for playback

In this graph:

1. The stream subgraph has a write shared memory endpoint, PCM
decoder, and PCM converter. The client passes PCM samples to write
shared memory endpoint.
2. If conversion is necessary, the PCM converter converts PCM samples to a format supported by the
stream-specific postprocessing modules.
3. Output of the stream subgraph is fed into the stream-device subgraph,
which has the media format converter (MFC). MFC converts the
stream-subgraph PCM to the device-subgraph PCM format.
4. After conversion, output of the stream-device subgraph is fed into
the device PP subgraph for device-specific postprocessing. A mixer
is placed at the beginning of subgraph to mix input streams.
5. Output of the devicePP subgraph is then fed into the device subgraph,
which has a hardware endpoint module such as an I2S driver.

The following is the GKV for this example graph:

GKV1: <StreamRX1 KVs, StreamRX2 PP KVs, StreamRX1DeviceRX KVs, DeviceRX PP KVs, DeviceRX KVs>
    
    GKV2: <StreamRX2 KVs, StreamRX2 PP KVs, StreamRX2DeviceRX KVs, DeviceRX PP KVs, DeviceRX KVs>
    Copy to clipboard

### Audio graph manager

The audio graph manager (AGM) gives interfaces to allow TinyALSA-based mixer controls and
PCM/compress plug-ins to interact and enable audio use cases.
AGM runs as part of the PipeWire service that runs in the user space.

AGM gives APIs for mixer plug-ins and PCM/compress APIs to set up
audio use cases. It maintains many ALSA clients to set up use cases.
AGM also manages front-end to back-end connections.

The following figure shows the AGM block at a high level.

<?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 AGM_service_blocks.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="7.35417in" height="6.49306in" viewbox="0 0 529.5 467.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st11" aria-label="../../_images/AGM_service_blocks.svg"><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-2 .st1 { fill: #ffffff; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-2 .st2 { fill: #fafafa; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-2 .st3 { fill: #fafafa; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 0.24 }
.svg-2 .st4 { fill: #000000; font-family: Roboto; font-size: 1.16666em; letter-spacing: 0.0714292em }
.svg-2 .st5 { fill: #ffffff; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st6 { fill: #d2d7e1; stroke: #ffffff; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st7 { fill: #d2d7e1; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st8 { marker-end: url("#2-mrkr4-44"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st9 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-2 .st10 { stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-2 .st11 { 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="2-mrkr4-44" class="st9" 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></defs><g v:mid="4" v:index="1" v:groupcontext="backgroundPage">	<v:userdefs>		<v:ud v:nameu="msvVisioCreated" v:prompt="" v:val="VT0(0):26"></v:ud>	</v:userdefs>	<title>VBackground-1</title>	<v:pageproperties width="7.35417" height="6.49306" v:drawingscale="0.0138889" v:pagescale="0.0138889" v:drawingunits="29" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<g id="shape1-1" v:mid="1" v:groupcontext="shape">		<title>Solid</title>		<v:userdefs>			<v:ud v:nameu="Background" v:val="VT0(0):26"></v:ud>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="msvShapeCategories" v:prompt="" v:val="VT4(DoNotContain)"></v:ud>			<v:ud v:nameu="msvVisioCreated" v:prompt="" v:val="VT0(0):26"></v:ud>		</v:userdefs>		<rect x="0" y="0" width="529.5" height="467.5" rx="4.5" ry="4.5" class="st1"></rect>	</g></g><g v:mid="0" v:index="2" 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="Connector" v:index="0"></v:layer>	<g id="shape33-3" v:mid="33" v:groupcontext="shape" transform="translate(18.75,-18.75)">		<title>Sheet.33</title>		<rect x="0" y="37.5" width="492" height="430" rx="4.5" ry="4.5" class="st2"></rect>	</g>	<g id="shape22-5" v:mid="22" v:groupcontext="shape" transform="translate(37.87,-36.87)">		<title>Rectangle</title>		<desc>Kernel space</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="227" cy="441.5" width="454" height="52"></v:textrect>		<rect x="0" y="415.5" width="454" height="52" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="435.25" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Kernel space</text>		</g>	<g id="shape23-8" v:mid="23" v:groupcontext="shape" transform="translate(37.87,-108.87)">		<title>Rectangle.23</title>		<desc>Userspace</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="2"></v:textblock>		<v:textrect cx="227" cy="306.5" width="454" height="322"></v:textrect>		<rect x="0" y="145.5" width="454" height="322" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="458.25" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Userspace</text>		</g>	<g id="shape1-11" v:mid="1" v:groupcontext="shape" transform="translate(171.87,-112.87)">		<title>Square</title>		<desc>AGM service</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="156" cy="311.5" width="312.01" height="312"></v:textrect>		<rect x="0" y="155.5" width="312" height="312" rx="4.5" ry="4.5" class="st5"></rect>		<text x="4" y="175.25" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>AGM service</text>		</g>	<g id="shape2-14" v:mid="2" v:groupcontext="shape" transform="translate(203.87,-328.87)">		<title>Sheet.2</title>		<desc>AGM API</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="124" cy="451.5" width="248.01" height="32"></v:textrect>		<rect x="0" y="435.5" width="248" height="32" rx="4.5" ry="4.5" class="st6"></rect>		<text x="92.44" y="456.75" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>AGM API</text>		</g>	<g id="shape4-17" v:mid="4" v:groupcontext="shape" transform="translate(211.87,-264.87)">		<title>Sheet.4</title>		<desc>PAL</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="124" cy="451.5" width="248.01" height="32"></v:textrect>		<rect x="0" y="435.5" width="248" height="32" rx="4.5" ry="4.5" class="st7"></rect>		<text x="109.75" y="456.75" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PAL</text>		</g>	<g id="shape3-20" v:mid="3" v:groupcontext="shape" transform="translate(203.87,-272.87)">		<title>Sheet.3</title>		<desc>Session objects</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="124" cy="451.5" width="248.01" height="32"></v:textrect>		<rect x="0" y="435.5" width="248" height="32" rx="4.5" ry="4.5" class="st6"></rect>		<text x="67.27" y="456.75" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Session objects</text>		</g>	<g id="shape7-23" v:mid="7" v:groupcontext="shape" transform="translate(203.87,-144.87)">		<title>Sheet.7</title>		<desc>GSL</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="56" cy="451.5" width="112.01" height="32"></v:textrect>		<rect x="0" y="435.5" width="112" height="32" rx="4.5" ry="4.5" class="st6"></rect>		<text x="41.81" y="456.75" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>GSL</text>		</g>	<g id="shape13-26" v:mid="13" v:groupcontext="shape" transform="translate(335.37,-47.75)">		<title>Sheet.13</title>		<desc>ALSA devices</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="58.25" cy="451.5" width="116.51" height="32"></v:textrect>		<rect x="0" y="435.5" width="116.5" height="32" rx="4.5" ry="4.5" class="st7"></rect>		<text x="9.74" y="456.75" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>ALSA devices</text>		</g>	<g id="shape18-29" v:mid="18" v:groupcontext="shape" transform="translate(211.87,-200.87)">		<title>Sheet.18</title>		<rect x="0" y="443.5" width="112" height="24" rx="4.5" ry="4.5" class="st6"></rect>	</g>	<g id="shape17-31" v:mid="17" v:groupcontext="shape" transform="translate(203.87,-208.87)">		<title>Sheet.17</title>		<desc>Graph objects</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="56" cy="451.5" width="112.01" height="32"></v:textrect>		<rect x="0" y="435.5" width="112" height="32" rx="4.5" ry="4.5" class="st6"></rect>		<text x="6.18" y="456.75" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Graph objects</text>		</g>	<g id="shape21-34" v:mid="21" v:groupcontext="shape" transform="translate(343.37,-200.87)">		<title>Sheet.21</title>		<rect x="0" y="443.5" width="116.5" height="24" rx="4.5" ry="4.5" class="st6"></rect>	</g>	<g id="shape9-36" v:mid="9" v:groupcontext="shape" transform="translate(335.37,-208.87)">		<title>Sheet.9</title>		<desc>Device objects</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="58.25" cy="451.5" width="116.51" height="32"></v:textrect>		<rect x="0" y="435.5" width="116.5" height="32" rx="4.5" ry="4.5" class="st6"></rect>		<text x="5.9" y="456.75" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Device objects</text>		</g>	<g id="shape28-39" v:mid="28" v:groupcontext="shape" v:layermember="0" transform="translate(243.37,-272.87)">		<title>Dynamic connector.28</title>		<path d="M12.5 467.5 L12.5 490.46" class="st8"></path>	</g>	<g id="shape30-45" v:mid="30" v:groupcontext="shape" v:layermember="0" transform="translate(243.37,-208.87)">		<title>Dynamic connector.30</title>		<path d="M12.5 467.5 L12.5 490.46" class="st8"></path>	</g>	<g id="shape31-50" v:mid="31" v:groupcontext="shape" v:layermember="0" transform="translate(380.37,-272.87)">		<title>Dynamic connector.31</title>		<path d="M12.5 467.5 L12.5 490.46" class="st8"></path>	</g>	<g id="shape32-55" v:mid="32" v:groupcontext="shape" transform="translate(37.75,-98.75)">		<title>Sheet.32</title>		<path d="M0 467.5 L454 467.5" class="st10"></path>	</g>	<g id="shape25-58" v:mid="25" v:groupcontext="shape" v:layermember="0" transform="translate(381.37,-208.87)">		<title>Dynamic connector</title>		<path d="M12.5 467.5 L12.5 587.58" class="st8"></path>	</g></g>
</svg>

High-level AGM software block

AGM objects

| Object | Description |
| --- | --- |
| **Session** | <ul class="simple"><br><li><p>A session object is an audio playback or capture<br>session.</p></li><br><li><p>Invoking session-specific mixer controls or APIs<br>creates sessions.</p></li><br><li><p>Gives APIs for TinyALSA<br>plug-ins to configure streams and manages state transitions<br>of graph and device objects.</p></li><br></ul> |
| **Graph** | <ul class="simple"><br><li><p>A graph object is an audio use case.</p></li><br><li><p>Interacts with GSL to open, manage, and close graphs.</p></li><br><li><p>Gives APIs for graph creation,<br>manages graphs, and configures stream and device<br>endpoints.</p></li><br></ul> |
| **Device** | <ul class="simple"><br><li><p>A device object is an ALSA device from the ALSA<br>sound card.</p></li><br><li><p>Enumerates available audio interfaces and gives device<br>APIs for transitioning device states.</p></li><br></ul> |

### AudioReach graph services

The AudioReach™ Signal Processing Framework graph services (ARGS) consists of the graph service layer
(GSL), generic packet router (GPR), and acdb management layer (AML). It
handles initialization and creation of graphs, and creation of
packets for sending series of commands to the ARE.

ARGS components

| Component | Description |
| --- | --- |
| **GSL** | <ul class="simple"><br><li><p>The graph service layer (GSL) is a software driver for ARE<br>which manages graphs, subgraphs, buffers, and<br>configurations.</p></li><br><li><p>Loads and initializes graphs using graph key vectors<br>(GKVs).</p></li><br><li><p>Handles data commands and ARE module calibration.</p></li><br></ul> |
| **GPR** | <ul class="simple"><br><li><p>The generic packet router (GPR) routes audio message packets<br>across ARE and the graph service library.</p></li><br><li><p>Handles commands for constructing audio graphs and<br>processing audio.</p></li><br></ul> |
| **AML** | <ul class="simple"><br><li><p>The acdb management layer (AML) gives get/set APIs to get and adjust data in<br>acdb files.</p></li><br><li><p>Gives data abstractions and organization for how the audio driver and<br>its components consume the calibration data.</p></li><br></ul> |

## Audio calibration database

acdb is a static database on the Apps processor. It has
all tuning/calibration parameters for the LPAI. The `*.acdb` file format
organizes calibration data for various audio modules for various use cases.

Edit this file format using QACT (a PC tool) and
place it on the device file system in the `/etc/acdbdata/` folder. During
use case initialization or device switch, the AML queries the acdb
database with a specified GKV and pushes the device calibration data to ARE.

### AudioReach Engine

AudioReach Engine (ARE) runs in the LPAI subsystem and performs audio data processing.

The following figure gives a high-level overview of the functional
blocks used in ARE.

<?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 spf_blocks.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="12.3542in" height="12.1597in" viewbox="0 0 889.5 875.5" xml:space="preserve" color-interpolation-filters="sRGB" class="st14" aria-label="../../_images/are_blocks.svg"><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-3 .st1 { fill: #ffffff; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-3 .st2 { fill: #fafafa; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-3 .st3 { fill: #ffffff; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st4 { fill: #000000; font-family: Roboto; font-size: 1.00001em; letter-spacing: 0.0833327em }
.svg-3 .st5 { fill: #d2d7e1; stroke: #d2d7e1; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st6 { fill: #ffffff; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st7 { fill: none; stroke: none; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1 }
.svg-3 .st8 { fill: #000000; font-family: Roboto; font-size: 1.00001em; font-style: italic; letter-spacing: 0.0833327em }
.svg-3 .st9 { marker-end: url("#3-mrkr4-48"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st10 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.44247787610619 }
.svg-3 .st11 { stroke: #000000; stroke-dasharray: 0, 6; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-3 .st12 { font-size: 0.83333em }
.svg-3 .st13 { fill: #000000; font-family: Roboto; font-size: 0.833336em; letter-spacing: 0.0999997em }
.svg-3 .st14 { 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="3-mrkr4-48" class="st10" 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></defs><g v:mid="4" v:index="1" v:groupcontext="backgroundPage">	<v:userdefs>		<v:ud v:nameu="msvVisioCreated" v:prompt="" v:val="VT0(0):26"></v:ud>	</v:userdefs>	<title>VBackground-1</title>	<v:pageproperties width="12.3542" height="12.1597" v:drawingscale="0.0138889" v:pagescale="0.0138889" v:drawingunits="29" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<g id="shape1-1" v:mid="1" v:groupcontext="shape">		<title>Solid</title>		<v:userdefs>			<v:ud v:nameu="Background" v:val="VT0(0):26"></v:ud>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="msvShapeCategories" v:prompt="" v:val="VT4(DoNotContain)"></v:ud>			<v:ud v:nameu="msvVisioCreated" v:prompt="" v:val="VT0(0):26"></v:ud>		</v:userdefs>		<rect x="0" y="0" width="889.5" height="875.5" rx="4.5" ry="4.5" class="st1"></rect>	</g></g><g v:mid="0" v:index="2" 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="Connector" v:index="0"></v:layer>	<g id="shape52-3" v:mid="52" v:groupcontext="shape" transform="translate(18.75,-18.75)">		<title>Sheet.52</title>		<rect x="0" y="37.5" width="852" height="838" rx="4.5" ry="4.5" class="st2"></rect>	</g>	<g id="shape1-5" v:mid="1" v:groupcontext="shape" transform="translate(39.8182,-745.25)">		<title>Sheet.1</title>		<desc>Processing Domain B</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="2"></v:textblock>		<v:textrect cx="405.966" cy="829.5" width="811.94" height="92"></v:textrect>		<rect x="0" y="783.5" width="811.932" height="92" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="867" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Processing Domain B</text>		</g>	<g id="shape3-8" v:mid="3" v:groupcontext="shape" transform="translate(37.75,-37.25)">		<title>Sheet.3</title>		<desc>Processing Domain A</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="405.966" cy="527.5" width="811.94" height="696"></v:textrect>		<rect x="0" y="179.5" width="811.932" height="696" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="197" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Processing Domain A</text>		</g>	<g id="shape4-11" v:mid="4" v:groupcontext="shape" transform="translate(195.75,-213.25)">		<title>Sheet.4</title>		<desc>AudioReach Engine (ARE)</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="310.5" cy="636.5" width="621" height="478"></v:textrect>		<rect x="0" y="397.5" width="621" height="478" rx="4.5" ry="4.5" class="st5"></rect>		<text x="4" y="415" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>AudioReach Engine (ARE)</text>		</g>	<g id="shape5-14" v:mid="5" v:groupcontext="shape" transform="translate(271.818,-709.25)">		<title>Sheet.5</title>		<desc>Generic Packet Router (GPR)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="224" cy="843.5" width="448.01" height="64"></v:textrect>		<rect x="0" y="811.5" width="448" height="64" rx="4.5" ry="4.5" class="st3"></rect>		<text x="134" y="848" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Generic Packet Router (GPR)</text>		</g>	<g id="shape6-17" v:mid="6" v:groupcontext="shape" transform="translate(227.75,-301.25)">		<title>Sheet.6</title>		<rect x="0" y="531.5" width="544" height="344" rx="4.5" ry="4.5" class="st6"></rect>	</g>	<g id="shape7-19" v:mid="7" v:groupcontext="shape" transform="translate(259.75,-597.25)">		<title>Sheet.7</title>		<desc>Audio Processing Manager (APM)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="240" cy="859.5" width="480.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="480" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="134.46" y="864" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Audio Processing Manager (APM)</text>		</g>	<g id="shape8-22" v:mid="8" v:groupcontext="shape" transform="translate(259.75,-402.85)">		<title>Sheet.8</title>		<desc>Offload</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="104" cy="794.3" width="208.01" height="162.4"></v:textrect>		<rect x="0" y="713.1" width="208" height="162.4" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="730.6" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Offload</text>		</g>	<g id="shape9-25" v:mid="9" v:groupcontext="shape" transform="translate(267.75,-381.25)">		<title>Sheet.9</title>		<desc>Specialized</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="104" cy="795.5" width="208.01" height="160"></v:textrect>		<rect x="0" y="715.5" width="208" height="160" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="733" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Specialized</text>		</g>	<g id="shape10-28" v:mid="10" v:groupcontext="shape" transform="translate(275.75,-357.25)">		<title>Sheet.10</title>		<desc>Generic</desc>		<v:textblock v:margins="rect(4,4,4,4)" v:verticalalign="0"></v:textblock>		<v:textrect cx="104" cy="795.5" width="208.01" height="160"></v:textrect>		<rect x="0" y="715.5" width="208" height="160" rx="4.5" ry="4.5" class="st3"></rect>		<text x="4" y="733" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Generic</text>		</g>	<g id="shape12-31" v:mid="12" v:groupcontext="shape" transform="translate(336.103,-451.25)">		<title>Sheet.12</title>		<desc>Container</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="43.6471" cy="865.5" width="87.3" height="20"></v:textrect>		<rect x="0" y="855.5" width="87.2941" height="20" rx="4.5" ry="4.5" class="st7"></rect>		<text x="4" y="870" class="st8" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>Container</text>		</g>	<g id="shape14-34" v:mid="14" v:groupcontext="shape" transform="translate(289.75,-375.25)">		<title>Sheet.14</title>		<desc>M1</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="22" cy="857.9" width="44" height="35.2"></v:textrect>		<rect x="0" y="840.3" width="44" height="35.2" rx="4.5" ry="4.5" class="st3"></rect>		<text x="12.39" y="862.4" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>M1</text>		</g>	<g id="shape15-37" v:mid="15" v:groupcontext="shape" transform="translate(357.75,-375.25)">		<title>Sheet.15</title>		<desc>M2</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="22" cy="857.9" width="44" height="35.2"></v:textrect>		<rect x="0" y="840.3" width="44" height="35.2" rx="4.5" ry="4.5" class="st3"></rect>		<text x="12.39" y="862.4" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>M2</text>		</g>	<g id="shape16-40" v:mid="16" v:groupcontext="shape" transform="translate(425.75,-375.25)">		<title>Sheet.16</title>		<desc>M3</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="22" cy="857.9" width="44" height="35.2"></v:textrect>		<rect x="0" y="840.3" width="44" height="35.2" rx="4.5" ry="4.5" class="st3"></rect>		<text x="12.39" y="862.4" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>M3</text>		</g>	<g id="shape19-43" v:mid="19" v:groupcontext="shape" v:layermember="0" transform="translate(333.25,-380.75)">		<title>Dynamic connector</title>		<path d="M0.5 863 L15.46 863" class="st9"></path>	</g>	<g id="shape20-49" v:mid="20" v:groupcontext="shape" v:layermember="0" transform="translate(401.25,-380.75)">		<title>Dynamic connector.20</title>		<path d="M0.5 863 L15.46 863" class="st9"></path>	</g>	<g id="shape21-54" v:mid="21" v:groupcontext="shape" transform="translate(531.75,-509.25)">		<title>Sheet.21</title>		<desc>AMD</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="104" cy="859.5" width="208.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="208" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="89.41" y="864" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>AMD</text>		</g>	<g id="shape22-57" v:mid="22" v:groupcontext="shape" transform="translate(531.75,-442.25)">		<title>Sheet.22</title>		<desc>PRM</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="104" cy="859.5" width="208.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="208" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="89.78" y="864" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>PRM</text>		</g>	<g id="shape23-60" v:mid="23" v:groupcontext="shape" transform="translate(531.75,-376.85)">		<title>Sheet.23</title>		<desc>IRM</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="104" cy="859.5" width="208.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="208" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="91.94" y="864" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>IRM</text>		</g>	<g id="shape25-63" v:mid="25" v:groupcontext="shape" transform="translate(379.75,-245.25)">		<title>Sheet.25</title>		<desc>Module-2</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="859.5" width="96" height="32"></v:textrect>		<rect x="0" y="843.5" width="96" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="18.99" y="864" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Module-2</text>		</g>	<g id="shape26-66" v:mid="26" v:groupcontext="shape" transform="translate(595.75,-245.25)">		<title>Sheet.26</title>		<desc>Module-3</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="859.5" width="96" height="32"></v:textrect>		<rect x="0" y="843.5" width="96" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="18.99" y="864" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Module-3</text>		</g>	<g id="shape28-69" v:mid="28" v:groupcontext="shape" transform="translate(520.75,-255.25)">		<title>Sheet.28</title>		<desc>...</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="22" cy="867.5" width="44" height="16"></v:textrect>		<rect x="0" y="859.5" width="44" height="16" rx="4.5" ry="4.5" class="st7"></rect>		<text x="4" y="872" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>...</text>		</g>	<g id="shape33-72" v:mid="33" v:groupcontext="shape" v:layermember="0" transform="translate(489.353,-792.25)">		<title>Dynamic connector.33</title>		<path d="M12.5 876.5 L12.5 899.5" class="st11"></path>	</g>	<g id="shape34-75" v:mid="34" v:groupcontext="shape" transform="translate(271.818,-789.25)">		<title>Sheet.34</title>		<desc>Application</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="224" cy="859.5" width="448.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="448" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="188.39" y="864" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Application</text>		</g>	<g id="shape35-78" v:mid="35" v:groupcontext="shape" transform="translate(295.818,-165.25)">		<title>Sheet.35</title>		<desc>Platform and OS abstraction layer</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="224" cy="859.5" width="448.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="448" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="117.62" y="864" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Platform and OS abstraction layer</text>		</g>	<g id="shape36-81" v:mid="36" v:groupcontext="shape" transform="translate(295.818,-93.25)">		<title>Sheet.36</title>		<desc>Board Support Package (timer, memory manager, power manager, ...</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="152" cy="843.5" width="304" height="64"></v:textrect>		<rect x="0" y="811.5" width="304" height="64" rx="4.5" ry="4.5" class="st3"></rect>		<text x="78.64" y="839" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Board Support Package<v:newlinechar></v:newlinechar><tspan x="6.55" dy="1.8em" class="st12">(timer, memory manager, power manager, debug, etc.)</tspan></text>		</g>	<g id="shape37-85" v:mid="37" v:groupcontext="shape" transform="translate(607.818,-93.25)">		<title>Sheet.37</title>		<desc>Hardware drivers</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="68" cy="843.5" width="136" height="64"></v:textrect>		<rect x="0" y="811.5" width="136" height="64" rx="4.5" ry="4.5" class="st3"></rect>		<text x="14.5" y="848" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Hardware drivers</text>		</g>	<g id="shape38-88" v:mid="38" v:groupcontext="shape" transform="translate(295.818,-53.25)">		<title>Sheet.38</title>		<desc>Real-Time Operating System (RTOS)</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="224" cy="859.5" width="448.01" height="32"></v:textrect>		<rect x="0" y="843.5" width="448" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="111.28" y="864" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Real-Time Operating System (RTOS)</text>		</g>	<g id="shape48-91" v:mid="48" v:groupcontext="shape" transform="translate(1182.25,550.25) rotate(90)">		<title>Simple Arrow</title>		<desc>CAPI</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="ArrowType" v:prompt="" v:val="VT0(2):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="24" cy="875.5" width="48.01" height="0" transform="rotate(180)"></v:textrect>		<path d="M0 875.5 L12 863.5 L12 869.5 L48 869.5 L48 875.5 L48 881.5 L12 881.5 L12 887.5 L0 875.5 Z" class="st3"></path>		<text x="-44" y="-871.75" transform="rotate(180)" class="st13" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>CAPI</text>		</g>	<g id="shape49-94" v:mid="49" v:groupcontext="shape" transform="translate(258.75,-245.25)">		<title>Sheet.49</title>		<desc>Module-1</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="48" cy="859.5" width="96" height="32"></v:textrect>		<rect x="0" y="843.5" width="96" height="32" rx="4.5" ry="4.5" class="st3"></rect>		<text x="18.99" y="864" class="st4" v:langid="1033"><v:paragraph v:spline="-1.5" v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Module-1</text>		</g>	<g id="shape50-97" v:mid="50" v:groupcontext="shape" transform="translate(1303.25,550.25) rotate(90)">		<title>Simple Arrow.50</title>		<desc>CAPI</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="ArrowType" v:prompt="" v:val="VT0(2):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="24" cy="875.5" width="48.01" height="0" transform="rotate(180)"></v:textrect>		<path d="M0 875.5 L12 863.5 L12 869.5 L48 869.5 L48 875.5 L48 881.5 L12 881.5 L12 887.5 L0 875.5 Z" class="st3"></path>		<text x="-44" y="-871.75" transform="rotate(180)" class="st13" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>CAPI</text>		</g>	<g id="shape51-100" v:mid="51" v:groupcontext="shape" transform="translate(1519.25,550.25) rotate(90)">		<title>Simple Arrow.51</title>		<desc>CAPI</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="ArrowType" v:prompt="" v:val="VT0(2):26"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="24" cy="875.5" width="48" height="0" transform="rotate(180)"></v:textrect>		<path d="M0 875.5 L12 863.5 L12 869.5 L48 869.5 L48 875.5 L48 881.5 L12 881.5 L12 887.5 L0 875.5 Z" class="st3"></path>		<text x="-44" y="-871.75" transform="rotate(180)" class="st13" v:langid="1033"><v:paragraph v:spline="-1.5"></v:paragraph><v:tablist></v:tablist>CAPI</text>		</g></g>
</svg>

High-level ARE software block

ARE components

| Component | Description |
| --- | --- |
| **APM** | Audio processing manager (APM) sets up and manages the use case<br>graphs in the ARE. It gives the<br>standard APIs to the graph management library and APM client<br>to set up and configure audio use cases. |
| **Modules** | A module is a functional block in the ARE. It<br>performs real-time audio processing in<br>the LPAI subsystem. |
| **Containers** | A container is a framework implementation that runs a<br>group of data processing modules together in the same software<br>thread. Each container runs in its own software<br>thread. |

Last Published: May 14, 2026

[Previous Topic
Enable TinyALSA-based applications](https://docs.qualcomm.com/bundle/publicresource/80-80022-16/topics/tinyalsa.md) [Next Topic
Troubleshoot audio](https://docs.qualcomm.com/bundle/publicresource/80-80022-16/topics/troubleshoot.md)