Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $ make -j 4
- CPP xbmc/cores/AudioEngine/Sinks/AESinkPULSE.o
- Sinks/AESinkPULSE.cpp:571:196: warning: missing terminating ' character [enabled by default]
- <a href="/fritsch/xbmc/commit/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab" class="message" data-pjax="true" title="AESinkPULSE: Don't add devices with empty channel map">AESinkPULSE: Don't add devices with empty channel map</a>
- ^
- Sinks/AESinkPULSE.cpp:7:19: warning: character constant too long for its type [enabled by default]
- <meta charset='utf-8'>
- ^
- Sinks/AESinkPULSE.cpp:9:9: error: stray ‘\302’ in program
- <title>xbmc/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp at cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab · fritsch/xbmc · GitHub</title>
- ^
- Sinks/AESinkPULSE.cpp:9:9: error: stray ‘\267’ in program
- Sinks/AESinkPULSE.cpp:9:9: error: stray ‘\302’ in program
- Sinks/AESinkPULSE.cpp:9:9: error: stray ‘\267’ in program
- Sinks/AESinkPULSE.cpp:50:39: warning: character constant too long for its type [enabled by default]
- <link data-pjax-transient rel='permalink' href='/fritsch/xbmc/blob/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp'>
- ^
- Sinks/AESinkPULSE.cpp:50:56: warning: character constant too long for its type [enabled by default]
- <link data-pjax-transient rel='permalink' href='/fritsch/xbmc/blob/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp'>
- ^
- Sinks/AESinkPULSE.cpp:223:25: warning: character constant too long for its type [enabled by default]
- <span class='counter'>0</span>
- ^
- Sinks/AESinkPULSE.cpp:560:17: warning: character constant too long for its type [enabled by default]
- <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>
- ^
- Sinks/AESinkPULSE.cpp:571:196: warning: missing terminating ' character [enabled by default]
- <a href="/fritsch/xbmc/commit/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab" class="message" data-pjax="true" title="AESinkPULSE: Don't add devices with empty channel map">AESinkPULSE: Don't add devices with empty channel map</a>
- ^
- Sinks/AESinkPULSE.cpp:571:9: error: missing terminating ' character
- <a href="/fritsch/xbmc/commit/cdc666f7f7b9ce3f3c99c2dbf51d907aede1eaab" class="message" data-pjax="true" title="AESinkPULSE: Don't add devices with empty channel map">AESinkPULSE: Don't add devices with empty channel map</a>
- ^
- Sinks/AESinkPULSE.cpp:1408:70: warning: multi-character character constant [-Wmultichar]
- <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"> * <http://www.gnu.org/licenses/>.</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 "system.h"</span></div><div class='line' id='LC21'><span class="cp">#ifdef HAS_PULSEAUDIO</span></div><div class='line' id='LC22'><span class="cp">#include "AESinkPULSE.h"</span></div><div class='line' id='LC23'><span class="cp">#include "utils/log.h"</span></div><div class='line' id='LC24'><span class="cp">#include "Util.h"</span></div><div class='line' id='LC25'><span class="cp">#include "guilib/LocalizeStrings.h"</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'> <span class="k">switch</span> <span class="p">(</span><span class="n">s</span><span class="p">)</span></div><div class='line' id='LC32'> <span class="p">{</span></div><div class='line' id='LC33'> <span class="k">case</span> <span class="n">PA_CONTEXT_UNCONNECTED</span>:</div><div class='line' id='LC34'> <span class="k">return</span> <span class="s">"unconnected"</span><span class="p">;</span></div><div class='line' id='LC35'> <span class="k">case</span> <span class="n">PA_CONTEXT_CONNECTING</span>:</div><div class='line' id='LC36'> <span class="k">return</span> <span class="s">"connecting"</span><span class="p">;</span></div><div class='line' id='LC37'> <span class="k">case</span> <span class="n">PA_CONTEXT_AUTHORIZING</span>:</div><div class='line' id='LC38'> <span class="k">return</span> <span class="s">"authorizing"</span><span class="p">;</span></div><div class='line' id='LC39'> <span class="k">case</span> <span class="n">PA_CONTEXT_SETTING_NAME</span>:</div><div class='line' id='LC40'> <span class="k">return</span> <span class="s">"setting name"</span><span class="p">;</span></div><div class='line' id='LC41'> <span class="k">case</span> <span class="n">PA_CONTEXT_READY</span>:</div><div class='line' id='LC42'> <span class="k">return</span> <span class="s">"ready"</span><span class="p">;</span></div><div class='line' id='LC43'> <span class="k">case</span> <span class="n">PA_CONTEXT_FAILED</span>:</div><div class='line' id='LC44'> <span class="k">return</span> <span class="s">"failed"</span><span class="p">;</span></div><div class='line' id='LC45'> <span class="k">case</span> <span class="n">PA_CONTEXT_TERMINATED</span>:</div><div class='line' id='LC46'> <span class="k">return</span> <span class="s">"terminated"</span><span class="p">;</span></div><div class='line' id='LC47'> <span class="nl">default:</span></div><div class='line' id='LC48'> <span class="k">return</span> <span class="s">"none"</span><span class="p">;</span></div><div class='line' id='LC49'> <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'> <span class="k">switch</span><span class="p">(</span><span class="n">s</span><span class="p">)</span></div><div class='line' id='LC55'> <span class="p">{</span></div><div class='line' id='LC56'> <span class="k">case</span> <span class="n">PA_STREAM_UNCONNECTED</span>:</div><div class='line' id='LC57'> <span class="k">return</span> <span class="s">"unconnected"</span><span class="p">;</span></div><div class='line' id='LC58'> <span class="k">case</span> <span class="n">PA_STREAM_CREATING</span>:</div><div class='line' id='LC59'> <span class="k">return</span> <span class="s">"creating"</span><span class="p">;</span></div><div class='line' id='LC60'> <span class="k">case</span> <span class="n">PA_STREAM_READY</span>:</div><div class='line' id='LC61'> <span class="k">return</span> <span class="s">"ready"</span><span class="p">;</span></div><div class='line' id='LC62'> <span class="k">case</span> <span class="n">PA_STREAM_FAILED</span>:</div><div class='line' id='LC63'> <span class="k">return</span> <span class="s">"failed"</span><span class="p">;</span></div><div class='line' id='LC64'> <span class="k">case</span> <span class="n">PA_STREAM_TERMINATED</span>:</div><div class='line' id='LC65'> <span class="k">return</span> <span class="s">"terminated"</span><span class="p">;</span></div><div class='line' id='LC66'> <span class="nl">default:</span></div><div class='line' id='LC67'> <span class="k">return</span> <span class="s">"none"</span><span class="p">;</span></div><div class='line' id='LC68'> <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'> <span class="k">switch</span> <span class="p">(</span><span class="n">format</span><span class="p">)</span></div><div class='line' id='LC74'> <span class="p">{</span></div><div class='line' id='LC75'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <span class="k">case</span> <span class="n">AE_FMT_AC3</span>:</div><div class='line' id='LC91'> <span class="k">case</span> <span class="n">AE_FMT_DTS</span>:</div><div class='line' id='LC92'> <span class="k">case</span> <span class="n">AE_FMT_EAC3</span>:</div><div class='line' id='LC93'> <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'> <span class="nl">default:</span></div><div class='line' id='LC96'> <span class="k">return</span> <span class="n">PA_SAMPLE_INVALID</span><span class="p">;</span></div><div class='line' id='LC97'> <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'> <span class="k">switch</span> <span class="p">(</span><span class="n">format</span><span class="p">)</span></div><div class='line' id='LC103'> <span class="p">{</span></div><div class='line' id='LC104'> <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'> <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'> <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'> <span class="nl">default:</span></div><div class='line' id='LC109'> <span class="k">return</span> <span class="n">PA_ENCODING_PCM</span><span class="p">;</span></div><div class='line' id='LC110'> <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'> <span class="n">AE_FMT_U8</span><span class="p">,</span></div><div class='line' id='LC115'> <span class="n">AE_FMT_S16LE</span><span class="p">,</span></div><div class='line' id='LC116'> <span class="n">AE_FMT_S16BE</span><span class="p">,</span></div><div class='line' id='LC117'> <span class="n">AE_FMT_S16NE</span><span class="p">,</span></div><div class='line' id='LC118'> <span class="n">AE_FMT_S24LE3</span><span class="p">,</span></div><div class='line' id='LC119'> <span class="n">AE_FMT_S24BE3</span><span class="p">,</span></div><div class='line' id='LC120'> <span class="n">AE_FMT_S24NE3</span><span class="p">,</span></div><div class='line' id='LC121'> <span class="n">AE_FMT_S24LE4</span><span class="p">,</span></div><div class='line' id='LC122'> <span class="n">AE_FMT_S24BE4</span><span class="p">,</span></div><div class='line' id='LC123'> <span class="n">AE_FMT_S24NE4</span><span class="p">,</span></div><div class='line' id='LC124'> <span class="n">AE_FMT_S32BE</span><span class="p">,</span></div><div class='line' id='LC125'> <span class="n">AE_FMT_S32LE</span><span class="p">,</span></div><div class='line' id='LC126'> <span class="n">AE_FMT_S32NE</span><span class="p">,</span></div><div class='line' id='LC127'> <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'> <span class="mi">5512</span><span class="p">,</span></div><div class='line' id='LC132'> <span class="mi">8000</span><span class="p">,</span></div><div class='line' id='LC133'> <span class="mi">11025</span><span class="p">,</span></div><div class='line' id='LC134'> <span class="mi">16000</span><span class="p">,</span></div><div class='line' id='LC135'> <span class="mi">22050</span><span class="p">,</span></div><div class='line' id='LC136'> <span class="mi">32000</span><span class="p">,</span></div><div class='line' id='LC137'> <span class="mi">44100</span><span class="p">,</span></div><div class='line' id='LC138'> <span class="mi">48000</span><span class="p">,</span></div><div class='line' id='LC139'> <span class="mi">64000</span><span class="p">,</span></div><div class='line' id='LC140'> <span class="mi">88200</span><span class="p">,</span></div><div class='line' id='LC141'> <span class="mi">96000</span><span class="p">,</span></div><div class='line' id='LC142'> <span class="mi">176400</span><span class="p">,</span></div><div class='line' id='LC143'> <span class="mi">192000</span><span class="p">,</span></div><div class='line' id='LC144'> <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'> <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'> <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'> <span class="p">{</span></div><div class='line' id='LC154'> <span class="k">case</span> <span class="n">PA_CONTEXT_READY</span>:</div><div class='line' id='LC155'> <span class="k">case</span> <span class="n">PA_CONTEXT_TERMINATED</span>:</div><div class='line' id='LC156'> <span class="k">case</span> <span class="n">PA_CONTEXT_UNCONNECTED</span>:</div><div class='line' id='LC157'> <span class="k">case</span> <span class="n">PA_CONTEXT_CONNECTING</span>:</div><div class='line' id='LC158'> <span class="k">case</span> <span class="n">PA_CONTEXT_AUTHORIZING</span>:</div><div class='line' id='LC159'> <span class="k">case</span> <span class="n">PA_CONTEXT_SETTING_NAME</span>:</div><div class='line' id='LC160'> <span class="k">case</span> <span class="n">PA_CONTEXT_FAILED</span>:</div><div class='line' id='LC161'> <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'> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC163'> <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'> <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'> <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'> <span class="p">{</span></div><div class='line' id='LC171'> <span class="k">case</span> <span class="n">PA_STREAM_UNCONNECTED</span>:</div><div class='line' id='LC172'> <span class="k">case</span> <span class="n">PA_STREAM_CREATING</span>:</div><div class='line' id='LC173'> <span class="k">case</span> <span class="n">PA_STREAM_READY</span>:</div><div class='line' id='LC174'> <span class="k">case</span> <span class="n">PA_STREAM_FAILED</span>:</div><div class='line' id='LC175'> <span class="k">case</span> <span class="n">PA_STREAM_TERMINATED</span>:</div><div class='line' id='LC176'> <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'> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC178'> <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'> <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'> <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'> <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'> <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'> <span class="n">AEDeviceInfoList</span> <span class="o">*</span><span class="n">list</span><span class="p">;</span></div><div class='line' id='LC195'> <span class="kt">bool</span> <span class="n">isHWDevice</span><span class="p">;</span></div><div class='line' id='LC196'> <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'> <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'> <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">&&</span> <span class="n">i</span><span class="o">-></span><span class="n">flags</span> <span class="o">&&</span> <span class="p">(</span><span class="n">i</span><span class="o">-></span><span class="n">flags</span> <span class="o">&</span> <span class="n">PA_SINK_HARDWARE</span><span class="p">))</span></div><div class='line' id='LC203'> <span class="n">sinkStruct</span><span class="o">-></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'> <span class="n">pa_threaded_mainloop_signal</span><span class="p">(</span><span class="n">sinkStruct</span><span class="o">-></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'> <span class="n">AEChannel</span> <span class="n">ae_channel</span><span class="p">;</span></div><div class='line' id='LC210'> <span class="k">switch</span> <span class="p">(</span><span class="n">channel</span><span class="p">)</span></div><div class='line' id='LC211'> <span class="p">{</span></div><div class='line' id='LC212'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <span class="p">}</span></div><div class='line' id='LC232'> <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'> <span class="kt">pa_channel_position_t</span> <span class="n">pa_channel</span><span class="p">;</span></div><div class='line' id='LC238'> <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'> <span class="p">{</span></div><div class='line' id='LC240'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <span class="p">}</span></div><div class='line' id='LC260'> <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'> <span class="n">pa_channel_map</span> <span class="n">map</span><span class="p">;</span></div><div class='line' id='LC266'> <span class="n">pa_channel_map_init</span><span class="p">(</span><span class="o">&</span><span class="n">map</span><span class="p">);</span></div><div class='line' id='LC267'> <span class="kt">pa_channel_position_t</span> <span class="n">pos</span><span class="p">;</span></div><div class='line' id='LC268'> <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"><</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'> <span class="p">{</span></div><div class='line' id='LC270'> <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'> <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'> <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'> <span class="p">}</span></div><div class='line' id='LC274'> <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'> <span class="n">CAEChannelInfo</span> <span class="n">info</span><span class="p">;</span></div><div class='line' id='LC280'> <span class="n">AEChannel</span> <span class="n">ch</span><span class="p">;</span></div><div class='line' id='LC281'> <span class="n">info</span><span class="p">.</span><span class="n">Reset</span><span class="p">();</span></div><div class='line' id='LC282'> <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"><</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'> <span class="p">{</span></div><div class='line' id='LC284'> <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'> <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'> <span class="n">info</span> <span class="o">+=</span> <span class="n">ch</span><span class="p">;</span></div><div class='line' id='LC287'> <span class="p">}</span></div><div class='line' id='LC288'> <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'> <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'> <span class="k">if</span><span class="p">(</span><span class="n">sinkStruct</span> <span class="o">&&</span> <span class="n">sinkStruct</span><span class="o">-></span><span class="n">list</span><span class="o">-></span><span class="n">empty</span><span class="p">())</span></div><div class='line' id='LC297'> <span class="p">{</span></div><div class='line' id='LC298'> <span class="c1">//add a default device first</span></div><div class='line' id='LC299'> <span class="n">CAEDeviceInfo</span> <span class="n">defaultDevice</span><span class="p">;</span></div><div class='line' id='LC300'> <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">"Default"</span><span class="p">);</span></div><div class='line' id='LC301'> <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">"Default"</span><span class="p">);</span></div><div class='line' id='LC302'> <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">"Default Output Device (PULSEAUDIO)"</span><span class="p">);</span></div><div class='line' id='LC303'> <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'> <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'> <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'> <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'> <span class="n">sinkStruct</span><span class="o">-></span><span class="n">list</span><span class="o">-></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'> <span class="p">}</span></div><div class='line' id='LC309'> <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'> <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">&&</span> <span class="n">i</span><span class="o">-></span><span class="n">name</span><span class="p">)</span></div><div class='line' id='LC311'> <span class="p">{</span></div><div class='line' id='LC312'> <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'> <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">-></span><span class="n">name</span><span class="p">);</span></div><div class='line' id='LC315'> <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">-></span><span class="n">description</span><span class="p">);</span></div><div class='line' id='LC316'> <span class="k">if</span> <span class="p">(</span><span class="n">i</span><span class="o">-></span><span class="n">active_port</span> <span class="o">&&</span> <span class="n">i</span><span class="o">-></span><span class="n">active_port</span><span class="o">-></span><span class="n">description</span><span class="p">)</span></div><div class='line' id='LC317'> <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">-></span><span class="n">active_port</span><span class="o">-></span><span class="n">description</span><span class="p">)).</span><span class="n">append</span><span class="p">(</span><span class="s">" (PULSEAUDIO)"</span><span class="p">);</span></div><div class='line' id='LC318'> <span class="k">else</span></div><div class='line' id='LC319'> <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">-></span><span class="n">description</span><span class="p">)).</span><span class="n">append</span><span class="p">(</span><span class="s">" (PULSEAUDIO)"</span><span class="p">);</span></div><div class='line' id='LC320'> <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'> <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">-></span><span class="n">channel_map</span><span class="p">);</span></div><div class='line' id='LC323'><br/></div><div class='line' id='LC324'> <span class="c1">// Don't add devices that would not have a channel map</span></div><div class='line' id='LC325'> <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'> <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'> <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'> <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"><</span> <span class="n">i</span><span class="o">-></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'> <span class="p">{</span></div><div class='line' id='LC332'> <span class="k">switch</span><span class="p">(</span><span class="n">i</span><span class="o">-></span><span class="n">formats</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="o">-></span><span class="n">encoding</span><span class="p">)</span></div><div class='line' id='LC333'> <span class="p">{</span></div><div class='line' id='LC334'> <span class="k">case</span> <span class="n">PA_ENCODING_AC3_IEC61937</span>:</div><div class='line' id='LC335'> <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'> <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'> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC338'> <span class="k">case</span> <span class="n">PA_ENCODING_DTS_IEC61937</span>:</div><div class='line' id='LC339'> <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'> <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'> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC342'> <span class="k">case</span> <span class="n">PA_ENCODING_EAC3_IEC61937</span>:</div><div class='line' id='LC343'> <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'> <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'> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC346'> <span class="k">case</span> <span class="n">PA_ENCODING_PCM</span>:</div><div class='line' id='LC347'> <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'> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC349'> <span class="nl">default:</span></div><div class='line' id='LC350'> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC351'> <span class="p">}</span></div><div class='line' id='LC352'> <span class="p">}</span></div><div class='line' id='LC353'> <span class="c1">// passthrough is only working when device has Stereo channel config</span></div><div class='line' id='LC354'> <span class="k">if</span> <span class="p">(</span><span class="n">device_type</span> <span class="o">></span> <span class="n">AE_DEVTYPE_PCM</span> <span class="o">&&</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'> <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'> <span class="k">else</span></div><div class='line' id='LC357'> <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'> <span class="k">if</span><span class="p">(</span><span class="n">valid</span><span class="p">)</span></div><div class='line' id='LC359'> <span class="p">{</span></div><div class='line' id='LC360'> <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">"PulseAudio: Found %s with devicestring %s"</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'> <span class="n">sinkStruct</span><span class="o">-></span><span class="n">list</span><span class="o">-></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'> <span class="p">}</span></div><div class='line' id='LC363'> <span class="k">else</span></div><div class='line' id='LC364'> <span class="p">{</span></div><div class='line' id='LC365'> <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">"PulseAudio: Skipped %s with devicestring %s"</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'> <span class="p">}</span></div><div class='line' id='LC367'> <span class="p">}</span></div><div class='line' id='LC368'> <span class="n">pa_threaded_mainloop_signal</span><span class="p">(</span><span class="n">sinkStruct</span><span class="o">-></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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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">&</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">&</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'> <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'> <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'> <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'> <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'> <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'> <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'> <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">&</span><span class="n">m_Context</span><span class="p">,</span> <span class="o">&</span><span class="n">m_MainLoop</span><span class="p">))</span></div><div class='line' id='LC400'> <span class="p">{</span></div><div class='line' id='LC401'> <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">"PulseAudio: Failed to create context"</span><span class="p">);</span></div><div class='line' id='LC402'> <span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC403'> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC404'> <span class="p">}</span></div><div class='line' id='LC405'><br/></div><div class='line' id='LC406'> <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'> <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'> <span class="n">pa_channel_map_init</span><span class="p">(</span><span class="o">&</span><span class="n">map</span><span class="p">);</span></div><div class='line' id='LC410'><br/></div><div class='line' id='LC411'> <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'> <span class="k">if</span><span class="p">(</span><span class="n">passthrough</span><span class="p">)</span></div><div class='line' id='LC414'> <span class="p">{</span></div><div class='line' id='LC415'> <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'> <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'> <span class="p">}</span></div><div class='line' id='LC418'> <span class="k">else</span></div><div class='line' id='LC419'> <span class="p">{</span></div><div class='line' id='LC420'> <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'> <span class="c1">// if count has changed we need to fit the AE Map</span></div><div class='line' id='LC422'> <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'> <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'> <span class="p">}</span></div><div class='line' id='LC425'> <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'> <span class="n">pa_cvolume_reset</span><span class="p">(</span><span class="o">&</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'> <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'> <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'> <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">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'> <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'> <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'> <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'> <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'> <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'> <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'> <span class="p">{</span></div><div class='line' id='LC440'> <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">"PulseAudio: Invalid format info"</span><span class="p">);</span></div><div class='line' id='LC441'> <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'> <span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC443'> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC444'> <span class="p">}</span></div><div class='line' id='LC445'><br/></div><div class='line' id='LC446'> <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'> <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">&</span><span class="n">spec</span><span class="p">,</span> <span class="o">&</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'> <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'> <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'> <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'> <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">&</span><span class="n">spec</span><span class="p">))</span></div><div class='line' id='LC455'> <span class="p">{</span></div><div class='line' id='LC456'> <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">"PulseAudio: Invalid sample spec"</span><span class="p">);</span></div><div class='line' id='LC457'> <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'> <span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC459'> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC460'> <span class="p">}</span></div><div class='line' id='LC461'><br/></div><div class='line' id='LC462'> <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">&</span><span class="n">spec</span><span class="p">);</span></div><div class='line' id='LC463'> <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">&</span><span class="n">spec</span><span class="p">);</span></div><div class='line' id='LC464'><br/></div><div class='line' id='LC465'> <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">"audio stream"</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'> <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'> <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'> <span class="p">{</span></div><div class='line' id='LC470'> <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">"PulseAudio: Could not create a stream"</span><span class="p">);</span></div><div class='line' id='LC471'> <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'> <span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC473'> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC474'> <span class="p">}</span></div><div class='line' id='LC475'><br/></div><div class='line' id='LC476'> <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'> <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'> <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'> <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">"Default"</span><span class="p">);</span></div><div class='line' id='LC481'><br/></div><div class='line' id='LC482'> <span class="n">pa_buffer_attr</span> <span class="n">buffer_attr</span><span class="p">;</span></div><div class='line' id='LC483'> <span class="n">SinkInfoStruct</span> <span class="n">sinkStruct</span><span class="p">;</span></div><div class='line' id='LC484'> <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'> <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'> <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'> <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">&</span><span class="n">sinkStruct</span><span class="p">),</span> <span class="n">m_MainLoop</span><span class="p">,</span> <span class="s">"Get Sink Info"</span><span class="p">);</span></div><div class='line' id='LC488'><br/></div><div class='line' id='LC489'> <span class="c1">// 200ms max latency</span></div><div class='line' id='LC490'> <span class="c1">// 50ms min packet size</span></div><div class='line' id='LC491'> <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'> <span class="p">{</span></div><div class='line' id='LC493'> <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'> <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'> <span class="n">memset</span><span class="p">(</span><span class="o">&</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'> <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'> <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'> <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'> <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'> <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'> <span class="p">}</span></div><div class='line' id='LC502'><br/></div><div class='line' id='LC503'> <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">&</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">&</span><span class="n">m_Volume</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC504'> <span class="p">{</span></div><div class='line' id='LC505'> <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">"PulseAudio: Failed to connect stream to output"</span><span class="p">);</span></div><div class='line' id='LC506'> <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'> <span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC508'> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC509'> <span class="p">}</span></div><div class='line' id='LC510'><br/></div><div class='line' id='LC511'> <span class="cm">/* Wait until the stream is ready */</span></div><div class='line' id='LC512'> <span class="k">do</span></div><div class='line' id='LC513'> <span class="p">{</span></div><div class='line' id='LC514'> <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'> <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">"PulseAudio: Stream %s"</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'> <span class="p">}</span></div><div class='line' id='LC517'> <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">&&</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'> <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'> <span class="p">{</span></div><div class='line' id='LC521'> <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">"PulseAudio: Waited for the stream but it failed"</span><span class="p">);</span></div><div class='line' id='LC522'> <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'> <span class="n">Deinitialize</span><span class="p">();</span></div><div class='line' id='LC524'> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC525'> <span class="p">}</span></div><div class='line' id='LC526'><br/></div><div class='line' id='LC527'> <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'> <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'> <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">"PulseAudio: %s"</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'> <span class="k">else</span></div><div class='line' id='LC532'> <span class="p">{</span></div><div class='line' id='LC533'> <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">-></span><span class="n">minreq</span><span class="p">;</span></div><div class='line' id='LC534'> <span class="n">m_BufferSize</span> <span class="o">=</span> <span class="n">a</span><span class="o">-></span><span class="n">tlength</span><span class="p">;</span></div><div class='line' id='LC535'><br/></div><div class='line' id='LC536'> <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'> <span class="p">}</span></div><div class='line' id='LC538'><br/></div><div class='line' id='LC539'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <span class="n">Drain</span><span class="p">();</span></div><div class='line' id='LC558'><br/></div><div class='line' id='LC559'> <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'> <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'> <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'> <span class="p">{</span></div><div class='line' id='LC564'> <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'> <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'> <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'> <span class="p">}</span></div><div class='line' id='LC568'><br/></div><div class='line' id='LC569'> <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'> <span class="p">{</span></div><div class='line' id='LC571'> <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'> <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'> <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'> <span class="p">}</span></div><div class='line' id='LC575'><br/></div><div class='line' id='LC576'> <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'> <span class="p">{</span></div><div class='line' id='LC578'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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">&</span><span class="n">latency</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">))</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC592'> <span class="p">{</span></div><div class='line' id='LC593'> <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'> <span class="p">{</span></div><div class='line' id='LC595'> <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">"Update Timing Information"</span><span class="p">);</span></div><div class='line' id='LC596'> <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">&</span><span class="n">latency</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">))</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span></div><div class='line' id='LC597'> <span class="p">{</span></div><div class='line' id='LC598'> <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">"GetDelay - Failed to get Latency %d"</span><span class="p">,</span> <span class="n">error</span><span class="p">);</span> </div><div class='line' id='LC599'> <span class="p">}</span></div><div class='line' id='LC600'> <span class="p">}</span></div><div class='line' id='LC601'> <span class="p">}</span></div><div class='line' id='LC602'> <span class="k">if</span> <span class="p">(</span><span class="n">error</span> <span class="o"><</span> <span class="mi">0</span> <span class="p">)</span></div><div class='line' id='LC603'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <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'> <span class="c1">// revisit me after Gotham - should use a callback for the write function</span></div><div class='line' id='LC624'> <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'> <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'> <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'> <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'> <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'> <span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">)</span></div><div class='line' id='LC633'> <span class="p">{</span></div><div class='line' id='LC634'> <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">"CPulseAudioDirectSound::AddPackets - pa_stream_write failed</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span></div><div class='line' id='LC635'> <span class="k">return</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC636'> <span class="p">}</span></div><div class='line' id='LC637'><br/></div><div class='line' id='LC638'> <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'> <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'> <span class="k">return</span><span class="p">;</span></div><div class='line' id='LC645'><br/></div><div class='line' id='LC646'> <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'> <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">"Drain"</span><span class="p">);</span></div><div class='line' id='LC648'> <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'> <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'> <span class="p">{</span></div><div class='line' id='LC655'> <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'> <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'> <span class="k">if</span> <span class="p">(</span> <span class="n">pavolume</span> <span class="o"><=</span> <span class="mi">0</span> <span class="p">)</span></div><div class='line' id='LC658'> <span class="n">pa_cvolume_mute</span><span class="p">(</span><span class="o">&</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'> <span class="k">else</span></div><div class='line' id='LC660'> <span class="nf">pa_cvolume_set</span><span class="p">(</span><span class="o">&</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'> <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">&</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'> <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'> <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">"PulseAudio: Failed to set volume"</span><span class="p">);</span></div><div class='line' id='LC664'> <span class="k">else</span></div><div class='line' id='LC665'> <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'> <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'> <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">&</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'> <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'> <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'> <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">&</span><span class="n">context</span><span class="p">,</span> <span class="o">&</span><span class="n">mainloop</span><span class="p">))</span></div><div class='line' id='LC677'> <span class="p">{</span></div><div class='line' id='LC678'> <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">"PulseAudio: Failed to create context"</span><span class="p">);</span></div><div class='line' id='LC679'> <span class="k">return</span><span class="p">;</span></div><div class='line' id='LC680'> <span class="p">}</span></div><div class='line' id='LC681'><br/></div><div class='line' id='LC682'> <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'> <span class="n">SinkInfoStruct</span> <span class="n">sinkStruct</span><span class="p">;</span></div><div class='line' id='LC685'> <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'> <span class="n">sinkStruct</span><span class="p">.</span><span class="n">list</span> <span class="o">=</span> <span class="o">&</span><span class="n">list</span><span class="p">;</span></div><div class='line' id='LC687'> <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">&</span><span class="n">sinkStruct</span><span class="p">),</span> <span class="n">mainloop</span><span class="p">,</span> <span class="s">"EnumerateAudioSinks"</span><span class="p">);</span></div><div class='line' id='LC688'><br/></div><div class='line' id='LC689'> <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'> <span class="k">if</span> <span class="p">(</span><span class="n">mainloop</span><span class="p">)</span></div><div class='line' id='LC692'> <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'> <span class="k">if</span> <span class="p">(</span><span class="n">context</span><span class="p">)</span></div><div class='line' id='LC695'> <span class="p">{</span></div><div class='line' id='LC696'> <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'> <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'> <span class="n">context</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span></div><div class='line' id='LC699'> <span class="p">}</span></div><div class='line' id='LC700'><br/></div><div class='line' id='LC701'> <span class="k">if</span> <span class="p">(</span><span class="n">mainloop</span><span class="p">)</span></div><div class='line' id='LC702'> <span class="p">{</span></div><div class='line' id='LC703'> <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'> <span class="n">mainloop</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span></div><div class='line' id='LC705'> <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'> <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'> <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">"Pause"</span> <span class="o">:</span> <span class="s">"Resume"</span><span class="p">))</span></div><div class='line' id='LC713'> <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'> <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'> <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">""</span><span class="p">)</span></div><div class='line' id='LC721'><span class="p">{</span></div><div class='line' id='LC722'> <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'> <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'> <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'> <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'> <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'> <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'> <span class="p">{</span></div><div class='line' id='LC732'> <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">"PulseAudio: %s Operation failed"</span><span class="p">,</span> <span class="n">LogEntry</span><span class="p">);</span></div><div class='line' id='LC733'> <span class="n">sucess</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC734'> <span class="p">}</span></div><div class='line' id='LC735'><br/></div><div class='line' id='LC736'> <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'> <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'> <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'> <span class="p">{</span></div><div class='line' id='LC744'> <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">"PulseAudio: Failed to allocate main loop"</span><span class="p">);</span></div><div class='line' id='LC745'> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC746'> <span class="p">}</span></div><div class='line' id='LC747'><br/></div><div class='line' id='LC748'> <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">"XBMC"</span><span class="p">))</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span></div><div class='line' id='LC749'> <span class="p">{</span></div><div class='line' id='LC750'> <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">"PulseAudio: Failed to allocate context"</span><span class="p">);</span></div><div class='line' id='LC751'> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span></div><div class='line' id='LC752'> <span class="p">}</span></div><div class='line' id='LC753'><br/></div><div class='line' id='LC754'> <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