Advertisement
Guest User

Untitled

a guest
Jan 11th, 2014
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 134.25 KB | None | 0 0
  1. $ make -j 4
  2. CPP xbmc/cores/AudioEngine/Sinks/AESinkPULSE.o
  3. Sinks/AESinkPULSE.cpp:571:196: warning: missing terminating ' character [enabled by default]
  4. <a href="/fritsch/xbmc/commit/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab" class="message" data-pjax="true" title="AESinkPULSE: Don&#39;t add devices with empty channel map">AESinkPULSE: Don't add devices with empty channel map</a>
  5. ^
  6. Sinks/AESinkPULSE.cpp:7:19: warning: character constant too long for its type [enabled by default]
  7. <meta charset='utf-8'>
  8. ^
  9. Sinks/AESinkPULSE.cpp:9:9: error: stray ‘\302’ in program
  10. <title>xbmc/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp at cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab · fritsch/xbmc · GitHub</title>
  11. ^
  12. Sinks/AESinkPULSE.cpp:9:9: error: stray ‘\267’ in program
  13. Sinks/AESinkPULSE.cpp:9:9: error: stray ‘\302’ in program
  14. Sinks/AESinkPULSE.cpp:9:9: error: stray ‘\267’ in program
  15. Sinks/AESinkPULSE.cpp:50:39: warning: character constant too long for its type [enabled by default]
  16. <link data-pjax-transient rel='permalink' href='/fritsch/xbmc/blob/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp'>
  17. ^
  18. Sinks/AESinkPULSE.cpp:50:56: warning: character constant too long for its type [enabled by default]
  19. <link data-pjax-transient rel='permalink' href='/fritsch/xbmc/blob/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp'>
  20. ^
  21. Sinks/AESinkPULSE.cpp:223:25: warning: character constant too long for its type [enabled by default]
  22. <span class='counter'>0</span>
  23. ^
  24. Sinks/AESinkPULSE.cpp:560:17: warning: character constant too long for its type [enabled by default]
  25. <span class='repo-root js-repo-root'><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/fritsch/xbmc/tree/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab" data-branch="cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab" data-direction="back" data-pjax="true" itemscope="url" rel="nofollow"><span itemprop="title">xbmc</span></a></span></span><span class="separator"> / </span><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/fritsch/xbmc/tree/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab/xbmc" data-branch="cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab" data-direction="back" data-pjax="true" itemscope="url" rel="nofollow"><span itemprop="title">xbmc</span></a></span><span class="separator"> / </span><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/fritsch/xbmc/tree/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab/xbmc/cores" data-branch="cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab" data-direction="back" data-pjax="true" itemscope="url" rel="nofollow"><span itemprop="title">cores</span></a></span><span class="separator"> / </span><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/fritsch/xbmc/tree/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab/xbmc/cores/AudioEngine" data-branch="cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab" data-direction="back" data-pjax="true" itemscope="url" rel="nofollow"><span itemprop="title">AudioEngine</span></a></span><span class="separator"> / </span><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/fritsch/xbmc/tree/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab/xbmc/cores/AudioEngine/Sinks" data-branch="cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab" data-direction="back" data-pjax="true" itemscope="url" rel="nofollow"><span itemprop="title">Sinks</span></a></span><span class="separator"> / </span><strong class="final-path">AESinkPULSE.cpp</strong> <span class="js-zeroclipboard minibutton zeroclipboard-button" data-clipboard-text="xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp" data-copied-hint="copied!" title="copy to clipboard"><span class="octicon octicon-clippy"></span></span>
  26. ^
  27. Sinks/AESinkPULSE.cpp:571:196: warning: missing terminating ' character [enabled by default]
  28. <a href="/fritsch/xbmc/commit/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab" class="message" data-pjax="true" title="AESinkPULSE: Don&#39;t add devices with empty channel map">AESinkPULSE: Don't add devices with empty channel map</a>
  29. ^
  30. Sinks/AESinkPULSE.cpp:571:9: error: missing terminating ' character
  31. <a href="/fritsch/xbmc/commit/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab" class="message" data-pjax="true" title="AESinkPULSE: Don&#39;t add devices with empty channel map">AESinkPULSE: Don't add devices with empty channel map</a>
  32. ^
  33. Sinks/AESinkPULSE.cpp:1408:70: warning: multi-character character constant [-Wmultichar]
  34. <div class="code-body highlight"><pre><div class='line' id='LC1'><span class="cm">/*</span></div><div class='line' id='LC2'><span class="cm"> * Copyright (C) 2010-2013 Team XBMC</span></div><div class='line' id='LC3'><span class="cm"> * http://xbmc.org</span></div><div class='line' id='LC4'><span class="cm"> *</span></div><div class='line' id='LC5'><span class="cm"> * This Program is free software; you can redistribute it and/or modify</span></div><div class='line' id='LC6'><span class="cm"> * it under the terms of the GNU General Public License as published by</span></div><div class='line' id='LC7'><span class="cm"> * the Free Software Foundation; either version 2, or (at your option)</span></div><div class='line' id='LC8'><span class="cm"> * any later version.</span></div><div class='line' id='LC9'><span class="cm"> *</span></div><div class='line' id='LC10'><span class="cm"> * This Program is distributed in the hope that it will be useful,</span></div><div class='line' id='LC11'><span class="cm"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class='line' id='LC12'><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class='line' id='LC13'><span class="cm"> * GNU General Public License for more details.</span></div><div class='line' id='LC14'><span class="cm"> *</span></div><div class='line' id='LC15'><span class="cm"> * You should have received a copy of the GNU General Public License</span></div><div class='line' id='LC16'><span class="cm"> * along with XBMC; see the file COPYING. If not, see</span></div><div class='line' id='LC17'><span class="cm"> * &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class='line' id='LC18'><span class="cm"> *</span></div><div class='line' id='LC19'><span class="cm"> */</span></div><div class='line' id='LC20'><span class="cp">#include &quot;system.h&quot;</span></div><div class='line' id='LC21'><span class="cp">#ifdef HAS_PULSEAUDIO</span></div><div class='line' id='LC22'><span class="cp">#include &quot;AESinkPULSE.h&quot;</span></div><div class='line' id='LC23'><span class="cp">#include &quot;utils/log.h&quot;</span></div><div class='line' id='LC24'><span class="cp">#include &quot;Util.h&quot;</span></div><div class='line' id='LC25'><span class="cp">#include &quot;guilib/LocalizeStrings.h&quot;</span></div><div class='line' id='LC26'><br/></div><div class='line' id='LC27'><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span></div><div class='line' id='LC28'><br/></div><div class='line' id='LC29'><span class="k">static</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="nf">ContextStateToString</span><span class="p">(</span><span class="n">pa_context_state</span> <span class="n">s</span><span class="p">)</span></div><div class='line' id='LC30'><span class="p">{</span></div><div class='line' id='LC31'>&nbsp;&nbsp;<span class="k">switch</span> <span class="p">(</span><span class="n">s</span><span class="p">)</span></div><div class='line' id='LC32'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_UNCONNECTED</span>:</div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;unconnected&quot;</span><span class="p">;</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_CONNECTING</span>:</div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;connecting&quot;</span><span class="p">;</span></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_AUTHORIZING</span>:</div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;authorizing&quot;</span><span class="p">;</span></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_SETTING_NAME</span>:</div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;setting name&quot;</span><span class="p">;</span></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_READY</span>:</div><div class='line' id='LC42'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;ready&quot;</span><span class="p">;</span></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_FAILED</span>:</div><div class='line' id='LC44'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;failed&quot;</span><span class="p">;</span></div><div class='line' id='LC45'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_TERMINATED</span>:</div><div class='line' id='LC46'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;terminated&quot;</span><span class="p">;</span></div><div class='line' id='LC47'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nl">default:</span></div><div class='line' id='LC48'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;none&quot;</span><span class="p">;</span></div><div class='line' id='LC49'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC50'><span class="p">}</span></div><div class='line' id='LC51'><br/></div><div class='line' id='LC52'><span class="k">static</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="nf">StreamStateToString</span><span class="p">(</span><span class="n">pa_stream_state</span> <span class="n">s</span><span class="p">)</span></div><div class='line' id='LC53'><span class="p">{</span></div><div class='line' id='LC54'>&nbsp;&nbsp;<span class="k">switch</span><span class="p">(</span><span class="n">s</span><span class="p">)</span></div><div class='line' id='LC55'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC56'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_STREAM_UNCONNECTED</span>:</div><div class='line' id='LC57'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;unconnected&quot;</span><span class="p">;</span></div><div class='line' id='LC58'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_STREAM_CREATING</span>:</div><div class='line' id='LC59'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;creating&quot;</span><span class="p">;</span></div><div class='line' id='LC60'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_STREAM_READY</span>:</div><div class='line' id='LC61'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;ready&quot;</span><span class="p">;</span></div><div class='line' id='LC62'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_STREAM_FAILED</span>:</div><div class='line' id='LC63'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;failed&quot;</span><span class="p">;</span></div><div class='line' id='LC64'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_STREAM_TERMINATED</span>:</div><div class='line' id='LC65'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;terminated&quot;</span><span class="p">;</span></div><div class='line' id='LC66'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nl">default:</span></div><div class='line' id='LC67'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;none&quot;</span><span class="p">;</span></div><div class='line' id='LC68'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC69'><span class="p">}</span></div><div class='line' id='LC70'><br/></div><div class='line' id='LC71'><span class="k">static</span> <span class="n">pa_sample_format</span> <span class="nf">AEFormatToPulseFormat</span><span class="p">(</span><span class="n">AEDataFormat</span> <span class="n">format</span><span class="p">)</span></div><div class='line' id='LC72'><span class="p">{</span></div><div class='line' id='LC73'>&nbsp;&nbsp;<span class="k">switch</span> <span class="p">(</span><span class="n">format</span><span class="p">)</span></div><div class='line' id='LC74'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC75'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_U8</span> : <span class="k">return</span> <span class="n">PA_SAMPLE_U8</span><span class="p">;</span></div><div class='line' id='LC76'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_S16LE</span> : <span class="k">return</span> <span class="n">PA_SAMPLE_S16LE</span><span class="p">;</span></div><div class='line' id='LC77'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_S16BE</span> : <span class="k">return</span> <span class="n">PA_SAMPLE_S16BE</span><span class="p">;</span></div><div class='line' id='LC78'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_S16NE</span> : <span class="k">return</span> <span class="n">PA_SAMPLE_S16NE</span><span class="p">;</span></div><div class='line' id='LC79'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_S24LE3</span>: <span class="k">return</span> <span class="n">PA_SAMPLE_S24LE</span><span class="p">;</span></div><div class='line' id='LC80'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_S24BE3</span>: <span class="k">return</span> <span class="n">PA_SAMPLE_S24BE</span><span class="p">;</span></div><div class='line' id='LC81'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_S24NE3</span>: <span class="k">return</span> <span class="n">PA_SAMPLE_S24NE</span><span class="p">;</span></div><div class='line' id='LC82'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_S24LE4</span>: <span class="k">return</span> <span class="n">PA_SAMPLE_S24_32LE</span><span class="p">;</span></div><div class='line' id='LC83'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_S24BE4</span>: <span class="k">return</span> <span class="n">PA_SAMPLE_S24_32BE</span><span class="p">;</span></div><div class='line' id='LC84'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_S24NE4</span>: <span class="k">return</span> <span class="n">PA_SAMPLE_S24_32NE</span><span class="p">;</span></div><div class='line' id='LC85'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_S32BE</span> : <span class="k">return</span> <span class="n">PA_SAMPLE_S32BE</span><span class="p">;</span></div><div class='line' id='LC86'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_S32LE</span> : <span class="k">return</span> <span class="n">PA_SAMPLE_S32LE</span><span class="p">;</span></div><div class='line' id='LC87'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_S32NE</span> : <span class="k">return</span> <span class="n">PA_SAMPLE_S32NE</span><span class="p">;</span></div><div class='line' id='LC88'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_FLOAT</span> : <span class="k">return</span> <span class="n">PA_SAMPLE_FLOAT32</span><span class="p">;</span></div><div class='line' id='LC89'><br/></div><div class='line' id='LC90'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_AC3</span>:</div><div class='line' id='LC91'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_DTS</span>:</div><div class='line' id='LC92'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_EAC3</span>:</div><div class='line' id='LC93'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">PA_SAMPLE_S16NE</span><span class="p">;</span></div><div class='line' id='LC94'><br/></div><div class='line' id='LC95'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nl">default:</span></div><div class='line' id='LC96'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">PA_SAMPLE_INVALID</span><span class="p">;</span></div><div class='line' id='LC97'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC98'><span class="p">}</span></div><div class='line' id='LC99'><br/></div><div class='line' id='LC100'><span class="k">static</span> <span class="n">pa_encoding</span> <span class="nf">AEFormatToPulseEncoding</span><span class="p">(</span><span class="n">AEDataFormat</span> <span class="n">format</span><span class="p">)</span></div><div class='line' id='LC101'><span class="p">{</span></div><div class='line' id='LC102'>&nbsp;&nbsp;<span class="k">switch</span> <span class="p">(</span><span class="n">format</span><span class="p">)</span></div><div class='line' id='LC103'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC104'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_AC3</span> : <span class="k">return</span> <span class="n">PA_ENCODING_AC3_IEC61937</span><span class="p">;</span></div><div class='line' id='LC105'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_DTS</span> : <span class="k">return</span> <span class="n">PA_ENCODING_DTS_IEC61937</span><span class="p">;</span></div><div class='line' id='LC106'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_FMT_EAC3</span> : <span class="k">return</span> <span class="n">PA_ENCODING_EAC3_IEC61937</span><span class="p">;</span></div><div class='line' id='LC107'><br/></div><div class='line' id='LC108'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nl">default:</span></div><div class='line' id='LC109'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">PA_ENCODING_PCM</span><span class="p">;</span></div><div class='line' id='LC110'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC111'><span class="p">}</span></div><div class='line' id='LC112'><br/></div><div class='line' id='LC113'><span class="k">static</span> <span class="n">AEDataFormat</span> <span class="n">defaultDataFormats</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span></div><div class='line' id='LC114'>&nbsp;&nbsp;<span class="n">AE_FMT_U8</span><span class="p">,</span></div><div class='line' id='LC115'>&nbsp;&nbsp;<span class="n">AE_FMT_S16LE</span><span class="p">,</span></div><div class='line' id='LC116'>&nbsp;&nbsp;<span class="n">AE_FMT_S16BE</span><span class="p">,</span></div><div class='line' id='LC117'>&nbsp;&nbsp;<span class="n">AE_FMT_S16NE</span><span class="p">,</span></div><div class='line' id='LC118'>&nbsp;&nbsp;<span class="n">AE_FMT_S24LE3</span><span class="p">,</span></div><div class='line' id='LC119'>&nbsp;&nbsp;<span class="n">AE_FMT_S24BE3</span><span class="p">,</span></div><div class='line' id='LC120'>&nbsp;&nbsp;<span class="n">AE_FMT_S24NE3</span><span class="p">,</span></div><div class='line' id='LC121'>&nbsp;&nbsp;<span class="n">AE_FMT_S24LE4</span><span class="p">,</span></div><div class='line' id='LC122'>&nbsp;&nbsp;<span class="n">AE_FMT_S24BE4</span><span class="p">,</span></div><div class='line' id='LC123'>&nbsp;&nbsp;<span class="n">AE_FMT_S24NE4</span><span class="p">,</span></div><div class='line' id='LC124'>&nbsp;&nbsp;<span class="n">AE_FMT_S32BE</span><span class="p">,</span></div><div class='line' id='LC125'>&nbsp;&nbsp;<span class="n">AE_FMT_S32LE</span><span class="p">,</span></div><div class='line' id='LC126'>&nbsp;&nbsp;<span class="n">AE_FMT_S32NE</span><span class="p">,</span></div><div class='line' id='LC127'>&nbsp;&nbsp;<span class="n">AE_FMT_FLOAT</span></div><div class='line' id='LC128'><span class="p">};</span></div><div class='line' id='LC129'><br/></div><div class='line' id='LC130'><span class="k">static</span> <span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">defaultSampleRates</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span></div><div class='line' id='LC131'>&nbsp;&nbsp;<span class="mi">5512</span><span class="p">,</span></div><div class='line' id='LC132'>&nbsp;&nbsp;<span class="mi">8000</span><span class="p">,</span></div><div class='line' id='LC133'>&nbsp;&nbsp;<span class="mi">11025</span><span class="p">,</span></div><div class='line' id='LC134'>&nbsp;&nbsp;<span class="mi">16000</span><span class="p">,</span></div><div class='line' id='LC135'>&nbsp;&nbsp;<span class="mi">22050</span><span class="p">,</span></div><div class='line' id='LC136'>&nbsp;&nbsp;<span class="mi">32000</span><span class="p">,</span></div><div class='line' id='LC137'>&nbsp;&nbsp;<span class="mi">44100</span><span class="p">,</span></div><div class='line' id='LC138'>&nbsp;&nbsp;<span class="mi">48000</span><span class="p">,</span></div><div class='line' id='LC139'>&nbsp;&nbsp;<span class="mi">64000</span><span class="p">,</span></div><div class='line' id='LC140'>&nbsp;&nbsp;<span class="mi">88200</span><span class="p">,</span></div><div class='line' id='LC141'>&nbsp;&nbsp;<span class="mi">96000</span><span class="p">,</span></div><div class='line' id='LC142'>&nbsp;&nbsp;<span class="mi">176400</span><span class="p">,</span></div><div class='line' id='LC143'>&nbsp;&nbsp;<span class="mi">192000</span><span class="p">,</span></div><div class='line' id='LC144'>&nbsp;&nbsp;<span class="mi">384000</span></div><div class='line' id='LC145'><span class="p">};</span></div><div class='line' id='LC146'><br/></div><div class='line' id='LC147'><span class="cm">/* Static callback functions */</span></div><div class='line' id='LC148'><br/></div><div class='line' id='LC149'><span class="k">static</span> <span class="kt">void</span> <span class="nf">ContextStateCallback</span><span class="p">(</span><span class="n">pa_context</span> <span class="o">*</span><span class="n">c</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">userdata</span><span class="p">)</span></div><div class='line' id='LC150'><span class="p">{</span></div><div class='line' id='LC151'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop</span> <span class="o">*</span><span class="n">m</span> <span class="o">=</span> <span class="p">(</span><span class="n">pa_threaded_mainloop</span> <span class="o">*</span><span class="p">)</span><span class="n">userdata</span><span class="p">;</span></div><div class='line' id='LC152'>&nbsp;&nbsp;<span class="k">switch</span> <span class="p">(</span><span class="n">pa_context_get_state</span><span class="p">(</span><span class="n">c</span><span class="p">))</span></div><div class='line' id='LC153'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC154'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_READY</span>:</div><div class='line' id='LC155'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_TERMINATED</span>:</div><div class='line' id='LC156'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_UNCONNECTED</span>:</div><div class='line' id='LC157'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_CONNECTING</span>:</div><div class='line' id='LC158'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_AUTHORIZING</span>:</div><div class='line' id='LC159'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_SETTING_NAME</span>:</div><div class='line' id='LC160'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CONTEXT_FAILED</span>:</div><div class='line' id='LC161'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_signal</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span></div><div class='line' id='LC162'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC163'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC164'><span class="p">}</span></div><div class='line' id='LC165'><br/></div><div class='line' id='LC166'><span class="k">static</span> <span class="kt">void</span> <span class="nf">StreamStateCallback</span><span class="p">(</span><span class="n">pa_stream</span> <span class="o">*</span><span class="n">s</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">userdata</span><span class="p">)</span></div><div class='line' id='LC167'><span class="p">{</span></div><div class='line' id='LC168'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop</span> <span class="o">*</span><span class="n">m</span> <span class="o">=</span> <span class="p">(</span><span class="n">pa_threaded_mainloop</span> <span class="o">*</span><span class="p">)</span><span class="n">userdata</span><span class="p">;</span></div><div class='line' id='LC169'>&nbsp;&nbsp;<span class="k">switch</span> <span class="p">(</span><span class="n">pa_stream_get_state</span><span class="p">(</span><span class="n">s</span><span class="p">))</span></div><div class='line' id='LC170'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC171'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_STREAM_UNCONNECTED</span>:</div><div class='line' id='LC172'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_STREAM_CREATING</span>:</div><div class='line' id='LC173'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_STREAM_READY</span>:</div><div class='line' id='LC174'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_STREAM_FAILED</span>:</div><div class='line' id='LC175'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_STREAM_TERMINATED</span>:</div><div class='line' id='LC176'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_signal</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span></div><div class='line' id='LC177'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC178'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC179'><span class="p">}</span></div><div class='line' id='LC180'><br/></div><div class='line' id='LC181'><span class="k">static</span> <span class="kt">void</span> <span class="nf">StreamRequestCallback</span><span class="p">(</span><span class="n">pa_stream</span> <span class="o">*</span><span class="n">s</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">length</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">userdata</span><span class="p">)</span></div><div class='line' id='LC182'><span class="p">{</span></div><div class='line' id='LC183'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop</span> <span class="o">*</span><span class="n">m</span> <span class="o">=</span> <span class="p">(</span><span class="n">pa_threaded_mainloop</span> <span class="o">*</span><span class="p">)</span><span class="n">userdata</span><span class="p">;</span></div><div class='line' id='LC184'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_signal</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span></div><div class='line' id='LC185'><span class="p">}</span></div><div class='line' id='LC186'><br/></div><div class='line' id='LC187'><span class="k">static</span> <span class="kt">void</span> <span class="nf">StreamLatencyUpdateCallback</span><span class="p">(</span><span class="n">pa_stream</span> <span class="o">*</span><span class="n">s</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">userdata</span><span class="p">)</span></div><div class='line' id='LC188'><span class="p">{</span></div><div class='line' id='LC189'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop</span> <span class="o">*</span><span class="n">m</span> <span class="o">=</span> <span class="p">(</span><span class="n">pa_threaded_mainloop</span> <span class="o">*</span><span class="p">)</span><span class="n">userdata</span><span class="p">;</span></div><div class='line' id='LC190'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_signal</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span></div><div class='line' id='LC191'><span class="p">}</span></div><div class='line' id='LC192'><span class="k">struct</span> <span class="n">SinkInfoStruct</span></div><div class='line' id='LC193'><span class="p">{</span></div><div class='line' id='LC194'>&nbsp;&nbsp;<span class="n">AEDeviceInfoList</span> <span class="o">*</span><span class="n">list</span><span class="p">;</span></div><div class='line' id='LC195'>&nbsp;&nbsp;<span class="kt">bool</span> <span class="n">isHWDevice</span><span class="p">;</span></div><div class='line' id='LC196'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop</span> <span class="o">*</span><span class="n">mainloop</span><span class="p">;</span></div><div class='line' id='LC197'><span class="p">};</span></div><div class='line' id='LC198'><br/></div><div class='line' id='LC199'><span class="k">static</span> <span class="kt">void</span> <span class="nf">SinkInfoCallback</span><span class="p">(</span><span class="n">pa_context</span> <span class="o">*</span><span class="n">c</span><span class="p">,</span> <span class="k">const</span> <span class="n">pa_sink_info</span> <span class="o">*</span><span class="n">i</span><span class="p">,</span> <span class="kt">int</span> <span class="n">eol</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">userdata</span><span class="p">)</span></div><div class='line' id='LC200'><span class="p">{</span></div><div class='line' id='LC201'>&nbsp;&nbsp;<span class="n">SinkInfoStruct</span> <span class="o">*</span><span class="n">sinkStruct</span> <span class="o">=</span> <span class="p">(</span><span class="n">SinkInfoStruct</span> <span class="o">*</span><span class="p">)</span><span class="n">userdata</span><span class="p">;</span></div><div class='line' id='LC202'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">&amp;&amp;</span> <span class="n">i</span><span class="o">-&gt;</span><span class="n">flags</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">i</span><span class="o">-&gt;</span><span class="n">flags</span> <span class="o">&amp;</span> <span class="n">PA_SINK_HARDWARE</span><span class="p">))</span></div><div class='line' id='LC203'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">sinkStruct</span><span class="o">-&gt;</span><span class="n">isHWDevice</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span></div><div class='line' id='LC204'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_signal</span><span class="p">(</span><span class="n">sinkStruct</span><span class="o">-&gt;</span><span class="n">mainloop</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span></div><div class='line' id='LC205'><span class="p">}</span></div><div class='line' id='LC206'><br/></div><div class='line' id='LC207'><span class="k">static</span> <span class="n">AEChannel</span> <span class="nf">PAChannelToAEChannel</span><span class="p">(</span><span class="kt">pa_channel_position_t</span> <span class="n">channel</span><span class="p">)</span></div><div class='line' id='LC208'><span class="p">{</span></div><div class='line' id='LC209'>&nbsp;&nbsp;<span class="n">AEChannel</span> <span class="n">ae_channel</span><span class="p">;</span></div><div class='line' id='LC210'>&nbsp;&nbsp;<span class="k">switch</span> <span class="p">(</span><span class="n">channel</span><span class="p">)</span></div><div class='line' id='LC211'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC212'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_FRONT_LEFT</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_FL</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC213'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_FRONT_RIGHT</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_FR</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC214'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_FRONT_CENTER</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_FC</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC215'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_LFE</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_LFE</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC216'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_REAR_LEFT</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_BL</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC217'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_REAR_RIGHT</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_BR</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC218'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_FLOC</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC219'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_FROC</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC220'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_REAR_CENTER</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_BC</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC221'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_SIDE_LEFT</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_SL</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC222'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_SIDE_RIGHT</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_SR</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC223'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_TOP_FRONT_LEFT</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_TFL</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC224'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_TOP_FRONT_RIGHT</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_TFR</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC225'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_TOP_FRONT_CENTER</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_TFC</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC226'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_TOP_CENTER</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_TC</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC227'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_TOP_REAR_LEFT</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_TBL</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC228'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_TOP_REAR_RIGHT</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_TBR</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC229'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_CHANNEL_POSITION_TOP_REAR_CENTER</span>: <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_TBC</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC230'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nl">default:</span> <span class="n">ae_channel</span> <span class="o">=</span> <span class="n">AE_CH_NULL</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC231'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC232'>&nbsp;&nbsp;<span class="k">return</span> <span class="n">ae_channel</span><span class="p">;</span></div><div class='line' id='LC233'><span class="p">}</span></div><div class='line' id='LC234'><br/></div><div class='line' id='LC235'><span class="k">static</span> <span class="kt">pa_channel_position_t</span> <span class="nf">AEChannelToPAChannel</span><span class="p">(</span><span class="n">AEChannel</span> <span class="n">ae_channel</span><span class="p">)</span></div><div class='line' id='LC236'><span class="p">{</span></div><div class='line' id='LC237'>&nbsp;&nbsp;<span class="kt">pa_channel_position_t</span> <span class="n">pa_channel</span><span class="p">;</span></div><div class='line' id='LC238'>&nbsp;&nbsp;<span class="k">switch</span> <span class="p">(</span><span class="n">ae_channel</span><span class="p">)</span></div><div class='line' id='LC239'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC240'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_FL</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_FRONT_LEFT</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC241'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_FR</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_FRONT_RIGHT</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC242'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_FC</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_FRONT_CENTER</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC243'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_LFE</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_LFE</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC244'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_BL</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_REAR_LEFT</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC245'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_BR</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_REAR_RIGHT</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC246'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_FLOC</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC247'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_FROC</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC248'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_BC</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_REAR_CENTER</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC249'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_SL</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_SIDE_LEFT</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC250'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_SR</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_SIDE_RIGHT</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC251'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_TFL</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_TOP_FRONT_LEFT</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC252'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_TFR</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_TOP_FRONT_RIGHT</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC253'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_TFC</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_TOP_FRONT_CENTER</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC254'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_TC</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_TOP_CENTER</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC255'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_TBL</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_TOP_REAR_LEFT</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC256'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_TBR</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_TOP_REAR_RIGHT</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC257'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">AE_CH_TBC</span>: <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_TOP_REAR_CENTER</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC258'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nl">default:</span> <span class="n">pa_channel</span> <span class="o">=</span> <span class="n">PA_CHANNEL_POSITION_INVALID</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC259'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC260'>&nbsp;&nbsp;<span class="k">return</span> <span class="n">pa_channel</span><span class="p">;</span></div><div class='line' id='LC261'><span class="p">}</span></div><div class='line' id='LC262'><br/></div><div class='line' id='LC263'><span class="k">static</span> <span class="n">pa_channel_map</span> <span class="nf">AEChannelMapToPAChannel</span><span class="p">(</span><span class="n">CAEChannelInfo</span> <span class="n">info</span><span class="p">)</span></div><div class='line' id='LC264'><span class="p">{</span></div><div class='line' id='LC265'>&nbsp;&nbsp;<span class="n">pa_channel_map</span> <span class="n">map</span><span class="p">;</span></div><div class='line' id='LC266'>&nbsp;&nbsp;<span class="n">pa_channel_map_init</span><span class="p">(</span><span class="o">&amp;</span><span class="n">map</span><span class="p">);</span></div><div class='line' id='LC267'>&nbsp;&nbsp;<span class="kt">pa_channel_position_t</span> <span class="n">pos</span><span class="p">;</span></div><div class='line' id='LC268'>&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">info</span><span class="p">.</span><span class="n">Count</span><span class="p">();</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span></div><div class='line' id='LC269'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC270'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pos</span> <span class="o">=</span> <span class="n">AEChannelToPAChannel</span><span class="p">(</span><span class="n">info</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span></div><div class='line' id='LC271'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="n">pos</span> <span class="o">!=</span> <span class="n">PA_CHANNEL_POSITION_INVALID</span><span class="p">)</span></div><div class='line' id='LC272'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">map</span><span class="p">.</span><span class="n">channels</span><span class="o">++</span><span class="p">;</span></div><div class='line' id='LC273'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC274'>&nbsp;&nbsp;<span class="k">return</span> <span class="n">map</span><span class="p">;</span></div><div class='line' id='LC275'><span class="p">}</span></div><div class='line' id='LC276'><br/></div><div class='line' id='LC277'><span class="k">static</span> <span class="n">CAEChannelInfo</span> <span class="nf">PAChannelToAEChannelMap</span><span class="p">(</span><span class="n">pa_channel_map</span> <span class="n">channels</span><span class="p">)</span></div><div class='line' id='LC278'><span class="p">{</span></div><div class='line' id='LC279'>&nbsp;&nbsp;<span class="n">CAEChannelInfo</span> <span class="n">info</span><span class="p">;</span></div><div class='line' id='LC280'>&nbsp;&nbsp;<span class="n">AEChannel</span> <span class="n">ch</span><span class="p">;</span></div><div class='line' id='LC281'>&nbsp;&nbsp;<span class="n">info</span><span class="p">.</span><span class="n">Reset</span><span class="p">();</span></div><div class='line' id='LC282'>&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o">&lt;</span><span class="n">channels</span><span class="p">.</span><span class="n">channels</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span></div><div class='line' id='LC283'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC284'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">ch</span> <span class="o">=</span> <span class="n">PAChannelToAEChannel</span><span class="p">(</span><span class="n">channels</span><span class="p">.</span><span class="n">map</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span></div><div class='line' id='LC285'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="n">ch</span> <span class="o">!=</span> <span class="n">AE_CH_NULL</span><span class="p">)</span></div><div class='line' id='LC286'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">info</span> <span class="o">+=</span> <span class="n">ch</span><span class="p">;</span></div><div class='line' id='LC287'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC288'>&nbsp;&nbsp;<span class="k">return</span> <span class="n">info</span><span class="p">;</span></div><div class='line' id='LC289'><span class="p">}</span></div><div class='line' id='LC290'><br/></div><div class='line' id='LC291'><span class="k">static</span> <span class="kt">void</span> <span class="nf">SinkInfoRequestCallback</span><span class="p">(</span><span class="n">pa_context</span> <span class="o">*</span><span class="n">c</span><span class="p">,</span> <span class="k">const</span> <span class="n">pa_sink_info</span> <span class="o">*</span><span class="n">i</span><span class="p">,</span> <span class="kt">int</span> <span class="n">eol</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">userdata</span><span class="p">)</span></div><div class='line' id='LC292'><span class="p">{</span></div><div class='line' id='LC293'><br/></div><div class='line' id='LC294'>&nbsp;&nbsp;<span class="n">SinkInfoStruct</span> <span class="o">*</span><span class="n">sinkStruct</span> <span class="o">=</span> <span class="p">(</span><span class="n">SinkInfoStruct</span> <span class="o">*</span><span class="p">)</span><span class="n">userdata</span><span class="p">;</span></div><div class='line' id='LC295'><br/></div><div class='line' id='LC296'>&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="n">sinkStruct</span> <span class="o">&amp;&amp;</span> <span class="n">sinkStruct</span><span class="o">-&gt;</span><span class="n">list</span><span class="o">-&gt;</span><span class="n">empty</span><span class="p">())</span></div><div class='line' id='LC297'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC298'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//add a default device first</span></div><div class='line' id='LC299'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CAEDeviceInfo</span> <span class="n">defaultDevice</span><span class="p">;</span></div><div class='line' id='LC300'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">defaultDevice</span><span class="p">.</span><span class="n">m_deviceName</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span><span class="s">&quot;Default&quot;</span><span class="p">);</span></div><div class='line' id='LC301'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">defaultDevice</span><span class="p">.</span><span class="n">m_displayName</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span><span class="s">&quot;Default&quot;</span><span class="p">);</span></div><div class='line' id='LC302'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">defaultDevice</span><span class="p">.</span><span class="n">m_displayNameExtra</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span><span class="s">&quot;Default Output Device (PULSEAUDIO)&quot;</span><span class="p">);</span></div><div class='line' id='LC303'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">defaultDevice</span><span class="p">.</span><span class="n">m_dataFormats</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="n">defaultDevice</span><span class="p">.</span><span class="n">m_dataFormats</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">defaultDataFormats</span><span class="p">,</span> <span class="n">defaultDataFormats</span> <span class="o">+</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">defaultDataFormats</span><span class="p">)</span> <span class="o">/</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">defaultDataFormats</span><span class="p">[</span><span class="mi">0</span><span class="p">]));</span></div><div class='line' id='LC304'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">defaultDevice</span><span class="p">.</span><span class="n">m_channels</span> <span class="o">=</span> <span class="n">CAEChannelInfo</span><span class="p">(</span><span class="n">AE_CH_LAYOUT_2_0</span><span class="p">);</span></div><div class='line' id='LC305'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">defaultDevice</span><span class="p">.</span><span class="n">m_sampleRates</span><span class="p">.</span><span class="n">assign</span><span class="p">(</span><span class="n">defaultSampleRates</span><span class="p">,</span> <span class="n">defaultSampleRates</span> <span class="o">+</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">defaultSampleRates</span><span class="p">)</span> <span class="o">/</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">defaultSampleRates</span><span class="p">[</span><span class="mi">0</span><span class="p">]));</span></div><div class='line' id='LC306'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">defaultDevice</span><span class="p">.</span><span class="n">m_deviceType</span> <span class="o">=</span> <span class="n">AE_DEVTYPE_PCM</span><span class="p">;</span></div><div class='line' id='LC307'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">sinkStruct</span><span class="o">-&gt;</span><span class="n">list</span><span class="o">-&gt;</span><span class="n">push_back</span><span class="p">(</span><span class="n">defaultDevice</span><span class="p">);</span></div><div class='line' id='LC308'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC309'>&nbsp;&nbsp;<span class="kt">bool</span> <span class="n">valid</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span></div><div class='line' id='LC310'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">&amp;&amp;</span> <span class="n">i</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">)</span></div><div class='line' id='LC311'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC312'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CAEDeviceInfo</span> <span class="n">device</span><span class="p">;</span></div><div class='line' id='LC313'><br/></div><div class='line' id='LC314'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device</span><span class="p">.</span><span class="n">m_deviceName</span> <span class="o">=</span> <span class="n">string</span><span class="p">(</span><span class="n">i</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">);</span></div><div class='line' id='LC315'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device</span><span class="p">.</span><span class="n">m_displayName</span> <span class="o">=</span> <span class="n">string</span><span class="p">(</span><span class="n">i</span><span class="o">-&gt;</span><span class="n">description</span><span class="p">);</span></div><div class='line' id='LC316'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">i</span><span class="o">-&gt;</span><span class="n">active_port</span> <span class="o">&amp;&amp;</span> <span class="n">i</span><span class="o">-&gt;</span><span class="n">active_port</span><span class="o">-&gt;</span><span class="n">description</span><span class="p">)</span></div><div class='line' id='LC317'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device</span><span class="p">.</span><span class="n">m_displayNameExtra</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">((</span><span class="n">i</span><span class="o">-&gt;</span><span class="n">active_port</span><span class="o">-&gt;</span><span class="n">description</span><span class="p">)).</span><span class="n">append</span><span class="p">(</span><span class="s">&quot; (PULSEAUDIO)&quot;</span><span class="p">);</span></div><div class='line' id='LC318'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC319'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device</span><span class="p">.</span><span class="n">m_displayNameExtra</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">((</span><span class="n">i</span><span class="o">-&gt;</span><span class="n">description</span><span class="p">)).</span><span class="n">append</span><span class="p">(</span><span class="s">&quot; (PULSEAUDIO)&quot;</span><span class="p">);</span></div><div class='line' id='LC320'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">device_type</span> <span class="o">=</span> <span class="n">AE_DEVTYPE_PCM</span><span class="p">;</span> <span class="c1">//0</span></div><div class='line' id='LC321'><br/></div><div class='line' id='LC322'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device</span><span class="p">.</span><span class="n">m_channels</span> <span class="o">=</span> <span class="n">PAChannelToAEChannelMap</span><span class="p">(</span><span class="n">i</span><span class="o">-&gt;</span><span class="n">channel_map</span><span class="p">);</span></div><div class='line' id='LC323'><br/></div><div class='line' id='LC324'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Don&#39;t add devices that would not have a channel map</span></div><div class='line' id='LC325'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="n">device</span><span class="p">.</span><span class="n">m_channels</span><span class="p">.</span><span class="n">Count</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC326'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">valid</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC327'><br/></div><div class='line' id='LC328'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device</span><span class="p">.</span><span class="n">m_sampleRates</span><span class="p">.</span><span class="n">assign</span><span class="p">(</span><span class="n">defaultSampleRates</span><span class="p">,</span> <span class="n">defaultSampleRates</span> <span class="o">+</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">defaultSampleRates</span><span class="p">)</span> <span class="o">/</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">defaultSampleRates</span><span class="p">[</span><span class="mi">0</span><span class="p">]));</span></div><div class='line' id='LC329'><br/></div><div class='line' id='LC330'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">j</span> <span class="o">&lt;</span> <span class="n">i</span><span class="o">-&gt;</span><span class="n">n_formats</span><span class="p">;</span> <span class="n">j</span><span class="o">++</span><span class="p">)</span></div><div class='line' id='LC331'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC332'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">switch</span><span class="p">(</span><span class="n">i</span><span class="o">-&gt;</span><span class="n">formats</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">encoding</span><span class="p">)</span></div><div class='line' id='LC333'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC334'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_ENCODING_AC3_IEC61937</span>:</div><div class='line' id='LC335'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device</span><span class="p">.</span><span class="n">m_dataFormats</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">AE_FMT_AC3</span><span class="p">);</span></div><div class='line' id='LC336'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device_type</span> <span class="o">=</span> <span class="n">AE_DEVTYPE_IEC958</span><span class="p">;</span></div><div class='line' id='LC337'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC338'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_ENCODING_DTS_IEC61937</span>:</div><div class='line' id='LC339'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device</span><span class="p">.</span><span class="n">m_dataFormats</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">AE_FMT_DTS</span><span class="p">);</span></div><div class='line' id='LC340'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device_type</span> <span class="o">=</span> <span class="n">AE_DEVTYPE_IEC958</span><span class="p">;</span></div><div class='line' id='LC341'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC342'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_ENCODING_EAC3_IEC61937</span>:</div><div class='line' id='LC343'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device</span><span class="p">.</span><span class="n">m_dataFormats</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">AE_FMT_EAC3</span><span class="p">);</span></div><div class='line' id='LC344'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device_type</span> <span class="o">=</span> <span class="n">AE_DEVTYPE_IEC958</span><span class="p">;</span></div><div class='line' id='LC345'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC346'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="n">PA_ENCODING_PCM</span>:</div><div class='line' id='LC347'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device</span><span class="p">.</span><span class="n">m_dataFormats</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="n">device</span><span class="p">.</span><span class="n">m_dataFormats</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">defaultDataFormats</span><span class="p">,</span> <span class="n">defaultDataFormats</span> <span class="o">+</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">defaultDataFormats</span><span class="p">)</span> <span class="o">/</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">defaultDataFormats</span><span class="p">[</span><span class="mi">0</span><span class="p">]));</span></div><div class='line' id='LC348'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC349'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nl">default:</span></div><div class='line' id='LC350'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC351'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC352'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC353'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// passthrough is only working when device has Stereo channel config</span></div><div class='line' id='LC354'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">device_type</span> <span class="o">&gt;</span> <span class="n">AE_DEVTYPE_PCM</span> <span class="o">&amp;&amp;</span> <span class="n">device</span><span class="p">.</span><span class="n">m_channels</span><span class="p">.</span><span class="n">Count</span><span class="p">()</span> <span class="o">==</span> <span class="mi">2</span><span class="p">)</span></div><div class='line' id='LC355'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device</span><span class="p">.</span><span class="n">m_deviceType</span> <span class="o">=</span> <span class="n">AE_DEVTYPE_IEC958</span><span class="p">;</span></div><div class='line' id='LC356'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC357'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">device</span><span class="p">.</span><span class="n">m_deviceType</span> <span class="o">=</span> <span class="n">AE_DEVTYPE_PCM</span><span class="p">;</span></div><div class='line' id='LC358'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="n">valid</span><span class="p">)</span></div><div class='line' id='LC359'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC360'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGDEBUG</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Found %s with devicestring %s&quot;</span><span class="p">,</span> <span class="n">device</span><span class="p">.</span><span class="n">m_displayName</span><span class="p">.</span><span class="n">c_str</span><span class="p">(),</span> <span class="n">device</span><span class="p">.</span><span class="n">m_deviceName</span><span class="p">.</span><span class="n">c_str</span><span class="p">());</span></div><div class='line' id='LC361'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">sinkStruct</span><span class="o">-&gt;</span><span class="n">list</span><span class="o">-&gt;</span><span class="n">push_back</span><span class="p">(</span><span class="n">device</span><span class="p">);</span></div><div class='line' id='LC362'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC363'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC364'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC365'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGDEBUG</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Skipped %s with devicestring %s&quot;</span><span class="p">,</span> <span class="n">device</span><span class="p">.</span><span class="n">m_displayName</span><span class="p">.</span><span class="n">c_str</span><span class="p">(),</span> <span class="n">device</span><span class="p">.</span><span class="n">m_deviceName</span><span class="p">.</span><span class="n">c_str</span><span class="p">());</span></div><div class='line' id='LC366'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC367'>&nbsp;<span class="p">}</span></div><div class='line' id='LC368'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_signal</span><span class="p">(</span><span class="n">sinkStruct</span><span class="o">-&gt;</span><span class="n">mainloop</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span></div><div class='line' id='LC369'><span class="p">}</span></div><div class='line' id='LC370'><br/></div><div class='line' id='LC371'><span class="cm">/* PulseAudio class memberfunctions*/</span></div><div class='line' id='LC372'><br/></div><div class='line' id='LC373'><br/></div><div class='line' id='LC374'><span class="n">CAESinkPULSE</span><span class="o">::</span><span class="n">CAESinkPULSE</span><span class="p">()</span></div><div class='line' id='LC375'><span class="p">{</span></div><div class='line' id='LC376'>&nbsp;&nbsp;<span class="n">m_IsAllocated</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC377'>&nbsp;&nbsp;<span class="n">m_MainLoop</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span></div><div class='line' id='LC378'>&nbsp;&nbsp;<span class="n">m_BytesPerSecond</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC379'>&nbsp;&nbsp;<span class="n">m_BufferSize</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC380'>&nbsp;&nbsp;<span class="n">m_Channels</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC381'>&nbsp;&nbsp;<span class="n">m_Stream</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span></div><div class='line' id='LC382'>&nbsp;&nbsp;<span class="n">m_Context</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span></div><div class='line' id='LC383'><span class="p">}</span></div><div class='line' id='LC384'><br/></div><div class='line' id='LC385'><span class="n">CAESinkPULSE</span><span class="o">::~</span><span class="n">CAESinkPULSE</span><span class="p">()</span></div><div class='line' id='LC386'><span class="p">{</span></div><div class='line' id='LC387'>&nbsp;&nbsp;<span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC388'><span class="p">}</span></div><div class='line' id='LC389'><br/></div><div class='line' id='LC390'><span class="kt">bool</span> <span class="n">CAESinkPULSE</span><span class="o">::</span><span class="n">Initialize</span><span class="p">(</span><span class="n">AEAudioFormat</span> <span class="o">&amp;</span><span class="n">format</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&amp;</span><span class="n">device</span><span class="p">)</span></div><div class='line' id='LC391'><span class="p">{</span></div><div class='line' id='LC392'>&nbsp;&nbsp;<span class="n">m_IsAllocated</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC393'>&nbsp;&nbsp;<span class="n">m_BytesPerSecond</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC394'>&nbsp;&nbsp;<span class="n">m_BufferSize</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC395'>&nbsp;&nbsp;<span class="n">m_Channels</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC396'>&nbsp;&nbsp;<span class="n">m_Stream</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span></div><div class='line' id='LC397'>&nbsp;&nbsp;<span class="n">m_Context</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span></div><div class='line' id='LC398'><br/></div><div class='line' id='LC399'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">SetupContext</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">m_Context</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">m_MainLoop</span><span class="p">))</span></div><div class='line' id='LC400'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC401'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Failed to create context&quot;</span><span class="p">);</span></div><div class='line' id='LC402'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC403'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC404'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC405'><br/></div><div class='line' id='LC406'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_lock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC407'><br/></div><div class='line' id='LC408'>&nbsp;&nbsp;<span class="k">struct</span> <span class="n">pa_channel_map</span> <span class="n">map</span><span class="p">;</span></div><div class='line' id='LC409'>&nbsp;&nbsp;<span class="n">pa_channel_map_init</span><span class="p">(</span><span class="o">&amp;</span><span class="n">map</span><span class="p">);</span></div><div class='line' id='LC410'><br/></div><div class='line' id='LC411'>&nbsp;&nbsp;<span class="kt">bool</span> <span class="n">passthrough</span> <span class="o">=</span> <span class="n">AE_IS_RAW</span><span class="p">(</span><span class="n">format</span><span class="p">.</span><span class="n">m_dataFormat</span><span class="p">);</span></div><div class='line' id='LC412'><br/></div><div class='line' id='LC413'>&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="n">passthrough</span><span class="p">)</span></div><div class='line' id='LC414'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC415'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">map</span><span class="p">.</span><span class="n">channels</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span></div><div class='line' id='LC416'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">format</span><span class="p">.</span><span class="n">m_channelLayout</span> <span class="o">=</span> <span class="n">AE_CH_LAYOUT_2_0</span><span class="p">;</span></div><div class='line' id='LC417'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC418'>&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC419'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC420'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">map</span> <span class="o">=</span> <span class="n">AEChannelMapToPAChannel</span><span class="p">(</span><span class="n">format</span><span class="p">.</span><span class="n">m_channelLayout</span><span class="p">);</span></div><div class='line' id='LC421'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// if count has changed we need to fit the AE Map</span></div><div class='line' id='LC422'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="n">map</span><span class="p">.</span><span class="n">channels</span> <span class="o">!=</span> <span class="n">format</span><span class="p">.</span><span class="n">m_channelLayout</span><span class="p">.</span><span class="n">Count</span><span class="p">())</span></div><div class='line' id='LC423'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">format</span><span class="p">.</span><span class="n">m_channelLayout</span> <span class="o">=</span> <span class="n">PAChannelToAEChannelMap</span><span class="p">(</span><span class="n">map</span><span class="p">);</span></div><div class='line' id='LC424'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC425'>&nbsp;&nbsp;<span class="n">m_Channels</span> <span class="o">=</span> <span class="n">format</span><span class="p">.</span><span class="n">m_channelLayout</span><span class="p">.</span><span class="n">Count</span><span class="p">();</span></div><div class='line' id='LC426'><br/></div><div class='line' id='LC427'>&nbsp;&nbsp;<span class="n">pa_cvolume_reset</span><span class="p">(</span><span class="o">&amp;</span><span class="n">m_Volume</span><span class="p">,</span> <span class="n">m_Channels</span><span class="p">);</span></div><div class='line' id='LC428'><br/></div><div class='line' id='LC429'>&nbsp;&nbsp;<span class="n">pa_format_info</span> <span class="o">*</span><span class="n">info</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span></div><div class='line' id='LC430'>&nbsp;&nbsp;<span class="n">info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">pa_format_info_new</span><span class="p">();</span></div><div class='line' id='LC431'>&nbsp;&nbsp;<span class="n">info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">encoding</span> <span class="o">=</span> <span class="n">AEFormatToPulseEncoding</span><span class="p">(</span><span class="n">format</span><span class="p">.</span><span class="n">m_dataFormat</span><span class="p">);</span></div><div class='line' id='LC432'>&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="n">passthrough</span><span class="p">)</span></div><div class='line' id='LC433'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_format_info_set_sample_format</span><span class="p">(</span><span class="n">info</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">AEFormatToPulseFormat</span><span class="p">(</span><span class="n">format</span><span class="p">.</span><span class="n">m_dataFormat</span><span class="p">));</span></div><div class='line' id='LC434'>&nbsp;&nbsp;<span class="n">pa_format_info_set_channels</span><span class="p">(</span><span class="n">info</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">m_Channels</span><span class="p">);</span></div><div class='line' id='LC435'>&nbsp;&nbsp;<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">samplerate</span> <span class="o">=</span> <span class="n">passthrough</span> <span class="o">?</span> <span class="n">format</span><span class="p">.</span><span class="n">m_encodedRate</span> <span class="o">:</span> <span class="n">format</span><span class="p">.</span><span class="n">m_sampleRate</span><span class="p">;</span></div><div class='line' id='LC436'>&nbsp;&nbsp;<span class="n">pa_format_info_set_rate</span><span class="p">(</span><span class="n">info</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">samplerate</span><span class="p">);</span></div><div class='line' id='LC437'><br/></div><div class='line' id='LC438'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">pa_format_info_valid</span><span class="p">(</span><span class="n">info</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span></div><div class='line' id='LC439'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC440'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Invalid format info&quot;</span><span class="p">);</span></div><div class='line' id='LC441'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_unlock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC442'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC443'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC444'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC445'><br/></div><div class='line' id='LC446'>&nbsp;&nbsp;<span class="n">pa_sample_spec</span> <span class="n">spec</span><span class="p">;</span></div><div class='line' id='LC447'><span class="cp"> #if PA_CHECK_VERSION(2,0,0)</span></div><div class='line' id='LC448'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_format_info_to_sample_spec</span><span class="p">(</span><span class="n">info</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="o">&amp;</span><span class="n">spec</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">map</span><span class="p">);</span></div><div class='line' id='LC449'><span class="cp"> #else</span></div><div class='line' id='LC450'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">spec</span><span class="p">.</span><span class="n">rate</span> <span class="o">=</span> <span class="p">(</span><span class="n">AEFormatToPulseEncoding</span><span class="p">(</span><span class="n">format</span><span class="p">.</span><span class="n">m_dataFormat</span><span class="p">)</span> <span class="o">==</span> <span class="n">PA_ENCODING_EAC3_IEC61937</span><span class="p">)</span> <span class="o">?</span> <span class="mi">4</span> <span class="o">*</span> <span class="n">samplerate</span> <span class="o">:</span> <span class="n">samplerate</span><span class="p">;</span></div><div class='line' id='LC451'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">spec</span><span class="p">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">AEFormatToPulseFormat</span><span class="p">(</span><span class="n">format</span><span class="p">.</span><span class="n">m_dataFormat</span><span class="p">);</span></div><div class='line' id='LC452'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">spec</span><span class="p">.</span><span class="n">channels</span> <span class="o">=</span> <span class="n">m_Channels</span><span class="p">;</span></div><div class='line' id='LC453'><span class="cp"> #endif</span></div><div class='line' id='LC454'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">pa_sample_spec_valid</span><span class="p">(</span><span class="o">&amp;</span><span class="n">spec</span><span class="p">))</span></div><div class='line' id='LC455'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC456'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Invalid sample spec&quot;</span><span class="p">);</span></div><div class='line' id='LC457'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_unlock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC458'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC459'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC460'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC461'><br/></div><div class='line' id='LC462'>&nbsp;&nbsp;<span class="n">m_BytesPerSecond</span> <span class="o">=</span> <span class="n">pa_bytes_per_second</span><span class="p">(</span><span class="o">&amp;</span><span class="n">spec</span><span class="p">);</span></div><div class='line' id='LC463'>&nbsp;&nbsp;<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">frameSize</span> <span class="o">=</span> <span class="n">pa_frame_size</span><span class="p">(</span><span class="o">&amp;</span><span class="n">spec</span><span class="p">);</span></div><div class='line' id='LC464'><br/></div><div class='line' id='LC465'>&nbsp;&nbsp;<span class="n">m_Stream</span> <span class="o">=</span> <span class="n">pa_stream_new_extended</span><span class="p">(</span><span class="n">m_Context</span><span class="p">,</span> <span class="s">&quot;audio stream&quot;</span><span class="p">,</span> <span class="n">info</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span></div><div class='line' id='LC466'>&nbsp;&nbsp;<span class="n">pa_format_info_free</span><span class="p">(</span><span class="n">info</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span></div><div class='line' id='LC467'><br/></div><div class='line' id='LC468'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">m_Stream</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span></div><div class='line' id='LC469'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC470'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Could not create a stream&quot;</span><span class="p">);</span></div><div class='line' id='LC471'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_unlock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC472'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC473'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC474'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC475'><br/></div><div class='line' id='LC476'>&nbsp;&nbsp;<span class="n">pa_stream_set_state_callback</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">,</span> <span class="n">StreamStateCallback</span><span class="p">,</span> <span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC477'>&nbsp;&nbsp;<span class="n">pa_stream_set_write_callback</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">,</span> <span class="n">StreamRequestCallback</span><span class="p">,</span> <span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC478'>&nbsp;&nbsp;<span class="n">pa_stream_set_latency_update_callback</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">,</span> <span class="n">StreamLatencyUpdateCallback</span><span class="p">,</span> <span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC479'><br/></div><div class='line' id='LC480'>&nbsp;&nbsp;<span class="kt">bool</span> <span class="n">isDefaultDevice</span> <span class="o">=</span> <span class="p">(</span><span class="n">device</span> <span class="o">==</span> <span class="s">&quot;Default&quot;</span><span class="p">);</span></div><div class='line' id='LC481'><br/></div><div class='line' id='LC482'>&nbsp;&nbsp;<span class="n">pa_buffer_attr</span> <span class="n">buffer_attr</span><span class="p">;</span></div><div class='line' id='LC483'>&nbsp;&nbsp;<span class="n">SinkInfoStruct</span> <span class="n">sinkStruct</span><span class="p">;</span></div><div class='line' id='LC484'>&nbsp;&nbsp;<span class="n">sinkStruct</span><span class="p">.</span><span class="n">mainloop</span> <span class="o">=</span> <span class="n">m_MainLoop</span><span class="p">;</span></div><div class='line' id='LC485'>&nbsp;&nbsp;<span class="n">sinkStruct</span><span class="p">.</span><span class="n">isHWDevice</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC486'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">isDefaultDevice</span><span class="p">)</span></div><div class='line' id='LC487'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">WaitForOperation</span><span class="p">(</span><span class="n">pa_context_get_sink_info_by_name</span><span class="p">(</span><span class="n">m_Context</span><span class="p">,</span> <span class="n">device</span><span class="p">.</span><span class="n">c_str</span><span class="p">(),</span><span class="n">SinkInfoCallback</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">sinkStruct</span><span class="p">),</span> <span class="n">m_MainLoop</span><span class="p">,</span> <span class="s">&quot;Get Sink Info&quot;</span><span class="p">);</span></div><div class='line' id='LC488'><br/></div><div class='line' id='LC489'>&nbsp;&nbsp;<span class="c1">// 200ms max latency</span></div><div class='line' id='LC490'>&nbsp;&nbsp;<span class="c1">// 50ms min packet size</span></div><div class='line' id='LC491'>&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="n">sinkStruct</span><span class="p">.</span><span class="n">isHWDevice</span> <span class="o">||</span> <span class="n">isDefaultDevice</span><span class="p">)</span></div><div class='line' id='LC492'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC493'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">latency</span> <span class="o">=</span> <span class="n">m_BytesPerSecond</span> <span class="o">/</span> <span class="mi">5</span><span class="p">;</span></div><div class='line' id='LC494'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">process_time</span> <span class="o">=</span> <span class="n">latency</span> <span class="o">/</span> <span class="mi">4</span><span class="p">;</span></div><div class='line' id='LC495'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">memset</span><span class="p">(</span><span class="o">&amp;</span><span class="n">buffer_attr</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">buffer_attr</span><span class="p">));</span></div><div class='line' id='LC496'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">buffer_attr</span><span class="p">.</span><span class="n">tlength</span> <span class="o">=</span> <span class="p">(</span><span class="kt">uint32_t</span><span class="p">)</span> <span class="n">latency</span><span class="p">;</span></div><div class='line' id='LC497'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">buffer_attr</span><span class="p">.</span><span class="n">minreq</span> <span class="o">=</span> <span class="p">(</span><span class="kt">uint32_t</span><span class="p">)</span> <span class="n">process_time</span><span class="p">;</span></div><div class='line' id='LC498'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">buffer_attr</span><span class="p">.</span><span class="n">maxlength</span> <span class="o">=</span> <span class="p">(</span><span class="kt">uint32_t</span><span class="p">)</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span></div><div class='line' id='LC499'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">buffer_attr</span><span class="p">.</span><span class="n">prebuf</span> <span class="o">=</span> <span class="p">(</span><span class="kt">uint32_t</span><span class="p">)</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span></div><div class='line' id='LC500'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">buffer_attr</span><span class="p">.</span><span class="n">fragsize</span> <span class="o">=</span> <span class="p">(</span><span class="kt">uint32_t</span><span class="p">)</span> <span class="n">latency</span><span class="p">;</span></div><div class='line' id='LC501'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC502'><br/></div><div class='line' id='LC503'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">pa_stream_connect_playback</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">,</span> <span class="n">isDefaultDevice</span> <span class="o">?</span> <span class="nb">NULL</span> <span class="o">:</span> <span class="n">device</span><span class="p">.</span><span class="n">c_str</span><span class="p">(),</span> <span class="n">sinkStruct</span><span class="p">.</span><span class="n">isHWDevice</span> <span class="o">?</span> <span class="o">&amp;</span><span class="n">buffer_attr</span> <span class="o">:</span> <span class="nb">NULL</span><span class="p">,</span> <span class="p">((</span><span class="n">pa_stream_flags</span><span class="p">)(</span><span class="n">PA_STREAM_INTERPOLATE_TIMING</span> <span class="o">|</span> <span class="n">PA_STREAM_AUTO_TIMING_UPDATE</span> <span class="o">|</span> <span class="n">PA_STREAM_ADJUST_LATENCY</span><span class="p">)),</span> <span class="o">&amp;</span><span class="n">m_Volume</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC504'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC505'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Failed to connect stream to output&quot;</span><span class="p">);</span></div><div class='line' id='LC506'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_unlock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC507'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC508'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC509'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC510'><br/></div><div class='line' id='LC511'>&nbsp;&nbsp;<span class="cm">/* Wait until the stream is ready */</span></div><div class='line' id='LC512'>&nbsp;&nbsp;<span class="k">do</span></div><div class='line' id='LC513'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC514'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_wait</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC515'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGDEBUG</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Stream %s&quot;</span><span class="p">,</span> <span class="n">StreamStateToString</span><span class="p">(</span><span class="n">pa_stream_get_state</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">)));</span></div><div class='line' id='LC516'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC517'>&nbsp;&nbsp;<span class="k">while</span> <span class="p">(</span><span class="n">pa_stream_get_state</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">)</span> <span class="o">!=</span> <span class="n">PA_STREAM_READY</span> <span class="o">&amp;&amp;</span> <span class="n">pa_stream_get_state</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">)</span> <span class="o">!=</span> <span class="n">PA_STREAM_FAILED</span><span class="p">);</span></div><div class='line' id='LC518'><br/></div><div class='line' id='LC519'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">pa_stream_get_state</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">)</span> <span class="o">==</span> <span class="n">PA_STREAM_FAILED</span><span class="p">)</span></div><div class='line' id='LC520'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC521'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Waited for the stream but it failed&quot;</span><span class="p">);</span></div><div class='line' id='LC522'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_unlock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC523'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC524'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC525'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC526'><br/></div><div class='line' id='LC527'>&nbsp;&nbsp;<span class="k">const</span> <span class="n">pa_buffer_attr</span> <span class="o">*</span><span class="n">a</span><span class="p">;</span></div><div class='line' id='LC528'><br/></div><div class='line' id='LC529'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">a</span> <span class="o">=</span> <span class="n">pa_stream_get_buffer_attr</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">)))</span></div><div class='line' id='LC530'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;PulseAudio: %s&quot;</span><span class="p">,</span> <span class="n">pa_strerror</span><span class="p">(</span><span class="n">pa_context_errno</span><span class="p">(</span><span class="n">m_Context</span><span class="p">)));</span></div><div class='line' id='LC531'>&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC532'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC533'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">packetSize</span> <span class="o">=</span> <span class="n">a</span><span class="o">-&gt;</span><span class="n">minreq</span><span class="p">;</span></div><div class='line' id='LC534'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">m_BufferSize</span> <span class="o">=</span> <span class="n">a</span><span class="o">-&gt;</span><span class="n">tlength</span><span class="p">;</span></div><div class='line' id='LC535'><br/></div><div class='line' id='LC536'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">format</span><span class="p">.</span><span class="n">m_frames</span> <span class="o">=</span> <span class="n">packetSize</span> <span class="o">/</span> <span class="n">frameSize</span><span class="p">;</span></div><div class='line' id='LC537'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC538'><br/></div><div class='line' id='LC539'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_unlock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC540'><br/></div><div class='line' id='LC541'>&nbsp;&nbsp;<span class="n">m_IsAllocated</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span></div><div class='line' id='LC542'>&nbsp;&nbsp;<span class="n">format</span><span class="p">.</span><span class="n">m_frameSize</span> <span class="o">=</span> <span class="n">frameSize</span><span class="p">;</span></div><div class='line' id='LC543'>&nbsp;&nbsp;<span class="n">format</span><span class="p">.</span><span class="n">m_frameSamples</span> <span class="o">=</span> <span class="n">format</span><span class="p">.</span><span class="n">m_frames</span> <span class="o">*</span> <span class="n">format</span><span class="p">.</span><span class="n">m_channelLayout</span><span class="p">.</span><span class="n">Count</span><span class="p">();</span></div><div class='line' id='LC544'>&nbsp;&nbsp;<span class="n">m_format</span> <span class="o">=</span> <span class="n">format</span><span class="p">;</span></div><div class='line' id='LC545'>&nbsp;&nbsp;<span class="n">format</span><span class="p">.</span><span class="n">m_dataFormat</span> <span class="o">=</span> <span class="n">passthrough</span> <span class="o">?</span> <span class="n">AE_FMT_S16NE</span> <span class="o">:</span> <span class="n">format</span><span class="p">.</span><span class="n">m_dataFormat</span><span class="p">;</span></div><div class='line' id='LC546'><br/></div><div class='line' id='LC547'>&nbsp;&nbsp;<span class="n">Pause</span><span class="p">(</span><span class="nb">false</span><span class="p">);</span></div><div class='line' id='LC548'><br/></div><div class='line' id='LC549'>&nbsp;&nbsp;<span class="k">return</span> <span class="nb">true</span><span class="p">;</span></div><div class='line' id='LC550'><span class="p">}</span></div><div class='line' id='LC551'><br/></div><div class='line' id='LC552'><span class="kt">void</span> <span class="n">CAESinkPULSE</span><span class="o">::</span><span class="n">Deinitialize</span><span class="p">()</span></div><div class='line' id='LC553'><span class="p">{</span></div><div class='line' id='LC554'>&nbsp;&nbsp;<span class="n">m_IsAllocated</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC555'><br/></div><div class='line' id='LC556'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">m_Stream</span><span class="p">)</span></div><div class='line' id='LC557'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Drain</span><span class="p">();</span></div><div class='line' id='LC558'><br/></div><div class='line' id='LC559'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">m_MainLoop</span><span class="p">)</span></div><div class='line' id='LC560'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_stop</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC561'><br/></div><div class='line' id='LC562'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">m_Stream</span><span class="p">)</span></div><div class='line' id='LC563'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC564'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_stream_disconnect</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">);</span></div><div class='line' id='LC565'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_stream_unref</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">);</span></div><div class='line' id='LC566'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">m_Stream</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span></div><div class='line' id='LC567'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC568'><br/></div><div class='line' id='LC569'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">m_Context</span><span class="p">)</span></div><div class='line' id='LC570'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC571'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_context_disconnect</span><span class="p">(</span><span class="n">m_Context</span><span class="p">);</span></div><div class='line' id='LC572'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_context_unref</span><span class="p">(</span><span class="n">m_Context</span><span class="p">);</span></div><div class='line' id='LC573'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">m_Context</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span></div><div class='line' id='LC574'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC575'><br/></div><div class='line' id='LC576'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">m_MainLoop</span><span class="p">)</span></div><div class='line' id='LC577'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC578'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_free</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC579'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">m_MainLoop</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span></div><div class='line' id='LC580'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC581'><span class="p">}</span></div><div class='line' id='LC582'><br/></div><div class='line' id='LC583'><span class="kt">double</span> <span class="n">CAESinkPULSE</span><span class="o">::</span><span class="n">GetDelay</span><span class="p">()</span></div><div class='line' id='LC584'><span class="p">{</span></div><div class='line' id='LC585'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">m_IsAllocated</span><span class="p">)</span></div><div class='line' id='LC586'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC587'><br/></div><div class='line' id='LC588'>&nbsp;&nbsp;<span class="kt">int</span> <span class="n">error</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC589'>&nbsp;&nbsp;<span class="kt">pa_usec_t</span> <span class="n">latency</span> <span class="o">=</span> <span class="p">(</span><span class="kt">pa_usec_t</span><span class="p">)</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span></div><div class='line' id='LC590'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_lock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC591'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">((</span><span class="n">error</span> <span class="o">=</span> <span class="n">pa_stream_get_latency</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">latency</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">))</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC592'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC593'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">error</span> <span class="o">==</span> <span class="o">-</span><span class="n">PA_ERR_NODATA</span><span class="p">)</span></div><div class='line' id='LC594'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC595'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">WaitForOperation</span><span class="p">(</span><span class="n">pa_stream_update_timing_info</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span><span class="nb">NULL</span><span class="p">),</span> <span class="n">m_MainLoop</span><span class="p">,</span> <span class="s">&quot;Update Timing Information&quot;</span><span class="p">);</span></div><div class='line' id='LC596'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">((</span><span class="n">error</span> <span class="o">=</span> <span class="n">pa_stream_get_latency</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">latency</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">))</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC597'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC598'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGDEBUG</span><span class="p">,</span> <span class="s">&quot;GetDelay - Failed to get Latency %d&quot;</span><span class="p">,</span> <span class="n">error</span><span class="p">);</span> </div><div class='line' id='LC599'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC600'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC601'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC602'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">error</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="p">)</span></div><div class='line' id='LC603'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">latency</span> <span class="o">=</span> <span class="p">(</span><span class="kt">pa_usec_t</span><span class="p">)</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC604'><br/></div><div class='line' id='LC605'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_unlock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC606'>&nbsp;&nbsp;<span class="k">return</span> <span class="n">latency</span> <span class="o">/</span> <span class="mf">1000000.0</span><span class="p">;</span></div><div class='line' id='LC607'><span class="p">}</span></div><div class='line' id='LC608'><br/></div><div class='line' id='LC609'><span class="kt">double</span> <span class="n">CAESinkPULSE</span><span class="o">::</span><span class="n">GetCacheTotal</span><span class="p">()</span></div><div class='line' id='LC610'><span class="p">{</span></div><div class='line' id='LC611'>&nbsp;&nbsp;<span class="k">return</span> <span class="p">(</span><span class="kt">float</span><span class="p">)</span><span class="n">m_BufferSize</span> <span class="o">/</span> <span class="p">(</span><span class="kt">float</span><span class="p">)</span><span class="n">m_BytesPerSecond</span><span class="p">;</span></div><div class='line' id='LC612'><span class="p">}</span></div><div class='line' id='LC613'><br/></div><div class='line' id='LC614'><span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">CAESinkPULSE</span><span class="o">::</span><span class="n">AddPackets</span><span class="p">(</span><span class="kt">uint8_t</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">frames</span><span class="p">,</span> <span class="kt">bool</span> <span class="n">hasAudio</span><span class="p">,</span> <span class="kt">bool</span> <span class="n">blocking</span><span class="p">)</span></div><div class='line' id='LC615'><span class="p">{</span></div><div class='line' id='LC616'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">m_IsAllocated</span><span class="p">)</span></div><div class='line' id='LC617'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">frames</span><span class="p">;</span></div><div class='line' id='LC618'><br/></div><div class='line' id='LC619'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_lock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC620'><br/></div><div class='line' id='LC621'>&nbsp;&nbsp;<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">available</span> <span class="o">=</span> <span class="n">frames</span> <span class="o">*</span> <span class="n">m_format</span><span class="p">.</span><span class="n">m_frameSize</span><span class="p">;</span></div><div class='line' id='LC622'>&nbsp;&nbsp;<span class="kt">unsigned</span> <span class="kt">int</span> <span class="n">length</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC623'>&nbsp;&nbsp;<span class="c1">// revisit me after Gotham - should use a callback for the write function</span></div><div class='line' id='LC624'>&nbsp;&nbsp;<span class="k">while</span> <span class="p">((</span><span class="n">length</span> <span class="o">=</span> <span class="n">pa_stream_writable_size</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC625'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_wait</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC626'><br/></div><div class='line' id='LC627'>&nbsp;&nbsp;<span class="n">length</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">min</span><span class="p">((</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)</span><span class="n">length</span><span class="p">,</span> <span class="n">available</span><span class="p">);</span></div><div class='line' id='LC628'><br/></div><div class='line' id='LC629'>&nbsp;&nbsp;<span class="kt">int</span> <span class="n">error</span> <span class="o">=</span> <span class="n">pa_stream_write</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">PA_SEEK_RELATIVE</span><span class="p">);</span></div><div class='line' id='LC630'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_unlock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC631'><br/></div><div class='line' id='LC632'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">)</span></div><div class='line' id='LC633'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC634'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;CPulseAudioDirectSound::AddPackets - pa_stream_write failed</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span></div><div class='line' id='LC635'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC636'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC637'><br/></div><div class='line' id='LC638'>&nbsp;&nbsp;<span class="k">return</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)(</span><span class="n">length</span> <span class="o">/</span> <span class="n">m_format</span><span class="p">.</span><span class="n">m_frameSize</span><span class="p">);</span></div><div class='line' id='LC639'><span class="p">}</span></div><div class='line' id='LC640'><br/></div><div class='line' id='LC641'><span class="kt">void</span> <span class="n">CAESinkPULSE</span><span class="o">::</span><span class="n">Drain</span><span class="p">()</span></div><div class='line' id='LC642'><span class="p">{</span></div><div class='line' id='LC643'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">m_IsAllocated</span><span class="p">)</span></div><div class='line' id='LC644'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span><span class="p">;</span></div><div class='line' id='LC645'><br/></div><div class='line' id='LC646'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_lock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC647'>&nbsp;&nbsp;<span class="n">WaitForOperation</span><span class="p">(</span><span class="n">pa_stream_drain</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">),</span> <span class="n">m_MainLoop</span><span class="p">,</span> <span class="s">&quot;Drain&quot;</span><span class="p">);</span></div><div class='line' id='LC648'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_unlock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC649'><span class="p">}</span></div><div class='line' id='LC650'><br/></div><div class='line' id='LC651'><span class="kt">void</span> <span class="n">CAESinkPULSE</span><span class="o">::</span><span class="n">SetVolume</span><span class="p">(</span><span class="kt">float</span> <span class="n">volume</span><span class="p">)</span></div><div class='line' id='LC652'><span class="p">{</span></div><div class='line' id='LC653'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">m_IsAllocated</span><span class="p">)</span></div><div class='line' id='LC654'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC655'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_lock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC656'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">pa_volume_t</span> <span class="n">pavolume</span> <span class="o">=</span> <span class="n">pa_sw_volume_from_linear</span><span class="p">(</span><span class="n">volume</span><span class="p">);</span></div><div class='line' id='LC657'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span> <span class="n">pavolume</span> <span class="o">&lt;=</span> <span class="mi">0</span> <span class="p">)</span></div><div class='line' id='LC658'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_cvolume_mute</span><span class="p">(</span><span class="o">&amp;</span><span class="n">m_Volume</span><span class="p">,</span> <span class="n">m_Channels</span><span class="p">);</span></div><div class='line' id='LC659'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC660'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nf">pa_cvolume_set</span><span class="p">(</span><span class="o">&amp;</span><span class="n">m_Volume</span><span class="p">,</span> <span class="n">m_Channels</span><span class="p">,</span> <span class="n">pavolume</span><span class="p">);</span></div><div class='line' id='LC661'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_operation</span> <span class="o">*</span><span class="n">op</span> <span class="o">=</span> <span class="n">pa_context_set_sink_input_volume</span><span class="p">(</span><span class="n">m_Context</span><span class="p">,</span> <span class="n">pa_stream_get_index</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">),</span> <span class="o">&amp;</span><span class="n">m_Volume</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span></div><div class='line' id='LC662'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">op</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span></div><div class='line' id='LC663'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Failed to set volume&quot;</span><span class="p">);</span></div><div class='line' id='LC664'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC665'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nf">pa_operation_unref</span><span class="p">(</span><span class="n">op</span><span class="p">);</span></div><div class='line' id='LC666'><br/></div><div class='line' id='LC667'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_unlock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC668'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC669'><span class="p">}</span></div><div class='line' id='LC670'><br/></div><div class='line' id='LC671'><span class="kt">void</span> <span class="n">CAESinkPULSE</span><span class="o">::</span><span class="n">EnumerateDevicesEx</span><span class="p">(</span><span class="n">AEDeviceInfoList</span> <span class="o">&amp;</span><span class="n">list</span><span class="p">,</span> <span class="kt">bool</span> <span class="n">force</span><span class="p">)</span></div><div class='line' id='LC672'><span class="p">{</span></div><div class='line' id='LC673'>&nbsp;&nbsp;<span class="n">pa_context</span> <span class="o">*</span><span class="n">context</span><span class="p">;</span></div><div class='line' id='LC674'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop</span> <span class="o">*</span><span class="n">mainloop</span><span class="p">;</span></div><div class='line' id='LC675'><br/></div><div class='line' id='LC676'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">SetupContext</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">context</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">mainloop</span><span class="p">))</span></div><div class='line' id='LC677'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC678'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Failed to create context&quot;</span><span class="p">);</span></div><div class='line' id='LC679'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span><span class="p">;</span></div><div class='line' id='LC680'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC681'><br/></div><div class='line' id='LC682'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_lock</span><span class="p">(</span><span class="n">mainloop</span><span class="p">);</span></div><div class='line' id='LC683'><br/></div><div class='line' id='LC684'>&nbsp;&nbsp;<span class="n">SinkInfoStruct</span> <span class="n">sinkStruct</span><span class="p">;</span></div><div class='line' id='LC685'>&nbsp;&nbsp;<span class="n">sinkStruct</span><span class="p">.</span><span class="n">mainloop</span> <span class="o">=</span> <span class="n">mainloop</span><span class="p">;</span></div><div class='line' id='LC686'>&nbsp;&nbsp;<span class="n">sinkStruct</span><span class="p">.</span><span class="n">list</span> <span class="o">=</span> <span class="o">&amp;</span><span class="n">list</span><span class="p">;</span></div><div class='line' id='LC687'>&nbsp;&nbsp;<span class="n">WaitForOperation</span><span class="p">(</span><span class="n">pa_context_get_sink_info_list</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">SinkInfoRequestCallback</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">sinkStruct</span><span class="p">),</span> <span class="n">mainloop</span><span class="p">,</span> <span class="s">&quot;EnumerateAudioSinks&quot;</span><span class="p">);</span></div><div class='line' id='LC688'><br/></div><div class='line' id='LC689'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_unlock</span><span class="p">(</span><span class="n">mainloop</span><span class="p">);</span></div><div class='line' id='LC690'><br/></div><div class='line' id='LC691'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">mainloop</span><span class="p">)</span></div><div class='line' id='LC692'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_stop</span><span class="p">(</span><span class="n">mainloop</span><span class="p">);</span></div><div class='line' id='LC693'><br/></div><div class='line' id='LC694'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">context</span><span class="p">)</span></div><div class='line' id='LC695'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC696'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_context_disconnect</span><span class="p">(</span><span class="n">context</span><span class="p">);</span></div><div class='line' id='LC697'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_context_unref</span><span class="p">(</span><span class="n">context</span><span class="p">);</span></div><div class='line' id='LC698'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">context</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span></div><div class='line' id='LC699'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC700'><br/></div><div class='line' id='LC701'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">mainloop</span><span class="p">)</span></div><div class='line' id='LC702'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC703'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_free</span><span class="p">(</span><span class="n">mainloop</span><span class="p">);</span></div><div class='line' id='LC704'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">mainloop</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span></div><div class='line' id='LC705'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC706'><span class="p">}</span></div><div class='line' id='LC707'><br/></div><div class='line' id='LC708'><span class="kt">bool</span> <span class="n">CAESinkPULSE</span><span class="o">::</span><span class="n">Pause</span><span class="p">(</span><span class="kt">bool</span> <span class="n">pause</span><span class="p">)</span></div><div class='line' id='LC709'><span class="p">{</span></div><div class='line' id='LC710'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_lock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC711'><br/></div><div class='line' id='LC712'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">WaitForOperation</span><span class="p">(</span><span class="n">pa_stream_cork</span><span class="p">(</span><span class="n">m_Stream</span><span class="p">,</span> <span class="n">pause</span> <span class="o">?</span> <span class="mi">1</span> <span class="o">:</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">),</span> <span class="n">m_MainLoop</span><span class="p">,</span> <span class="n">pause</span> <span class="o">?</span> <span class="s">&quot;Pause&quot;</span> <span class="o">:</span> <span class="s">&quot;Resume&quot;</span><span class="p">))</span></div><div class='line' id='LC713'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pause</span> <span class="o">=</span> <span class="o">!</span><span class="n">pause</span><span class="p">;</span></div><div class='line' id='LC714'><br/></div><div class='line' id='LC715'>&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_unlock</span><span class="p">(</span><span class="n">m_MainLoop</span><span class="p">);</span></div><div class='line' id='LC716'><br/></div><div class='line' id='LC717'>&nbsp;&nbsp;<span class="k">return</span> <span class="n">pause</span><span class="p">;</span></div><div class='line' id='LC718'><span class="p">}</span></div><div class='line' id='LC719'><br/></div><div class='line' id='LC720'><span class="kr">inline</span> <span class="kt">bool</span> <span class="n">CAESinkPULSE</span><span class="o">::</span><span class="n">WaitForOperation</span><span class="p">(</span><span class="n">pa_operation</span> <span class="o">*</span><span class="n">op</span><span class="p">,</span> <span class="n">pa_threaded_mainloop</span> <span class="o">*</span><span class="n">mainloop</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">LogEntry</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="p">)</span></div><div class='line' id='LC721'><span class="p">{</span></div><div class='line' id='LC722'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">op</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span></div><div class='line' id='LC723'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC724'><br/></div><div class='line' id='LC725'>&nbsp;&nbsp;<span class="kt">bool</span> <span class="n">sucess</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span></div><div class='line' id='LC726'><br/></div><div class='line' id='LC727'>&nbsp;&nbsp;<span class="k">while</span> <span class="p">(</span><span class="n">pa_operation_get_state</span><span class="p">(</span><span class="n">op</span><span class="p">)</span> <span class="o">==</span> <span class="n">PA_OPERATION_RUNNING</span><span class="p">)</span></div><div class='line' id='LC728'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">pa_threaded_mainloop_wait</span><span class="p">(</span><span class="n">mainloop</span><span class="p">);</span></div><div class='line' id='LC729'><br/></div><div class='line' id='LC730'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="n">pa_operation_get_state</span><span class="p">(</span><span class="n">op</span><span class="p">)</span> <span class="o">!=</span> <span class="n">PA_OPERATION_DONE</span><span class="p">)</span></div><div class='line' id='LC731'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC732'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;PulseAudio: %s Operation failed&quot;</span><span class="p">,</span> <span class="n">LogEntry</span><span class="p">);</span></div><div class='line' id='LC733'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">sucess</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC734'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC735'><br/></div><div class='line' id='LC736'>&nbsp;&nbsp;<span class="n">pa_operation_unref</span><span class="p">(</span><span class="n">op</span><span class="p">);</span></div><div class='line' id='LC737'>&nbsp;&nbsp;<span class="k">return</span> <span class="n">sucess</span><span class="p">;</span></div><div class='line' id='LC738'><span class="p">}</span></div><div class='line' id='LC739'><br/></div><div class='line' id='LC740'><span class="kt">bool</span> <span class="n">CAESinkPULSE</span><span class="o">::</span><span class="n">SetupContext</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">host</span><span class="p">,</span> <span class="n">pa_context</span> <span class="o">**</span><span class="n">context</span><span class="p">,</span> <span class="n">pa_threaded_mainloop</span> <span class="o">**</span><span class="n">mainloop</span><span class="p">)</span></div><div class='line' id='LC741'><span class="p">{</span></div><div class='line' id='LC742'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">((</span><span class="o">*</span><span class="n">mainloop</span> <span class="o">=</span> <span class="n">pa_threaded_mainloop_new</span><span class="p">())</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span></div><div class='line' id='LC743'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC744'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Failed to allocate main loop&quot;</span><span class="p">);</span></div><div class='line' id='LC745'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC746'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC747'><br/></div><div class='line' id='LC748'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(((</span><span class="o">*</span><span class="n">context</span><span class="p">)</span> <span class="o">=</span> <span class="n">pa_context_new</span><span class="p">(</span><span class="n">pa_threaded_mainloop_get_api</span><span class="p">(</span><span class="o">*</span><span class="n">mainloop</span><span class="p">),</span> <span class="s">&quot;XBMC&quot;</span><span class="p">))</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span></div><div class='line' id='LC749'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC750'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">CLog</span><span class="o">::</span><span class="n">Log</span><span class="p">(</span><span class="n">LOGERROR</span><span class="p">,</span> <span class="s">&quot;PulseAudio: Failed to allocate context&quot;</span><span class="p">);</span></div><div class='line' id='LC751'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC752'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC753'><br/></div><div class='line' id='LC754'>&nbsp;&nbsp;<span class="n">pa_context_set_state_callback</span><span class="p">(</span><span class="o">*</span><span class="n">context</span><span class="p">,</span> <span class="n">ContextStateCallback</span><span class="p">,</span> <span class="o">*</span><span class="n">mainloop</span><span class="p">);</span></div><div cla
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement