Update API reference documentation to 1.5
diff --git a/docs/reference/_audio_stream_8h_source.html b/docs/reference/_audio_stream_8h_source.html
index 965a0f1..e3d4e56 100644
--- a/docs/reference/_audio_stream_8h_source.html
+++ b/docs/reference/_audio_stream_8h_source.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -71,42 +71,43 @@
<div class="title">AudioStream.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_STREAM_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_STREAM_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <atomic></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <cstdint></span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <ctime></span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <mutex></span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "oboe/Definitions.h"</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "oboe/ResultWithValue.h"</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "oboe/AudioStreamBuilder.h"</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "oboe/AudioStreamBase.h"</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="namespaceoboe.html"> 31</a></span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c"> 39</a></span> constexpr int64_t <a class="code" href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a> = (2000 * <a class="code" href="namespaceoboe.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a>);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html"> 44</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> : <span class="keyword">public</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>() {}</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">explicit</span> <a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>(<span class="keyword">const</span> <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> &builder);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">virtual</span> ~<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6"> 66</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6">open</a>() {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">return</span> Result::OK; <span class="comment">// Called by subclasses. Might do more in the future.</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a9c8ea30e30e513766d5e996c370eb8d8">close</a>();</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#af04f03eb6b64b564f1c4401688987d21">start</a>(int64_t timeoutNanoseconds = <a class="code" href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a04f29836748a8e5842aef2be200022ad">pause</a>(int64_t timeoutNanoseconds = <a class="code" href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a32c25c0333eab3d65ce02275ad4acb3d">flush</a>(int64_t timeoutNanoseconds = <a class="code" href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#aec093859d42f0470c884edd1e976d9f3">stop</a>(int64_t timeoutNanoseconds = <a class="code" href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="comment">/* Asynchronous requests.</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment"> * Use waitForStateChange() if you need to wait for completion.</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment"> */</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a3c484e314dee8dfed1d419f487b5d601">requestStart</a>() = 0;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">requestPause</a>() = 0;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a6bd5d633ff999e4da1faf3cd949aa602">requestFlush</a>() = 0;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a820e634f741e6b5efdcef8104cecb919">requestStop</a>() = 0;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">StreamState</a> <a class="code" href="classoboe_1_1_audio_stream.html#a9d37cc6513823c685ae892626ff83ea8">getState</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a>(<a class="code" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">StreamState</a> inputState,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">StreamState</a> *nextState,</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  int64_t timeoutNanoseconds) = 0;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a06e3f9e133b3a75515e7793939d1cd03"> 177</a></span>  <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a> <a class="code" href="classoboe_1_1_audio_stream.html#a06e3f9e133b3a75515e7793939d1cd03">setBufferSizeInFrames</a>(int32_t <span class="comment">/* requestedFrames */</span>) {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">return</span> Result::ErrorUnimplemented;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261"> 193</a></span>  <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a> <a class="code" href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">getXRunCount</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4">isXRunCountSupported</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">virtual</span> int32_t <a class="code" href="classoboe_1_1_audio_stream.html#ac160acb656515814fa6fdd157c131a0a">getFramesPerBurst</a>() = 0;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a5c01907a59d5f89a5e4b819fe66b08bc"> 216</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream.html#a5c01907a59d5f89a5e4b819fe66b08bc">getBytesPerFrame</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> * <a class="code" href="classoboe_1_1_audio_stream.html#a44dda61e6e948e49b68f87172f084d62">getBytesPerSample</a>(); }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  int32_t <a class="code" href="classoboe_1_1_audio_stream.html#a44dda61e6e948e49b68f87172f084d62">getBytesPerSample</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keyword">virtual</span> int64_t <a class="code" href="classoboe_1_1_audio_stream.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a>();</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keyword">virtual</span> int64_t <a class="code" href="classoboe_1_1_audio_stream.html#aeebfc59abd978cd6dff07c16cfe266df">getFramesRead</a>();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be"> 265</a></span>  <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<double></a> <a class="code" href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a>() {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<double></a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#acb8edbc17ff79993a8ed996d216fe6f3"> 286</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#acb8edbc17ff79993a8ed996d216fe6f3">getTimestamp</a>(clockid_t <span class="comment">/* clockId */</span>,</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  int64_t* <span class="comment">/* framePosition */</span>,</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  int64_t* <span class="comment">/* timeNanoseconds */</span>) {</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> Result::ErrorUnimplemented;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<FrameTimestamp></a> <a class="code" href="classoboe_1_1_audio_stream.html#acb8edbc17ff79993a8ed996d216fe6f3">getTimestamp</a>(clockid_t <span class="comment">/* clockId */</span>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="comment">// ============== I/O ===========================</span></div><div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a3612c05ed6b01a213dde67d913c07e11"> 322</a></span> <span class="comment"></span> <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a> <a class="code" href="classoboe_1_1_audio_stream.html#a3612c05ed6b01a213dde67d913c07e11">write</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/* buffer */</span>,</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  int32_t <span class="comment">/* numFrames */</span>,</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  int64_t <span class="comment">/* timeoutNanoseconds */</span> ) {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a8089f0a0cb68d4039cf33e6584129978"> 340</a></span>  <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a> <a class="code" href="classoboe_1_1_audio_stream.html#a8089f0a0cb68d4039cf33e6584129978">read</a>(<span class="keywordtype">void</span>* <span class="comment">/* buffer */</span>,</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  int32_t <span class="comment">/* numFrames */</span>,</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  int64_t <span class="comment">/* timeoutNanoseconds */</span>) {</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> <a class="code" href="classoboe_1_1_audio_stream.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147"> 358</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147">usesAAudio</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() == <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AudioApi::AAudio</a>;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f"> 370</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> *<a class="code" href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f">getUnderlyingStream</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream.html#aa5f4801cca6877eeaa4735b93933269d">launchStopThread</a>();</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream.html#a64ad978c5f70ced17ef5a96605496515">updateFramesWritten</a>() = 0;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream.html#a462358ddab709c79d1a7968d6d55b727">updateFramesRead</a>() = 0;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="comment">/*</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment"> * Swap old callback for new callback.</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment"> * This not atomic.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="comment"> * This should only be used internally.</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment"> * @param streamCallback</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment"> * @return previous streamCallback</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="comment"> */</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *swapCallback(<a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *streamCallback) {</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *previousCallback = <a class="code" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a> = streamCallback;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">return</span> previousCallback;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  }</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  ResultWithValue<int32_t> <a class="code" href="classoboe_1_1_audio_stream.html#afa35ee4b8629fbffe26b9be7c7ed55d2">getAvailableFrames</a>();</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  ResultWithValue<int32_t> <a class="code" href="classoboe_1_1_audio_stream.html#afddb0962863ccf9ec6672a042fe15941">waitForAvailableFrames</a>(int32_t numFrames,</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  int64_t timeoutNanoseconds);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div><div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#aa48da7bf28026b7cccee73e6b054af28"> 432</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream.html#aa48da7bf28026b7cccee73e6b054af28">wasErrorCallbackCalled</a>() {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">return</span> mErrorCallbackCalled.exchange(<span class="keyword">true</span>);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a>(<a class="code" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">StreamState</a> startingState,</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <a class="code" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">StreamState</a> endingState,</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  int64_t timeoutNanoseconds);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span> </div><div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a0ea79e60f5a3d29fc5a1a116aba11dfe"> 453</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> <a class="code" href="classoboe_1_1_audio_stream.html#a0ea79e60f5a3d29fc5a1a116aba11dfe">onDefaultCallback</a>(<span class="keywordtype">void</span>* <span class="comment">/* audioData */</span>, <span class="keywordtype">int</span> <span class="comment">/* numFrames */</span>) {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">return</span> DataCallbackResult::Stop;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <a class="code" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> <a class="code" href="classoboe_1_1_audio_stream.html#ab7a8cfe5d6039386bc5850fd5ee9bd62">fireDataCallback</a>(<span class="keywordtype">void</span> *audioData, <span class="keywordtype">int</span> numFrames);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#add85011ba825f74931deeb92c5edf831"> 470</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream.html#add85011ba825f74931deeb92c5edf831">isDataCallbackEnabled</a>() {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordflow">return</span> mDataCallbackEnabled;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </div><div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba"> 478</a></span>  <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba">setDataCallbackEnabled</a>(<span class="keywordtype">bool</span> enabled) {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  mDataCallbackEnabled = enabled;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  }</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div><div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a88a63317b7c58815bac074976b00aa23"> 488</a></span>  std::atomic<int64_t> <a class="code" href="classoboe_1_1_audio_stream.html#a88a63317b7c58815bac074976b00aa23">mFramesWritten</a>{};</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a07e82f9b9e2e4800f23ae9a7193c3b58"> 496</a></span>  std::atomic<int64_t> <a class="code" href="classoboe_1_1_audio_stream.html#a07e82f9b9e2e4800f23ae9a7193c3b58">mFramesRead</a>{};</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  std::mutex mLock; <span class="comment">// for synchronizing start/stop/close</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keywordtype">int</span> mPreviousScheduler = -1;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  std::atomic<bool> mDataCallbackEnabled{<span class="keyword">false</span>};</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  std::atomic<bool> mErrorCallbackCalled{<span class="keyword">false</span>};</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span> };</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div><div class="line"><a name="l00513"></a><span class="lineno"><a class="line" href="structoboe_1_1_stream_deleter_functor.html"> 513</a></span>  <span class="keyword">struct </span><a class="code" href="structoboe_1_1_stream_deleter_functor.html">StreamDeleterFunctor</a> {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keywordtype">void</span> operator()(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *audioStream) {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keywordflow">if</span> (audioStream) {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  audioStream-><a class="code" href="classoboe_1_1_audio_stream.html#a9c8ea30e30e513766d5e996c370eb8d8">close</a>();</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  }</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keyword">delete</span> audioStream;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  };</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classoboe_1_1_audio_stream_html_a0ea79e60f5a3d29fc5a1a116aba11dfe"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a0ea79e60f5a3d29fc5a1a116aba11dfe">oboe::AudioStream::onDefaultCallback</a></div><div class="ttdeci">virtual DataCallbackResult onDefaultCallback(void *, int)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:453</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_STREAM_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_STREAM_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <atomic></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <cstdint></span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <ctime></span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <mutex></span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "oboe/Definitions.h"</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "oboe/ResultWithValue.h"</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "oboe/AudioStreamBuilder.h"</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "oboe/AudioStreamBase.h"</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="namespaceoboe.html"> 31</a></span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c"> 39</a></span> constexpr int64_t <a class="code" href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a> = (2000 * <a class="code" href="namespaceoboe.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a>);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html"> 44</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> : <span class="keyword">public</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>; <span class="comment">// allow access to setWeakThis() and lockWeakThis()</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>() {}</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">explicit</span> <a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>(<span class="keyword">const</span> <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> &builder);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">virtual</span> ~<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6"> 67</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6">open</a>() {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">return</span> Result::OK; <span class="comment">// Called by subclasses. Might do more in the future.</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a9c8ea30e30e513766d5e996c370eb8d8">close</a>();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#af04f03eb6b64b564f1c4401688987d21">start</a>(int64_t timeoutNanoseconds = <a class="code" href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a04f29836748a8e5842aef2be200022ad">pause</a>(int64_t timeoutNanoseconds = <a class="code" href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a32c25c0333eab3d65ce02275ad4acb3d">flush</a>(int64_t timeoutNanoseconds = <a class="code" href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#aec093859d42f0470c884edd1e976d9f3">stop</a>(int64_t timeoutNanoseconds = <a class="code" href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c">kDefaultTimeoutNanos</a>);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">/* Asynchronous requests.</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment"> * Use waitForStateChange() if you need to wait for completion.</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment"> */</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a3c484e314dee8dfed1d419f487b5d601">requestStart</a>() = 0;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">requestPause</a>() = 0;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a6bd5d633ff999e4da1faf3cd949aa602">requestFlush</a>() = 0;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a820e634f741e6b5efdcef8104cecb919">requestStop</a>() = 0;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">StreamState</a> <a class="code" href="classoboe_1_1_audio_stream.html#a9d37cc6513823c685ae892626ff83ea8">getState</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a>(<a class="code" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">StreamState</a> inputState,</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <a class="code" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">StreamState</a> *nextState,</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  int64_t timeoutNanoseconds) = 0;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a06e3f9e133b3a75515e7793939d1cd03"> 178</a></span>  <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a> <a class="code" href="classoboe_1_1_audio_stream.html#a06e3f9e133b3a75515e7793939d1cd03">setBufferSizeInFrames</a>(int32_t <span class="comment">/* requestedFrames */</span>) {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">return</span> Result::ErrorUnimplemented;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261"> 194</a></span>  <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a> <a class="code" href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">getXRunCount</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4">isXRunCountSupported</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keyword">virtual</span> int32_t <a class="code" href="classoboe_1_1_audio_stream.html#ac160acb656515814fa6fdd157c131a0a">getFramesPerBurst</a>() = 0;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a5c01907a59d5f89a5e4b819fe66b08bc"> 217</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream.html#a5c01907a59d5f89a5e4b819fe66b08bc">getBytesPerFrame</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> * <a class="code" href="classoboe_1_1_audio_stream.html#a44dda61e6e948e49b68f87172f084d62">getBytesPerSample</a>(); }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  int32_t <a class="code" href="classoboe_1_1_audio_stream.html#a44dda61e6e948e49b68f87172f084d62">getBytesPerSample</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">virtual</span> int64_t <a class="code" href="classoboe_1_1_audio_stream.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a>();</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keyword">virtual</span> int64_t <a class="code" href="classoboe_1_1_audio_stream.html#aeebfc59abd978cd6dff07c16cfe266df">getFramesRead</a>();</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be"> 266</a></span>  <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<double></a> <a class="code" href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a>() {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<double></a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#acb8edbc17ff79993a8ed996d216fe6f3"> 287</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#acb8edbc17ff79993a8ed996d216fe6f3">getTimestamp</a>(clockid_t <span class="comment">/* clockId */</span>,</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  int64_t* <span class="comment">/* framePosition */</span>,</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  int64_t* <span class="comment">/* timeNanoseconds */</span>) {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">return</span> Result::ErrorUnimplemented;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  }</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<FrameTimestamp></a> <a class="code" href="classoboe_1_1_audio_stream.html#acb8edbc17ff79993a8ed996d216fe6f3">getTimestamp</a>(clockid_t <span class="comment">/* clockId */</span>);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="comment">// ============== I/O ===========================</span></div><div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a3612c05ed6b01a213dde67d913c07e11"> 323</a></span> <span class="comment"></span> <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a> <a class="code" href="classoboe_1_1_audio_stream.html#a3612c05ed6b01a213dde67d913c07e11">write</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* <span class="comment">/* buffer */</span>,</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  int32_t <span class="comment">/* numFrames */</span>,</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  int64_t <span class="comment">/* timeoutNanoseconds */</span> ) {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div><div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a8089f0a0cb68d4039cf33e6584129978"> 341</a></span>  <span class="keyword">virtual</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a> <a class="code" href="classoboe_1_1_audio_stream.html#a8089f0a0cb68d4039cf33e6584129978">read</a>(<span class="keywordtype">void</span>* <span class="comment">/* buffer */</span>,</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  int32_t <span class="comment">/* numFrames */</span>,</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  int64_t <span class="comment">/* timeoutNanoseconds */</span>) {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_result_with_value.html">ResultWithValue<int32_t></a>(Result::ErrorUnimplemented);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> <a class="code" href="classoboe_1_1_audio_stream.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div><div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147"> 359</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147">usesAAudio</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() == <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AudioApi::AAudio</a>;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00371"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f"> 371</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> *<a class="code" href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f">getUnderlyingStream</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream.html#aa5f4801cca6877eeaa4735b93933269d">launchStopThread</a>();</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream.html#a64ad978c5f70ced17ef5a96605496515">updateFramesWritten</a>() = 0;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream.html#a462358ddab709c79d1a7968d6d55b727">updateFramesRead</a>() = 0;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="comment">/*</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment"> * Swap old callback for new callback.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="comment"> * This not atomic.</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment"> * This should only be used internally.</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment"> * @param dataCallback</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="comment"> * @return previous dataCallback</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="comment"> */</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <a class="code" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> *swapDataCallback(<a class="code" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> *dataCallback) {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <a class="code" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> *previousCallback = <a class="code" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a>;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a> = dataCallback;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordflow">return</span> previousCallback;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="comment">/*</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="comment"> * Swap old callback for new callback.</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="comment"> * This not atomic.</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="comment"> * This should only be used internally.</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="comment"> * @param errorCallback</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="comment"> * @return previous errorCallback</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="comment"> */</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  AudioStreamErrorCallback *swapErrorCallback(AudioStreamErrorCallback *errorCallback) {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  AudioStreamErrorCallback *previousCallback = <a class="code" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a>;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a> = errorCallback;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">return</span> previousCallback;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  ResultWithValue<int32_t> <a class="code" href="classoboe_1_1_audio_stream.html#afa35ee4b8629fbffe26b9be7c7ed55d2">getAvailableFrames</a>();</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  ResultWithValue<int32_t> <a class="code" href="classoboe_1_1_audio_stream.html#afddb0962863ccf9ec6672a042fe15941">waitForAvailableFrames</a>(int32_t numFrames,</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  int64_t timeoutNanoseconds);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div><div class="line"><a name="l00438"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a8fe8afdf164a1fe835c514f709743d75"> 438</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">oboe::Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a8fe8afdf164a1fe835c514f709743d75">getLastErrorCallbackResult</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> mErrorCallbackResult;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#aa48da7bf28026b7cccee73e6b054af28"> 453</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream.html#aa48da7bf28026b7cccee73e6b054af28">wasErrorCallbackCalled</a>() {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">return</span> mErrorCallbackCalled.exchange(<span class="keyword">true</span>);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a>(<a class="code" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">StreamState</a> startingState,</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <a class="code" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">StreamState</a> endingState,</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  int64_t timeoutNanoseconds);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a0ea79e60f5a3d29fc5a1a116aba11dfe"> 474</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> <a class="code" href="classoboe_1_1_audio_stream.html#a0ea79e60f5a3d29fc5a1a116aba11dfe">onDefaultCallback</a>(<span class="keywordtype">void</span>* <span class="comment">/* audioData */</span>, <span class="keywordtype">int</span> <span class="comment">/* numFrames */</span>) {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keywordflow">return</span> DataCallbackResult::Stop;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  }</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <a class="code" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> <a class="code" href="classoboe_1_1_audio_stream.html#ab7a8cfe5d6039386bc5850fd5ee9bd62">fireDataCallback</a>(<span class="keywordtype">void</span> *audioData, <span class="keywordtype">int</span> numFrames);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div><div class="line"><a name="l00491"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#add85011ba825f74931deeb92c5edf831"> 491</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream.html#add85011ba825f74931deeb92c5edf831">isDataCallbackEnabled</a>() {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">return</span> mDataCallbackEnabled;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div><div class="line"><a name="l00499"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba"> 499</a></span>  <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba">setDataCallbackEnabled</a>(<span class="keywordtype">bool</span> enabled) {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  mDataCallbackEnabled = enabled;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="comment">/*</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="comment"> * Set a weak_ptr to this stream from the shared_ptr so that we can</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="comment"> * later use a shared_ptr in the error callback.</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="comment"> */</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordtype">void</span> setWeakThis(std::shared_ptr<oboe::AudioStream> &sharedStream) {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  mWeakThis = sharedStream;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="comment">/*</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="comment"> * Make a shared_ptr that will prevent this stream from being deleted.</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="comment"> */</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  std::shared_ptr<oboe::AudioStream> lockWeakThis() {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keywordflow">return</span> mWeakThis.lock();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  }</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  std::weak_ptr<AudioStream> mWeakThis; <span class="comment">// weak pointer to this object</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div><div class="line"><a name="l00526"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a88a63317b7c58815bac074976b00aa23"> 526</a></span>  std::atomic<int64_t> <a class="code" href="classoboe_1_1_audio_stream.html#a88a63317b7c58815bac074976b00aa23">mFramesWritten</a>{};</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> </div><div class="line"><a name="l00534"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream.html#a07e82f9b9e2e4800f23ae9a7193c3b58"> 534</a></span>  std::atomic<int64_t> <a class="code" href="classoboe_1_1_audio_stream.html#a07e82f9b9e2e4800f23ae9a7193c3b58">mFramesRead</a>{};</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span> </div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  std::mutex mLock; <span class="comment">// for synchronizing start/stop/close</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">oboe::Result</a> mErrorCallbackResult = oboe::Result::OK;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="comment">// Log the scheduler if it changes.</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <span class="keywordtype">void</span> checkScheduler();</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keywordtype">int</span> mPreviousScheduler = -1;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  std::atomic<bool> mDataCallbackEnabled{<span class="keyword">false</span>};</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  std::atomic<bool> mErrorCallbackCalled{<span class="keyword">false</span>};</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> };</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div><div class="line"><a name="l00555"></a><span class="lineno"><a class="line" href="structoboe_1_1_stream_deleter_functor.html"> 555</a></span>  <span class="keyword">struct </span><a class="code" href="structoboe_1_1_stream_deleter_functor.html">StreamDeleterFunctor</a> {</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keywordtype">void</span> operator()(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *audioStream) {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keywordflow">if</span> (audioStream) {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  audioStream-><a class="code" href="classoboe_1_1_audio_stream.html#a9c8ea30e30e513766d5e996c370eb8d8">close</a>();</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keyword">delete</span> audioStream;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  }</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  };</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span> </div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classoboe_1_1_audio_stream_html_a0ea79e60f5a3d29fc5a1a116aba11dfe"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a0ea79e60f5a3d29fc5a1a116aba11dfe">oboe::AudioStream::onDefaultCallback</a></div><div class="ttdeci">virtual DataCallbackResult onDefaultCallback(void *, int)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:474</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_aec093859d42f0470c884edd1e976d9f3"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#aec093859d42f0470c884edd1e976d9f3">oboe::AudioStream::stop</a></div><div class="ttdeci">virtual Result stop(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</div></div>
<div class="ttc" id="namespaceoboe_html_a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b"><div class="ttname"><a href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">oboe::AudioApi::AAudio</a></div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:31</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:33</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_afa35ee4b8629fbffe26b9be7c7ed55d2"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#afa35ee4b8629fbffe26b9be7c7ed55d2">oboe::AudioStream::getAvailableFrames</a></div><div class="ttdeci">ResultWithValue< int32_t > getAvailableFrames()</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a0faa6d3a6fd4f367e6f80d5a29e6dcba"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba">oboe::AudioStream::setDataCallbackEnabled</a></div><div class="ttdeci">void setDataCallbackEnabled(bool enabled)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:478</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a15cdaaaa4c1e8da322d6da33334c8147"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147">oboe::AudioStream::usesAAudio</a></div><div class="ttdeci">bool usesAAudio() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:358</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_a0faa6d3a6fd4f367e6f80d5a29e6dcba"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba">oboe::AudioStream::setDataCallbackEnabled</a></div><div class="ttdeci">void setDataCallbackEnabled(bool enabled)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:499</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_a15cdaaaa4c1e8da322d6da33334c8147"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147">oboe::AudioStream::usesAAudio</a></div><div class="ttdeci">bool usesAAudio() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:359</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a32c25c0333eab3d65ce02275ad4acb3d"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a32c25c0333eab3d65ce02275ad4acb3d">oboe::AudioStream::flush</a></div><div class="ttdeci">virtual Result flush(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a5c01907a59d5f89a5e4b819fe66b08bc"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a5c01907a59d5f89a5e4b819fe66b08bc">oboe::AudioStream::getBytesPerFrame</a></div><div class="ttdeci">int32_t getBytesPerFrame() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:216</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a6d8493f66a945cb426506c70f0358e5f"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">oboe::AudioStreamBase::mDataCallback</a></div><div class="ttdeci">AudioStreamDataCallback * mDataCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:182</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_a5c01907a59d5f89a5e4b819fe66b08bc"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a5c01907a59d5f89a5e4b819fe66b08bc">oboe::AudioStream::getBytesPerFrame</a></div><div class="ttdeci">int32_t getBytesPerFrame() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:217</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_af04f03eb6b64b564f1c4401688987d21"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#af04f03eb6b64b564f1c4401688987d21">oboe::AudioStream::start</a></div><div class="ttdeci">virtual Result start(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</div></div>
<div class="ttc" id="namespaceoboe_html_aab8f5f081a8b2147e16ec920347c1b5c"><div class="ttname"><a href="namespaceoboe.html#aab8f5f081a8b2147e16ec920347c1b5c">oboe::kDefaultTimeoutNanos</a></div><div class="ttdeci">constexpr int64_t kDefaultTimeoutNanos</div><div class="ttdef"><b>Definition:</b> AudioStream.h:39</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_ad1a1d3bbf3b348ed92b7ed18ce9cc261"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">oboe::AudioStream::getXRunCount</a></div><div class="ttdeci">virtual ResultWithValue< int32_t > getXRunCount() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:193</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a88a63317b7c58815bac074976b00aa23"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a88a63317b7c58815bac074976b00aa23">oboe::AudioStream::mFramesWritten</a></div><div class="ttdeci">std::atomic< int64_t > mFramesWritten</div><div class="ttdef"><b>Definition:</b> AudioStream.h:488</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_ad1a1d3bbf3b348ed92b7ed18ce9cc261"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">oboe::AudioStream::getXRunCount</a></div><div class="ttdeci">virtual ResultWithValue< int32_t > getXRunCount() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:194</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_a88a63317b7c58815bac074976b00aa23"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a88a63317b7c58815bac074976b00aa23">oboe::AudioStream::mFramesWritten</a></div><div class="ttdeci">std::atomic< int64_t > mFramesWritten</div><div class="ttdef"><b>Definition:</b> AudioStream.h:526</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_ab7a8cfe5d6039386bc5850fd5ee9bd62"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ab7a8cfe5d6039386bc5850fd5ee9bd62">oboe::AudioStream::fireDataCallback</a></div><div class="ttdeci">DataCallbackResult fireDataCallback(void *audioData, int numFrames)</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a5458d7130415eb4defe3dbc11d479e2f"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f">oboe::AudioStream::getUnderlyingStream</a></div><div class="ttdeci">virtual void * getUnderlyingStream() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:370</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_a5458d7130415eb4defe3dbc11d479e2f"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f">oboe::AudioStream::getUnderlyingStream</a></div><div class="ttdeci">virtual void * getUnderlyingStream() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:371</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a64ad978c5f70ced17ef5a96605496515"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a64ad978c5f70ced17ef5a96605496515">oboe::AudioStream::updateFramesWritten</a></div><div class="ttdeci">virtual void updateFramesWritten()=0</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_ab43dd4074e1de57bac1c3fd111430341"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ab43dd4074e1de57bac1c3fd111430341">oboe::AudioStream::getFramesWritten</a></div><div class="ttdeci">virtual int64_t getFramesWritten()</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_afddb0962863ccf9ec6672a042fe15941"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#afddb0962863ccf9ec6672a042fe15941">oboe::AudioStream::waitForAvailableFrames</a></div><div class="ttdeci">ResultWithValue< int32_t > waitForAvailableFrames(int32_t numFrames, int64_t timeoutNanoseconds)</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:33</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5ff460bac9d14dfeac4eeddfcbb6e206"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">oboe::AudioStreamBase::mChannelCount</a></div><div class="ttdeci">int32_t mChannelCount</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:156</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_data_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:34</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5ff460bac9d14dfeac4eeddfcbb6e206"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">oboe::AudioStreamBase::mChannelCount</a></div><div class="ttdeci">int32_t mChannelCount</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:190</div></div>
<div class="ttc" id="namespaceoboe_html_af85fc9910a287df6c5df0ed396bb75cd"><div class="ttname"><a href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">oboe::DataCallbackResult</a></div><div class="ttdeci">DataCallbackResult</div><div class="ttdef"><b>Definition:</b> Definitions.h:119</div></div>
<div class="ttc" id="namespaceoboe_html_a92972414867c81d5974cb2ed7abefbf6"><div class="ttname"><a href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a></div><div class="ttdeci">AudioApi</div><div class="ttdef"><b>Definition:</b> Definitions.h:213</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a8adbacd6a55a94a532916ab037fba1d6"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a8adbacd6a55a94a532916ab037fba1d6">oboe::AudioStream::waitForStateTransition</a></div><div class="ttdeci">virtual Result waitForStateTransition(StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_ac160acb656515814fa6fdd157c131a0a"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ac160acb656515814fa6fdd157c131a0a">oboe::AudioStream::getFramesPerBurst</a></div><div class="ttdeci">virtual int32_t getFramesPerBurst()=0</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a9c8ea30e30e513766d5e996c370eb8d8"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a9c8ea30e30e513766d5e996c370eb8d8">oboe::AudioStream::close</a></div><div class="ttdeci">virtual Result close()</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a06e3f9e133b3a75515e7793939d1cd03"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a06e3f9e133b3a75515e7793939d1cd03">oboe::AudioStream::setBufferSizeInFrames</a></div><div class="ttdeci">virtual ResultWithValue< int32_t > setBufferSizeInFrames(int32_t)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:177</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_ae023cb001f3261d064f423101798d6be"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be">oboe::AudioStream::calculateLatencyMillis</a></div><div class="ttdeci">virtual ResultWithValue< double > calculateLatencyMillis()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:265</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_acb8edbc17ff79993a8ed996d216fe6f3"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#acb8edbc17ff79993a8ed996d216fe6f3">oboe::AudioStream::getTimestamp</a></div><div class="ttdeci">virtual Result getTimestamp(clockid_t, int64_t *, int64_t *)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:286</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a686c6ce8a29051c858fd1de386805dc6"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6">oboe::AudioStream::open</a></div><div class="ttdeci">virtual Result open()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:66</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_a06e3f9e133b3a75515e7793939d1cd03"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a06e3f9e133b3a75515e7793939d1cd03">oboe::AudioStream::setBufferSizeInFrames</a></div><div class="ttdeci">virtual ResultWithValue< int32_t > setBufferSizeInFrames(int32_t)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:178</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_ae023cb001f3261d064f423101798d6be"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be">oboe::AudioStream::calculateLatencyMillis</a></div><div class="ttdeci">virtual ResultWithValue< double > calculateLatencyMillis()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:266</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_acb8edbc17ff79993a8ed996d216fe6f3"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#acb8edbc17ff79993a8ed996d216fe6f3">oboe::AudioStream::getTimestamp</a></div><div class="ttdeci">virtual Result getTimestamp(clockid_t, int64_t *, int64_t *)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:287</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_a686c6ce8a29051c858fd1de386805dc6"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6">oboe::AudioStream::open</a></div><div class="ttdeci">virtual Result open()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:67</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_aeebfc59abd978cd6dff07c16cfe266df"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#aeebfc59abd978cd6dff07c16cfe266df">oboe::AudioStream::getFramesRead</a></div><div class="ttdeci">virtual int64_t getFramesRead()</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html"><div class="ttname"><a href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:44</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_add85011ba825f74931deeb92c5edf831"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#add85011ba825f74931deeb92c5edf831">oboe::AudioStream::isDataCallbackEnabled</a></div><div class="ttdeci">bool isDataCallbackEnabled()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:470</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a8089f0a0cb68d4039cf33e6584129978"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a8089f0a0cb68d4039cf33e6584129978">oboe::AudioStream::read</a></div><div class="ttdeci">virtual ResultWithValue< int32_t > read(void *, int32_t, int64_t)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:340</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_add85011ba825f74931deeb92c5edf831"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#add85011ba825f74931deeb92c5edf831">oboe::AudioStream::isDataCallbackEnabled</a></div><div class="ttdeci">bool isDataCallbackEnabled()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:491</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_a8089f0a0cb68d4039cf33e6584129978"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a8089f0a0cb68d4039cf33e6584129978">oboe::AudioStream::read</a></div><div class="ttdeci">virtual ResultWithValue< int32_t > read(void *, int32_t, int64_t)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:341</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a7f18bb3cc5490fd7fbc1f6da63c730f6"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">oboe::AudioStream::requestPause</a></div><div class="ttdeci">virtual Result requestPause()=0</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a3612c05ed6b01a213dde67d913c07e11"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a3612c05ed6b01a213dde67d913c07e11">oboe::AudioStream::write</a></div><div class="ttdeci">virtual ResultWithValue< int32_t > write(const void *, int32_t, int64_t)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:322</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_a07e82f9b9e2e4800f23ae9a7193c3b58"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a07e82f9b9e2e4800f23ae9a7193c3b58">oboe::AudioStream::mFramesRead</a></div><div class="ttdeci">std::atomic< int64_t > mFramesRead</div><div class="ttdef"><b>Definition:</b> AudioStream.h:496</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_a3612c05ed6b01a213dde67d913c07e11"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a3612c05ed6b01a213dde67d913c07e11">oboe::AudioStream::write</a></div><div class="ttdeci">virtual ResultWithValue< int32_t > write(const void *, int32_t, int64_t)</div><div class="ttdef"><b>Definition:</b> AudioStream.h:323</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_a07e82f9b9e2e4800f23ae9a7193c3b58"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a07e82f9b9e2e4800f23ae9a7193c3b58">oboe::AudioStream::mFramesRead</a></div><div class="ttdeci">std::atomic< int64_t > mFramesRead</div><div class="ttdef"><b>Definition:</b> AudioStream.h:534</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_base_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:29</div></div>
<div class="ttc" id="namespaceoboe_html_a831e887150474c087170679eaca8672b"><div class="ttname"><a href="namespaceoboe.html#a831e887150474c087170679eaca8672b">oboe::kNanosPerMillisecond</a></div><div class="ttdeci">constexpr int64_t kNanosPerMillisecond</div><div class="ttdef"><b>Definition:</b> Definitions.h:43</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a820e634f741e6b5efdcef8104cecb919"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a820e634f741e6b5efdcef8104cecb919">oboe::AudioStream::requestStop</a></div><div class="ttdeci">virtual Result requestStop()=0</div></div>
@@ -114,17 +115,18 @@
<div class="ttc" id="classoboe_1_1_audio_stream_html_aa5f4801cca6877eeaa4735b93933269d"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#aa5f4801cca6877eeaa4735b93933269d">oboe::AudioStream::launchStopThread</a></div><div class="ttdeci">void launchStopThread()</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a0c865a5501f369d959c39d8ab8b46a07"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a0c865a5501f369d959c39d8ab8b46a07">oboe::AudioStream::waitForStateChange</a></div><div class="ttdeci">virtual Result waitForStateChange(StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0</div></div>
<div class="ttc" id="namespaceoboe_html_a486512e787b609c80ba4436f23929af1"><div class="ttname"><a href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">oboe::Result</a></div><div class="ttdeci">Result</div><div class="ttdef"><b>Definition:</b> Definitions.h:131</div></div>
-<div class="ttc" id="structoboe_1_1_stream_deleter_functor_html"><div class="ttname"><a href="structoboe_1_1_stream_deleter_functor.html">oboe::StreamDeleterFunctor</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:513</div></div>
+<div class="ttc" id="structoboe_1_1_stream_deleter_functor_html"><div class="ttname"><a href="structoboe_1_1_stream_deleter_functor.html">oboe::StreamDeleterFunctor</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:555</div></div>
<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:31</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_html_aa48da7bf28026b7cccee73e6b054af28"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#aa48da7bf28026b7cccee73e6b054af28">oboe::AudioStream::wasErrorCallbackCalled</a></div><div class="ttdeci">bool wasErrorCallbackCalled()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:432</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_aa48da7bf28026b7cccee73e6b054af28"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#aa48da7bf28026b7cccee73e6b054af28">oboe::AudioStream::wasErrorCallbackCalled</a></div><div class="ttdeci">bool wasErrorCallbackCalled()</div><div class="ttdef"><b>Definition:</b> AudioStream.h:453</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a43d8a098440cde28f4ee8bedd6d107c4"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4">oboe::AudioStream::isXRunCountSupported</a></div><div class="ttdeci">virtual bool isXRunCountSupported() const =0</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ae3f72318212dd9977d7fa0ced92c91f4"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">oboe::AudioStreamBase::mStreamCallback</a></div><div class="ttdeci">AudioStreamCallback * mStreamCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:152</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a3c484e314dee8dfed1d419f487b5d601"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a3c484e314dee8dfed1d419f487b5d601">oboe::AudioStream::requestStart</a></div><div class="ttdeci">virtual Result requestStart()=0</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_html_a8fe8afdf164a1fe835c514f709743d75"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a8fe8afdf164a1fe835c514f709743d75">oboe::AudioStream::getLastErrorCallbackResult</a></div><div class="ttdeci">virtual oboe::Result getLastErrorCallbackResult() const</div><div class="ttdef"><b>Definition:</b> AudioStream.h:438</div></div>
<div class="ttc" id="namespaceoboe_html_a89fa2ce046723764618c29db737917f6"><div class="ttname"><a href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">oboe::StreamState</a></div><div class="ttdeci">StreamState</div><div class="ttdef"><b>Definition:</b> Definitions.h:58</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a9d37cc6513823c685ae892626ff83ea8"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a9d37cc6513823c685ae892626ff83ea8">oboe::AudioStream::getState</a></div><div class="ttdeci">virtual StreamState getState() const =0</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a04f29836748a8e5842aef2be200022ad"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a04f29836748a8e5842aef2be200022ad">oboe::AudioStream::pause</a></div><div class="ttdeci">virtual Result pause(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a6bd5d633ff999e4da1faf3cd949aa602"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a6bd5d633ff999e4da1faf3cd949aa602">oboe::AudioStream::requestFlush</a></div><div class="ttdeci">virtual Result requestFlush()=0</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a462358ddab709c79d1a7968d6d55b727"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a462358ddab709c79d1a7968d6d55b727">oboe::AudioStream::updateFramesRead</a></div><div class="ttdeci">virtual void updateFramesRead()=0</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_adc0c8cc54adb6d3350c62b8a74b9c57b"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">oboe::AudioStreamBase::mErrorCallback</a></div><div class="ttdeci">AudioStreamErrorCallback * mErrorCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:185</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html_a44dda61e6e948e49b68f87172f084d62"><div class="ttname"><a href="classoboe_1_1_audio_stream.html#a44dda61e6e948e49b68f87172f084d62">oboe::AudioStream::getBytesPerSample</a></div><div class="ttdeci">int32_t getBytesPerSample() const</div></div>
<div class="ttc" id="classoboe_1_1_result_with_value_html"><div class="ttname"><a href="classoboe_1_1_result_with_value.html">oboe::ResultWithValue</a></div><div class="ttdef"><b>Definition:</b> ResultWithValue.h:47</div></div>
</div><!-- fragment --></div><!-- contents -->
diff --git a/docs/reference/_audio_stream_base_8h_source.html b/docs/reference/_audio_stream_base_8h_source.html
index 0fe6e75..ce322da 100644
--- a/docs/reference/_audio_stream_base_8h_source.html
+++ b/docs/reference/_audio_stream_base_8h_source.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -71,57 +71,69 @@
<div class="title">AudioStreamBase.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2015 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_STREAM_BASE_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_STREAM_BASE_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <memory></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "oboe/AudioStreamCallback.h"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "oboe/Definitions.h"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html"> 29</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>() {}</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">virtual</span> ~<a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="comment">// This class only contains primitives so we can use default constructor and copy methods.</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>(<span class="keyword">const</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>&) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>& <a class="code" href="classoboe_1_1_audio_stream_base.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a>(<span class="keyword">const</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>&) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575"> 51</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575">getChannelCount</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a>; }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1"> 56</a></span>  <a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5ae">Direction</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a>; }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087"> 61</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a>; }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086"> 66</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">getFramesPerCallback</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a>; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86"> 71</a></span>  <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a>; }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b"> 79</a></span>  <span class="keyword">virtual</span> int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>() { <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a>; }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc"> 84</a></span>  <span class="keyword">virtual</span> int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a>; }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a1fb033fc963f971bd1aa8f6707e49b41"> 89</a></span>  <a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520">SharingMode</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a1fb033fc963f971bd1aa8f6707e49b41">getSharingMode</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">mSharingMode</a>; }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc"> 94</a></span>  <a class="code" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184">PerformanceMode</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">getPerformanceMode</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a>; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21"> 99</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">getDeviceId</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a>; }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797"> 104</a></span>  <a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a>* <a class="code" href="classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a0bcfb2f8bd11c92b541fd910da9af397"> 111</a></span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">Usage</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a>; }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82"> 116</a></span>  <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">ContentType</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a>; }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a"> 121</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06">InputPreset</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a>; }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#aa3c502ce09bbad7690a2dd6acaf8892e"> 126</a></span>  <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#aa3c502ce09bbad7690a2dd6acaf8892e">getSessionId</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a>; }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#aa4ec3aa76e69350fbce6f00786211495"> 131</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#aa4ec3aa76e69350fbce6f00786211495">isChannelConversionAllowed</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> mChannelConversionAllowed;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4"> 138</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4">isFormatConversionAllowed</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">return</span> mFormatConversionAllowed;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a1de8d6982d411a0cf50a32efba0ca3f2"> 145</a></span>  <a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d">SampleRateConversionQuality</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a1de8d6982d411a0cf50a32efba0ca3f2">getSampleRateConversionQuality</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> mSampleRateConversionQuality;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4"> 152</a></span>  <a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *<a class="code" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899"> 154</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206"> 156</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea"> 158</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8"> 160</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6"> 162</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a"> 164</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e"> 169</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473"> 172</a></span>  <a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520">SharingMode</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">mSharingMode</a> = <a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520aa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a>;</div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09"> 174</a></span>  <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a> = AudioFormat::Unspecified;</div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880"> 176</a></span>  <a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5ae">Direction</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a> = <a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5aea29c2c02a361c9d7028472e5d92cd4a54">Direction::Output</a>;</div><div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765"> 178</a></span>  <a class="code" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184">PerformanceMode</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a> = PerformanceMode::None;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c"> 181</a></span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">Usage</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a> = <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a3b563524fdb17b4a86590470d40bef74">Usage::Media</a>;</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b"> 183</a></span>  <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">ContentType</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a> = ContentType::Music;</div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589"> 187</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06">InputPreset</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a> = InputPreset::VoiceRecognition;</div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737"> 189</a></span>  <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a> = SessionId::None;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">// Control whether Oboe can convert channel counts to achieve optimal results.</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordtype">bool</span> mChannelConversionAllowed = <span class="keyword">false</span>;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="comment">// Control whether Oboe can convert data formats to achieve optimal results.</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordtype">bool</span> mFormatConversionAllowed = <span class="keyword">false</span>;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="comment">// Control whether and how Oboe can convert sample rates to achieve optimal results.</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d">SampleRateConversionQuality</a> mSampleRateConversionQuality = SampleRateConversionQuality::None;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> };</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_BASE_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classoboe_1_1_audio_stream_base_html_aa4ec3aa76e69350fbce6f00786211495"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#aa4ec3aa76e69350fbce6f00786211495">oboe::AudioStreamBase::isChannelConversionAllowed</a></div><div class="ttdeci">bool isChannelConversionAllowed() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:131</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a3b65595d26d1eae1b8ce9925a5b98f6a"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a">oboe::AudioStreamBase::mBufferSizeInFrames</a></div><div class="ttdeci">int32_t mBufferSizeInFrames</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:164</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2015 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_STREAM_BASE_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_STREAM_BASE_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <memory></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "oboe/AudioStreamCallback.h"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "oboe/Definitions.h"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html"> 29</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> {</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>() {}</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">virtual</span> ~<a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="comment">// This class only contains primitives so we can use default constructor and copy methods.</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>(<span class="keyword">const</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>&) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>& <a class="code" href="classoboe_1_1_audio_stream_base.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a>(<span class="keyword">const</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>&) = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575"> 52</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575">getChannelCount</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a>; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1"> 57</a></span>  <a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5ae">Direction</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a>; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087"> 62</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a>; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086"> 67</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">getFramesPerCallback</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38">getFramesPerDataCallback</a>(); }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38"> 72</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38">getFramesPerDataCallback</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a>; }</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86"> 77</a></span>  <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a>; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b"> 85</a></span>  <span class="keyword">virtual</span> int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>() { <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a>; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc"> 90</a></span>  <span class="keyword">virtual</span> int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a>; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a1fb033fc963f971bd1aa8f6707e49b41"> 95</a></span>  <a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520">SharingMode</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a1fb033fc963f971bd1aa8f6707e49b41">getSharingMode</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">mSharingMode</a>; }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc"> 100</a></span>  <a class="code" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184">PerformanceMode</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">getPerformanceMode</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a>; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21"> 105</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">getDeviceId</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a>; }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c"> 111</a></span>  <a class="code" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> *<a class="code" href="classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c">getDataCallback</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0"> 119</a></span>  <a class="code" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> *<a class="code" href="classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0">getErrorCallback</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73"> 126</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73">isDataCallbackSpecified</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a> != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3"> 135</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3">isErrorCallbackSpecified</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a> != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a0bcfb2f8bd11c92b541fd910da9af397"> 142</a></span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">Usage</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a>; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82"> 147</a></span>  <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">ContentType</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a>; }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a"> 152</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06">InputPreset</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a>; }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#aa3c502ce09bbad7690a2dd6acaf8892e"> 157</a></span>  <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#aa3c502ce09bbad7690a2dd6acaf8892e">getSessionId</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a>; }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#aa4ec3aa76e69350fbce6f00786211495"> 162</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#aa4ec3aa76e69350fbce6f00786211495">isChannelConversionAllowed</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">return</span> mChannelConversionAllowed;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4"> 169</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4">isFormatConversionAllowed</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">return</span> mFormatConversionAllowed;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a1de8d6982d411a0cf50a32efba0ca3f2"> 176</a></span>  <a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d">SampleRateConversionQuality</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a1de8d6982d411a0cf50a32efba0ca3f2">getSampleRateConversionQuality</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordflow">return</span> mSampleRateConversionQuality;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f"> 182</a></span>  <a class="code" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> *<a class="code" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b"> 185</a></span>  <a class="code" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> *<a class="code" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899"> 188</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206"> 190</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea"> 192</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8"> 194</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6"> 196</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a"> 198</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e"> 203</a></span>  int32_t <a class="code" href="classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473"> 206</a></span>  <a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520">SharingMode</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">mSharingMode</a> = <a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520aa6156ea9d66fef24e87e841fbabf7cca">SharingMode::Shared</a>;</div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09"> 208</a></span>  <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a> = AudioFormat::Unspecified;</div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880"> 210</a></span>  <a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5ae">Direction</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a> = <a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5aea29c2c02a361c9d7028472e5d92cd4a54">Direction::Output</a>;</div><div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765"> 212</a></span>  <a class="code" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184">PerformanceMode</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a> = PerformanceMode::None;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c"> 215</a></span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">Usage</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a> = <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a3b563524fdb17b4a86590470d40bef74">Usage::Media</a>;</div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b"> 217</a></span>  <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">ContentType</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a> = ContentType::Music;</div><div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589"> 221</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06">InputPreset</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a> = InputPreset::VoiceRecognition;</div><div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737"> 223</a></span>  <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a> = SessionId::None;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="comment">// Control whether Oboe can convert channel counts to achieve optimal results.</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordtype">bool</span> mChannelConversionAllowed = <span class="keyword">false</span>;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="comment">// Control whether Oboe can convert data formats to achieve optimal results.</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordtype">bool</span> mFormatConversionAllowed = <span class="keyword">false</span>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="comment">// Control whether and how Oboe can convert sample rates to achieve optimal results.</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d">SampleRateConversionQuality</a> mSampleRateConversionQuality = SampleRateConversionQuality::None;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2"> 233</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2">isValidConfig</a>() {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">switch</span> (<a class="code" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a>) {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">case</span> AudioFormat::Unspecified:</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">case</span> <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6abcd774f891b5f9df7099f3ea75dadf8d">AudioFormat::I16</a>:</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">case</span> <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6a22ae0e2b89e5e3d477f988cc36d3272b">AudioFormat::Float</a>:</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span> Result::ErrorInvalidFormat;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">switch</span> (mSampleRateConversionQuality) {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">case</span> SampleRateConversionQuality::None:</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">case</span> <a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1da90fd7fdf6f41406a75e5265b9583bb4e">SampleRateConversionQuality::Fastest</a>:</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">case</span> SampleRateConversionQuality::Low:</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">case</span> SampleRateConversionQuality::Medium:</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">case</span> SampleRateConversionQuality::High:</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">case</span> <a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1da68ef004de6166492c1d668eb8efe09bd">SampleRateConversionQuality::Best</a>:</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">return</span> Result::OK;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">return</span> Result::ErrorIllegalArgument;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> };</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_BASE_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classoboe_1_1_audio_stream_base_html_a9fb2f34ae62dbda2c10e8513b754fa0c"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c">oboe::AudioStreamBase::getDataCallback</a></div><div class="ttdeci">AudioStreamDataCallback * getDataCallback() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:111</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_aa4ec3aa76e69350fbce6f00786211495"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#aa4ec3aa76e69350fbce6f00786211495">oboe::AudioStreamBase::isChannelConversionAllowed</a></div><div class="ttdeci">bool isChannelConversionAllowed() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:162</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a3b65595d26d1eae1b8ce9925a5b98f6a"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a">oboe::AudioStreamBase::mBufferSizeInFrames</a></div><div class="ttdeci">int32_t mBufferSizeInFrames</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:198</div></div>
<div class="ttc" id="namespaceoboe_html_af2147500089212955498a08ef2edb5aea29c2c02a361c9d7028472e5d92cd4a54"><div class="ttname"><a href="namespaceoboe.html#af2147500089212955498a08ef2edb5aea29c2c02a361c9d7028472e5d92cd4a54">oboe::Direction::Output</a></div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_abe1c1e9cada1ced9b5c1504ac9b07737"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">oboe::AudioStreamBase::mSessionId</a></div><div class="ttdeci">SessionId mSessionId</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:189</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a26e9294721561d3b16bcaeec5faf4880"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">oboe::AudioStreamBase::mDirection</a></div><div class="ttdeci">Direction mDirection</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:176</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a093057d625bc896864b959974c265f21"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">oboe::AudioStreamBase::getDeviceId</a></div><div class="ttdeci">int32_t getDeviceId() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:99</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a7869f04836c2c2bdc10c7309ad4b8e09"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">oboe::AudioStreamBase::mFormat</a></div><div class="ttdeci">AudioFormat mFormat</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:174</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a8878a90949badbb5486cc2e022a57086"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">oboe::AudioStreamBase::getFramesPerCallback</a></div><div class="ttdeci">int32_t getFramesPerCallback() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:66</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5f8f0e5add381b841856de80ea4cdb2b"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">oboe::AudioStreamBase::mContentType</a></div><div class="ttdeci">ContentType mContentType</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:183</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_abe1c1e9cada1ced9b5c1504ac9b07737"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">oboe::AudioStreamBase::mSessionId</a></div><div class="ttdeci">SessionId mSessionId</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:223</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a26e9294721561d3b16bcaeec5faf4880"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">oboe::AudioStreamBase::mDirection</a></div><div class="ttdeci">Direction mDirection</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:210</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a093057d625bc896864b959974c265f21"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">oboe::AudioStreamBase::getDeviceId</a></div><div class="ttdeci">int32_t getDeviceId() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:105</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a6d8493f66a945cb426506c70f0358e5f"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">oboe::AudioStreamBase::mDataCallback</a></div><div class="ttdeci">AudioStreamDataCallback * mDataCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:182</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a7869f04836c2c2bdc10c7309ad4b8e09"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">oboe::AudioStreamBase::mFormat</a></div><div class="ttdeci">AudioFormat mFormat</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:208</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_aef579f6d1f779c89d051f0963f2976b3"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3">oboe::AudioStreamBase::isErrorCallbackSpecified</a></div><div class="ttdeci">bool isErrorCallbackSpecified() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:135</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a8878a90949badbb5486cc2e022a57086"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">oboe::AudioStreamBase::getFramesPerCallback</a></div><div class="ttdeci">int32_t getFramesPerCallback() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:67</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5f8f0e5add381b841856de80ea4cdb2b"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">oboe::AudioStreamBase::mContentType</a></div><div class="ttdeci">ContentType mContentType</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:217</div></div>
<div class="ttc" id="namespaceoboe_html_a1068781f3920654b1bfd7ed136468184"><div class="ttname"><a href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184">oboe::PerformanceMode</a></div><div class="ttdeci">PerformanceMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:192</div></div>
<div class="ttc" id="namespaceoboe_html_a5752250c10e96179e3618d7f72937eaf"><div class="ttname"><a href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">oboe::SessionId</a></div><div class="ttdeci">SessionId</div><div class="ttdef"><b>Definition:</b> Definitions.h:414</div></div>
<div class="ttc" id="namespaceoboe_html_a8330247b25429953a08354f41834d520aa6156ea9d66fef24e87e841fbabf7cca"><div class="ttname"><a href="namespaceoboe.html#a8330247b25429953a08354f41834d520aa6156ea9d66fef24e87e841fbabf7cca">oboe::SharingMode::Shared</a></div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ab99671c2d0552557e75dc7b4afe91765"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">oboe::AudioStreamBase::mPerformanceMode</a></div><div class="ttdeci">PerformanceMode mPerformanceMode</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:178</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a2ddb935de0e24dd7ae8e2cfbecac9fdc"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">oboe::AudioStreamBase::getPerformanceMode</a></div><div class="ttdeci">PerformanceMode getPerformanceMode() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:94</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a87e6bf37d6a2a5e983b8ca8d29aea575"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575">oboe::AudioStreamBase::getChannelCount</a></div><div class="ttdeci">int32_t getChannelCount() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:51</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_aa3c502ce09bbad7690a2dd6acaf8892e"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#aa3c502ce09bbad7690a2dd6acaf8892e">oboe::AudioStreamBase::getSessionId</a></div><div class="ttdeci">SessionId getSessionId() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:126</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:33</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ae9187492b679c97a0963e264954be473"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">oboe::AudioStreamBase::mSharingMode</a></div><div class="ttdeci">SharingMode mSharingMode</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:172</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5ff460bac9d14dfeac4eeddfcbb6e206"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">oboe::AudioStreamBase::mChannelCount</a></div><div class="ttdeci">int32_t mChannelCount</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:156</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ace3625a7332bf02a86818fdf63fcccb4"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4">oboe::AudioStreamBase::isFormatConversionAllowed</a></div><div class="ttdeci">bool isFormatConversionAllowed() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:138</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ab1e640461d7bf9d596decb913da7ac86"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">oboe::AudioStreamBase::getFormat</a></div><div class="ttdeci">AudioFormat getFormat() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:71</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ab99671c2d0552557e75dc7b4afe91765"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">oboe::AudioStreamBase::mPerformanceMode</a></div><div class="ttdeci">PerformanceMode mPerformanceMode</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:212</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a2ddb935de0e24dd7ae8e2cfbecac9fdc"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">oboe::AudioStreamBase::getPerformanceMode</a></div><div class="ttdeci">PerformanceMode getPerformanceMode() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:100</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a87e6bf37d6a2a5e983b8ca8d29aea575"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575">oboe::AudioStreamBase::getChannelCount</a></div><div class="ttdeci">int32_t getChannelCount() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:52</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_aa3c502ce09bbad7690a2dd6acaf8892e"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#aa3c502ce09bbad7690a2dd6acaf8892e">oboe::AudioStreamBase::getSessionId</a></div><div class="ttdeci">SessionId getSessionId() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:157</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_data_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:34</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ae9187492b679c97a0963e264954be473"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">oboe::AudioStreamBase::mSharingMode</a></div><div class="ttdeci">SharingMode mSharingMode</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:206</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5ff460bac9d14dfeac4eeddfcbb6e206"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">oboe::AudioStreamBase::mChannelCount</a></div><div class="ttdeci">int32_t mChannelCount</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:190</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ace3625a7332bf02a86818fdf63fcccb4"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4">oboe::AudioStreamBase::isFormatConversionAllowed</a></div><div class="ttdeci">bool isFormatConversionAllowed() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:169</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ab1e640461d7bf9d596decb913da7ac86"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">oboe::AudioStreamBase::getFormat</a></div><div class="ttdeci">AudioFormat getFormat() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:77</div></div>
<div class="ttc" id="namespaceoboe_html_a2a3cec6f021c1a324df60273710c604b"><div class="ttname"><a href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">oboe::ContentType</a></div><div class="ttdeci">ContentType</div><div class="ttdef"><b>Definition:</b> Definitions.h:339</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a23dafa12fb1a6242b088ebd5a52798c8"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">oboe::AudioStreamBase::mDeviceId</a></div><div class="ttdeci">int32_t mDeviceId</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:160</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ab12e2d068fa87e0553b01a400d96eb82"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">oboe::AudioStreamBase::getContentType</a></div><div class="ttdeci">ContentType getContentType() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:116</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5b518e82f39c9fcbd7050fd66adb253c"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">oboe::AudioStreamBase::mUsage</a></div><div class="ttdeci">Usage mUsage</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:181</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_abc3ee2815568b425d15a40e132aa8e38"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38">oboe::AudioStreamBase::getFramesPerDataCallback</a></div><div class="ttdeci">int32_t getFramesPerDataCallback() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:72</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a23dafa12fb1a6242b088ebd5a52798c8"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">oboe::AudioStreamBase::mDeviceId</a></div><div class="ttdeci">int32_t mDeviceId</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:194</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5d5e07e98921d0193a5c0ccbe06f68c2"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2">oboe::AudioStreamBase::isValidConfig</a></div><div class="ttdeci">virtual Result isValidConfig()</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:233</div></div>
+<div class="ttc" id="namespaceoboe_html_a82f3720eba7654aceb7282be36f9ff1da68ef004de6166492c1d668eb8efe09bd"><div class="ttname"><a href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1da68ef004de6166492c1d668eb8efe09bd">oboe::SampleRateConversionQuality::Best</a></div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ab12e2d068fa87e0553b01a400d96eb82"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">oboe::AudioStreamBase::getContentType</a></div><div class="ttdeci">ContentType getContentType() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:147</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5b518e82f39c9fcbd7050fd66adb253c"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">oboe::AudioStreamBase::mUsage</a></div><div class="ttdeci">Usage mUsage</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:215</div></div>
<div class="ttc" id="namespaceoboe_html_a104ee8396c173fefac429759ea3c21a0"><div class="ttname"><a href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">oboe::Usage</a></div><div class="ttdeci">Usage</div><div class="ttdef"><b>Definition:</b> Definitions.h:263</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ae9d32f3e09174bad69e74f147ee33087"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">oboe::AudioStreamBase::getSampleRate</a></div><div class="ttdeci">int32_t getSampleRate() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:61</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a998885bb6c4f37e145f4626ad4177dea"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">oboe::AudioStreamBase::mSampleRate</a></div><div class="ttdeci">int32_t mSampleRate</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:158</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a1b4a2a191546708da657510c3cd6b797"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797">oboe::AudioStreamBase::getCallback</a></div><div class="ttdeci">AudioStreamCallback * getCallback() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:104</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_error_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:97</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ae9d32f3e09174bad69e74f147ee33087"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">oboe::AudioStreamBase::getSampleRate</a></div><div class="ttdeci">int32_t getSampleRate() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:62</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a998885bb6c4f37e145f4626ad4177dea"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">oboe::AudioStreamBase::mSampleRate</a></div><div class="ttdeci">int32_t mSampleRate</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:192</div></div>
<div class="ttc" id="namespaceoboe_html_a104ee8396c173fefac429759ea3c21a0a3b563524fdb17b4a86590470d40bef74"><div class="ttname"><a href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a3b563524fdb17b4a86590470d40bef74">oboe::Usage::Media</a></div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a54061319ed348329a29d883a5de2482e"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e">oboe::AudioStreamBase::mFramesPerBurst</a></div><div class="ttdeci">int32_t mFramesPerBurst</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:169</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a1fb033fc963f971bd1aa8f6707e49b41"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a1fb033fc963f971bd1aa8f6707e49b41">oboe::AudioStreamBase::getSharingMode</a></div><div class="ttdeci">SharingMode getSharingMode() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:89</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a54061319ed348329a29d883a5de2482e"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e">oboe::AudioStreamBase::mFramesPerBurst</a></div><div class="ttdeci">int32_t mFramesPerBurst</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:203</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a1fb033fc963f971bd1aa8f6707e49b41"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a1fb033fc963f971bd1aa8f6707e49b41">oboe::AudioStreamBase::getSharingMode</a></div><div class="ttdeci">SharingMode getSharingMode() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:95</div></div>
+<div class="ttc" id="namespaceoboe_html_a92afc593e856571aacbfd02e57075df6abcd774f891b5f9df7099f3ea75dadf8d"><div class="ttname"><a href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6abcd774f891b5f9df7099f3ea75dadf8d">oboe::AudioFormat::I16</a></div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_base_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:29</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ac81d4719b350f8138aad1af38f0873b6"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">oboe::AudioStreamBase::mBufferCapacityInFrames</a></div><div class="ttdeci">int32_t mBufferCapacityInFrames</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:162</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a1de8d6982d411a0cf50a32efba0ca3f2"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a1de8d6982d411a0cf50a32efba0ca3f2">oboe::AudioStreamBase::getSampleRateConversionQuality</a></div><div class="ttdeci">SampleRateConversionQuality getSampleRateConversionQuality() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:145</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ac81d4719b350f8138aad1af38f0873b6"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">oboe::AudioStreamBase::mBufferCapacityInFrames</a></div><div class="ttdeci">int32_t mBufferCapacityInFrames</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:196</div></div>
+<div class="ttc" id="namespaceoboe_html_a92afc593e856571aacbfd02e57075df6a22ae0e2b89e5e3d477f988cc36d3272b"><div class="ttname"><a href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6a22ae0e2b89e5e3d477f988cc36d3272b">oboe::AudioFormat::Float</a></div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a1de8d6982d411a0cf50a32efba0ca3f2"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a1de8d6982d411a0cf50a32efba0ca3f2">oboe::AudioStreamBase::getSampleRateConversionQuality</a></div><div class="ttdeci">SampleRateConversionQuality getSampleRateConversionQuality() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:176</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_base_html_aa9c987a59555d7a60b9f7a63f4afc7fc"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#aa9c987a59555d7a60b9f7a63f4afc7fc">oboe::AudioStreamBase::operator=</a></div><div class="ttdeci">AudioStreamBase & operator=(const AudioStreamBase &)=default</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_af5217ab05bfde0d7637024b599302d0b"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">oboe::AudioStreamBase::getBufferSizeInFrames</a></div><div class="ttdeci">virtual int32_t getBufferSizeInFrames()</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:79</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_af5217ab05bfde0d7637024b599302d0b"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">oboe::AudioStreamBase::getBufferSizeInFrames</a></div><div class="ttdeci">virtual int32_t getBufferSizeInFrames()</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:85</div></div>
<div class="ttc" id="namespaceoboe_html_a92afc593e856571aacbfd02e57075df6"><div class="ttname"><a href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">oboe::AudioFormat</a></div><div class="ttdeci">AudioFormat</div><div class="ttdef"><b>Definition:</b> Definitions.h:94</div></div>
+<div class="ttc" id="namespaceoboe_html_a486512e787b609c80ba4436f23929af1"><div class="ttname"><a href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">oboe::Result</a></div><div class="ttdeci">Result</div><div class="ttdef"><b>Definition:</b> Definitions.h:131</div></div>
<div class="ttc" id="namespaceoboe_html_ab0772052200184e514082eaa89be7905"><div class="ttname"><a href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">oboe::kUnspecified</a></div><div class="ttdeci">constexpr int32_t kUnspecified</div><div class="ttdef"><b>Definition:</b> Definitions.h:32</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ab1531253e64aaebe9e9eddbafb9098fc"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">oboe::AudioStreamBase::getBufferCapacityInFrames</a></div><div class="ttdeci">virtual int32_t getBufferCapacityInFrames() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:84</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ab1531253e64aaebe9e9eddbafb9098fc"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">oboe::AudioStreamBase::getBufferCapacityInFrames</a></div><div class="ttdeci">virtual int32_t getBufferCapacityInFrames() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:90</div></div>
<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:31</div></div>
<div class="ttc" id="namespaceoboe_html_a82f3720eba7654aceb7282be36f9ff1d"><div class="ttname"><a href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d">oboe::SampleRateConversionQuality</a></div><div class="ttdeci">SampleRateConversionQuality</div><div class="ttdef"><b>Definition:</b> Definitions.h:235</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a1e5d4f5b30c4cc36f81ffd858cc00589"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">oboe::AudioStreamBase::mInputPreset</a></div><div class="ttdeci">InputPreset mInputPreset</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:187</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ae3f72318212dd9977d7fa0ced92c91f4"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">oboe::AudioStreamBase::mStreamCallback</a></div><div class="ttdeci">AudioStreamCallback * mStreamCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:152</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a1e5d4f5b30c4cc36f81ffd858cc00589"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">oboe::AudioStreamBase::mInputPreset</a></div><div class="ttdeci">InputPreset mInputPreset</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:221</div></div>
<div class="ttc" id="namespaceoboe_html_af2147500089212955498a08ef2edb5ae"><div class="ttname"><a href="namespaceoboe.html#af2147500089212955498a08ef2edb5ae">oboe::Direction</a></div><div class="ttdeci">Direction</div><div class="ttdef"><b>Definition:</b> Definitions.h:78</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a6f86f2233a04c5a0b056f0c1c261f1b1"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">oboe::AudioStreamBase::getDirection</a></div><div class="ttdeci">Direction getDirection() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:56</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a6f86f2233a04c5a0b056f0c1c261f1b1"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">oboe::AudioStreamBase::getDirection</a></div><div class="ttdeci">Direction getDirection() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:57</div></div>
<div class="ttc" id="namespaceoboe_html_a8330247b25429953a08354f41834d520"><div class="ttname"><a href="namespaceoboe.html#a8330247b25429953a08354f41834d520">oboe::SharingMode</a></div><div class="ttdeci">SharingMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:167</div></div>
<div class="ttc" id="namespaceoboe_html_a4477ed232b02e2694d9309baf55a8f06"><div class="ttname"><a href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06">oboe::InputPreset</a></div><div class="ttdeci">InputPreset</div><div class="ttdef"><b>Definition:</b> Definitions.h:372</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a3962eb94420ad0ecea70029236001899"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">oboe::AudioStreamBase::mFramesPerCallback</a></div><div class="ttdeci">int32_t mFramesPerCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:154</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a0bcfb2f8bd11c92b541fd910da9af397"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a0bcfb2f8bd11c92b541fd910da9af397">oboe::AudioStreamBase::getUsage</a></div><div class="ttdeci">Usage getUsage() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:111</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5c773b93b8aa38191c7199cab023428a"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a">oboe::AudioStreamBase::getInputPreset</a></div><div class="ttdeci">InputPreset getInputPreset() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:121</div></div>
+<div class="ttc" id="namespaceoboe_html_a82f3720eba7654aceb7282be36f9ff1da90fd7fdf6f41406a75e5265b9583bb4e"><div class="ttname"><a href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1da90fd7fdf6f41406a75e5265b9583bb4e">oboe::SampleRateConversionQuality::Fastest</a></div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a3962eb94420ad0ecea70029236001899"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">oboe::AudioStreamBase::mFramesPerCallback</a></div><div class="ttdeci">int32_t mFramesPerCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:188</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a9a54d38b985a2eb12c6972104dc0ce73"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73">oboe::AudioStreamBase::isDataCallbackSpecified</a></div><div class="ttdeci">bool isDataCallbackSpecified() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:126</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a0bcfb2f8bd11c92b541fd910da9af397"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a0bcfb2f8bd11c92b541fd910da9af397">oboe::AudioStreamBase::getUsage</a></div><div class="ttdeci">Usage getUsage() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:142</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_adc0c8cc54adb6d3350c62b8a74b9c57b"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">oboe::AudioStreamBase::mErrorCallback</a></div><div class="ttdeci">AudioStreamErrorCallback * mErrorCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:185</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5c773b93b8aa38191c7199cab023428a"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a">oboe::AudioStreamBase::getInputPreset</a></div><div class="ttdeci">InputPreset getInputPreset() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:152</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a1328fb9288166ff325995ce1ea1867f0"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0">oboe::AudioStreamBase::getErrorCallback</a></div><div class="ttdeci">AudioStreamErrorCallback * getErrorCallback() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:119</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/_audio_stream_builder_8h_source.html b/docs/reference/_audio_stream_builder_8h_source.html
index 26f8a47..9d354d3 100644
--- a/docs/reference/_audio_stream_builder_8h_source.html
+++ b/docs/reference/_audio_stream_builder_8h_source.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -71,61 +71,67 @@
<div class="title">AudioStreamBuilder.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2015 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_STREAM_BUILDER_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_STREAM_BUILDER_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "oboe/Definitions.h"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "oboe/AudioStreamBase.h"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="comment">// This depends on AudioStream, so we use forward declaration, it will close and delete the stream</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">struct </span>StreamDeleterFunctor;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">using</span> ManagedStream = std::unique_ptr<AudioStream, StreamDeleterFunctor>;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html"> 31</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> : <span class="keyword">public</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>() : <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>() {}</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>(<span class="keyword">const</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &audioStreamBase): <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>(audioStreamBase) {}</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7"> 44</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7">setChannelCount</a>(<span class="keywordtype">int</span> channelCount) {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> = channelCount;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c"> 54</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c">setDirection</a>(<a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5ae">Direction</a> direction) {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a> = direction;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d"> 70</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d">setSampleRate</a>(int32_t sampleRate) {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a> = sampleRate;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54"> 89</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a>(<span class="keywordtype">int</span> framesPerCallback) {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a> = framesPerCallback;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515"> 100</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a>(<a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> format) {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a> = format;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef"> 117</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a>(int32_t bufferCapacityInFrames) {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a> = bufferCapacityInFrames;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#ac9d41811c297fd28bc61833f640bb8d0"> 132</a></span>  <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> <a class="code" href="classoboe_1_1_audio_stream_builder.html#ac9d41811c297fd28bc61833f640bb8d0">getAudioApi</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mAudioApi; }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391"> 147</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a>(<a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> audioApi) {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  mAudioApi = audioApi;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_builder.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a>();</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_builder.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a>();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654"> 179</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654">setSharingMode</a>(<a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520">SharingMode</a> sharingMode) {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">mSharingMode</a> = sharingMode;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee"> 192</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee">setPerformanceMode</a>(<a class="code" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184">PerformanceMode</a> performanceMode) {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a> = performanceMode;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a"> 210</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a">setUsage</a>(<a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">Usage</a> usage) {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a> = usage;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468"> 227</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">setContentType</a>(<a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">ContentType</a> contentType) {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a> = contentType;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0"> 247</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0">setInputPreset</a>(<a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06">InputPreset</a> inputPreset) {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a> = inputPreset;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d"> 276</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d">setSessionId</a>(<a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> sessionId) {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a> = sessionId;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e"> 299</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e">setDeviceId</a>(int32_t deviceId) {</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a> = deviceId;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd"> 325</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a>(<a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *streamCallback) {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a> = streamCallback;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#ad50f5d20cdf420d982bf499790cd3563"> 339</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#ad50f5d20cdf420d982bf499790cd3563">setChannelConversionAllowed</a>(<span class="keywordtype">bool</span> allowed) {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  mChannelConversionAllowed = allowed;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div><div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a7ec5f427cd6fe55cb1ce536ff0cbb4d2"> 351</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a7ec5f427cd6fe55cb1ce536ff0cbb4d2">setFormatConversionAllowed</a>(<span class="keywordtype">bool</span> allowed) {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  mFormatConversionAllowed = allowed;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div><div class="line"><a name="l00367"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#af7d24a9ec975d430732151e5ee0d1027"> 367</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#af7d24a9ec975d430732151e5ee0d1027">setSampleRateConversionQuality</a>(<a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d">SampleRateConversionQuality</a> quality) {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  mSampleRateConversionQuality = quality;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div><div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#aa07ea100fcb107d9f7913f206c2214f4"> 375</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_builder.html#aa07ea100fcb107d9f7913f206c2214f4">willUseAAudio</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">return</span> (mAudioApi == <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AudioApi::AAudio</a> && <a class="code" href="classoboe_1_1_audio_stream_builder.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a>())</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  || (mAudioApi == AudioApi::Unspecified && <a class="code" href="classoboe_1_1_audio_stream_builder.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a>());</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> **stream);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream_builder.html#a7ab172a9be4fca2489aa5cbcc48c20ff">openManagedStream</a>(ManagedStream &stream);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordtype">bool</span> isCompatible(<a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &other);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <a class="code" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a> *build();</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span> </div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> mAudioApi = AudioApi::Unspecified;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> };</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> </div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_BUILDER_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classoboe_1_1_audio_stream_builder_html_af36ddcd00686a9e1de661bdac0685a8e"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e">oboe::AudioStreamBuilder::setDeviceId</a></div><div class="ttdeci">AudioStreamBuilder * setDeviceId(int32_t deviceId)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:299</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2015 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_STREAM_BUILDER_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_STREAM_BUILDER_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "oboe/Definitions.h"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "oboe/AudioStreamBase.h"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "ResultWithValue.h"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="comment">// This depends on AudioStream, so we use forward declaration, it will close and delete the stream</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">struct </span>StreamDeleterFunctor;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">using</span> ManagedStream = std::unique_ptr<AudioStream, StreamDeleterFunctor>;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html"> 33</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> : <span class="keyword">public</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>() : <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>() {}</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>(<span class="keyword">const</span> <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &audioStreamBase): <a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a>(audioStreamBase) {}</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7"> 46</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7">setChannelCount</a>(<span class="keywordtype">int</span> channelCount) {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> = channelCount;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c"> 56</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c">setDirection</a>(<a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5ae">Direction</a> direction) {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a> = direction;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d"> 72</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d">setSampleRate</a>(int32_t sampleRate) {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a> = sampleRate;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54"> 80</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a>(<span class="keywordtype">int</span> framesPerCallback) {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">return</span> <a class="code" href="classoboe_1_1_audio_stream_builder.html#afb8e95e80df7edd1af27af490438785e">setFramesPerDataCallback</a>(framesPerCallback);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#afb8e95e80df7edd1af27af490438785e"> 98</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#afb8e95e80df7edd1af27af490438785e">setFramesPerDataCallback</a>(<span class="keywordtype">int</span> framesPerCallback) {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a> = framesPerCallback;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515"> 109</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a>(<a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> format) {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a> = format;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef"> 126</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a>(int32_t bufferCapacityInFrames) {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a> = bufferCapacityInFrames;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#ac9d41811c297fd28bc61833f640bb8d0"> 141</a></span>  <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> <a class="code" href="classoboe_1_1_audio_stream_builder.html#ac9d41811c297fd28bc61833f640bb8d0">getAudioApi</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mAudioApi; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391"> 156</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a>(<a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> audioApi) {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  mAudioApi = audioApi;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_builder.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a>();</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_builder.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a>();</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654"> 188</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654">setSharingMode</a>(<a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520">SharingMode</a> sharingMode) {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">mSharingMode</a> = sharingMode;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee"> 201</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee">setPerformanceMode</a>(<a class="code" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184">PerformanceMode</a> performanceMode) {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a> = performanceMode;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a"> 220</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a">setUsage</a>(<a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">Usage</a> usage) {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a> = usage;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468"> 238</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">setContentType</a>(<a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">ContentType</a> contentType) {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a> = contentType;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0"> 258</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0">setInputPreset</a>(<a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06">InputPreset</a> inputPreset) {</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a> = inputPreset;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d"> 287</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d">setSessionId</a>(<a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> sessionId) {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a> = sessionId;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e"> 310</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e">setDeviceId</a>(int32_t deviceId) {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a> = deviceId;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#acad307720e0f370267b4e2f9a626ae70"> 324</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#acad307720e0f370267b4e2f9a626ae70">setDataCallback</a>(<a class="code" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a> *dataCallback) {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a> = dataCallback;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#aacb66f530bfc6f545911b5e169774567"> 344</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#aacb66f530bfc6f545911b5e169774567">setErrorCallback</a>(<a class="code" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a> *errorCallback) {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a> = errorCallback;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd"> 372</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a>(<a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *streamCallback) {</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="comment">// Use the same callback object for both, dual inheritance.</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a> = streamCallback;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <a class="code" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a> = streamCallback;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00388"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#ad50f5d20cdf420d982bf499790cd3563"> 388</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#ad50f5d20cdf420d982bf499790cd3563">setChannelConversionAllowed</a>(<span class="keywordtype">bool</span> allowed) {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  mChannelConversionAllowed = allowed;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  }</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div><div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#a7ec5f427cd6fe55cb1ce536ff0cbb4d2"> 400</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#a7ec5f427cd6fe55cb1ce536ff0cbb4d2">setFormatConversionAllowed</a>(<span class="keywordtype">bool</span> allowed) {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  mFormatConversionAllowed = allowed;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div><div class="line"><a name="l00416"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#af7d24a9ec975d430732151e5ee0d1027"> 416</a></span>  <a class="code" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> *<a class="code" href="classoboe_1_1_audio_stream_builder.html#af7d24a9ec975d430732151e5ee0d1027">setSampleRateConversionQuality</a>(<a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d">SampleRateConversionQuality</a> quality) {</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  mSampleRateConversionQuality = quality;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  }</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div><div class="line"><a name="l00424"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_builder.html#aa07ea100fcb107d9f7913f206c2214f4"> 424</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_builder.html#aa07ea100fcb107d9f7913f206c2214f4">willUseAAudio</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">return</span> (mAudioApi == <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AudioApi::AAudio</a> && <a class="code" href="classoboe_1_1_audio_stream_builder.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a>())</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  || (mAudioApi == AudioApi::Unspecified && <a class="code" href="classoboe_1_1_audio_stream_builder.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a>());</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> **stream);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a>(std::shared_ptr<oboe::AudioStream> &stream);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_audio_stream_builder.html#a7ab172a9be4fca2489aa5cbcc48c20ff">openManagedStream</a>(ManagedStream &stream);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordtype">bool</span> isCompatible(<a class="code" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &other);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <a class="code" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a> *build();</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> mAudioApi = AudioApi::Unspecified;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span> };</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor">#endif </span><span class="comment">/* OBOE_STREAM_BUILDER_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classoboe_1_1_audio_stream_builder_html_af36ddcd00686a9e1de661bdac0685a8e"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e">oboe::AudioStreamBuilder::setDeviceId</a></div><div class="ttdeci">AudioStreamBuilder * setDeviceId(int32_t deviceId)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:310</div></div>
<div class="ttc" id="namespaceoboe_html_a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b"><div class="ttname"><a href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">oboe::AudioApi::AAudio</a></div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:31</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_abe1c1e9cada1ced9b5c1504ac9b07737"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">oboe::AudioStreamBase::mSessionId</a></div><div class="ttdeci">SessionId mSessionId</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:189</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a6cd1d65612e844e59da71a68ea0ab3ee"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee">oboe::AudioStreamBuilder::setPerformanceMode</a></div><div class="ttdeci">AudioStreamBuilder * setPerformanceMode(PerformanceMode performanceMode)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:192</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a26e9294721561d3b16bcaeec5faf4880"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">oboe::AudioStreamBase::mDirection</a></div><div class="ttdeci">Direction mDirection</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:176</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a7869f04836c2c2bdc10c7309ad4b8e09"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">oboe::AudioStreamBase::mFormat</a></div><div class="ttdeci">AudioFormat mFormat</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:174</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5f8f0e5add381b841856de80ea4cdb2b"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">oboe::AudioStreamBase::mContentType</a></div><div class="ttdeci">ContentType mContentType</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:183</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:33</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_abe1c1e9cada1ced9b5c1504ac9b07737"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">oboe::AudioStreamBase::mSessionId</a></div><div class="ttdeci">SessionId mSessionId</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:223</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a6cd1d65612e844e59da71a68ea0ab3ee"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee">oboe::AudioStreamBuilder::setPerformanceMode</a></div><div class="ttdeci">AudioStreamBuilder * setPerformanceMode(PerformanceMode performanceMode)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:201</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a26e9294721561d3b16bcaeec5faf4880"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">oboe::AudioStreamBase::mDirection</a></div><div class="ttdeci">Direction mDirection</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:210</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a6d8493f66a945cb426506c70f0358e5f"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">oboe::AudioStreamBase::mDataCallback</a></div><div class="ttdeci">AudioStreamDataCallback * mDataCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:182</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a7869f04836c2c2bdc10c7309ad4b8e09"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">oboe::AudioStreamBase::mFormat</a></div><div class="ttdeci">AudioFormat mFormat</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:208</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5f8f0e5add381b841856de80ea4cdb2b"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">oboe::AudioStreamBase::mContentType</a></div><div class="ttdeci">ContentType mContentType</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:217</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a622732bbe5c6577356d749f7dc2108df"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a622732bbe5c6577356d749f7dc2108df">oboe::AudioStreamBuilder::isAAudioRecommended</a></div><div class="ttdeci">static bool isAAudioRecommended()</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_af7d24a9ec975d430732151e5ee0d1027"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#af7d24a9ec975d430732151e5ee0d1027">oboe::AudioStreamBuilder::setSampleRateConversionQuality</a></div><div class="ttdeci">AudioStreamBuilder * setSampleRateConversionQuality(SampleRateConversionQuality quality)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:367</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_af7d24a9ec975d430732151e5ee0d1027"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#af7d24a9ec975d430732151e5ee0d1027">oboe::AudioStreamBuilder::setSampleRateConversionQuality</a></div><div class="ttdeci">AudioStreamBuilder * setSampleRateConversionQuality(SampleRateConversionQuality quality)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:416</div></div>
<div class="ttc" id="namespaceoboe_html_a1068781f3920654b1bfd7ed136468184"><div class="ttname"><a href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184">oboe::PerformanceMode</a></div><div class="ttdeci">PerformanceMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:192</div></div>
<div class="ttc" id="namespaceoboe_html_a5752250c10e96179e3618d7f72937eaf"><div class="ttname"><a href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">oboe::SessionId</a></div><div class="ttdeci">SessionId</div><div class="ttdef"><b>Definition:</b> Definitions.h:414</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a54c1651bdbe089d0d714af499e8a5f1d"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d">oboe::AudioStreamBuilder::setSessionId</a></div><div class="ttdeci">AudioStreamBuilder * setSessionId(SessionId sessionId)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:276</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ab99671c2d0552557e75dc7b4afe91765"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">oboe::AudioStreamBase::mPerformanceMode</a></div><div class="ttdeci">PerformanceMode mPerformanceMode</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:178</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:33</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ae9187492b679c97a0963e264954be473"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">oboe::AudioStreamBase::mSharingMode</a></div><div class="ttdeci">SharingMode mSharingMode</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:172</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a6a17bafc217c2b624179fbbf77fe4468"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">oboe::AudioStreamBuilder::setContentType</a></div><div class="ttdeci">AudioStreamBuilder * setContentType(ContentType contentType)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:227</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5ff460bac9d14dfeac4eeddfcbb6e206"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">oboe::AudioStreamBase::mChannelCount</a></div><div class="ttdeci">int32_t mChannelCount</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:156</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a54c1651bdbe089d0d714af499e8a5f1d"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d">oboe::AudioStreamBuilder::setSessionId</a></div><div class="ttdeci">AudioStreamBuilder * setSessionId(SessionId sessionId)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:287</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ab99671c2d0552557e75dc7b4afe91765"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">oboe::AudioStreamBase::mPerformanceMode</a></div><div class="ttdeci">PerformanceMode mPerformanceMode</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:212</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_data_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:34</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:181</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ae9187492b679c97a0963e264954be473"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">oboe::AudioStreamBase::mSharingMode</a></div><div class="ttdeci">SharingMode mSharingMode</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:206</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a6a17bafc217c2b624179fbbf77fe4468"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">oboe::AudioStreamBuilder::setContentType</a></div><div class="ttdeci">AudioStreamBuilder * setContentType(ContentType contentType)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:238</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5ff460bac9d14dfeac4eeddfcbb6e206"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">oboe::AudioStreamBase::mChannelCount</a></div><div class="ttdeci">int32_t mChannelCount</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:190</div></div>
<div class="ttc" id="namespaceoboe_html_a92972414867c81d5974cb2ed7abefbf6"><div class="ttname"><a href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a></div><div class="ttdeci">AudioApi</div><div class="ttdef"><b>Definition:</b> Definitions.h:213</div></div>
<div class="ttc" id="namespaceoboe_html_a2a3cec6f021c1a324df60273710c604b"><div class="ttname"><a href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">oboe::ContentType</a></div><div class="ttdeci">ContentType</div><div class="ttdef"><b>Definition:</b> Definitions.h:339</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a593255a2f5eb972665775cfc5bc58f6a"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a">oboe::AudioStreamBuilder::setUsage</a></div><div class="ttdeci">AudioStreamBuilder * setUsage(Usage usage)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:210</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a23dafa12fb1a6242b088ebd5a52798c8"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">oboe::AudioStreamBase::mDeviceId</a></div><div class="ttdeci">int32_t mDeviceId</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:160</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a593255a2f5eb972665775cfc5bc58f6a"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a">oboe::AudioStreamBuilder::setUsage</a></div><div class="ttdeci">AudioStreamBuilder * setUsage(Usage usage)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:220</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a23dafa12fb1a6242b088ebd5a52798c8"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">oboe::AudioStreamBase::mDeviceId</a></div><div class="ttdeci">int32_t mDeviceId</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:194</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a18e7b5f7554a4c2ca763e35e8117d699"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a18e7b5f7554a4c2ca763e35e8117d699">oboe::AudioStreamBuilder::isAAudioSupported</a></div><div class="ttdeci">static bool isAAudioSupported()</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_ad50f5d20cdf420d982bf499790cd3563"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#ad50f5d20cdf420d982bf499790cd3563">oboe::AudioStreamBuilder::setChannelConversionAllowed</a></div><div class="ttdeci">AudioStreamBuilder * setChannelConversionAllowed(bool allowed)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:339</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a3f397821f61eabaeedaf31064c859a54"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">oboe::AudioStreamBuilder::setFramesPerCallback</a></div><div class="ttdeci">AudioStreamBuilder * setFramesPerCallback(int framesPerCallback)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:89</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_ab3fbd47b06197619c26393637e26354c"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c">oboe::AudioStreamBuilder::setDirection</a></div><div class="ttdeci">AudioStreamBuilder * setDirection(Direction direction)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:54</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_aa2e1d2d73cd6c2eb9f349bf2fe5f6515"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">oboe::AudioStreamBuilder::setFormat</a></div><div class="ttdeci">AudioStreamBuilder * setFormat(AudioFormat format)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:100</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5b518e82f39c9fcbd7050fd66adb253c"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">oboe::AudioStreamBase::mUsage</a></div><div class="ttdeci">Usage mUsage</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:181</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_ad50f5d20cdf420d982bf499790cd3563"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#ad50f5d20cdf420d982bf499790cd3563">oboe::AudioStreamBuilder::setChannelConversionAllowed</a></div><div class="ttdeci">AudioStreamBuilder * setChannelConversionAllowed(bool allowed)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:388</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a3f397821f61eabaeedaf31064c859a54"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">oboe::AudioStreamBuilder::setFramesPerCallback</a></div><div class="ttdeci">AudioStreamBuilder * setFramesPerCallback(int framesPerCallback)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:80</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_ab3fbd47b06197619c26393637e26354c"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c">oboe::AudioStreamBuilder::setDirection</a></div><div class="ttdeci">AudioStreamBuilder * setDirection(Direction direction)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:56</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_aa2e1d2d73cd6c2eb9f349bf2fe5f6515"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">oboe::AudioStreamBuilder::setFormat</a></div><div class="ttdeci">AudioStreamBuilder * setFormat(AudioFormat format)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:109</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a5b518e82f39c9fcbd7050fd66adb253c"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">oboe::AudioStreamBase::mUsage</a></div><div class="ttdeci">Usage mUsage</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:215</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html"><div class="ttname"><a href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:44</div></div>
<div class="ttc" id="namespaceoboe_html_a104ee8396c173fefac429759ea3c21a0"><div class="ttname"><a href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">oboe::Usage</a></div><div class="ttdeci">Usage</div><div class="ttdef"><b>Definition:</b> Definitions.h:263</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a38c6d6c5e718df1e3ac69daaac47c391"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391">oboe::AudioStreamBuilder::setAudioApi</a></div><div class="ttdeci">AudioStreamBuilder * setAudioApi(AudioApi audioApi)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:147</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a144a3d095fd668210282f1a91f23e1f0"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0">oboe::AudioStreamBuilder::setInputPreset</a></div><div class="ttdeci">AudioStreamBuilder * setInputPreset(InputPreset inputPreset)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:247</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_error_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:97</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a38c6d6c5e718df1e3ac69daaac47c391"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391">oboe::AudioStreamBuilder::setAudioApi</a></div><div class="ttdeci">AudioStreamBuilder * setAudioApi(AudioApi audioApi)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:156</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a144a3d095fd668210282f1a91f23e1f0"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0">oboe::AudioStreamBuilder::setInputPreset</a></div><div class="ttdeci">AudioStreamBuilder * setInputPreset(InputPreset inputPreset)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:258</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a7ab172a9be4fca2489aa5cbcc48c20ff"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a7ab172a9be4fca2489aa5cbcc48c20ff">oboe::AudioStreamBuilder::openManagedStream</a></div><div class="ttdeci">Result openManagedStream(ManagedStream &stream)</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a30ef3d5f51d56a9f980dc09600ed139d"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d">oboe::AudioStreamBuilder::setSampleRate</a></div><div class="ttdeci">AudioStreamBuilder * setSampleRate(int32_t sampleRate)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:70</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a998885bb6c4f37e145f4626ad4177dea"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">oboe::AudioStreamBase::mSampleRate</a></div><div class="ttdeci">int32_t mSampleRate</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:158</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a30ef3d5f51d56a9f980dc09600ed139d"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d">oboe::AudioStreamBuilder::setSampleRate</a></div><div class="ttdeci">AudioStreamBuilder * setSampleRate(int32_t sampleRate)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:72</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a998885bb6c4f37e145f4626ad4177dea"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">oboe::AudioStreamBase::mSampleRate</a></div><div class="ttdeci">int32_t mSampleRate</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:192</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_base_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:29</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ac81d4719b350f8138aad1af38f0873b6"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">oboe::AudioStreamBase::mBufferCapacityInFrames</a></div><div class="ttdeci">int32_t mBufferCapacityInFrames</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:162</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_abaff480867af51ca0899bfa6fd7cc3ef"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">oboe::AudioStreamBuilder::setBufferCapacityInFrames</a></div><div class="ttdeci">AudioStreamBuilder * setBufferCapacityInFrames(int32_t bufferCapacityInFrames)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:117</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ac81d4719b350f8138aad1af38f0873b6"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">oboe::AudioStreamBase::mBufferCapacityInFrames</a></div><div class="ttdeci">int32_t mBufferCapacityInFrames</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:196</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_abaff480867af51ca0899bfa6fd7cc3ef"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">oboe::AudioStreamBuilder::setBufferCapacityInFrames</a></div><div class="ttdeci">AudioStreamBuilder * setBufferCapacityInFrames(int32_t bufferCapacityInFrames)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:126</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_afb8e95e80df7edd1af27af490438785e"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#afb8e95e80df7edd1af27af490438785e">oboe::AudioStreamBuilder::setFramesPerDataCallback</a></div><div class="ttdeci">AudioStreamBuilder * setFramesPerDataCallback(int framesPerCallback)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:98</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a86b94cfa47729bef2e04dce1a9086074"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074">oboe::AudioStreamBuilder::openStream</a></div><div class="ttdeci">Result openStream(AudioStream **stream)</div></div>
<div class="ttc" id="namespaceoboe_html_a92afc593e856571aacbfd02e57075df6"><div class="ttname"><a href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">oboe::AudioFormat</a></div><div class="ttdeci">AudioFormat</div><div class="ttdef"><b>Definition:</b> Definitions.h:94</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_aacb66f530bfc6f545911b5e169774567"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#aacb66f530bfc6f545911b5e169774567">oboe::AudioStreamBuilder::setErrorCallback</a></div><div class="ttdeci">AudioStreamBuilder * setErrorCallback(oboe::AudioStreamErrorCallback *errorCallback)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:344</div></div>
<div class="ttc" id="namespaceoboe_html_a486512e787b609c80ba4436f23929af1"><div class="ttname"><a href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">oboe::Result</a></div><div class="ttdeci">Result</div><div class="ttdef"><b>Definition:</b> Definitions.h:131</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a3e991742acbbfb6fe5ebcf592c478654"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654">oboe::AudioStreamBuilder::setSharingMode</a></div><div class="ttdeci">AudioStreamBuilder * setSharingMode(SharingMode sharingMode)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:179</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a3e991742acbbfb6fe5ebcf592c478654"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654">oboe::AudioStreamBuilder::setSharingMode</a></div><div class="ttdeci">AudioStreamBuilder * setSharingMode(SharingMode sharingMode)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:188</div></div>
<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:31</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_aa07ea100fcb107d9f7913f206c2214f4"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#aa07ea100fcb107d9f7913f206c2214f4">oboe::AudioStreamBuilder::willUseAAudio</a></div><div class="ttdeci">bool willUseAAudio() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:375</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_aa07ea100fcb107d9f7913f206c2214f4"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#aa07ea100fcb107d9f7913f206c2214f4">oboe::AudioStreamBuilder::willUseAAudio</a></div><div class="ttdeci">bool willUseAAudio() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:424</div></div>
<div class="ttc" id="namespaceoboe_html_a82f3720eba7654aceb7282be36f9ff1d"><div class="ttname"><a href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d">oboe::SampleRateConversionQuality</a></div><div class="ttdeci">SampleRateConversionQuality</div><div class="ttdef"><b>Definition:</b> Definitions.h:235</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a1e5d4f5b30c4cc36f81ffd858cc00589"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">oboe::AudioStreamBase::mInputPreset</a></div><div class="ttdeci">InputPreset mInputPreset</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:187</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_ae3f72318212dd9977d7fa0ced92c91f4"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">oboe::AudioStreamBase::mStreamCallback</a></div><div class="ttdeci">AudioStreamCallback * mStreamCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:152</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a1e5d4f5b30c4cc36f81ffd858cc00589"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">oboe::AudioStreamBase::mInputPreset</a></div><div class="ttdeci">InputPreset mInputPreset</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:221</div></div>
<div class="ttc" id="namespaceoboe_html_af2147500089212955498a08ef2edb5ae"><div class="ttname"><a href="namespaceoboe.html#af2147500089212955498a08ef2edb5ae">oboe::Direction</a></div><div class="ttdeci">Direction</div><div class="ttdef"><b>Definition:</b> Definitions.h:78</div></div>
<div class="ttc" id="namespaceoboe_html_a8330247b25429953a08354f41834d520"><div class="ttname"><a href="namespaceoboe.html#a8330247b25429953a08354f41834d520">oboe::SharingMode</a></div><div class="ttdeci">SharingMode</div><div class="ttdef"><b>Definition:</b> Definitions.h:167</div></div>
<div class="ttc" id="namespaceoboe_html_a4477ed232b02e2694d9309baf55a8f06"><div class="ttname"><a href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06">oboe::InputPreset</a></div><div class="ttdeci">InputPreset</div><div class="ttdef"><b>Definition:</b> Definitions.h:372</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a075d10291e1f998d90c2f73ef767b5a7"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7">oboe::AudioStreamBuilder::setChannelCount</a></div><div class="ttdeci">AudioStreamBuilder * setChannelCount(int channelCount)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:44</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a698cefa9af73bc97c020c004821fccbd"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">oboe::AudioStreamBuilder::setCallback</a></div><div class="ttdeci">AudioStreamBuilder * setCallback(AudioStreamCallback *streamCallback)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:325</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a3962eb94420ad0ecea70029236001899"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">oboe::AudioStreamBase::mFramesPerCallback</a></div><div class="ttdeci">int32_t mFramesPerCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:154</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a7ec5f427cd6fe55cb1ce536ff0cbb4d2"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a7ec5f427cd6fe55cb1ce536ff0cbb4d2">oboe::AudioStreamBuilder::setFormatConversionAllowed</a></div><div class="ttdeci">AudioStreamBuilder * setFormatConversionAllowed(bool allowed)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:351</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_ac9d41811c297fd28bc61833f640bb8d0"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#ac9d41811c297fd28bc61833f640bb8d0">oboe::AudioStreamBuilder::getAudioApi</a></div><div class="ttdeci">AudioApi getAudioApi() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:132</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a075d10291e1f998d90c2f73ef767b5a7"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7">oboe::AudioStreamBuilder::setChannelCount</a></div><div class="ttdeci">AudioStreamBuilder * setChannelCount(int channelCount)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:46</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a698cefa9af73bc97c020c004821fccbd"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">oboe::AudioStreamBuilder::setCallback</a></div><div class="ttdeci">AudioStreamBuilder * setCallback(AudioStreamCallback *streamCallback)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:372</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_acad307720e0f370267b4e2f9a626ae70"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#acad307720e0f370267b4e2f9a626ae70">oboe::AudioStreamBuilder::setDataCallback</a></div><div class="ttdeci">AudioStreamBuilder * setDataCallback(oboe::AudioStreamDataCallback *dataCallback)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:324</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_a3962eb94420ad0ecea70029236001899"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">oboe::AudioStreamBase::mFramesPerCallback</a></div><div class="ttdeci">int32_t mFramesPerCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:188</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_a7ec5f427cd6fe55cb1ce536ff0cbb4d2"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#a7ec5f427cd6fe55cb1ce536ff0cbb4d2">oboe::AudioStreamBuilder::setFormatConversionAllowed</a></div><div class="ttdeci">AudioStreamBuilder * setFormatConversionAllowed(bool allowed)</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:400</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_builder_html_ac9d41811c297fd28bc61833f640bb8d0"><div class="ttname"><a href="classoboe_1_1_audio_stream_builder.html#ac9d41811c297fd28bc61833f640bb8d0">oboe::AudioStreamBuilder::getAudioApi</a></div><div class="ttdeci">AudioApi getAudioApi() const</div><div class="ttdef"><b>Definition:</b> AudioStreamBuilder.h:141</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_base_html_adc0c8cc54adb6d3350c62b8a74b9c57b"><div class="ttname"><a href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">oboe::AudioStreamBase::mErrorCallback</a></div><div class="ttdeci">AudioStreamErrorCallback * mErrorCallback</div><div class="ttdef"><b>Definition:</b> AudioStreamBase.h:185</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/_audio_stream_callback_8h_source.html b/docs/reference/_audio_stream_callback_8h_source.html
index bb616bd..cb0e798 100644
--- a/docs/reference/_audio_stream_callback_8h_source.html
+++ b/docs/reference/_audio_stream_callback_8h_source.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -71,14 +71,17 @@
<div class="title">AudioStreamCallback.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (C) 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_STREAM_CALLBACK_H</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_STREAM_CALLBACK_H</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "oboe/Definitions.h"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">class </span>AudioStream;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_callback.html"> 33</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">virtual</span> ~<a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> <a class="code" href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady</a>(</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream,</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordtype">void</span> *audioData,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  int32_t numFrames) = 0;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_callback.html#a77ceb641f941164d7b4d4c51c9a888b9"> 103</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream_callback.html#a77ceb641f941164d7b4d4c51c9a888b9">onErrorBeforeClose</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>* <span class="comment">/* oboeStream */</span>, <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <span class="comment">/* error */</span>) {}</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_callback.html#a57a1b21efc764e8bbf8d92008a993bfd"> 117</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream_callback.html#a57a1b21efc764e8bbf8d92008a993bfd">onErrorAfterClose</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>* <span class="comment">/* oboeStream */</span>, <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <span class="comment">/* error */</span>) {}</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> };</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor">#endif //OBOE_STREAM_CALLBACK_H</span></div><div class="ttc" id="classoboe_1_1_audio_stream_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:33</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (C) 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_STREAM_CALLBACK_H</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_STREAM_CALLBACK_H</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "oboe/Definitions.h"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">class </span>AudioStream;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_data_callback.html"> 34</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">virtual</span> ~<a class="code" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> <a class="code" href="classoboe_1_1_audio_stream_data_callback.html#ad8a3a9f609df5fd3a5d885cbe1b2204d">onAudioReady</a>(</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *audioStream,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordtype">void</span> *audioData,</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  int32_t numFrames) = 0;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> };</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_error_callback.html"> 97</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">virtual</span> ~<a class="code" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3"> 127</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">onError</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>* <span class="comment">/* audioStream */</span>, <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <span class="comment">/* error */</span>) {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0"> 147</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0">onErrorBeforeClose</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>* <span class="comment">/* audioStream */</span>, <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <span class="comment">/* error */</span>) {}</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe"> 163</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe">onErrorAfterClose</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a>* <span class="comment">/* audioStream */</span>, <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <span class="comment">/* error */</span>) {}</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> };</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classoboe_1_1_audio_stream_callback.html"> 181</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> : <span class="keyword">public</span> <a class="code" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a>,</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">public</span> <a class="code" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keyword">virtual</span> ~<a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> };</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor">#endif //OBOE_STREAM_CALLBACK_H</span></div><div class="ttc" id="classoboe_1_1_audio_stream_error_callback_html_a5ad4b8936746ecbb2160a9389b117fc3"><div class="ttname"><a href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">oboe::AudioStreamErrorCallback::onError</a></div><div class="ttdeci">virtual bool onError(AudioStream *, Result)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:127</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_data_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:34</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:181</div></div>
<div class="ttc" id="namespaceoboe_html_af85fc9910a287df6c5df0ed396bb75cd"><div class="ttname"><a href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">oboe::DataCallbackResult</a></div><div class="ttdeci">DataCallbackResult</div><div class="ttdef"><b>Definition:</b> Definitions.h:119</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html_af3a7c44f0254abe6e5e5bb566e2317df"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">oboe::AudioStreamCallback::onAudioReady</a></div><div class="ttdeci">virtual DataCallbackResult onAudioReady(AudioStream *oboeStream, void *audioData, int32_t numFrames)=0</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_error_callback_html_a76bd3ef3e00396e10c21812003654cfe"><div class="ttname"><a href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe">oboe::AudioStreamErrorCallback::onErrorAfterClose</a></div><div class="ttdeci">virtual void onErrorAfterClose(AudioStream *, Result)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:163</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html"><div class="ttname"><a href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:44</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html_a57a1b21efc764e8bbf8d92008a993bfd"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html#a57a1b21efc764e8bbf8d92008a993bfd">oboe::AudioStreamCallback::onErrorAfterClose</a></div><div class="ttdeci">virtual void onErrorAfterClose(AudioStream *, Result)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:117</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html_a77ceb641f941164d7b4d4c51c9a888b9"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html#a77ceb641f941164d7b4d4c51c9a888b9">oboe::AudioStreamCallback::onErrorBeforeClose</a></div><div class="ttdeci">virtual void onErrorBeforeClose(AudioStream *, Result)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:103</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_error_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:97</div></div>
<div class="ttc" id="namespaceoboe_html_a486512e787b609c80ba4436f23929af1"><div class="ttname"><a href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">oboe::Result</a></div><div class="ttdeci">Result</div><div class="ttdef"><b>Definition:</b> Definitions.h:131</div></div>
<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:31</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_error_callback_html_a4eb1e4916b71d8231e97b19898bc9bf0"><div class="ttname"><a href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0">oboe::AudioStreamErrorCallback::onErrorBeforeClose</a></div><div class="ttdeci">virtual void onErrorBeforeClose(AudioStream *, Result)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:147</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_data_callback_html_ad8a3a9f609df5fd3a5d885cbe1b2204d"><div class="ttname"><a href="classoboe_1_1_audio_stream_data_callback.html#ad8a3a9f609df5fd3a5d885cbe1b2204d">oboe::AudioStreamDataCallback::onAudioReady</a></div><div class="ttdeci">virtual DataCallbackResult onAudioReady(AudioStream *audioStream, void *audioData, int32_t numFrames)=0</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/_definitions_8h_source.html b/docs/reference/_definitions_8h_source.html
index 7a1fdcc..d24bd53 100644
--- a/docs/reference/_definitions_8h_source.html
+++ b/docs/reference/_definitions_8h_source.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -71,9 +71,10 @@
<div class="title">Definitions.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (C) 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_DEFINITIONS_H</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_DEFINITIONS_H</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <cstdint></span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <type_traits></span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">// Oboe needs to be able to build on old NDKs so we use hard coded constants.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">// The correctness of these constants is verified in "aaudio/AAudioLoader.cpp".</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905"> 32</a></span>  constexpr int32_t <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a> = 0;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="comment">// TODO: Investigate using std::chrono</span></div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="namespaceoboe.html#aedef0759ae3622b6f0324799bcbdebf0"> 38</a></span> <span class="comment"></span> constexpr int64_t <a class="code" href="namespaceoboe.html#aedef0759ae3622b6f0324799bcbdebf0">kNanosPerMicrosecond</a> = 1000;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a831e887150474c087170679eaca8672b"> 43</a></span>  constexpr int64_t <a class="code" href="namespaceoboe.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a> = <a class="code" href="namespaceoboe.html#aedef0759ae3622b6f0324799bcbdebf0">kNanosPerMicrosecond</a> * 1000;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="namespaceoboe.html#ad1bb9f5626cec20d3a052a8721959873"> 48</a></span>  constexpr int64_t <a class="code" href="namespaceoboe.html#ad1bb9f5626cec20d3a052a8721959873">kMillisPerSecond</a> = 1000;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a5948466b593c4eab65f7025846a39f51"> 53</a></span>  constexpr int64_t <a class="code" href="namespaceoboe.html#a5948466b593c4eab65f7025846a39f51">kNanosPerSecond</a> = <a class="code" href="namespaceoboe.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a> * <a class="code" href="namespaceoboe.html#ad1bb9f5626cec20d3a052a8721959873">kMillisPerSecond</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6"> 58</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">StreamState</a> : int32_t { <span class="comment">// aaudio_stream_state_t</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  Uninitialized = 0, <span class="comment">// AAUDIO_STREAM_STATE_UNINITIALIZED,</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  Unknown = 1, <span class="comment">// AAUDIO_STREAM_STATE_UNKNOWN,</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  Open = 2, <span class="comment">// AAUDIO_STREAM_STATE_OPEN,</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  Starting = 3, <span class="comment">// AAUDIO_STREAM_STATE_STARTING,</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  Started = 4, <span class="comment">// AAUDIO_STREAM_STATE_STARTED,</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  Pausing = 5, <span class="comment">// AAUDIO_STREAM_STATE_PAUSING,</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  Paused = 6, <span class="comment">// AAUDIO_STREAM_STATE_PAUSED,</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  Flushing = 7, <span class="comment">// AAUDIO_STREAM_STATE_FLUSHING,</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  Flushed = 8, <span class="comment">// AAUDIO_STREAM_STATE_FLUSHED,</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  Stopping = 9, <span class="comment">// AAUDIO_STREAM_STATE_STOPPING,</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  Stopped = 10, <span class="comment">// AAUDIO_STREAM_STATE_STOPPED,</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  Closing = 11, <span class="comment">// AAUDIO_STREAM_STATE_CLOSING,</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  Closed = 12, <span class="comment">// AAUDIO_STREAM_STATE_CLOSED,</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  Disconnected = 13, <span class="comment">// AAUDIO_STREAM_STATE_DISCONNECTED,</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  };</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="namespaceoboe.html#af2147500089212955498a08ef2edb5ae"> 78</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5ae">Direction</a> : int32_t { <span class="comment">// aaudio_direction_t</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5aea29c2c02a361c9d7028472e5d92cd4a54">Output</a> = 0, <span class="comment">// AAUDIO_DIRECTION_OUTPUT,</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5aea324118a6721dd6b8a9b9f4e327df2bf5">Input</a> = 1, <span class="comment">// AAUDIO_DIRECTION_INPUT,</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  };</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6"> 94</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> : int32_t { <span class="comment">// aaudio_format_t</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment"></span> <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6a4bbb8f967da6d1a610596d7257179c2b">Invalid</a> = -1, <span class="comment">// AAUDIO_FORMAT_INVALID,</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = 0, <span class="comment">// AAUDIO_FORMAT_UNSPECIFIED,</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6abcd774f891b5f9df7099f3ea75dadf8d">I16</a> = 1, <span class="comment">// AAUDIO_FORMAT_PCM_I16,</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6a22ae0e2b89e5e3d477f988cc36d3272b">Float</a> = 2, <span class="comment">// AAUDIO_FORMAT_PCM_FLOAT,</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  };</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd"> 119</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> : int32_t { <span class="comment">// aaudio_data_callback_result_t</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="comment">// Indicates to the caller that the callbacks should continue.</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  Continue = 0, <span class="comment">// AAUDIO_CALLBACK_RESULT_CONTINUE,</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="comment">// Indicates to the caller that the callbacks should stop immediately.</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  Stop = 1, <span class="comment">// AAUDIO_CALLBACK_RESULT_STOP,</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  };</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1"> 131</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> : int32_t { <span class="comment">// aaudio_result_t</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  OK = 0, <span class="comment">// AAUDIO_OK</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  ErrorBase = -900, <span class="comment">// AAUDIO_ERROR_BASE,</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  ErrorDisconnected = -899, <span class="comment">// AAUDIO_ERROR_DISCONNECTED,</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  ErrorIllegalArgument = -898, <span class="comment">// AAUDIO_ERROR_ILLEGAL_ARGUMENT,</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  ErrorInternal = -896, <span class="comment">// AAUDIO_ERROR_INTERNAL,</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  ErrorInvalidState = -895, <span class="comment">// AAUDIO_ERROR_INVALID_STATE,</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  ErrorInvalidHandle = -892, <span class="comment">// AAUDIO_ERROR_INVALID_HANDLE,</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  ErrorUnimplemented = -890, <span class="comment">// AAUDIO_ERROR_UNIMPLEMENTED,</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  ErrorUnavailable = -889, <span class="comment">// AAUDIO_ERROR_UNAVAILABLE,</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  ErrorNoFreeHandles = -888, <span class="comment">// AAUDIO_ERROR_NO_FREE_HANDLES,</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  ErrorNoMemory = -887, <span class="comment">// AAUDIO_ERROR_NO_MEMORY,</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  ErrorNull = -886, <span class="comment">// AAUDIO_ERROR_NULL,</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  ErrorTimeout = -885, <span class="comment">// AAUDIO_ERROR_TIMEOUT,</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  ErrorWouldBlock = -884, <span class="comment">// AAUDIO_ERROR_WOULD_BLOCK,</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  ErrorInvalidFormat = -883, <span class="comment">// AAUDIO_ERROR_INVALID_FORMAT,</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  ErrorOutOfRange = -882, <span class="comment">// AAUDIO_ERROR_OUT_OF_RANGE,</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  ErrorNoService = -881, <span class="comment">// AAUDIO_ERROR_NO_SERVICE,</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  ErrorInvalidRate = -880, <span class="comment">// AAUDIO_ERROR_INVALID_RATE,</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="comment">// Reserved for future AAudio result types</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  Reserved1,</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  Reserved2,</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  Reserved3,</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  Reserved4,</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  Reserved5,</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  Reserved6,</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  Reserved7,</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  Reserved8,</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  Reserved9,</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  Reserved10,</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  ErrorClosed,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  };</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a8330247b25429953a08354f41834d520"> 167</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520">SharingMode</a> : int32_t { <span class="comment">// aaudio_sharing_mode_t</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520a2ef50b4c466304dc6ac77bac8a779971">Exclusive</a> = 0, <span class="comment">// AAUDIO_SHARING_MODE_EXCLUSIVE,</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520aa6156ea9d66fef24e87e841fbabf7cca">Shared</a> = 1, <span class="comment">// AAUDIO_SHARING_MODE_SHARED,</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  };</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184"> 192</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184">PerformanceMode</a> : int32_t { <span class="comment">// aaudio_performance_mode_t</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a> = 10, <span class="comment">// AAUDIO_PERFORMANCE_MODE_NONE,</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <a class="code" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184abbad080463ed11f9d77797c04aa1e5b1">PowerSaving</a> = 11, <span class="comment">// AAUDIO_PERFORMANCE_MODE_POWER_SAVING,</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <a class="code" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184a611907b5ab1865515c35357efa41a9b9">LowLatency</a> = 12, <span class="comment">// AAUDIO_PERFORMANCE_MODE_LOW_LATENCY</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  };</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6"> 213</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> : int32_t {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>,</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b">OpenSLES</a>,</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AAudio</a></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  };</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d"> 235</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d">SampleRateConversionQuality</a> : int32_t {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a>,</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1da90fd7fdf6f41406a75e5265b9583bb4e">Fastest</a>,</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  Low,</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  Medium,</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  High,</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1da68ef004de6166492c1d668eb8efe09bd">Best</a>,</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  };</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0"> 263</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">Usage</a> : int32_t { <span class="comment">// aaudio_usage_t</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="comment"></span> <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a3b563524fdb17b4a86590470d40bef74">Media</a> = 1, <span class="comment">// AAUDIO_USAGE_MEDIA</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a1862e72c9730c448fbec6f61a5d8234d">VoiceCommunication</a> = 2, <span class="comment">// AAUDIO_USAGE_VOICE_COMMUNICATION</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a404f62633744bf4da0c6a27a2b78ce74">VoiceCommunicationSignalling</a> = 3, <span class="comment">// AAUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a46c4c4d980dfe025ae5b35aa0011dde4">Alarm</a> = 4, <span class="comment">// AAUDIO_USAGE_ALARM</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a96d008db67fc0b5551a926842bbb6a71">Notification</a> = 5, <span class="comment">// AAUDIO_USAGE_NOTIFICATION</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a4e7a4b08274d472394b740a20d3bbdaf">NotificationRingtone</a> = 6, <span class="comment">// AAUDIO_USAGE_NOTIFICATION_RINGTONE</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a089240b5380dbd12f1eac0ec258a3b2f">NotificationEvent</a> = 10, <span class="comment">// AAUDIO_USAGE_NOTIFICATION_EVENT</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a639ffd54516c1a84a288a363c9469df8">AssistanceAccessibility</a> = 11, <span class="comment">// AAUDIO_USAGE_ASSISTANCE_ACCESSIBILITY</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0ade058a1314f9a8504593259ff4f21a1e">AssistanceNavigationGuidance</a> = 12, <span class="comment">// AAUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a1ce57a0572748beebfc0c664ca1077e7">AssistanceSonification</a> = 13, <span class="comment">// AAUDIO_USAGE_ASSISTANCE_SONIFICATION</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a63d72051e901c069f8aa1b32aa0c43bb">Game</a> = 14, <span class="comment">// AAUDIO_USAGE_GAME</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a9b1363da9503dbd4142c0274a88e8d4b">Assistant</a> = 16, <span class="comment">// AAUDIO_USAGE_ASSISTANT</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  };</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b"> 339</a></span>  <span class="keyword">enum</span> <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">ContentType</a> : int32_t { <span class="comment">// aaudio_content_type_t</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba3dc48a4b4619aa4edd1da7b937b4dcd1"> 344</a></span>  <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba3dc48a4b4619aa4edd1da7b937b4dcd1">Speech</a> = 1, <span class="comment">// AAUDIO_CONTENT_TYPE_SPEECH</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604bac156fcc7b29059305cef26f3904d4517"> 349</a></span>  <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604bac156fcc7b29059305cef26f3904d4517">Music</a> = 2, <span class="comment">// AAUDIO_CONTENT_TYPE_MUSIC</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba8b3b366178c2b7b1688bca6cd33758b1"> 354</a></span>  <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba8b3b366178c2b7b1688bca6cd33758b1">Movie</a> = 3, <span class="comment">// AAUDIO_CONTENT_TYPE_MOVIE</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div><div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba0885eef555037e94a7cf39fe683c2799"> 360</a></span>  <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba0885eef555037e94a7cf39fe683c2799">Sonification</a> = 4, <span class="comment">// AAUDIO_CONTENT_TYPE_SONIFICATION</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  };</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06"> 372</a></span>  <span class="keyword">enum</span> <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06">InputPreset</a> : int32_t { <span class="comment">// aaudio_input_preset_t</span></div><div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a0ba6f369e7f8a700c14afe2992290544"> 376</a></span> <span class="comment"></span> <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a0ba6f369e7f8a700c14afe2992290544">Generic</a> = 1, <span class="comment">// AAUDIO_INPUT_PRESET_GENERIC</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a6e8ef178769235d18b44fe2bb5ab33fe"> 381</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a6e8ef178769235d18b44fe2bb5ab33fe">Camcorder</a> = 5, <span class="comment">// AAUDIO_INPUT_PRESET_CAMCORDER</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div><div class="line"><a name="l00386"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06af6e440b4e9edf49afe18aa4be77be6fc"> 386</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06af6e440b4e9edf49afe18aa4be77be6fc">VoiceRecognition</a> = 6, <span class="comment">// AAUDIO_INPUT_PRESET_VOICE_RECOGNITION</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00391"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a1862e72c9730c448fbec6f61a5d8234d"> 391</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a1862e72c9730c448fbec6f61a5d8234d">VoiceCommunication</a> = 7, <span class="comment">// AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div><div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06acad9424158aefae0af7975901b11d85f"> 398</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06acad9424158aefae0af7975901b11d85f">Unprocessed</a> = 9, <span class="comment">// AAUDIO_INPUT_PRESET_UNPROCESSED</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06ad19edec0a23e435c774bf3bbcf1d999c"> 405</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06ad19edec0a23e435c774bf3bbcf1d999c">VoicePerformance</a> = 10, <span class="comment">// AAUDIO_INPUT_PRESET_VOICE_PERFORMANCE</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  };</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf"> 414</a></span>  <span class="keyword">enum</span> <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> {</div><div class="line"><a name="l00420"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f"> 420</a></span>  <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a> = -1, <span class="comment">// AAUDIO_SESSION_ID_NONE</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00429"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123"> 429</a></span>  <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">Allocate</a> = 0, <span class="comment">// AAUDIO_SESSION_ID_ALLOCATE</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  };</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> </div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029"> 442</a></span>  <span class="keyword">enum</span> <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029">ChannelCount</a> : int32_t {</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76"> 446</a></span>  <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>,</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div><div class="line"><a name="l00451"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79"> 451</a></span>  <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">Mono</a> = 1,</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div><div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba"> 456</a></span>  <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">Stereo</a> = 2,</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  };</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00477"></a><span class="lineno"><a class="line" href="classoboe_1_1_default_stream_values.html"> 477</a></span>  <span class="keyword">class </span><a class="code" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a> {</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div><div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1"> 482</a></span>  <span class="keyword">static</span> int32_t <a class="code" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a>;</div><div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="classoboe_1_1_default_stream_values.html#ab5ea5576699cebc56193f5c297d3e300"> 484</a></span>  <span class="keyword">static</span> int32_t <a class="code" href="classoboe_1_1_default_stream_values.html#ab5ea5576699cebc56193f5c297d3e300">FramesPerBurst</a>;</div><div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="classoboe_1_1_default_stream_values.html#ad5dce538d5963c81bf58350ab730962d"> 486</a></span>  <span class="keyword">static</span> int32_t <a class="code" href="classoboe_1_1_default_stream_values.html#ad5dce538d5963c81bf58350ab730962d">ChannelCount</a>;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  };</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00493"></a><span class="lineno"><a class="line" href="structoboe_1_1_frame_timestamp.html"> 493</a></span>  <span class="keyword">struct </span><a class="code" href="structoboe_1_1_frame_timestamp.html">FrameTimestamp</a> {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  int64_t position; <span class="comment">// in frames</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  int64_t timestamp; <span class="comment">// in nanoseconds</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  };</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor">#endif // OBOE_DEFINITIONS_H</span></div><div class="ttc" id="namespaceoboe_html_aedef0759ae3622b6f0324799bcbdebf0"><div class="ttname"><a href="namespaceoboe.html#aedef0759ae3622b6f0324799bcbdebf0">oboe::kNanosPerMicrosecond</a></div><div class="ttdeci">constexpr int64_t kNanosPerMicrosecond</div><div class="ttdef"><b>Definition:</b> Definitions.h:38</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (C) 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_DEFINITIONS_H</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_DEFINITIONS_H</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <cstdint></span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <type_traits></span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">// Oboe needs to be able to build on old NDKs so we use hard coded constants.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">// The correctness of these constants is verified in "aaudio/AAudioLoader.cpp".</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905"> 32</a></span>  constexpr int32_t <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a> = 0;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="comment">// TODO: Investigate using std::chrono</span></div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="namespaceoboe.html#aedef0759ae3622b6f0324799bcbdebf0"> 38</a></span> <span class="comment"></span> constexpr int64_t <a class="code" href="namespaceoboe.html#aedef0759ae3622b6f0324799bcbdebf0">kNanosPerMicrosecond</a> = 1000;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a831e887150474c087170679eaca8672b"> 43</a></span>  constexpr int64_t <a class="code" href="namespaceoboe.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a> = <a class="code" href="namespaceoboe.html#aedef0759ae3622b6f0324799bcbdebf0">kNanosPerMicrosecond</a> * 1000;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="namespaceoboe.html#ad1bb9f5626cec20d3a052a8721959873"> 48</a></span>  constexpr int64_t <a class="code" href="namespaceoboe.html#ad1bb9f5626cec20d3a052a8721959873">kMillisPerSecond</a> = 1000;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a5948466b593c4eab65f7025846a39f51"> 53</a></span>  constexpr int64_t <a class="code" href="namespaceoboe.html#a5948466b593c4eab65f7025846a39f51">kNanosPerSecond</a> = <a class="code" href="namespaceoboe.html#a831e887150474c087170679eaca8672b">kNanosPerMillisecond</a> * <a class="code" href="namespaceoboe.html#ad1bb9f5626cec20d3a052a8721959873">kMillisPerSecond</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6"> 58</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a89fa2ce046723764618c29db737917f6">StreamState</a> : int32_t { <span class="comment">// aaudio_stream_state_t</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  Uninitialized = 0, <span class="comment">// AAUDIO_STREAM_STATE_UNINITIALIZED,</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  Unknown = 1, <span class="comment">// AAUDIO_STREAM_STATE_UNKNOWN,</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  Open = 2, <span class="comment">// AAUDIO_STREAM_STATE_OPEN,</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  Starting = 3, <span class="comment">// AAUDIO_STREAM_STATE_STARTING,</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  Started = 4, <span class="comment">// AAUDIO_STREAM_STATE_STARTED,</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  Pausing = 5, <span class="comment">// AAUDIO_STREAM_STATE_PAUSING,</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  Paused = 6, <span class="comment">// AAUDIO_STREAM_STATE_PAUSED,</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  Flushing = 7, <span class="comment">// AAUDIO_STREAM_STATE_FLUSHING,</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  Flushed = 8, <span class="comment">// AAUDIO_STREAM_STATE_FLUSHED,</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  Stopping = 9, <span class="comment">// AAUDIO_STREAM_STATE_STOPPING,</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  Stopped = 10, <span class="comment">// AAUDIO_STREAM_STATE_STOPPED,</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  Closing = 11, <span class="comment">// AAUDIO_STREAM_STATE_CLOSING,</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  Closed = 12, <span class="comment">// AAUDIO_STREAM_STATE_CLOSED,</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  Disconnected = 13, <span class="comment">// AAUDIO_STREAM_STATE_DISCONNECTED,</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  };</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="namespaceoboe.html#af2147500089212955498a08ef2edb5ae"> 78</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5ae">Direction</a> : int32_t { <span class="comment">// aaudio_direction_t</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5aea29c2c02a361c9d7028472e5d92cd4a54">Output</a> = 0, <span class="comment">// AAUDIO_DIRECTION_OUTPUT,</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespaceoboe.html#af2147500089212955498a08ef2edb5aea324118a6721dd6b8a9b9f4e327df2bf5">Input</a> = 1, <span class="comment">// AAUDIO_DIRECTION_INPUT,</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  };</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6"> 94</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> : int32_t { <span class="comment">// aaudio_format_t</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment"></span> <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6a4bbb8f967da6d1a610596d7257179c2b">Invalid</a> = -1, <span class="comment">// AAUDIO_FORMAT_INVALID,</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = 0, <span class="comment">// AAUDIO_FORMAT_UNSPECIFIED,</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6abcd774f891b5f9df7099f3ea75dadf8d">I16</a> = 1, <span class="comment">// AAUDIO_FORMAT_PCM_I16,</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6a22ae0e2b89e5e3d477f988cc36d3272b">Float</a> = 2, <span class="comment">// AAUDIO_FORMAT_PCM_FLOAT,</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  };</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd"> 119</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> : int32_t { <span class="comment">// aaudio_data_callback_result_t</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="comment">// Indicates to the caller that the callbacks should continue.</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  Continue = 0, <span class="comment">// AAUDIO_CALLBACK_RESULT_CONTINUE,</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="comment">// Indicates to the caller that the callbacks should stop immediately.</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  Stop = 1, <span class="comment">// AAUDIO_CALLBACK_RESULT_STOP,</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  };</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1"> 131</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> : int32_t { <span class="comment">// aaudio_result_t</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  OK = 0, <span class="comment">// AAUDIO_OK</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  ErrorBase = -900, <span class="comment">// AAUDIO_ERROR_BASE,</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  ErrorDisconnected = -899, <span class="comment">// AAUDIO_ERROR_DISCONNECTED,</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  ErrorIllegalArgument = -898, <span class="comment">// AAUDIO_ERROR_ILLEGAL_ARGUMENT,</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  ErrorInternal = -896, <span class="comment">// AAUDIO_ERROR_INTERNAL,</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  ErrorInvalidState = -895, <span class="comment">// AAUDIO_ERROR_INVALID_STATE,</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  ErrorInvalidHandle = -892, <span class="comment">// AAUDIO_ERROR_INVALID_HANDLE,</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  ErrorUnimplemented = -890, <span class="comment">// AAUDIO_ERROR_UNIMPLEMENTED,</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  ErrorUnavailable = -889, <span class="comment">// AAUDIO_ERROR_UNAVAILABLE,</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  ErrorNoFreeHandles = -888, <span class="comment">// AAUDIO_ERROR_NO_FREE_HANDLES,</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  ErrorNoMemory = -887, <span class="comment">// AAUDIO_ERROR_NO_MEMORY,</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  ErrorNull = -886, <span class="comment">// AAUDIO_ERROR_NULL,</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  ErrorTimeout = -885, <span class="comment">// AAUDIO_ERROR_TIMEOUT,</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  ErrorWouldBlock = -884, <span class="comment">// AAUDIO_ERROR_WOULD_BLOCK,</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  ErrorInvalidFormat = -883, <span class="comment">// AAUDIO_ERROR_INVALID_FORMAT,</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  ErrorOutOfRange = -882, <span class="comment">// AAUDIO_ERROR_OUT_OF_RANGE,</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  ErrorNoService = -881, <span class="comment">// AAUDIO_ERROR_NO_SERVICE,</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  ErrorInvalidRate = -880, <span class="comment">// AAUDIO_ERROR_INVALID_RATE,</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="comment">// Reserved for future AAudio result types</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  Reserved1,</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  Reserved2,</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  Reserved3,</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  Reserved4,</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  Reserved5,</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  Reserved6,</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  Reserved7,</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  Reserved8,</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  Reserved9,</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  Reserved10,</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  ErrorClosed,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  };</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a8330247b25429953a08354f41834d520"> 167</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520">SharingMode</a> : int32_t { <span class="comment">// aaudio_sharing_mode_t</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520a2ef50b4c466304dc6ac77bac8a779971">Exclusive</a> = 0, <span class="comment">// AAUDIO_SHARING_MODE_EXCLUSIVE,</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="namespaceoboe.html#a8330247b25429953a08354f41834d520aa6156ea9d66fef24e87e841fbabf7cca">Shared</a> = 1, <span class="comment">// AAUDIO_SHARING_MODE_SHARED,</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  };</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184"> 192</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184">PerformanceMode</a> : int32_t { <span class="comment">// aaudio_performance_mode_t</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a> = 10, <span class="comment">// AAUDIO_PERFORMANCE_MODE_NONE,</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <a class="code" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184abbad080463ed11f9d77797c04aa1e5b1">PowerSaving</a> = 11, <span class="comment">// AAUDIO_PERFORMANCE_MODE_POWER_SAVING,</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <a class="code" href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184a611907b5ab1865515c35357efa41a9b9">LowLatency</a> = 12, <span class="comment">// AAUDIO_PERFORMANCE_MODE_LOW_LATENCY</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  };</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6"> 213</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">AudioApi</a> : int32_t {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>,</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b">OpenSLES</a>,</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <a class="code" href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">AAudio</a></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  };</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d"> 235</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d">SampleRateConversionQuality</a> : int32_t {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a>,</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1da90fd7fdf6f41406a75e5265b9583bb4e">Fastest</a>,</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  Low,</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  Medium,</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  High,</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <a class="code" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1da68ef004de6166492c1d668eb8efe09bd">Best</a>,</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  };</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0"> 263</a></span>  <span class="keyword">enum class</span> <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">Usage</a> : int32_t { <span class="comment">// aaudio_usage_t</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="comment"></span> <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a3b563524fdb17b4a86590470d40bef74">Media</a> = 1, <span class="comment">// AAUDIO_USAGE_MEDIA</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a1862e72c9730c448fbec6f61a5d8234d">VoiceCommunication</a> = 2, <span class="comment">// AAUDIO_USAGE_VOICE_COMMUNICATION</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a404f62633744bf4da0c6a27a2b78ce74">VoiceCommunicationSignalling</a> = 3, <span class="comment">// AAUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a46c4c4d980dfe025ae5b35aa0011dde4">Alarm</a> = 4, <span class="comment">// AAUDIO_USAGE_ALARM</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a96d008db67fc0b5551a926842bbb6a71">Notification</a> = 5, <span class="comment">// AAUDIO_USAGE_NOTIFICATION</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a4e7a4b08274d472394b740a20d3bbdaf">NotificationRingtone</a> = 6, <span class="comment">// AAUDIO_USAGE_NOTIFICATION_RINGTONE</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a089240b5380dbd12f1eac0ec258a3b2f">NotificationEvent</a> = 10, <span class="comment">// AAUDIO_USAGE_NOTIFICATION_EVENT</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a639ffd54516c1a84a288a363c9469df8">AssistanceAccessibility</a> = 11, <span class="comment">// AAUDIO_USAGE_ASSISTANCE_ACCESSIBILITY</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0ade058a1314f9a8504593259ff4f21a1e">AssistanceNavigationGuidance</a> = 12, <span class="comment">// AAUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a1ce57a0572748beebfc0c664ca1077e7">AssistanceSonification</a> = 13, <span class="comment">// AAUDIO_USAGE_ASSISTANCE_SONIFICATION</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a63d72051e901c069f8aa1b32aa0c43bb">Game</a> = 14, <span class="comment">// AAUDIO_USAGE_GAME</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a9b1363da9503dbd4142c0274a88e8d4b">Assistant</a> = 16, <span class="comment">// AAUDIO_USAGE_ASSISTANT</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  };</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b"> 339</a></span>  <span class="keyword">enum</span> <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">ContentType</a> : int32_t { <span class="comment">// aaudio_content_type_t</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba3dc48a4b4619aa4edd1da7b937b4dcd1"> 344</a></span>  <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba3dc48a4b4619aa4edd1da7b937b4dcd1">Speech</a> = 1, <span class="comment">// AAUDIO_CONTENT_TYPE_SPEECH</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604bac156fcc7b29059305cef26f3904d4517"> 349</a></span>  <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604bac156fcc7b29059305cef26f3904d4517">Music</a> = 2, <span class="comment">// AAUDIO_CONTENT_TYPE_MUSIC</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba8b3b366178c2b7b1688bca6cd33758b1"> 354</a></span>  <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba8b3b366178c2b7b1688bca6cd33758b1">Movie</a> = 3, <span class="comment">// AAUDIO_CONTENT_TYPE_MOVIE</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div><div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba0885eef555037e94a7cf39fe683c2799"> 360</a></span>  <a class="code" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba0885eef555037e94a7cf39fe683c2799">Sonification</a> = 4, <span class="comment">// AAUDIO_CONTENT_TYPE_SONIFICATION</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  };</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06"> 372</a></span>  <span class="keyword">enum</span> <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06">InputPreset</a> : int32_t { <span class="comment">// aaudio_input_preset_t</span></div><div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a0ba6f369e7f8a700c14afe2992290544"> 376</a></span> <span class="comment"></span> <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a0ba6f369e7f8a700c14afe2992290544">Generic</a> = 1, <span class="comment">// AAUDIO_INPUT_PRESET_GENERIC</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a6e8ef178769235d18b44fe2bb5ab33fe"> 381</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a6e8ef178769235d18b44fe2bb5ab33fe">Camcorder</a> = 5, <span class="comment">// AAUDIO_INPUT_PRESET_CAMCORDER</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div><div class="line"><a name="l00386"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06af6e440b4e9edf49afe18aa4be77be6fc"> 386</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06af6e440b4e9edf49afe18aa4be77be6fc">VoiceRecognition</a> = 6, <span class="comment">// AAUDIO_INPUT_PRESET_VOICE_RECOGNITION</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00391"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a1862e72c9730c448fbec6f61a5d8234d"> 391</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a1862e72c9730c448fbec6f61a5d8234d">VoiceCommunication</a> = 7, <span class="comment">// AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div><div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06acad9424158aefae0af7975901b11d85f"> 398</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06acad9424158aefae0af7975901b11d85f">Unprocessed</a> = 9, <span class="comment">// AAUDIO_INPUT_PRESET_UNPROCESSED</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06ad19edec0a23e435c774bf3bbcf1d999c"> 405</a></span>  <a class="code" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06ad19edec0a23e435c774bf3bbcf1d999c">VoicePerformance</a> = 10, <span class="comment">// AAUDIO_INPUT_PRESET_VOICE_PERFORMANCE</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  };</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf"> 414</a></span>  <span class="keyword">enum</span> <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf">SessionId</a> {</div><div class="line"><a name="l00420"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f"> 420</a></span>  <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">None</a> = -1, <span class="comment">// AAUDIO_SESSION_ID_NONE</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00429"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123"> 429</a></span>  <a class="code" href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">Allocate</a> = 0, <span class="comment">// AAUDIO_SESSION_ID_ALLOCATE</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  };</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> </div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029"> 442</a></span>  <span class="keyword">enum</span> <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029">ChannelCount</a> : int32_t {</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76"> 446</a></span>  <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a946257a568f77c12df4fc4c49125da76">Unspecified</a> = <a class="code" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a>,</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div><div class="line"><a name="l00451"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79"> 451</a></span>  <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a8be103218645e121b51078620f452c79">Mono</a> = 1,</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div><div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba"> 456</a></span>  <a class="code" href="namespaceoboe.html#a522e6806948369987639a0d1df03c029a534e646333ca7568317b171ea96b89ba">Stereo</a> = 2,</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  };</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00477"></a><span class="lineno"><a class="line" href="classoboe_1_1_default_stream_values.html"> 477</a></span>  <span class="keyword">class </span><a class="code" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a> {</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div><div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1"> 482</a></span>  <span class="keyword">static</span> int32_t <a class="code" href="classoboe_1_1_default_stream_values.html#a46a5d9a653f2153f618cadcab764e1b1">SampleRate</a>;</div><div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="classoboe_1_1_default_stream_values.html#ab5ea5576699cebc56193f5c297d3e300"> 484</a></span>  <span class="keyword">static</span> int32_t <a class="code" href="classoboe_1_1_default_stream_values.html#ab5ea5576699cebc56193f5c297d3e300">FramesPerBurst</a>;</div><div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="classoboe_1_1_default_stream_values.html#ad5dce538d5963c81bf58350ab730962d"> 486</a></span>  <span class="keyword">static</span> int32_t <a class="code" href="classoboe_1_1_default_stream_values.html#ad5dce538d5963c81bf58350ab730962d">ChannelCount</a>;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  };</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00493"></a><span class="lineno"><a class="line" href="structoboe_1_1_frame_timestamp.html"> 493</a></span>  <span class="keyword">struct </span><a class="code" href="structoboe_1_1_frame_timestamp.html">FrameTimestamp</a> {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  int64_t position; <span class="comment">// in frames</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  int64_t timestamp; <span class="comment">// in nanoseconds</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  };</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div><div class="line"><a name="l00498"></a><span class="lineno"><a class="line" href="classoboe_1_1_oboe_globals.html"> 498</a></span>  <span class="keyword">class </span><a class="code" href="classoboe_1_1_oboe_globals.html">OboeGlobals</a> {</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> </div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> areWorkaroundsEnabled() {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordflow">return</span> mWorkaroundsEnabled;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00510"></a><span class="lineno"><a class="line" href="classoboe_1_1_oboe_globals.html#af2b8af764c5a5e6fc007b7725117303b"> 510</a></span>  <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_oboe_globals.html#af2b8af764c5a5e6fc007b7725117303b">setWorkaroundsEnabled</a>(<span class="keywordtype">bool</span> enabled) {</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  mWorkaroundsEnabled = enabled;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> mWorkaroundsEnabled;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  };</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="preprocessor">#endif // OBOE_DEFINITIONS_H</span></div><div class="ttc" id="namespaceoboe_html_aedef0759ae3622b6f0324799bcbdebf0"><div class="ttname"><a href="namespaceoboe.html#aedef0759ae3622b6f0324799bcbdebf0">oboe::kNanosPerMicrosecond</a></div><div class="ttdeci">constexpr int64_t kNanosPerMicrosecond</div><div class="ttdef"><b>Definition:</b> Definitions.h:38</div></div>
<div class="ttc" id="namespaceoboe_html_a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b"><div class="ttname"><a href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a99780b1e8d754eb42abed0ca5253e55b">oboe::AudioApi::AAudio</a></div></div>
<div class="ttc" id="namespaceoboe_html_af2147500089212955498a08ef2edb5aea29c2c02a361c9d7028472e5d92cd4a54"><div class="ttname"><a href="namespaceoboe.html#af2147500089212955498a08ef2edb5aea29c2c02a361c9d7028472e5d92cd4a54">oboe::Direction::Output</a></div></div>
+<div class="ttc" id="classoboe_1_1_oboe_globals_html"><div class="ttname"><a href="classoboe_1_1_oboe_globals.html">oboe::OboeGlobals</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:498</div></div>
<div class="ttc" id="namespaceoboe_html_a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123"><div class="ttname"><a href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa8485ca716c8cd4aafee372fd7028c123">oboe::Allocate</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:429</div></div>
<div class="ttc" id="namespaceoboe_html_a4477ed232b02e2694d9309baf55a8f06af6e440b4e9edf49afe18aa4be77be6fc"><div class="ttname"><a href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06af6e440b4e9edf49afe18aa4be77be6fc">oboe::VoiceRecognition</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:386</div></div>
<div class="ttc" id="namespaceoboe_html_a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f"><div class="ttname"><a href="namespaceoboe.html#a5752250c10e96179e3618d7f72937eafa58c518b26e83ea48393a76f6c9ecb51f">oboe::None</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:420</div></div>
@@ -90,6 +91,7 @@
<div class="ttc" id="namespaceoboe_html_a4477ed232b02e2694d9309baf55a8f06a0ba6f369e7f8a700c14afe2992290544"><div class="ttname"><a href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a0ba6f369e7f8a700c14afe2992290544">oboe::Generic</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:376</div></div>
<div class="ttc" id="namespaceoboe_html_a1068781f3920654b1bfd7ed136468184a611907b5ab1865515c35357efa41a9b9"><div class="ttname"><a href="namespaceoboe.html#a1068781f3920654b1bfd7ed136468184a611907b5ab1865515c35357efa41a9b9">oboe::PerformanceMode::LowLatency</a></div></div>
<div class="ttc" id="namespaceoboe_html_af85fc9910a287df6c5df0ed396bb75cd"><div class="ttname"><a href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">oboe::DataCallbackResult</a></div><div class="ttdeci">DataCallbackResult</div><div class="ttdef"><b>Definition:</b> Definitions.h:119</div></div>
+<div class="ttc" id="classoboe_1_1_oboe_globals_html_af2b8af764c5a5e6fc007b7725117303b"><div class="ttname"><a href="classoboe_1_1_oboe_globals.html#af2b8af764c5a5e6fc007b7725117303b">oboe::OboeGlobals::setWorkaroundsEnabled</a></div><div class="ttdeci">static void setWorkaroundsEnabled(bool enabled)</div><div class="ttdef"><b>Definition:</b> Definitions.h:510</div></div>
<div class="ttc" id="namespaceoboe_html_a92972414867c81d5974cb2ed7abefbf6"><div class="ttname"><a href="namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6">oboe::AudioApi</a></div><div class="ttdeci">AudioApi</div><div class="ttdef"><b>Definition:</b> Definitions.h:213</div></div>
<div class="ttc" id="namespaceoboe_html_a2a3cec6f021c1a324df60273710c604b"><div class="ttname"><a href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">oboe::ContentType</a></div><div class="ttdeci">ContentType</div><div class="ttdef"><b>Definition:</b> Definitions.h:339</div></div>
<div class="ttc" id="classoboe_1_1_default_stream_values_html"><div class="ttname"><a href="classoboe_1_1_default_stream_values.html">oboe::DefaultStreamValues</a></div><div class="ttdef"><b>Definition:</b> Definitions.h:477</div></div>
diff --git a/docs/reference/_latency_tuner_8h_source.html b/docs/reference/_latency_tuner_8h_source.html
index 1b827d7..c9481df 100644
--- a/docs/reference/_latency_tuner_8h_source.html
+++ b/docs/reference/_latency_tuner_8h_source.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -71,13 +71,15 @@
<div class="title">LatencyTuner.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2017 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_LATENCY_TUNER_</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_LATENCY_TUNER_</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <atomic></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <cstdint></span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "oboe/Definitions.h"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "oboe/AudioStream.h"</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classoboe_1_1_latency_tuner.html"> 41</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a> {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">explicit</span> <a class="code" href="classoboe_1_1_latency_tuner.html#a0263b9a55825c0a403653b2b508073ea">LatencyTuner</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> &stream);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">explicit</span> <a class="code" href="classoboe_1_1_latency_tuner.html#a0263b9a55825c0a403653b2b508073ea">LatencyTuner</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> &stream, int32_t maximumBufferSize);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">tune</a>();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_latency_tuner.html#a45c013fd6787ad09d328385d6314c4d4">isAtMaximumBufferSize</a>();</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordtype">void</span> reset();</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keyword">enum class</span> State {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  Idle,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  Active,</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  AtMax,</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  Unsupported</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  } ;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="comment">// arbitrary number of calls to wait before bumping up the latency</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">static</span> constexpr int32_t kIdleCount = 8;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> &mStream;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  State mState = State::Idle;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  int32_t mMaxBufferSize = 0;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  int32_t mPreviousXRuns = 0;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  int32_t mIdleCountDown = 0;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  std::atomic<int32_t> mLatencyTriggerRequests{0}; <span class="comment">// TODO user atomic requester from AAudio</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  std::atomic<int32_t> mLatencyTriggerResponses{0};</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> };</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor">#endif // OBOE_LATENCY_TUNER_</span></div><div class="ttc" id="classoboe_1_1_latency_tuner_html_a6c0142e08dc65eda8f758b4794450867"><div class="ttname"><a href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">oboe::LatencyTuner::requestReset</a></div><div class="ttdeci">void requestReset()</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2017 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_LATENCY_TUNER_</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_LATENCY_TUNER_</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <atomic></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <cstdint></span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "oboe/Definitions.h"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "oboe/AudioStream.h"</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classoboe_1_1_latency_tuner.html"> 41</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a> {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">explicit</span> <a class="code" href="classoboe_1_1_latency_tuner.html#a0263b9a55825c0a403653b2b508073ea">LatencyTuner</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> &stream);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">explicit</span> <a class="code" href="classoboe_1_1_latency_tuner.html#a0263b9a55825c0a403653b2b508073ea">LatencyTuner</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> &stream, int32_t maximumBufferSize);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> <a class="code" href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">tune</a>();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordtype">bool</span> <a class="code" href="classoboe_1_1_latency_tuner.html#a45c013fd6787ad09d328385d6314c4d4">isAtMaximumBufferSize</a>();</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classoboe_1_1_latency_tuner.html#adc96aa53b18a051b6ccdacb838139bf8"> 91</a></span>  <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_latency_tuner.html#adc96aa53b18a051b6ccdacb838139bf8">setMinimumBufferSize</a>(int32_t bufferSize) {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  mMinimumBufferSize = bufferSize;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  int32_t getMinimumBufferSize()<span class="keyword"> const </span>{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span> mMinimumBufferSize;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classoboe_1_1_latency_tuner.html#a2684b30205126c8acd2f75d01cce05db"> 108</a></span>  <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_latency_tuner.html#a2684b30205126c8acd2f75d01cce05db">setBufferSizeIncrement</a>(int32_t sizeIncrement) {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  mBufferSizeIncrement = sizeIncrement;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  int32_t getBufferSizeIncrement()<span class="keyword"> const </span>{</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">return</span> mBufferSizeIncrement;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordtype">void</span> reset();</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">enum class</span> State {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  Idle,</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  Active,</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  AtMax,</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  Unsupported</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  } ;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="comment">// arbitrary number of calls to wait before bumping up the latency</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keyword">static</span> constexpr int32_t kIdleCount = 8;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">static</span> constexpr int32_t kDefaultNumBursts = 2;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  AudioStream &mStream;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  State mState = State::Idle;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  int32_t mMaxBufferSize = 0;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  int32_t mPreviousXRuns = 0;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  int32_t mIdleCountDown = 0;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  int32_t mMinimumBufferSize;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  int32_t mBufferSizeIncrement;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  std::atomic<int32_t> mLatencyTriggerRequests{0}; <span class="comment">// TODO user atomic requester from AAudio</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  std::atomic<int32_t> mLatencyTriggerResponses{0};</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> };</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor">#endif // OBOE_LATENCY_TUNER_</span></div><div class="ttc" id="classoboe_1_1_latency_tuner_html_a2684b30205126c8acd2f75d01cce05db"><div class="ttname"><a href="classoboe_1_1_latency_tuner.html#a2684b30205126c8acd2f75d01cce05db">oboe::LatencyTuner::setBufferSizeIncrement</a></div><div class="ttdeci">void setBufferSizeIncrement(int32_t sizeIncrement)</div><div class="ttdef"><b>Definition:</b> LatencyTuner.h:108</div></div>
+<div class="ttc" id="classoboe_1_1_latency_tuner_html_a6c0142e08dc65eda8f758b4794450867"><div class="ttname"><a href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">oboe::LatencyTuner::requestReset</a></div><div class="ttdeci">void requestReset()</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html"><div class="ttname"><a href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:44</div></div>
<div class="ttc" id="classoboe_1_1_latency_tuner_html_a45c013fd6787ad09d328385d6314c4d4"><div class="ttname"><a href="classoboe_1_1_latency_tuner.html#a45c013fd6787ad09d328385d6314c4d4">oboe::LatencyTuner::isAtMaximumBufferSize</a></div><div class="ttdeci">bool isAtMaximumBufferSize()</div></div>
<div class="ttc" id="classoboe_1_1_latency_tuner_html_a0263b9a55825c0a403653b2b508073ea"><div class="ttname"><a href="classoboe_1_1_latency_tuner.html#a0263b9a55825c0a403653b2b508073ea">oboe::LatencyTuner::LatencyTuner</a></div><div class="ttdeci">LatencyTuner(AudioStream &stream)</div></div>
<div class="ttc" id="classoboe_1_1_latency_tuner_html_ad2be756965e6a9af3114008eda892174"><div class="ttname"><a href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">oboe::LatencyTuner::tune</a></div><div class="ttdeci">Result tune()</div></div>
<div class="ttc" id="namespaceoboe_html_a486512e787b609c80ba4436f23929af1"><div class="ttname"><a href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">oboe::Result</a></div><div class="ttdeci">Result</div><div class="ttdef"><b>Definition:</b> Definitions.h:131</div></div>
<div class="ttc" id="classoboe_1_1_latency_tuner_html"><div class="ttname"><a href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></div><div class="ttdef"><b>Definition:</b> LatencyTuner.h:41</div></div>
+<div class="ttc" id="classoboe_1_1_latency_tuner_html_adc96aa53b18a051b6ccdacb838139bf8"><div class="ttname"><a href="classoboe_1_1_latency_tuner.html#adc96aa53b18a051b6ccdacb838139bf8">oboe::LatencyTuner::setMinimumBufferSize</a></div><div class="ttdeci">void setMinimumBufferSize(int32_t bufferSize)</div><div class="ttdef"><b>Definition:</b> LatencyTuner.h:91</div></div>
<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:31</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/reference/_oboe_8h_source.html b/docs/reference/_oboe_8h_source.html
index 9228bbb..c808909 100644
--- a/docs/reference/_oboe_8h_source.html
+++ b/docs/reference/_oboe_8h_source.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/_result_with_value_8h_source.html b/docs/reference/_result_with_value_8h_source.html
index 0325bb1..c4f798d 100644
--- a/docs/reference/_result_with_value_8h_source.html
+++ b/docs/reference/_result_with_value_8h_source.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/_stabilized_callback_8h_source.html b/docs/reference/_stabilized_callback_8h_source.html
index 719a3b4..695cc28 100644
--- a/docs/reference/_stabilized_callback_8h_source.html
+++ b/docs/reference/_stabilized_callback_8h_source.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -71,17 +71,17 @@
<div class="title">StabilizedCallback.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2018 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_STABILIZEDCALLBACK_H</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_STABILIZEDCALLBACK_H</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <cstdint></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "oboe/AudioStream.h"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classoboe_1_1_stabilized_callback.html"> 25</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_stabilized_callback.html">StabilizedCallback</a> : <span class="keyword">public</span> <a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">explicit</span> <a class="code" href="classoboe_1_1_stabilized_callback.html">StabilizedCallback</a>(<a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *callback);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <a class="code" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <a class="code" href="classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49">onAudioReady</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, <span class="keywordtype">void</span> *audioData, int32_t numFrames) <span class="keyword">override</span>;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10"> 33</a></span>  <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10">onErrorBeforeClose</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> error)<span class="keyword"> override </span>{</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> mCallback-><a class="code" href="classoboe_1_1_audio_stream_callback.html#a77ceb641f941164d7b4d4c51c9a888b9">onErrorBeforeClose</a>(oboeStream, error);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4"> 37</a></span>  <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4">onErrorAfterClose</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> error)<span class="keyword"> override </span>{</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="comment">// Reset all fields now that the stream has been closed</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  mFrameCount = 0;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  mEpochTimeNanos = 0;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  mOpsPerNano = 1;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> mCallback-><a class="code" href="classoboe_1_1_audio_stream_callback.html#a57a1b21efc764e8bbf8d92008a993bfd">onErrorAfterClose</a>(oboeStream, error);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *mCallback = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  int64_t mFrameCount = 0;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  int64_t mEpochTimeNanos = 0;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordtype">double</span> mOpsPerNano = 1;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordtype">void</span> generateLoad(int64_t durationNanos);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> };</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#if defined(__i386__) || defined(__x86_64__)</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#define cpu_relax() asm volatile("rep; nop" ::: "memory");</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#elif defined(__arm__) || defined(__mips__)</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"> #define cpu_relax() asm volatile("":::"memory")</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">#elif defined(__aarch64__)</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor">#define cpu_relax() asm volatile("yield" ::: "memory")</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#error "cpu_relax is not defined for this architecture"</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#endif //OBOE_STABILIZEDCALLBACK_H</span></div><div class="ttc" id="classoboe_1_1_stabilized_callback_html_ad447e12ebf732cf151655c1fbaf58a49"><div class="ttname"><a href="classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49">oboe::StabilizedCallback::onAudioReady</a></div><div class="ttdeci">DataCallbackResult onAudioReady(AudioStream *oboeStream, void *audioData, int32_t numFrames) override</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:33</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2018 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_STABILIZEDCALLBACK_H</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_STABILIZEDCALLBACK_H</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <cstdint></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "oboe/AudioStream.h"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classoboe_1_1_stabilized_callback.html"> 25</a></span> <span class="keyword">class </span><a class="code" href="classoboe_1_1_stabilized_callback.html">StabilizedCallback</a> : <span class="keyword">public</span> <a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">explicit</span> <a class="code" href="classoboe_1_1_stabilized_callback.html">StabilizedCallback</a>(<a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *callback);</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <a class="code" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <a class="code" href="classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49">onAudioReady</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, <span class="keywordtype">void</span> *audioData, int32_t numFrames) <span class="keyword">override</span>;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10"> 33</a></span>  <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10">onErrorBeforeClose</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> error)<span class="keyword"> override </span>{</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> mCallback-><a class="code" href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0">onErrorBeforeClose</a>(oboeStream, error);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4"> 37</a></span>  <span class="keywordtype">void</span> <a class="code" href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4">onErrorAfterClose</a>(<a class="code" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, <a class="code" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> error)<span class="keyword"> override </span>{</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="comment">// Reset all fields now that the stream has been closed</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  mFrameCount = 0;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  mEpochTimeNanos = 0;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  mOpsPerNano = 1;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">return</span> mCallback-><a class="code" href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe">onErrorAfterClose</a>(oboeStream, error);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <a class="code" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *mCallback = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  int64_t mFrameCount = 0;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  int64_t mEpochTimeNanos = 0;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordtype">double</span> mOpsPerNano = 1;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordtype">void</span> generateLoad(int64_t durationNanos);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> };</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#if defined(__i386__) || defined(__x86_64__)</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#define cpu_relax() asm volatile("rep; nop" ::: "memory");</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#elif defined(__arm__) || defined(__mips__)</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"> #define cpu_relax() asm volatile("":::"memory")</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">#elif defined(__aarch64__)</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor">#define cpu_relax() asm volatile("yield" ::: "memory")</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#error "cpu_relax is not defined for this architecture"</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#endif //OBOE_STABILIZEDCALLBACK_H</span></div><div class="ttc" id="classoboe_1_1_stabilized_callback_html_ad447e12ebf732cf151655c1fbaf58a49"><div class="ttname"><a href="classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49">oboe::StabilizedCallback::onAudioReady</a></div><div class="ttdeci">DataCallbackResult onAudioReady(AudioStream *oboeStream, void *audioData, int32_t numFrames) override</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_callback_html"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:181</div></div>
<div class="ttc" id="namespaceoboe_html_af85fc9910a287df6c5df0ed396bb75cd"><div class="ttname"><a href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">oboe::DataCallbackResult</a></div><div class="ttdeci">DataCallbackResult</div><div class="ttdef"><b>Definition:</b> Definitions.h:119</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_error_callback_html_a76bd3ef3e00396e10c21812003654cfe"><div class="ttname"><a href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe">oboe::AudioStreamErrorCallback::onErrorAfterClose</a></div><div class="ttdeci">virtual void onErrorAfterClose(AudioStream *, Result)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:163</div></div>
<div class="ttc" id="classoboe_1_1_audio_stream_html"><div class="ttname"><a href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:44</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html_a57a1b21efc764e8bbf8d92008a993bfd"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html#a57a1b21efc764e8bbf8d92008a993bfd">oboe::AudioStreamCallback::onErrorAfterClose</a></div><div class="ttdeci">virtual void onErrorAfterClose(AudioStream *, Result)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:117</div></div>
-<div class="ttc" id="classoboe_1_1_audio_stream_callback_html_a77ceb641f941164d7b4d4c51c9a888b9"><div class="ttname"><a href="classoboe_1_1_audio_stream_callback.html#a77ceb641f941164d7b4d4c51c9a888b9">oboe::AudioStreamCallback::onErrorBeforeClose</a></div><div class="ttdeci">virtual void onErrorBeforeClose(AudioStream *, Result)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:103</div></div>
<div class="ttc" id="namespaceoboe_html_a486512e787b609c80ba4436f23929af1"><div class="ttname"><a href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">oboe::Result</a></div><div class="ttdeci">Result</div><div class="ttdef"><b>Definition:</b> Definitions.h:131</div></div>
<div class="ttc" id="classoboe_1_1_stabilized_callback_html"><div class="ttname"><a href="classoboe_1_1_stabilized_callback.html">oboe::StabilizedCallback</a></div><div class="ttdef"><b>Definition:</b> StabilizedCallback.h:25</div></div>
<div class="ttc" id="namespaceoboe_html"><div class="ttname"><a href="namespaceoboe.html">oboe</a></div><div class="ttdef"><b>Definition:</b> AudioStream.h:31</div></div>
<div class="ttc" id="classoboe_1_1_stabilized_callback_html_af7521da42c4b08a71e6102994f6f41f4"><div class="ttname"><a href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4">oboe::StabilizedCallback::onErrorAfterClose</a></div><div class="ttdeci">void onErrorAfterClose(AudioStream *oboeStream, Result error) override</div><div class="ttdef"><b>Definition:</b> StabilizedCallback.h:37</div></div>
<div class="ttc" id="classoboe_1_1_stabilized_callback_html_a7ec0e9fca3181962ab78716bcda83e10"><div class="ttname"><a href="classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10">oboe::StabilizedCallback::onErrorBeforeClose</a></div><div class="ttdeci">void onErrorBeforeClose(AudioStream *oboeStream, Result error) override</div><div class="ttdef"><b>Definition:</b> StabilizedCallback.h:33</div></div>
+<div class="ttc" id="classoboe_1_1_audio_stream_error_callback_html_a4eb1e4916b71d8231e97b19898bc9bf0"><div class="ttname"><a href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0">oboe::AudioStreamErrorCallback::onErrorBeforeClose</a></div><div class="ttdeci">virtual void onErrorBeforeClose(AudioStream *, Result)</div><div class="ttdef"><b>Definition:</b> AudioStreamCallback.h:147</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/_utilities_8h_source.html b/docs/reference/_utilities_8h_source.html
index 7ef55a7..3b508ae 100644
--- a/docs/reference/_utilities_8h_source.html
+++ b/docs/reference/_utilities_8h_source.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -71,8 +71,10 @@
<div class="title">Utilities.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_UTILITIES_H</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_UTILITIES_H</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <unistd.h></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <sys/types.h></span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "oboe/Definitions.h"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">void</span> <a class="code" href="namespaceoboe.html#adbda063116feb9fa98a31ee820170060">convertFloatToPcm16</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *source, int16_t *destination, int32_t numSamples);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> <a class="code" href="namespaceoboe.html#ad17bee42828d13f2ef62a889e175c643">convertPcm16ToFloat</a>(<span class="keyword">const</span> int16_t *source, <span class="keywordtype">float</span> *destination, int32_t numSamples);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> int32_t <a class="code" href="namespaceoboe.html#ac67383a3df0f6e7a51f8415ffd9fdaca">convertFormatToSizeInBytes</a>(<a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> format);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">template</span> <<span class="keyword">typename</span> FromType></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="namespaceoboe.html#af65aaea3c5d82eee6906664d61c094b3">convertToText</a>(FromType input);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">int</span> <a class="code" href="namespaceoboe.html#a54528938e9fccab7ad8947ccf0e409db">getSdkVersion</a>();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor">#endif //OBOE_UTILITIES_H</span></div><div class="ttc" id="namespaceoboe_html_adbda063116feb9fa98a31ee820170060"><div class="ttname"><a href="namespaceoboe.html#adbda063116feb9fa98a31ee820170060">oboe::convertFloatToPcm16</a></div><div class="ttdeci">void convertFloatToPcm16(const float *source, int16_t *destination, int32_t numSamples)</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2016 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_UTILITIES_H</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_UTILITIES_H</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <unistd.h></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <sys/types.h></span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <string></span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "oboe/Definitions.h"</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">void</span> <a class="code" href="namespaceoboe.html#adbda063116feb9fa98a31ee820170060">convertFloatToPcm16</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *source, int16_t *destination, int32_t numSamples);</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">void</span> <a class="code" href="namespaceoboe.html#ad17bee42828d13f2ef62a889e175c643">convertPcm16ToFloat</a>(<span class="keyword">const</span> int16_t *source, <span class="keywordtype">float</span> *destination, int32_t numSamples);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> int32_t <a class="code" href="namespaceoboe.html#ac67383a3df0f6e7a51f8415ffd9fdaca">convertFormatToSizeInBytes</a>(<a class="code" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> format);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">template</span> <<span class="keyword">typename</span> FromType></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="namespaceoboe.html#af65aaea3c5d82eee6906664d61c094b3">convertToText</a>(FromType input);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> std::string <a class="code" href="namespaceoboe.html#a1ff1f1323d722494dac353a6b4d1bd5b">getPropertyString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * name);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">int</span> <a class="code" href="namespaceoboe.html#a4284cffcf4d852ca4f357429303d7af5">getPropertyInteger</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * name, <span class="keywordtype">int</span> defaultValue);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">int</span> <a class="code" href="namespaceoboe.html#a54528938e9fccab7ad8947ccf0e409db">getSdkVersion</a>();</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor">#endif //OBOE_UTILITIES_H</span></div><div class="ttc" id="namespaceoboe_html_adbda063116feb9fa98a31ee820170060"><div class="ttname"><a href="namespaceoboe.html#adbda063116feb9fa98a31ee820170060">oboe::convertFloatToPcm16</a></div><div class="ttdeci">void convertFloatToPcm16(const float *source, int16_t *destination, int32_t numSamples)</div></div>
<div class="ttc" id="namespaceoboe_html_af65aaea3c5d82eee6906664d61c094b3"><div class="ttname"><a href="namespaceoboe.html#af65aaea3c5d82eee6906664d61c094b3">oboe::convertToText</a></div><div class="ttdeci">const char * convertToText(FromType input)</div></div>
+<div class="ttc" id="namespaceoboe_html_a1ff1f1323d722494dac353a6b4d1bd5b"><div class="ttname"><a href="namespaceoboe.html#a1ff1f1323d722494dac353a6b4d1bd5b">oboe::getPropertyString</a></div><div class="ttdeci">std::string getPropertyString(const char *name)</div></div>
+<div class="ttc" id="namespaceoboe_html_a4284cffcf4d852ca4f357429303d7af5"><div class="ttname"><a href="namespaceoboe.html#a4284cffcf4d852ca4f357429303d7af5">oboe::getPropertyInteger</a></div><div class="ttdeci">int getPropertyInteger(const char *name, int defaultValue)</div></div>
<div class="ttc" id="namespaceoboe_html_ad17bee42828d13f2ef62a889e175c643"><div class="ttname"><a href="namespaceoboe.html#ad17bee42828d13f2ef62a889e175c643">oboe::convertPcm16ToFloat</a></div><div class="ttdeci">void convertPcm16ToFloat(const int16_t *source, float *destination, int32_t numSamples)</div></div>
<div class="ttc" id="namespaceoboe_html_a92afc593e856571aacbfd02e57075df6"><div class="ttname"><a href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">oboe::AudioFormat</a></div><div class="ttdeci">AudioFormat</div><div class="ttdef"><b>Definition:</b> Definitions.h:94</div></div>
<div class="ttc" id="namespaceoboe_html_ac67383a3df0f6e7a51f8415ffd9fdaca"><div class="ttname"><a href="namespaceoboe.html#ac67383a3df0f6e7a51f8415ffd9fdaca">oboe::convertFormatToSizeInBytes</a></div><div class="ttdeci">int32_t convertFormatToSizeInBytes(AudioFormat format)</div></div>
diff --git a/docs/reference/_version_8h_source.html b/docs/reference/_version_8h_source.html
index 0f4505b..db8a456 100644
--- a/docs/reference/_version_8h_source.html
+++ b/docs/reference/_version_8h_source.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -71,7 +71,7 @@
<div class="title">Version.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2017 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_VERSIONINFO_H</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_VERSIONINFO_H</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <cstdint></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">// Type: 8-bit unsigned int. Min value: 0 Max value: 255. See below for description.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#define OBOE_VERSION_MAJOR 1</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">// Type: 8-bit unsigned int. Min value: 0 Max value: 255. See below for description.</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#define OBOE_VERSION_MINOR 2</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// Type: 16-bit unsigned int. Min value: 0 Max value: 65535. See below for description.</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#define OBOE_VERSION_PATCH 4</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#define OBOE_STRINGIFY(x) #x</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#define OBOE_TOSTRING(x) OBOE_STRINGIFY(x)</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment">// Type: String literal. See below for description.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#define OBOE_VERSION_TEXT \</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor"> OBOE_TOSTRING(OBOE_VERSION_MAJOR) "." \</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"> OBOE_TOSTRING(OBOE_VERSION_MINOR) "." \</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"> OBOE_TOSTRING(OBOE_VERSION_PATCH)</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// Type: 32-bit unsigned int. See below for description.</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#define OBOE_VERSION_NUMBER ((OBOE_VERSION_MAJOR << 24) | (OBOE_VERSION_MINOR << 16) | OBOE_VERSION_PATCH)</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * getVersionText();</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html"> 61</a></span> <span class="keyword">struct </span><a class="code" href="structoboe_1_1_version.html">Version</a> {</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#a270f2e92582d5187be339eeda8e2b276"> 65</a></span>  <span class="keyword">static</span> constexpr uint8_t <a class="code" href="structoboe_1_1_version.html#a270f2e92582d5187be339eeda8e2b276">Major</a> = OBOE_VERSION_MAJOR;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#ae460bb95e3a9099696205a35fffb5469"> 71</a></span>  <span class="keyword">static</span> constexpr uint8_t <a class="code" href="structoboe_1_1_version.html#ae460bb95e3a9099696205a35fffb5469">Minor</a> = OBOE_VERSION_MINOR;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#a690110f2b3e887892da8f29ab5c057b2"> 77</a></span>  <span class="keyword">static</span> constexpr uint16_t <a class="code" href="structoboe_1_1_version.html#a690110f2b3e887892da8f29ab5c057b2">Patch</a> = OBOE_VERSION_PATCH;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#a2c86e578b827fbca5f40c460a7754503"> 82</a></span>  <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="structoboe_1_1_version.html#a2c86e578b827fbca5f40c460a7754503">Text</a> = OBOE_VERSION_TEXT;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#ac579661e79bcee45dc676d4647891de0"> 88</a></span>  <span class="keyword">static</span> constexpr uint32_t <a class="code" href="structoboe_1_1_version.html#ac579661e79bcee45dc676d4647891de0">Number</a> = OBOE_VERSION_NUMBER;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> };</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor">#endif //OBOE_VERSIONINFO_H</span></div><div class="ttc" id="structoboe_1_1_version_html"><div class="ttname"><a href="structoboe_1_1_version.html">oboe::Version</a></div><div class="ttdef"><b>Definition:</b> Version.h:61</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2017 The Android Open Source Project</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef OBOE_VERSIONINFO_H</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define OBOE_VERSIONINFO_H</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <cstdint></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">// Type: 8-bit unsigned int. Min value: 0 Max value: 255. See below for description.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#define OBOE_VERSION_MAJOR 1</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">// Type: 8-bit unsigned int. Min value: 0 Max value: 255. See below for description.</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#define OBOE_VERSION_MINOR 5</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// Type: 16-bit unsigned int. Min value: 0 Max value: 65535. See below for description.</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#define OBOE_VERSION_PATCH 0</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#define OBOE_STRINGIFY(x) #x</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#define OBOE_TOSTRING(x) OBOE_STRINGIFY(x)</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment">// Type: String literal. See below for description.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#define OBOE_VERSION_TEXT \</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor"> OBOE_TOSTRING(OBOE_VERSION_MAJOR) "." \</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"> OBOE_TOSTRING(OBOE_VERSION_MINOR) "." \</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"> OBOE_TOSTRING(OBOE_VERSION_PATCH)</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// Type: 32-bit unsigned int. See below for description.</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#define OBOE_VERSION_NUMBER ((OBOE_VERSION_MAJOR << 24) | (OBOE_VERSION_MINOR << 16) | OBOE_VERSION_PATCH)</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">namespace </span><a class="code" href="namespaceoboe.html">oboe</a> {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * getVersionText();</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html"> 61</a></span> <span class="keyword">struct </span><a class="code" href="structoboe_1_1_version.html">Version</a> {</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#a270f2e92582d5187be339eeda8e2b276"> 65</a></span>  <span class="keyword">static</span> constexpr uint8_t <a class="code" href="structoboe_1_1_version.html#a270f2e92582d5187be339eeda8e2b276">Major</a> = OBOE_VERSION_MAJOR;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#ae460bb95e3a9099696205a35fffb5469"> 71</a></span>  <span class="keyword">static</span> constexpr uint8_t <a class="code" href="structoboe_1_1_version.html#ae460bb95e3a9099696205a35fffb5469">Minor</a> = OBOE_VERSION_MINOR;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#a690110f2b3e887892da8f29ab5c057b2"> 77</a></span>  <span class="keyword">static</span> constexpr uint16_t <a class="code" href="structoboe_1_1_version.html#a690110f2b3e887892da8f29ab5c057b2">Patch</a> = OBOE_VERSION_PATCH;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#a2c86e578b827fbca5f40c460a7754503"> 82</a></span>  <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="structoboe_1_1_version.html#a2c86e578b827fbca5f40c460a7754503">Text</a> = OBOE_VERSION_TEXT;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="structoboe_1_1_version.html#ac579661e79bcee45dc676d4647891de0"> 88</a></span>  <span class="keyword">static</span> constexpr uint32_t <a class="code" href="structoboe_1_1_version.html#ac579661e79bcee45dc676d4647891de0">Number</a> = OBOE_VERSION_NUMBER;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> };</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> } <span class="comment">// namespace oboe</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor">#endif //OBOE_VERSIONINFO_H</span></div><div class="ttc" id="structoboe_1_1_version_html"><div class="ttname"><a href="structoboe_1_1_version.html">oboe::Version</a></div><div class="ttdef"><b>Definition:</b> Version.h:61</div></div>
<div class="ttc" id="structoboe_1_1_version_html_ae460bb95e3a9099696205a35fffb5469"><div class="ttname"><a href="structoboe_1_1_version.html#ae460bb95e3a9099696205a35fffb5469">oboe::Version::Minor</a></div><div class="ttdeci">static constexpr uint8_t Minor</div><div class="ttdef"><b>Definition:</b> Version.h:71</div></div>
<div class="ttc" id="structoboe_1_1_version_html_a270f2e92582d5187be339eeda8e2b276"><div class="ttname"><a href="structoboe_1_1_version.html#a270f2e92582d5187be339eeda8e2b276">oboe::Version::Major</a></div><div class="ttdeci">static constexpr uint8_t Major</div><div class="ttdef"><b>Definition:</b> Version.h:65</div></div>
<div class="ttc" id="structoboe_1_1_version_html_ac579661e79bcee45dc676d4647891de0"><div class="ttname"><a href="structoboe_1_1_version.html#ac579661e79bcee45dc676d4647891de0">oboe::Version::Number</a></div><div class="ttdeci">static constexpr uint32_t Number</div><div class="ttdef"><b>Definition:</b> Version.h:88</div></div>
diff --git a/docs/reference/annotated.html b/docs/reference/annotated.html
index 67027a4..2fdbca7 100644
--- a/docs/reference/annotated.html
+++ b/docs/reference/annotated.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -74,13 +74,16 @@
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream_base.html" target="_self">AudioStreamBase</a></td><td class="desc"></td></tr>
<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream_builder.html" target="_self">AudioStreamBuilder</a></td><td class="desc"></td></tr>
<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream_callback.html" target="_self">AudioStreamCallback</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_default_stream_values.html" target="_self">DefaultStreamValues</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structoboe_1_1_frame_timestamp.html" target="_self">FrameTimestamp</a></td><td class="desc"></td></tr>
-<tr id="row_0_6_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_latency_tuner.html" target="_self">LatencyTuner</a></td><td class="desc"></td></tr>
-<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_result_with_value.html" target="_self">ResultWithValue</a></td><td class="desc"></td></tr>
-<tr id="row_0_8_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_stabilized_callback.html" target="_self">StabilizedCallback</a></td><td class="desc"></td></tr>
-<tr id="row_0_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structoboe_1_1_stream_deleter_functor.html" target="_self">StreamDeleterFunctor</a></td><td class="desc"></td></tr>
-<tr id="row_0_10_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structoboe_1_1_version.html" target="_self">Version</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream_data_callback.html" target="_self">AudioStreamDataCallback</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream_error_callback.html" target="_self">AudioStreamErrorCallback</a></td><td class="desc"></td></tr>
+<tr id="row_0_6_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_default_stream_values.html" target="_self">DefaultStreamValues</a></td><td class="desc"></td></tr>
+<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structoboe_1_1_frame_timestamp.html" target="_self">FrameTimestamp</a></td><td class="desc"></td></tr>
+<tr id="row_0_8_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_latency_tuner.html" target="_self">LatencyTuner</a></td><td class="desc"></td></tr>
+<tr id="row_0_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_oboe_globals.html" target="_self">OboeGlobals</a></td><td class="desc"></td></tr>
+<tr id="row_0_10_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_result_with_value.html" target="_self">ResultWithValue</a></td><td class="desc"></td></tr>
+<tr id="row_0_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_stabilized_callback.html" target="_self">StabilizedCallback</a></td><td class="desc"></td></tr>
+<tr id="row_0_12_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structoboe_1_1_stream_deleter_functor.html" target="_self">StreamDeleterFunctor</a></td><td class="desc"></td></tr>
+<tr id="row_0_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structoboe_1_1_version.html" target="_self">Version</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
diff --git a/docs/reference/classes.html b/docs/reference/classes.html
index 8ef7685..8209573 100644
--- a/docs/reference/classes.html
+++ b/docs/reference/classes.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -67,25 +67,27 @@
<div class="title">Class Index</div> </div>
</div><!--header-->
<div class="contents">
-<div class="qindex"><a class="qindex" href="#letter_a">a</a> | <a class="qindex" href="#letter_d">d</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_l">l</a> | <a class="qindex" href="#letter_r">r</a> | <a class="qindex" href="#letter_s">s</a> | <a class="qindex" href="#letter_v">v</a></div>
+<div class="qindex"><a class="qindex" href="#letter_a">a</a> | <a class="qindex" href="#letter_d">d</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_l">l</a> | <a class="qindex" href="#letter_o">o</a> | <a class="qindex" href="#letter_r">r</a> | <a class="qindex" href="#letter_s">s</a> | <a class="qindex" href="#letter_v">v</a></div>
<table class="classindex">
<tr><td rowspan="2" valign="bottom"><a name="letter_a"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  a  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_l"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  l  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_l"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  l  </div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_r"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  r  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="structoboe_1_1_stream_deleter_functor.html">StreamDeleterFunctor</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td></tr>
+<tr><td></td><td valign="top"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td></td><td></td><td rowspan="2" valign="bottom"><a name="letter_v"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  v  </div></td></tr></table>
+</td></tr>
+<tr><td valign="top"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_d"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  d  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td valign="top"><a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td></td></tr>
+<tr><td valign="top"><a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td></td><td rowspan="2" valign="bottom"><a name="letter_o"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  o  </div></td></tr></table>
</td><td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  s  </div></td></tr></table>
-</td><td></td></tr>
-<tr><td></td><td rowspan="2" valign="bottom"><a name="letter_d"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  d  </div></td></tr></table>
-</td><td></td><td></td><td></td></tr>
-<tr><td valign="top"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td></td><td valign="top"><a class="el" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td valign="top"><a class="el" href="classoboe_1_1_stabilized_callback.html">StabilizedCallback</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td></td></tr>
-<tr><td valign="top"><a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td valign="top"><a class="el" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_r"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  r  </div></td></tr></table>
-</td><td valign="top"><a class="el" href="structoboe_1_1_stream_deleter_functor.html">StreamDeleterFunctor</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td></td></tr>
-<tr><td valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_f"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  f  </div></td></tr></table>
-</td><td></td><td rowspan="2" valign="bottom"><a name="letter_v"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  v  </div></td></tr></table>
-</td><td></td></tr>
-<tr><td></td><td></td><td valign="top"><a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a class="el" href="structoboe_1_1_frame_timestamp.html">FrameTimestamp</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td></td><td valign="top"><a class="el" href="structoboe_1_1_version.html">Version</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td></td></tr>
+</td><td valign="top"><a class="el" href="structoboe_1_1_version.html">Version</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td></tr>
+<tr><td valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td valign="top"><a class="el" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td></td><td></td><td></td></tr>
+<tr><td valign="top"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_f"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  f  </div></td></tr></table>
+</td><td valign="top"><a class="el" href="classoboe_1_1_oboe_globals.html">OboeGlobals</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td valign="top"><a class="el" href="classoboe_1_1_stabilized_callback.html">StabilizedCallback</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td></td></tr>
+<tr><td></td><td></td><td></td><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a class="el" href="structoboe_1_1_frame_timestamp.html">FrameTimestamp</a> (<a class="el" href="namespaceoboe.html">oboe</a>)   </td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
</table>
-<div class="qindex"><a class="qindex" href="#letter_a">a</a> | <a class="qindex" href="#letter_d">d</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_l">l</a> | <a class="qindex" href="#letter_r">r</a> | <a class="qindex" href="#letter_s">s</a> | <a class="qindex" href="#letter_v">v</a></div>
+<div class="qindex"><a class="qindex" href="#letter_a">a</a> | <a class="qindex" href="#letter_d">d</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_l">l</a> | <a class="qindex" href="#letter_o">o</a> | <a class="qindex" href="#letter_r">r</a> | <a class="qindex" href="#letter_s">s</a> | <a class="qindex" href="#letter_v">v</a></div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/classoboe_1_1_audio_stream-members.html b/docs/reference/classoboe_1_1_audio_stream-members.html
index de1ff5d..b00cb36 100644
--- a/docs/reference/classoboe_1_1_audio_stream-members.html
+++ b/docs/reference/classoboe_1_1_audio_stream-members.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -78,27 +78,31 @@
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a8ebb587a07bf62c864fd62c63b241fd4">AudioStream</a>(const AudioStreamBuilder &builder)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBase</b>() (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa6b103e1b0f808bbc4949d56f0829f98">AudioStreamBase</a>(const AudioStreamBase &)=default</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a9c8ea30e30e513766d5e996c370eb8d8">close</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ab7a8cfe5d6039386bc5850fd5ee9bd62">fireDataCallback</a>(void *audioData, int numFrames)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a32c25c0333eab3d65ce02275ad4acb3d">flush</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() const =0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#afa35ee4b8629fbffe26b9be7c7ed55d2">getAvailableFrames</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a5c01907a59d5f89a5e4b819fe66b08bc">getBytesPerFrame</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a44dda61e6e948e49b68f87172f084d62">getBytesPerSample</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AudioStreamBuilder</b> (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ae023cb001f3261d064f423101798d6be">calculateLatencyMillis</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a9c8ea30e30e513766d5e996c370eb8d8">close</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ab7a8cfe5d6039386bc5850fd5ee9bd62">fireDataCallback</a>(void *audioData, int numFrames)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a32c25c0333eab3d65ce02275ad4acb3d">flush</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a2b7a3cee7444114843dbdd1fc705f6bb">getAudioApi</a>() const =0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#afa35ee4b8629fbffe26b9be7c7ed55d2">getAvailableFrames</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a5c01907a59d5f89a5e4b819fe66b08bc">getBytesPerFrame</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a44dda61e6e948e49b68f87172f084d62">getBytesPerSample</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575">getChannelCount</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">getDeviceId</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c">getDataCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">getDeviceId</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0">getErrorCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ac160acb656515814fa6fdd157c131a0a">getFramesPerBurst</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#aeebfc59abd978cd6dff07c16cfe266df">getFramesRead</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38">getFramesPerDataCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#aeebfc59abd978cd6dff07c16cfe266df">getFramesRead</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ab43dd4074e1de57bac1c3fd111430341">getFramesWritten</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a8fe8afdf164a1fe835c514f709743d75">getLastErrorCallbackResult</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">getPerformanceMode</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1de8d6982d411a0cf50a32efba0ca3f2">getSampleRateConversionQuality</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
@@ -112,55 +116,64 @@
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#ad1a1d3bbf3b348ed92b7ed18ce9cc261">getXRunCount</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa4ec3aa76e69350fbce6f00786211495">isChannelConversionAllowed</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#add85011ba825f74931deeb92c5edf831">isDataCallbackEnabled</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73">isDataCallbackSpecified</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3">isErrorCallbackSpecified</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4">isFormatConversionAllowed</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4">isXRunCountSupported</a>() const =0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#aa5f4801cca6877eeaa4735b93933269d">launchStopThread</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2">isValidConfig</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4">isXRunCountSupported</a>() const =0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#aa5f4801cca6877eeaa4735b93933269d">launchStopThread</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lockWeakThis</b>() (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelConversionAllowed</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormatConversionAllowed</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a07e82f9b9e2e4800f23ae9a7193c3b58">mFramesRead</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a88a63317b7c58815bac074976b00aa23">mFramesWritten</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>mLock</b> (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSampleRateConversionQuality</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">mSharingMode</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mErrorCallbackResult</b> (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFormatConversionAllowed</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a07e82f9b9e2e4800f23ae9a7193c3b58">mFramesRead</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a88a63317b7c58815bac074976b00aa23">mFramesWritten</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mLock</b> (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mSampleRateConversionQuality</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">mSharingMode</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a0ea79e60f5a3d29fc5a1a116aba11dfe">onDefaultCallback</a>(void *, int)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6">open</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a>(const AudioStreamBase &)=default</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a04f29836748a8e5842aef2be200022ad">pause</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a8089f0a0cb68d4039cf33e6584129978">read</a>(void *, int32_t, int64_t)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a6bd5d633ff999e4da1faf3cd949aa602">requestFlush</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">requestPause</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a3c484e314dee8dfed1d419f487b5d601">requestStart</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a820e634f741e6b5efdcef8104cecb919">requestStop</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a06e3f9e133b3a75515e7793939d1cd03">setBufferSizeInFrames</a>(int32_t)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba">setDataCallbackEnabled</a>(bool enabled)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mWeakThis</b> (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a0ea79e60f5a3d29fc5a1a116aba11dfe">onDefaultCallback</a>(void *, int)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6">open</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a>(const AudioStreamBase &)=default</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a04f29836748a8e5842aef2be200022ad">pause</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a8089f0a0cb68d4039cf33e6584129978">read</a>(void *, int32_t, int64_t)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a6bd5d633ff999e4da1faf3cd949aa602">requestFlush</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a7f18bb3cc5490fd7fbc1f6da63c730f6">requestPause</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a3c484e314dee8dfed1d419f487b5d601">requestStart</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a820e634f741e6b5efdcef8104cecb919">requestStop</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a06e3f9e133b3a75515e7793939d1cd03">setBufferSizeInFrames</a>(int32_t)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba">setDataCallbackEnabled</a>(bool enabled)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setWeakThis</b>(std::shared_ptr< oboe::AudioStream > &sharedStream) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#af04f03eb6b64b564f1c4401688987d21">start</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#aec093859d42f0470c884edd1e976d9f3">stop</a>(int64_t timeoutNanoseconds=kDefaultTimeoutNanos)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>swapCallback</b>(AudioStreamCallback *streamCallback) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a462358ddab709c79d1a7968d6d55b727">updateFramesRead</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a64ad978c5f70ced17ef5a96605496515">updateFramesWritten</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147">usesAAudio</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#afddb0962863ccf9ec6672a042fe15941">waitForAvailableFrames</a>(int32_t numFrames, int64_t timeoutNanoseconds)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a>(StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a>(StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#aa48da7bf28026b7cccee73e6b054af28">wasErrorCallbackCalled</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a3612c05ed6b01a213dde67d913c07e11">write</a>(const void *, int32_t, int64_t)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStream</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>swapDataCallback</b>(AudioStreamDataCallback *dataCallback) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>swapErrorCallback</b>(AudioStreamErrorCallback *errorCallback) (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a462358ddab709c79d1a7968d6d55b727">updateFramesRead</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a64ad978c5f70ced17ef5a96605496515">updateFramesWritten</a>()=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a15cdaaaa4c1e8da322d6da33334c8147">usesAAudio</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#afddb0962863ccf9ec6672a042fe15941">waitForAvailableFrames</a>(int32_t numFrames, int64_t timeoutNanoseconds)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a0c865a5501f369d959c39d8ab8b46a07">waitForStateChange</a>(StreamState inputState, StreamState *nextState, int64_t timeoutNanoseconds)=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a8adbacd6a55a94a532916ab037fba1d6">waitForStateTransition</a>(StreamState startingState, StreamState endingState, int64_t timeoutNanoseconds)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#aa48da7bf28026b7cccee73e6b054af28">wasErrorCallbackCalled</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html#a3612c05ed6b01a213dde67d913c07e11">write</a>(const void *, int32_t, int64_t)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStream</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/classoboe_1_1_audio_stream.html b/docs/reference/classoboe_1_1_audio_stream.html
index 8130095..20c89c6 100644
--- a/docs/reference/classoboe_1_1_audio_stream.html
+++ b/docs/reference/classoboe_1_1_audio_stream.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -71,6 +71,7 @@
<a href="#pub-methods">Public Member Functions</a> |
<a href="#pro-methods">Protected Member Functions</a> |
<a href="#pro-attribs">Protected Attributes</a> |
+<a href="#friends">Friends</a> |
<a href="classoboe_1_1_audio_stream-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">oboe::AudioStream Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div>
@@ -154,13 +155,18 @@
<tr class="separator:a64ad978c5f70ced17ef5a96605496515"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a462358ddab709c79d1a7968d6d55b727"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a462358ddab709c79d1a7968d6d55b727">updateFramesRead</a> ()=0</td></tr>
<tr class="separator:a462358ddab709c79d1a7968d6d55b727"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a20f75fce32d3a203404de0883c2de34f"><td class="memItemLeft" align="right" valign="top"><a id="a20f75fce32d3a203404de0883c2de34f"></a>
-<a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> * </td><td class="memItemRight" valign="bottom"><b>swapCallback</b> (<a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *streamCallback)</td></tr>
-<tr class="separator:a20f75fce32d3a203404de0883c2de34f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab1748ad90d9ff9210f0fee19cea71224"><td class="memItemLeft" align="right" valign="top"><a id="ab1748ad90d9ff9210f0fee19cea71224"></a>
+<a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> * </td><td class="memItemRight" valign="bottom"><b>swapDataCallback</b> (<a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> *dataCallback)</td></tr>
+<tr class="separator:ab1748ad90d9ff9210f0fee19cea71224"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa75bb1b45bee873715a674df5dac0ef9"><td class="memItemLeft" align="right" valign="top"><a id="aa75bb1b45bee873715a674df5dac0ef9"></a>
+<a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> * </td><td class="memItemRight" valign="bottom"><b>swapErrorCallback</b> (<a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> *errorCallback)</td></tr>
+<tr class="separator:aa75bb1b45bee873715a674df5dac0ef9"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:afa35ee4b8629fbffe26b9be7c7ed55d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>< int32_t > </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#afa35ee4b8629fbffe26b9be7c7ed55d2">getAvailableFrames</a> ()</td></tr>
<tr class="separator:afa35ee4b8629fbffe26b9be7c7ed55d2"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:afddb0962863ccf9ec6672a042fe15941"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a>< int32_t > </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#afddb0962863ccf9ec6672a042fe15941">waitForAvailableFrames</a> (int32_t numFrames, int64_t timeoutNanoseconds)</td></tr>
<tr class="separator:afddb0962863ccf9ec6672a042fe15941"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8fe8afdf164a1fe835c514f709743d75"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">oboe::Result</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a8fe8afdf164a1fe835c514f709743d75">getLastErrorCallbackResult</a> () const</td></tr>
+<tr class="separator:a8fe8afdf164a1fe835c514f709743d75"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="inherit_header pub_methods_classoboe_1_1_audio_stream_base"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classoboe_1_1_audio_stream_base')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td></tr>
<tr class="memitem:aa6b103e1b0f808bbc4949d56f0829f98 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa6b103e1b0f808bbc4949d56f0829f98">AudioStreamBase</a> (const <a class="el" href="classoboe_1_1_audio_stream_base.html">AudioStreamBase</a> &)=default</td></tr>
<tr class="separator:aa6b103e1b0f808bbc4949d56f0829f98 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
@@ -174,6 +180,8 @@
<tr class="separator:ae9d32f3e09174bad69e74f147ee33087 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a8878a90949badbb5486cc2e022a57086 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">getFramesPerCallback</a> () const</td></tr>
<tr class="separator:a8878a90949badbb5486cc2e022a57086 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abc3ee2815568b425d15a40e132aa8e38 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38">getFramesPerDataCallback</a> () const</td></tr>
+<tr class="separator:abc3ee2815568b425d15a40e132aa8e38 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a> () const</td></tr>
<tr class="separator:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af5217ab05bfde0d7637024b599302d0b inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">virtual int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a> ()</td></tr>
@@ -186,8 +194,14 @@
<tr class="separator:a2ddb935de0e24dd7ae8e2cfbecac9fdc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a093057d625bc896864b959974c265f21 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">getDeviceId</a> () const</td></tr>
<tr class="separator:a093057d625bc896864b959974c265f21 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a> () const</td></tr>
-<tr class="separator:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9fb2f34ae62dbda2c10e8513b754fa0c inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c">getDataCallback</a> () const</td></tr>
+<tr class="separator:a9fb2f34ae62dbda2c10e8513b754fa0c inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1328fb9288166ff325995ce1ea1867f0 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0">getErrorCallback</a> () const</td></tr>
+<tr class="separator:a1328fb9288166ff325995ce1ea1867f0 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a54d38b985a2eb12c6972104dc0ce73 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73">isDataCallbackSpecified</a> () const</td></tr>
+<tr class="separator:a9a54d38b985a2eb12c6972104dc0ce73 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef579f6d1f779c89d051f0963f2976b3 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3">isErrorCallbackSpecified</a> () const</td></tr>
+<tr class="separator:aef579f6d1f779c89d051f0963f2976b3 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">Usage</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a> () const</td></tr>
<tr class="separator:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab12e2d068fa87e0553b01a400d96eb82 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">ContentType</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a> () const</td></tr>
@@ -217,9 +231,21 @@
<tr class="separator:add85011ba825f74931deeb92c5edf831"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a0faa6d3a6fd4f367e6f80d5a29e6dcba"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba">setDataCallbackEnabled</a> (bool enabled)</td></tr>
<tr class="separator:a0faa6d3a6fd4f367e6f80d5a29e6dcba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a68b28845855f7391c24ed0c7cee26ffe"><td class="memItemLeft" align="right" valign="top"><a id="a68b28845855f7391c24ed0c7cee26ffe"></a>
+void </td><td class="memItemRight" valign="bottom"><b>setWeakThis</b> (std::shared_ptr< <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a> > &sharedStream)</td></tr>
+<tr class="separator:a68b28845855f7391c24ed0c7cee26ffe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4882ba4180fa2a984fb9a2002651d50b"><td class="memItemLeft" align="right" valign="top"><a id="a4882ba4180fa2a984fb9a2002651d50b"></a>
+std::shared_ptr< <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a> > </td><td class="memItemRight" valign="bottom"><b>lockWeakThis</b> ()</td></tr>
+<tr class="separator:a4882ba4180fa2a984fb9a2002651d50b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pro_methods_classoboe_1_1_audio_stream_base"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classoboe_1_1_audio_stream_base')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td></tr>
+<tr class="memitem:a5d5e07e98921d0193a5c0ccbe06f68c2 inherit pro_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2">isValidConfig</a> ()</td></tr>
+<tr class="separator:a5d5e07e98921d0193a5c0ccbe06f68c2 inherit pro_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
+<tr class="memitem:addb945e8ab2bc395cc99c8ae6504c2cd"><td class="memItemLeft" align="right" valign="top"><a id="addb945e8ab2bc395cc99c8ae6504c2cd"></a>
+std::weak_ptr< <a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> > </td><td class="memItemRight" valign="bottom"><b>mWeakThis</b></td></tr>
+<tr class="separator:addb945e8ab2bc395cc99c8ae6504c2cd"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a88a63317b7c58815bac074976b00aa23"><td class="memItemLeft" align="right" valign="top">std::atomic< int64_t > </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a88a63317b7c58815bac074976b00aa23">mFramesWritten</a> {}</td></tr>
<tr class="separator:a88a63317b7c58815bac074976b00aa23"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a07e82f9b9e2e4800f23ae9a7193c3b58"><td class="memItemLeft" align="right" valign="top">std::atomic< int64_t > </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream.html#a07e82f9b9e2e4800f23ae9a7193c3b58">mFramesRead</a> {}</td></tr>
@@ -227,9 +253,14 @@
<tr class="memitem:ad23416968eb9479c300e4a94841bdde4"><td class="memItemLeft" align="right" valign="top"><a id="ad23416968eb9479c300e4a94841bdde4"></a>
std::mutex </td><td class="memItemRight" valign="bottom"><b>mLock</b></td></tr>
<tr class="separator:ad23416968eb9479c300e4a94841bdde4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4e4e04b87a53e6b286a6059be32b053"><td class="memItemLeft" align="right" valign="top"><a id="af4e4e04b87a53e6b286a6059be32b053"></a>
+<a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">oboe::Result</a> </td><td class="memItemRight" valign="bottom"><b>mErrorCallbackResult</b> = oboe::Result::OK</td></tr>
+<tr class="separator:af4e4e04b87a53e6b286a6059be32b053"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="inherit_header pro_attribs_classoboe_1_1_audio_stream_base"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classoboe_1_1_audio_stream_base')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td></tr>
-<tr class="memitem:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a> = nullptr</td></tr>
-<tr class="separator:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6d8493f66a945cb426506c70f0358e5f inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a> = nullptr</td></tr>
+<tr class="separator:a6d8493f66a945cb426506c70f0358e5f inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adc0c8cc54adb6d3350c62b8a74b9c57b inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a> = nullptr</td></tr>
+<tr class="separator:adc0c8cc54adb6d3350c62b8a74b9c57b inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a> = <a class="el" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
<tr class="separator:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a5ff460bac9d14dfeac4eeddfcbb6e206 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> = <a class="el" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
@@ -269,6 +300,12 @@
<tr class="memitem:a2dd35a6f009f36172838260144218f6d inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a id="a2dd35a6f009f36172838260144218f6d"></a>
<a class="el" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d">SampleRateConversionQuality</a> </td><td class="memItemRight" valign="bottom"><b>mSampleRateConversionQuality</b> = SampleRateConversionQuality::None</td></tr>
<tr class="separator:a2dd35a6f009f36172838260144218f6d inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a8468a51a2352c31aef00fade27a43e9e"><td class="memItemLeft" align="right" valign="top"><a id="a8468a51a2352c31aef00fade27a43e9e"></a>
+class </td><td class="memItemRight" valign="bottom"><b>AudioStreamBuilder</b></td></tr>
+<tr class="separator:a8468a51a2352c31aef00fade27a43e9e"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Base class for Oboe C++ audio stream. </p>
@@ -609,6 +646,32 @@
</div>
</div>
+<a id="a8fe8afdf164a1fe835c514f709743d75"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8fe8afdf164a1fe835c514f709743d75">◆ </a></span>getLastErrorCallbackResult()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">oboe::Result</a> oboe::AudioStream::getLastErrorCallbackResult </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>last result passed from an error callback </dd></dl>
+
+</div>
+</div>
<a id="a9d37cc6513823c685ae892626ff83ea8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d37cc6513823c685ae892626ff83ea8">◆ </a></span>getState()</h2>
diff --git a/docs/reference/classoboe_1_1_audio_stream_base-members.html b/docs/reference/classoboe_1_1_audio_stream_base-members.html
index e391c12..9fde259 100644
--- a/docs/reference/classoboe_1_1_audio_stream_base-members.html
+++ b/docs/reference/classoboe_1_1_audio_stream_base-members.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -78,13 +78,15 @@
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa6b103e1b0f808bbc4949d56f0829f98">AudioStreamBase</a>(const AudioStreamBase &)=default</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575">getChannelCount</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575">getChannelCount</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c">getDataCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">getDeviceId</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0">getErrorCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38">getFramesPerDataCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">getPerformanceMode</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
@@ -93,25 +95,29 @@
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1fb033fc963f971bd1aa8f6707e49b41">getSharingMode</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa4ec3aa76e69350fbce6f00786211495">isChannelConversionAllowed</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73">isDataCallbackSpecified</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3">isErrorCallbackSpecified</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4">isFormatConversionAllowed</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mChannelConversionAllowed</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2">isValidConfig</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelConversionAllowed</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFormatConversionAllowed</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSampleRateConversionQuality</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">mSharingMode</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormatConversionAllowed</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mSampleRateConversionQuality</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">mSharingMode</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a>(const AudioStreamBase &)=default</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamBase</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
diff --git a/docs/reference/classoboe_1_1_audio_stream_base.html b/docs/reference/classoboe_1_1_audio_stream_base.html
index 3c44656..093eb46 100644
--- a/docs/reference/classoboe_1_1_audio_stream_base.html
+++ b/docs/reference/classoboe_1_1_audio_stream_base.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -69,6 +69,7 @@
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> |
+<a href="#pro-methods">Protected Member Functions</a> |
<a href="#pro-attribs">Protected Attributes</a> |
<a href="classoboe_1_1_audio_stream_base-members.html">List of all members</a> </div>
<div class="headertitle">
@@ -102,6 +103,8 @@
<tr class="separator:ae9d32f3e09174bad69e74f147ee33087"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a8878a90949badbb5486cc2e022a57086"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">getFramesPerCallback</a> () const</td></tr>
<tr class="separator:a8878a90949badbb5486cc2e022a57086"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abc3ee2815568b425d15a40e132aa8e38"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38">getFramesPerDataCallback</a> () const</td></tr>
+<tr class="separator:abc3ee2815568b425d15a40e132aa8e38"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab1e640461d7bf9d596decb913da7ac86"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a> () const</td></tr>
<tr class="separator:ab1e640461d7bf9d596decb913da7ac86"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af5217ab05bfde0d7637024b599302d0b"><td class="memItemLeft" align="right" valign="top">virtual int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a> ()</td></tr>
@@ -114,8 +117,14 @@
<tr class="separator:a2ddb935de0e24dd7ae8e2cfbecac9fdc"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a093057d625bc896864b959974c265f21"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">getDeviceId</a> () const</td></tr>
<tr class="separator:a093057d625bc896864b959974c265f21"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1b4a2a191546708da657510c3cd6b797"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a> () const</td></tr>
-<tr class="separator:a1b4a2a191546708da657510c3cd6b797"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9fb2f34ae62dbda2c10e8513b754fa0c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c">getDataCallback</a> () const</td></tr>
+<tr class="separator:a9fb2f34ae62dbda2c10e8513b754fa0c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1328fb9288166ff325995ce1ea1867f0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0">getErrorCallback</a> () const</td></tr>
+<tr class="separator:a1328fb9288166ff325995ce1ea1867f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a54d38b985a2eb12c6972104dc0ce73"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73">isDataCallbackSpecified</a> () const</td></tr>
+<tr class="separator:a9a54d38b985a2eb12c6972104dc0ce73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef579f6d1f779c89d051f0963f2976b3"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3">isErrorCallbackSpecified</a> () const</td></tr>
+<tr class="separator:aef579f6d1f779c89d051f0963f2976b3"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a0bcfb2f8bd11c92b541fd910da9af397"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">Usage</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a> () const</td></tr>
<tr class="separator:a0bcfb2f8bd11c92b541fd910da9af397"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab12e2d068fa87e0553b01a400d96eb82"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">ContentType</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a> () const</td></tr>
@@ -131,10 +140,17 @@
<tr class="memitem:a1de8d6982d411a0cf50a32efba0ca3f2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a82f3720eba7654aceb7282be36f9ff1d">SampleRateConversionQuality</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1de8d6982d411a0cf50a32efba0ca3f2">getSampleRateConversionQuality</a> () const</td></tr>
<tr class="separator:a1de8d6982d411a0cf50a32efba0ca3f2"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a5d5e07e98921d0193a5c0ccbe06f68c2"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2">isValidConfig</a> ()</td></tr>
+<tr class="separator:a5d5e07e98921d0193a5c0ccbe06f68c2"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
-<tr class="memitem:ae3f72318212dd9977d7fa0ced92c91f4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a> = nullptr</td></tr>
-<tr class="separator:ae3f72318212dd9977d7fa0ced92c91f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6d8493f66a945cb426506c70f0358e5f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a> = nullptr</td></tr>
+<tr class="separator:a6d8493f66a945cb426506c70f0358e5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adc0c8cc54adb6d3350c62b8a74b9c57b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a> = nullptr</td></tr>
+<tr class="separator:adc0c8cc54adb6d3350c62b8a74b9c57b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3962eb94420ad0ecea70029236001899"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a> = <a class="el" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
<tr class="separator:a3962eb94420ad0ecea70029236001899"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a5ff460bac9d14dfeac4eeddfcbb6e206"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> = <a class="el" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
@@ -259,32 +275,6 @@
</div>
</div>
-<a id="a1b4a2a191546708da657510c3cd6b797"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1b4a2a191546708da657510c3cd6b797">◆ </a></span>getCallback()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a>* oboe::AudioStreamBase::getCallback </td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td> const</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>the callback object for this stream, if set. </dd></dl>
-
-</div>
-</div>
<a id="a87e6bf37d6a2a5e983b8ca8d29aea575"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a87e6bf37d6a2a5e983b8ca8d29aea575">◆ </a></span>getChannelCount()</h2>
@@ -337,6 +327,32 @@
</div>
</div>
+<a id="a9fb2f34ae62dbda2c10e8513b754fa0c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9fb2f34ae62dbda2c10e8513b754fa0c">◆ </a></span>getDataCallback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a>* oboe::AudioStreamBase::getDataCallback </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>For internal use only. </p><dl class="section return"><dt>Returns</dt><dd>the data callback object for this stream, if set. </dd></dl>
+
+</div>
+</div>
<a id="a093057d625bc896864b959974c265f21"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a093057d625bc896864b959974c265f21">◆ </a></span>getDeviceId()</h2>
@@ -389,6 +405,32 @@
</div>
</div>
+<a id="a1328fb9288166ff325995ce1ea1867f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1328fb9288166ff325995ce1ea1867f0">◆ </a></span>getErrorCallback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a>* oboe::AudioStreamBase::getErrorCallback </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>For internal use only. </p><dl class="section return"><dt>Returns</dt><dd>the error callback object for this stream, if set. </dd></dl>
+
+</div>
+</div>
<a id="ab1e640461d7bf9d596decb913da7ac86"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab1e640461d7bf9d596decb913da7ac86">◆ </a></span>getFormat()</h2>
@@ -437,7 +479,33 @@
</tr>
</table>
</div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>the number of frames in each callback or kUnspecified. </dd></dl>
+<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000002">Deprecated:</a></b></dt><dd>use <code>getFramesPerDataCallback</code> instead. </dd></dl>
+
+</div>
+</div>
+<a id="abc3ee2815568b425d15a40e132aa8e38"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc3ee2815568b425d15a40e132aa8e38">◆ </a></span>getFramesPerDataCallback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">int32_t oboe::AudioStreamBase::getFramesPerDataCallback </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>the number of frames in each data callback or kUnspecified. </dd></dl>
</div>
</div>
@@ -649,6 +717,58 @@
</div>
</div>
+<a id="a9a54d38b985a2eb12c6972104dc0ce73"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9a54d38b985a2eb12c6972104dc0ce73">◆ </a></span>isDataCallbackSpecified()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool oboe::AudioStreamBase::isDataCallbackSpecified </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>true if a data callback was set for this stream </dd></dl>
+
+</div>
+</div>
+<a id="aef579f6d1f779c89d051f0963f2976b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef579f6d1f779c89d051f0963f2976b3">◆ </a></span>isErrorCallbackSpecified()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool oboe::AudioStreamBase::isErrorCallbackSpecified </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Note that if the app does not set an error callback then a default one may be provided. </p><dl class="section return"><dt>Returns</dt><dd>true if an error callback was set for this stream </dd></dl>
+
+</div>
+</div>
<a id="ace3625a7332bf02a86818fdf63fcccb4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ace3625a7332bf02a86818fdf63fcccb4">◆ </a></span>isFormatConversionAllowed()</h2>
@@ -675,6 +795,32 @@
</div>
</div>
+<a id="a5d5e07e98921d0193a5c0ccbe06f68c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d5e07e98921d0193a5c0ccbe06f68c2">◆ </a></span>isValidConfig()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> oboe::AudioStreamBase::isValidConfig </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Validate stream parameters that might not be checked in lower layers </p>
+
+</div>
+</div>
<a id="aa9c987a59555d7a60b9f7a63f4afc7fc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa9c987a59555d7a60b9f7a63f4afc7fc">◆ </a></span>operator=()</h2>
@@ -795,6 +941,29 @@
</div>
</div>
+<a id="a6d8493f66a945cb426506c70f0358e5f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6d8493f66a945cb426506c70f0358e5f">◆ </a></span>mDataCallback</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a>* oboe::AudioStreamBase::mDataCallback = nullptr</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>The callback which will be fired when new data is ready to be read/written. </p>
+
+</div>
+</div>
<a id="a23dafa12fb1a6242b088ebd5a52798c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a23dafa12fb1a6242b088ebd5a52798c8">◆ </a></span>mDeviceId</h2>
@@ -841,6 +1010,29 @@
</div>
</div>
+<a id="adc0c8cc54adb6d3350c62b8a74b9c57b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adc0c8cc54adb6d3350c62b8a74b9c57b">◆ </a></span>mErrorCallback</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a>* oboe::AudioStreamBase::mErrorCallback = nullptr</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">protected</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>The callback which will be fired when an error or a disconnect occurs. </p>
+
+</div>
+</div>
<a id="a7869f04836c2c2bdc10c7309ad4b8e09"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7869f04836c2c2bdc10c7309ad4b8e09">◆ </a></span>mFormat</h2>
@@ -1025,29 +1217,6 @@
</div>
</div>
-<a id="ae3f72318212dd9977d7fa0ced92c91f4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae3f72318212dd9977d7fa0ced92c91f4">◆ </a></span>mStreamCallback</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a>* oboe::AudioStreamBase::mStreamCallback = nullptr</td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">protected</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-<p>The callback which will be fired when new data is ready to be read/written </p>
-
-</div>
-</div>
<a id="a5b518e82f39c9fcbd7050fd66adb253c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5b518e82f39c9fcbd7050fd66adb253c">◆ </a></span>mUsage</h2>
diff --git a/docs/reference/classoboe_1_1_audio_stream_builder-members.html b/docs/reference/classoboe_1_1_audio_stream_builder-members.html
index a704f6f..8356cd9 100644
--- a/docs/reference/classoboe_1_1_audio_stream_builder-members.html
+++ b/docs/reference/classoboe_1_1_audio_stream_builder-members.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -81,13 +81,15 @@
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#ac9d41811c297fd28bc61833f640bb8d0">getAudioApi</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1531253e64aaebe9e9eddbafb9098fc">getBufferCapacityInFrames</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575">getChannelCount</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575">getChannelCount</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c">getDataCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">getDeviceId</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">getDirection</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0">getErrorCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">getFramesPerCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38">getFramesPerDataCallback</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a">getInputPreset</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">getPerformanceMode</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087">getSampleRate</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
@@ -98,40 +100,48 @@
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a622732bbe5c6577356d749f7dc2108df">isAAudioRecommended</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a18e7b5f7554a4c2ca763e35e8117d699">isAAudioSupported</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa4ec3aa76e69350fbce6f00786211495">isChannelConversionAllowed</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73">isDataCallbackSpecified</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3">isErrorCallbackSpecified</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4">isFormatConversionAllowed</a>() const</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>mChannelConversionAllowed</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2">isValidConfig</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ac81d4719b350f8138aad1af38f0873b6">mBufferCapacityInFrames</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a">mBufferSizeInFrames</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mChannelConversionAllowed</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">mContentType</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">mDeviceId</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">mDirection</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>mFormatConversionAllowed</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>mSampleRateConversionQuality</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">mSharingMode</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">mFormat</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mFormatConversionAllowed</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e">mFramesPerBurst</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1e5d4f5b30c4cc36f81ffd858cc00589">mInputPreset</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab99671c2d0552557e75dc7b4afe91765">mPerformanceMode</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea">mSampleRate</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mSampleRateConversionQuality</b> (defined in <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737">mSessionId</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">mSharingMode</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">mUsage</a></td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a7ab172a9be4fca2489aa5cbcc48c20ff">openManagedStream</a>(ManagedStream &stream)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a>(AudioStream **stream)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a>(const AudioStreamBase &)=default</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a>(AudioApi audioApi)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a>(int32_t bufferCapacityInFrames)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a>(AudioStreamCallback *streamCallback)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#ad50f5d20cdf420d982bf499790cd3563">setChannelConversionAllowed</a>(bool allowed)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7">setChannelCount</a>(int channelCount)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">setContentType</a>(ContentType contentType)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a44b68216c48f8fb08a9e63178e0b0eeb">openStream</a>(std::shared_ptr< oboe::AudioStream > &stream)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html#aa9c987a59555d7a60b9f7a63f4afc7fc">operator=</a>(const AudioStreamBase &)=default</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391">setAudioApi</a>(AudioApi audioApi)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a>(int32_t bufferCapacityInFrames)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a>(AudioStreamCallback *streamCallback)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#ad50f5d20cdf420d982bf499790cd3563">setChannelConversionAllowed</a>(bool allowed)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7">setChannelCount</a>(int channelCount)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">setContentType</a>(ContentType contentType)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#acad307720e0f370267b4e2f9a626ae70">setDataCallback</a>(oboe::AudioStreamDataCallback *dataCallback)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e">setDeviceId</a>(int32_t deviceId)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c">setDirection</a>(Direction direction)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a>(AudioFormat format)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a7ec5f427cd6fe55cb1ce536ff0cbb4d2">setFormatConversionAllowed</a>(bool allowed)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a>(int framesPerCallback)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#aacb66f530bfc6f545911b5e169774567">setErrorCallback</a>(oboe::AudioStreamErrorCallback *errorCallback)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a>(AudioFormat format)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a7ec5f427cd6fe55cb1ce536ff0cbb4d2">setFormatConversionAllowed</a>(bool allowed)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a>(int framesPerCallback)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#afb8e95e80df7edd1af27af490438785e">setFramesPerDataCallback</a>(int framesPerCallback)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0">setInputPreset</a>(InputPreset inputPreset)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee">setPerformanceMode</a>(PerformanceMode performanceMode)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d">setSampleRate</a>(int32_t sampleRate)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_builder.html">oboe::AudioStreamBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
diff --git a/docs/reference/classoboe_1_1_audio_stream_builder.html b/docs/reference/classoboe_1_1_audio_stream_builder.html
index afd1e1b..78c1e16 100644
--- a/docs/reference/classoboe_1_1_audio_stream_builder.html
+++ b/docs/reference/classoboe_1_1_audio_stream_builder.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -100,6 +100,8 @@
<tr class="separator:a30ef3d5f51d56a9f980dc09600ed139d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3f397821f61eabaeedaf31064c859a54"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">setFramesPerCallback</a> (int framesPerCallback)</td></tr>
<tr class="separator:a3f397821f61eabaeedaf31064c859a54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afb8e95e80df7edd1af27af490438785e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#afb8e95e80df7edd1af27af490438785e">setFramesPerDataCallback</a> (int framesPerCallback)</td></tr>
+<tr class="separator:afb8e95e80df7edd1af27af490438785e"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aa2e1d2d73cd6c2eb9f349bf2fe5f6515"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">setFormat</a> (<a class="el" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> format)</td></tr>
<tr class="separator:aa2e1d2d73cd6c2eb9f349bf2fe5f6515"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:abaff480867af51ca0899bfa6fd7cc3ef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">setBufferCapacityInFrames</a> (int32_t bufferCapacityInFrames)</td></tr>
@@ -122,6 +124,10 @@
<tr class="separator:a54c1651bdbe089d0d714af499e8a5f1d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af36ddcd00686a9e1de661bdac0685a8e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e">setDeviceId</a> (int32_t deviceId)</td></tr>
<tr class="separator:af36ddcd00686a9e1de661bdac0685a8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acad307720e0f370267b4e2f9a626ae70"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#acad307720e0f370267b4e2f9a626ae70">setDataCallback</a> (<a class="el" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a> *dataCallback)</td></tr>
+<tr class="separator:acad307720e0f370267b4e2f9a626ae70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aacb66f530bfc6f545911b5e169774567"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#aacb66f530bfc6f545911b5e169774567">setErrorCallback</a> (<a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a> *errorCallback)</td></tr>
+<tr class="separator:aacb66f530bfc6f545911b5e169774567"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a698cefa9af73bc97c020c004821fccbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">setCallback</a> (<a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> *streamCallback)</td></tr>
<tr class="separator:a698cefa9af73bc97c020c004821fccbd"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad50f5d20cdf420d982bf499790cd3563"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#ad50f5d20cdf420d982bf499790cd3563">setChannelConversionAllowed</a> (bool allowed)</td></tr>
@@ -134,6 +140,8 @@
<tr class="separator:aa07ea100fcb107d9f7913f206c2214f4"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a86b94cfa47729bef2e04dce1a9086074"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074">openStream</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> **stream)</td></tr>
<tr class="separator:a86b94cfa47729bef2e04dce1a9086074"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44b68216c48f8fb08a9e63178e0b0eeb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a44b68216c48f8fb08a9e63178e0b0eeb">openStream</a> (std::shared_ptr< <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a> > &stream)</td></tr>
+<tr class="separator:a44b68216c48f8fb08a9e63178e0b0eeb"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a7ab172a9be4fca2489aa5cbcc48c20ff"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_builder.html#a7ab172a9be4fca2489aa5cbcc48c20ff">openManagedStream</a> (ManagedStream &stream)</td></tr>
<tr class="separator:a7ab172a9be4fca2489aa5cbcc48c20ff"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="inherit_header pub_methods_classoboe_1_1_audio_stream_base"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classoboe_1_1_audio_stream_base')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td></tr>
@@ -149,6 +157,8 @@
<tr class="separator:ae9d32f3e09174bad69e74f147ee33087 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a8878a90949badbb5486cc2e022a57086 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">getFramesPerCallback</a> () const</td></tr>
<tr class="separator:a8878a90949badbb5486cc2e022a57086 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abc3ee2815568b425d15a40e132aa8e38 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38">getFramesPerDataCallback</a> () const</td></tr>
+<tr class="separator:abc3ee2815568b425d15a40e132aa8e38 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a92afc593e856571aacbfd02e57075df6">AudioFormat</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">getFormat</a> () const</td></tr>
<tr class="separator:ab1e640461d7bf9d596decb913da7ac86 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af5217ab05bfde0d7637024b599302d0b inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">virtual int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b">getBufferSizeInFrames</a> ()</td></tr>
@@ -161,8 +171,14 @@
<tr class="separator:a2ddb935de0e24dd7ae8e2cfbecac9fdc inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a093057d625bc896864b959974c265f21 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">getDeviceId</a> () const</td></tr>
<tr class="separator:a093057d625bc896864b959974c265f21 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797">getCallback</a> () const</td></tr>
-<tr class="separator:a1b4a2a191546708da657510c3cd6b797 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9fb2f34ae62dbda2c10e8513b754fa0c inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c">getDataCallback</a> () const</td></tr>
+<tr class="separator:a9fb2f34ae62dbda2c10e8513b754fa0c inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1328fb9288166ff325995ce1ea1867f0 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0">getErrorCallback</a> () const</td></tr>
+<tr class="separator:a1328fb9288166ff325995ce1ea1867f0 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a54d38b985a2eb12c6972104dc0ce73 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73">isDataCallbackSpecified</a> () const</td></tr>
+<tr class="separator:a9a54d38b985a2eb12c6972104dc0ce73 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aef579f6d1f779c89d051f0963f2976b3 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3">isErrorCallbackSpecified</a> () const</td></tr>
+<tr class="separator:aef579f6d1f779c89d051f0963f2976b3 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0">Usage</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a0bcfb2f8bd11c92b541fd910da9af397">getUsage</a> () const</td></tr>
<tr class="separator:a0bcfb2f8bd11c92b541fd910da9af397 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab12e2d068fa87e0553b01a400d96eb82 inherit pub_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceoboe.html#a2a3cec6f021c1a324df60273710c604b">ContentType</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">getContentType</a> () const</td></tr>
@@ -187,9 +203,14 @@
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_methods_classoboe_1_1_audio_stream_base"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classoboe_1_1_audio_stream_base')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td></tr>
+<tr class="memitem:a5d5e07e98921d0193a5c0ccbe06f68c2 inherit pro_methods_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2">isValidConfig</a> ()</td></tr>
+<tr class="separator:a5d5e07e98921d0193a5c0ccbe06f68c2 inherit pro_methods_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="inherit_header pro_attribs_classoboe_1_1_audio_stream_base"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classoboe_1_1_audio_stream_base')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="classoboe_1_1_audio_stream_base.html">oboe::AudioStreamBase</a></td></tr>
-<tr class="memitem:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">mStreamCallback</a> = nullptr</td></tr>
-<tr class="separator:ae3f72318212dd9977d7fa0ced92c91f4 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6d8493f66a945cb426506c70f0358e5f inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">mDataCallback</a> = nullptr</td></tr>
+<tr class="separator:a6d8493f66a945cb426506c70f0358e5f inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adc0c8cc54adb6d3350c62b8a74b9c57b inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">mErrorCallback</a> = nullptr</td></tr>
+<tr class="separator:adc0c8cc54adb6d3350c62b8a74b9c57b inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899">mFramesPerCallback</a> = <a class="el" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
<tr class="separator:a3962eb94420ad0ecea70029236001899 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a5ff460bac9d14dfeac4eeddfcbb6e206 inherit pro_attribs_classoboe_1_1_audio_stream_base"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206">mChannelCount</a> = <a class="el" href="namespaceoboe.html#ab0772052200184e514082eaa89be7905">kUnspecified</a></td></tr>
@@ -344,7 +365,7 @@
</div>
</div>
<a id="a86b94cfa47729bef2e04dce1a9086074"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a86b94cfa47729bef2e04dce1a9086074">◆ </a></span>openStream()</h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a86b94cfa47729bef2e04dce1a9086074">◆ </a></span>openStream() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -360,6 +381,7 @@
</div><div class="memdoc">
<p>Create and open a stream object based on the current settings.</p>
<p>The caller owns the pointer to the <a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> object.</p>
+<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000004">Deprecated:</a></b></dt><dd>Use <a class="el" href="classoboe_1_1_audio_stream_builder.html#a44b68216c48f8fb08a9e63178e0b0eeb">openStream(std::shared_ptr<oboe::AudioStream> &stream)</a> instead. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">stream</td><td>pointer to a variable to receive the stream address </td></tr>
@@ -370,6 +392,33 @@
</div>
</div>
+<a id="a44b68216c48f8fb08a9e63178e0b0eeb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44b68216c48f8fb08a9e63178e0b0eeb">◆ </a></span>openStream() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> oboe::AudioStreamBuilder::openStream </td>
+ <td>(</td>
+ <td class="paramtype">std::shared_ptr< <a class="el" href="classoboe_1_1_audio_stream.html">oboe::AudioStream</a> > & </td>
+ <td class="paramname"><em>stream</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Create and open a stream object based on the current settings.</p>
+<p>The caller shares the pointer to the <a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> object. The shared_ptr is used internally by Oboe to prevent the stream from being deleted while it is being used by callbacks.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">stream</td><td>reference to a shared_ptr to receive the stream address </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>OBOE_OK if successful or a negative error code </dd></dl>
+
+</div>
+</div>
<a id="a38c6d6c5e718df1e3ac69daaac47c391"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a38c6d6c5e718df1e3ac69daaac47c391">◆ </a></span>setAudioApi()</h2>
@@ -466,6 +515,7 @@
</table>
</div><div class="memdoc">
<p>Specifies an object to handle data or error related callbacks from the underlying API.</p>
+<p>This is the equivalent of calling both <a class="el" href="classoboe_1_1_audio_stream_builder.html#acad307720e0f370267b4e2f9a626ae70">setDataCallback()</a> and <a class="el" href="classoboe_1_1_audio_stream_builder.html#aacb66f530bfc6f545911b5e169774567">setErrorCallback()</a>.</p>
<p><b>Important: See <a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> for restrictions on what may be called from the callback methods.</b></p>
<p>When an error callback occurs, the associated stream will be stopped and closed in a separate thread.</p>
<p>A note on why the streamCallback parameter is a raw pointer rather than a smart pointer:</p>
@@ -560,8 +610,8 @@
</tr>
</table>
</div><div class="memdoc">
-<p>Set the type of audio data that the stream will carry.</p>
-<p>The system will use this information to optimize the behavior of the stream. This could, for example, affect whether a stream is paused when a notification occurs.</p>
+<p>Set the type of audio data that an output stream will carry.</p>
+<p>The system will use this information to optimize the behavior of the stream. This could, for example, affect whether a stream is paused when a notification occurs. The contentType is ignored for input streams.</p>
<p>The default, if you do not call this function, is ContentType::Music.</p>
<p>Added in API level 28.</p>
<dl class="params"><dt>Parameters</dt><dd>
@@ -573,6 +623,41 @@
</div>
</div>
+<a id="acad307720e0f370267b4e2f9a626ae70"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acad307720e0f370267b4e2f9a626ae70">◆ </a></span>setDataCallback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setDataCallback </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a> * </td>
+ <td class="paramname"><em>dataCallback</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Specifies an object to handle data related callbacks from the underlying API.</p>
+<p><b>Important: See <a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> for restrictions on what may be called from the callback methods.</b></p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">dataCallback</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>pointer to the builder so calls can be chained </dd></dl>
+
+</div>
+</div>
<a id="af36ddcd00686a9e1de661bdac0685a8e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af36ddcd00686a9e1de661bdac0685a8e">◆ </a></span>setDeviceId()</h2>
@@ -643,6 +728,42 @@
</div>
</div>
+<a id="aacb66f530bfc6f545911b5e169774567"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aacb66f530bfc6f545911b5e169774567">◆ </a></span>setErrorCallback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setErrorCallback </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a> * </td>
+ <td class="paramname"><em>errorCallback</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Specifies an object to handle error related callbacks from the underlying API. This can occur when a stream is disconnected because a headset is plugged in or unplugged. It can also occur if the audio service fails or if an exclusive stream is stolen by another stream.</p>
+<p><b>Important: See <a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> for restrictions on what may be called from the callback methods.</b></p>
+<p><b>When an error callback occurs, the associated stream must be stopped and closed in a separate thread.</b></p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">errorCallback</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>pointer to the builder so calls can be chained </dd></dl>
+
+</div>
+</div>
<a id="aa2e1d2d73cd6c2eb9f349bf2fe5f6515"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">◆ </a></span>setFormat()</h2>
@@ -722,6 +843,33 @@
</tr>
</table>
</div><div class="memdoc">
+<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000003">Deprecated:</a></b></dt><dd>use <code>setFramesPerDataCallback</code> instead. </dd></dl>
+
+</div>
+</div>
+<a id="afb8e95e80df7edd1af27af490438785e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afb8e95e80df7edd1af27af490438785e">◆ </a></span>setFramesPerDataCallback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classoboe_1_1_audio_stream_builder.html">AudioStreamBuilder</a>* oboe::AudioStreamBuilder::setFramesPerDataCallback </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>framesPerCallback</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
<p>Request a specific number of frames for the data callback.</p>
<p>Default is kUnspecified. If the value is unspecified then the actual number may vary from callback to callback.</p>
<p>If an application can handle a varying number of frames then we recommend leaving this unspecified. This allow the underlying API to optimize the callbacks. But if your application is, for example, doing FFTs or other block oriented operations, then call this function to get the sizes you need.</p>
@@ -961,8 +1109,8 @@
</tr>
</table>
</div><div class="memdoc">
-<p>Set the intended use case for the stream.</p>
-<p>The system will use this information to optimize the behavior of the stream. This could, for example, affect how volume and focus is handled for the stream.</p>
+<p>Set the intended use case for an output stream.</p>
+<p>The system will use this information to optimize the behavior of the stream. This could, for example, affect how volume and focus is handled for the stream. The usage is ignored for input streams.</p>
<p>The default, if you do not call this function, is <a class="el" href="namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a3b563524fdb17b4a86590470d40bef74">Usage::Media</a>.</p>
<p>Added in API level 28.</p>
<dl class="params"><dt>Parameters</dt><dd>
diff --git a/docs/reference/classoboe_1_1_audio_stream_callback-members.html b/docs/reference/classoboe_1_1_audio_stream_callback-members.html
index c4bb1b0..fac5145 100644
--- a/docs/reference/classoboe_1_1_audio_stream_callback-members.html
+++ b/docs/reference/classoboe_1_1_audio_stream_callback-members.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -74,10 +74,13 @@
<p>This is the complete list of members for <a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a>, including all inherited members.</p>
<table class="directory">
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady</a>(AudioStream *oboeStream, void *audioData, int32_t numFrames)=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html#a57a1b21efc764e8bbf8d92008a993bfd">onErrorAfterClose</a>(AudioStream *, Result)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html#a77ceb641f941164d7b4d4c51c9a888b9">onErrorBeforeClose</a>(AudioStream *, Result)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStreamCallback</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html#ad8a3a9f609df5fd3a5d885cbe1b2204d">onAudioReady</a>(AudioStream *audioStream, void *audioData, int32_t numFrames)=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">onError</a>(AudioStream *, Result)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe">onErrorAfterClose</a>(AudioStream *, Result)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0">onErrorBeforeClose</a>(AudioStream *, Result)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamCallback</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStreamDataCallback</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamErrorCallback</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/classoboe_1_1_audio_stream_callback.html b/docs/reference/classoboe_1_1_audio_stream_callback.html
index d99467e..8dea790 100644
--- a/docs/reference/classoboe_1_1_audio_stream_callback.html
+++ b/docs/reference/classoboe_1_1_audio_stream_callback.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -68,10 +68,9 @@
</div><!-- top -->
<div class="header">
<div class="summary">
-<a href="#pub-methods">Public Member Functions</a> |
<a href="classoboe_1_1_audio_stream_callback-members.html">List of all members</a> </div>
<div class="headertitle">
-<div class="title">oboe::AudioStreamCallback Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div>
+<div class="title">oboe::AudioStreamCallback Class Reference</div> </div>
</div><!--header-->
<div class="contents">
@@ -82,206 +81,32 @@
<div class="center">
<img src="classoboe_1_1_audio_stream_callback.png" usemap="#oboe::AudioStreamCallback_map" alt=""/>
<map id="oboe::AudioStreamCallback_map" name="oboe::AudioStreamCallback_map">
-<area href="classoboe_1_1_stabilized_callback.html" alt="oboe::StabilizedCallback" shape="rect" coords="0,56,167,80"/>
+<area href="classoboe_1_1_audio_stream_data_callback.html" alt="oboe::AudioStreamDataCallback" shape="rect" coords="0,0,197,24"/>
+<area href="classoboe_1_1_audio_stream_error_callback.html" alt="oboe::AudioStreamErrorCallback" shape="rect" coords="207,0,404,24"/>
+<area href="classoboe_1_1_stabilized_callback.html" alt="oboe::StabilizedCallback" shape="rect" coords="103,112,300,136"/>
</map>
</div></div>
<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
-Public Member Functions</h2></td></tr>
-<tr class="memitem:af3a7c44f0254abe6e5e5bb566e2317df"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, void *audioData, int32_t numFrames)=0</td></tr>
-<tr class="separator:af3a7c44f0254abe6e5e5bb566e2317df"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a77ceb641f941164d7b4d4c51c9a888b9"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_callback.html#a77ceb641f941164d7b4d4c51c9a888b9">onErrorBeforeClose</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *, <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>)</td></tr>
-<tr class="separator:a77ceb641f941164d7b4d4c51c9a888b9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a57a1b21efc764e8bbf8d92008a993bfd"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_callback.html#a57a1b21efc764e8bbf8d92008a993bfd">onErrorAfterClose</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *, <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>)</td></tr>
-<tr class="separator:a57a1b21efc764e8bbf8d92008a993bfd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_methods_classoboe_1_1_audio_stream_data_callback"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classoboe_1_1_audio_stream_data_callback')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a></td></tr>
+<tr class="memitem:ad8a3a9f609df5fd3a5d885cbe1b2204d inherit pub_methods_classoboe_1_1_audio_stream_data_callback"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html#ad8a3a9f609df5fd3a5d885cbe1b2204d">onAudioReady</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *audioStream, void *audioData, int32_t numFrames)=0</td></tr>
+<tr class="separator:ad8a3a9f609df5fd3a5d885cbe1b2204d inherit pub_methods_classoboe_1_1_audio_stream_data_callback"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_classoboe_1_1_audio_stream_error_callback"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classoboe_1_1_audio_stream_error_callback')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></td></tr>
+<tr class="memitem:a5ad4b8936746ecbb2160a9389b117fc3 inherit pub_methods_classoboe_1_1_audio_stream_error_callback"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">onError</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *, <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>)</td></tr>
+<tr class="separator:a5ad4b8936746ecbb2160a9389b117fc3 inherit pub_methods_classoboe_1_1_audio_stream_error_callback"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4eb1e4916b71d8231e97b19898bc9bf0 inherit pub_methods_classoboe_1_1_audio_stream_error_callback"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0">onErrorBeforeClose</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *, <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>)</td></tr>
+<tr class="separator:a4eb1e4916b71d8231e97b19898bc9bf0 inherit pub_methods_classoboe_1_1_audio_stream_error_callback"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a76bd3ef3e00396e10c21812003654cfe inherit pub_methods_classoboe_1_1_audio_stream_error_callback"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe">onErrorAfterClose</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *, <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>)</td></tr>
+<tr class="separator:a76bd3ef3e00396e10c21812003654cfe inherit pub_methods_classoboe_1_1_audio_stream_error_callback"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a> defines a callback interface for:</p>
-<p>1) moving data to/from an audio stream using <code>onAudioReady</code> 2) being alerted when a stream has an error using <code>onError*</code> methods </p>
-</div><h2 class="groupheader">Member Function Documentation</h2>
-<a id="af3a7c44f0254abe6e5e5bb566e2317df"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af3a7c44f0254abe6e5e5bb566e2317df">◆ </a></span>onAudioReady()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual <a class="el" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> oboe::AudioStreamCallback::onAudioReady </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> * </td>
- <td class="paramname"><em>oboeStream</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void * </td>
- <td class="paramname"><em>audioData</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">int32_t </td>
- <td class="paramname"><em>numFrames</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-<p>A buffer is ready for processing.</p>
-<p>For an output stream, this function should render and write numFrames of data in the stream's current data format to the audioData buffer.</p>
-<p>For an input stream, this function should read and process numFrames of data from the audioData buffer.</p>
-<p>The audio data is passed through the buffer. So do NOT call read() or write() on the stream that is making the callback.</p>
-<p>Note that numFrames can vary unless <a class="el" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">AudioStreamBuilder::setFramesPerCallback()</a> is called.</p>
-<p>Also note that this callback function should be considered a "real-time" function. It must not do anything that could cause an unbounded delay because that can cause the audio to glitch or pop.</p>
-<p>These are things the function should NOT do: </p><ul>
-<li>
-allocate memory using, for example, malloc() or new </li>
-<li>
-any file operations such as opening, closing, reading or writing </li>
-<li>
-any network operations such as streaming </li>
-<li>
-use any mutexes or other synchronization primitives </li>
-<li>
-sleep </li>
-<li>
-oboeStream->stop(), pause(), flush() or close() </li>
-<li>
-oboeStream->read() </li>
-<li>
-oboeStream->write() </li>
-</ul>
-<p>The following are OK to call from the data callback: </p><ul>
-<li>
-oboeStream->get*() </li>
-<li>
-<a class="el" href="namespaceoboe.html#af65aaea3c5d82eee6906664d61c094b3">oboe::convertToText()</a> </li>
-<li>
-oboeStream->setBufferSizeInFrames() </li>
-</ul>
-<p>If you need to move data, eg. MIDI commands, in or out of the callback function then we recommend the use of non-blocking techniques such as an atomic FIFO.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">oboeStream</td><td>pointer to the associated stream </td></tr>
- <tr><td class="paramname">audioData</td><td>buffer containing input data or a place to put output data </td></tr>
- <tr><td class="paramname">numFrames</td><td>number of frames to be processed </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>DataCallbackResult::Continue or DataCallbackResult::Stop </dd></dl>
-
-<p>Implemented in <a class="el" href="classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49">oboe::StabilizedCallback</a>.</p>
-
-</div>
-</div>
-<a id="a57a1b21efc764e8bbf8d92008a993bfd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a57a1b21efc764e8bbf8d92008a993bfd">◆ </a></span>onErrorAfterClose()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual void oboe::AudioStreamCallback::onErrorAfterClose </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-<p>This will be called when an error occurs on a stream or when the stream is disconnected. The underlying AAudio or OpenSL ES stream will already be stopped AND closed by Oboe. So the underlying stream cannot be referenced. But you can still query most parameters.</p>
-<p>This callback could be used to reopen a new stream on another device. You can safely delete the old <a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> in this method.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">oboeStream</td><td>pointer to the associated stream </td></tr>
- <tr><td class="paramname">error</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Reimplemented in <a class="el" href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4">oboe::StabilizedCallback</a>.</p>
-
-</div>
-</div>
-<a id="a77ceb641f941164d7b4d4c51c9a888b9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a77ceb641f941164d7b4d4c51c9a888b9">◆ </a></span>onErrorBeforeClose()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual void oboe::AudioStreamCallback::onErrorBeforeClose </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> * </td>
- <td class="paramname">, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> </td>
- <td class="paramname"> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-<p>This will be called when an error occurs on a stream or when the stream is disconnected.</p>
-<p>Note that this will be called on a different thread than the <a class="el" href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">onAudioReady()</a> thread. This thread will be created by Oboe.</p>
-<p>The underlying stream will already be stopped by Oboe but not yet closed. So the stream can be queried.</p>
-<p>Do not close or delete the stream in this method because it will be closed after this method returns.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">oboeStream</td><td>pointer to the associated stream </td></tr>
- <tr><td class="paramname">error</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-<p>Reimplemented in <a class="el" href="classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10">oboe::StabilizedCallback</a>.</p>
-
-</div>
-</div>
-<hr/>The documentation for this class was generated from the following file:<ul>
+<p>1) moving data to/from an audio stream using <code>onAudioReady</code> 2) being alerted when a stream has an error using <code>onError*</code> methods</p>
+<p>It is used with <a class="el" href="classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd">AudioStreamBuilder::setCallback()</a>.</p>
+<p>It combines the interfaces defined by <a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> and <a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a>. This was the original callback object. We now recommend using the individual interfaces and using setDataCallback() and setErrorCallback().</p>
+<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000005">Deprecated:</a></b></dt><dd>Use <code><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a></code> and <code><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a></code> instead </dd></dl>
+</div><hr/>The documentation for this class was generated from the following file:<ul>
<li>include/oboe/<a class="el" href="_audio_stream_callback_8h_source.html">AudioStreamCallback.h</a></li>
</ul>
</div><!-- contents -->
diff --git a/docs/reference/classoboe_1_1_audio_stream_callback.png b/docs/reference/classoboe_1_1_audio_stream_callback.png
index d3580d5..8db5436 100644
--- a/docs/reference/classoboe_1_1_audio_stream_callback.png
+++ b/docs/reference/classoboe_1_1_audio_stream_callback.png
Binary files differ
diff --git a/docs/reference/classoboe_1_1_audio_stream_data_callback-members.html b/docs/reference/classoboe_1_1_audio_stream_data_callback-members.html
new file mode 100644
index 0000000..89075e4
--- /dev/null
+++ b/docs/reference/classoboe_1_1_audio_stream_data_callback-members.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.15"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Oboe
+  <span id="projectnumber">1.5</span>
+ </div>
+ <div id="projectbrief">A library for creating real-time audio apps on Android</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.15 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">oboe::AudioStreamDataCallback Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html#ad8a3a9f609df5fd3a5d885cbe1b2204d">onAudioReady</a>(AudioStream *audioStream, void *audioData, int32_t numFrames)=0</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStreamDataCallback</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.15
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream_data_callback.html b/docs/reference/classoboe_1_1_audio_stream_data_callback.html
new file mode 100644
index 0000000..45c65ac
--- /dev/null
+++ b/docs/reference/classoboe_1_1_audio_stream_data_callback.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.15"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: oboe::AudioStreamDataCallback Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Oboe
+  <span id="projectnumber">1.5</span>
+ </div>
+ <div id="projectbrief">A library for creating real-time audio apps on Android</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.15 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classoboe_1_1_audio_stream_data_callback-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">oboe::AudioStreamDataCallback Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="_audio_stream_callback_8h_source.html">AudioStreamCallback.h</a>></code></p>
+<div class="dynheader">
+Inheritance diagram for oboe::AudioStreamDataCallback:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classoboe_1_1_audio_stream_data_callback.png" usemap="#oboe::AudioStreamDataCallback_map" alt=""/>
+ <map id="oboe::AudioStreamDataCallback_map" name="oboe::AudioStreamDataCallback_map">
+<area href="classoboe_1_1_audio_stream_callback.html" alt="oboe::AudioStreamCallback" shape="rect" coords="0,56,193,80"/>
+<area href="classoboe_1_1_stabilized_callback.html" alt="oboe::StabilizedCallback" shape="rect" coords="0,112,193,136"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad8a3a9f609df5fd3a5d885cbe1b2204d"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html#ad8a3a9f609df5fd3a5d885cbe1b2204d">onAudioReady</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *audioStream, void *audioData, int32_t numFrames)=0</td></tr>
+<tr class="separator:ad8a3a9f609df5fd3a5d885cbe1b2204d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a> defines a callback interface for moving data to/from an audio stream using <code>onAudioReady</code> 2) being alerted when a stream has an error using <code>onError*</code> methods</p>
+<p>It is used with <a class="el" href="classoboe_1_1_audio_stream_builder.html#acad307720e0f370267b4e2f9a626ae70">AudioStreamBuilder::setDataCallback()</a>. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="ad8a3a9f609df5fd3a5d885cbe1b2204d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad8a3a9f609df5fd3a5d885cbe1b2204d">◆ </a></span>onAudioReady()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual <a class="el" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> oboe::AudioStreamDataCallback::onAudioReady </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> * </td>
+ <td class="paramname"><em>audioStream</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void * </td>
+ <td class="paramname"><em>audioData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int32_t </td>
+ <td class="paramname"><em>numFrames</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>A buffer is ready for processing.</p>
+<p>For an output stream, this function should render and write numFrames of data in the stream's current data format to the audioData buffer.</p>
+<p>For an input stream, this function should read and process numFrames of data from the audioData buffer.</p>
+<p>The audio data is passed through the buffer. So do NOT call read() or write() on the stream that is making the callback.</p>
+<p>Note that numFrames can vary unless <a class="el" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">AudioStreamBuilder::setFramesPerCallback()</a> is called.</p>
+<p>Also note that this callback function should be considered a "real-time" function. It must not do anything that could cause an unbounded delay because that can cause the audio to glitch or pop.</p>
+<p>These are things the function should NOT do: </p><ul>
+<li>
+allocate memory using, for example, malloc() or new </li>
+<li>
+any file operations such as opening, closing, reading or writing </li>
+<li>
+any network operations such as streaming </li>
+<li>
+use any mutexes or other synchronization primitives </li>
+<li>
+sleep </li>
+<li>
+oboeStream->stop(), pause(), flush() or close() </li>
+<li>
+oboeStream->read() </li>
+<li>
+oboeStream->write() </li>
+</ul>
+<p>The following are OK to call from the data callback: </p><ul>
+<li>
+oboeStream->get*() </li>
+<li>
+<a class="el" href="namespaceoboe.html#af65aaea3c5d82eee6906664d61c094b3">oboe::convertToText()</a> </li>
+<li>
+oboeStream->setBufferSizeInFrames() </li>
+</ul>
+<p>If you need to move data, eg. MIDI commands, in or out of the callback function then we recommend the use of non-blocking techniques such as an atomic FIFO.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">audioStream</td><td>pointer to the associated stream </td></tr>
+ <tr><td class="paramname">audioData</td><td>buffer containing input data or a place to put output data </td></tr>
+ <tr><td class="paramname">numFrames</td><td>number of frames to be processed </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>DataCallbackResult::Continue or DataCallbackResult::Stop </dd></dl>
+
+<p>Implemented in <a class="el" href="classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49">oboe::StabilizedCallback</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>include/oboe/<a class="el" href="_audio_stream_callback_8h_source.html">AudioStreamCallback.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.15
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream_data_callback.png b/docs/reference/classoboe_1_1_audio_stream_data_callback.png
new file mode 100644
index 0000000..ac644c4
--- /dev/null
+++ b/docs/reference/classoboe_1_1_audio_stream_data_callback.png
Binary files differ
diff --git a/docs/reference/classoboe_1_1_audio_stream_error_callback-members.html b/docs/reference/classoboe_1_1_audio_stream_error_callback-members.html
new file mode 100644
index 0000000..0b6309f
--- /dev/null
+++ b/docs/reference/classoboe_1_1_audio_stream_error_callback-members.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.15"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Oboe
+  <span id="projectnumber">1.5</span>
+ </div>
+ <div id="projectbrief">A library for creating real-time audio apps on Android</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.15 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">oboe::AudioStreamErrorCallback Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">onError</a>(AudioStream *, Result)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe">onErrorAfterClose</a>(AudioStream *, Result)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0">onErrorBeforeClose</a>(AudioStream *, Result)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStreamErrorCallback</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.15
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream_error_callback.html b/docs/reference/classoboe_1_1_audio_stream_error_callback.html
new file mode 100644
index 0000000..1569e21
--- /dev/null
+++ b/docs/reference/classoboe_1_1_audio_stream_error_callback.html
@@ -0,0 +1,260 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.15"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: oboe::AudioStreamErrorCallback Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Oboe
+  <span id="projectnumber">1.5</span>
+ </div>
+ <div id="projectbrief">A library for creating real-time audio apps on Android</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.15 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> |
+<a href="classoboe_1_1_audio_stream_error_callback-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">oboe::AudioStreamErrorCallback Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include <<a class="el" href="_audio_stream_callback_8h_source.html">AudioStreamCallback.h</a>></code></p>
+<div class="dynheader">
+Inheritance diagram for oboe::AudioStreamErrorCallback:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classoboe_1_1_audio_stream_error_callback.png" usemap="#oboe::AudioStreamErrorCallback_map" alt=""/>
+ <map id="oboe::AudioStreamErrorCallback_map" name="oboe::AudioStreamErrorCallback_map">
+<area href="classoboe_1_1_audio_stream_callback.html" alt="oboe::AudioStreamCallback" shape="rect" coords="0,56,197,80"/>
+<area href="classoboe_1_1_stabilized_callback.html" alt="oboe::StabilizedCallback" shape="rect" coords="0,112,197,136"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a5ad4b8936746ecbb2160a9389b117fc3"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">onError</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *, <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>)</td></tr>
+<tr class="separator:a5ad4b8936746ecbb2160a9389b117fc3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4eb1e4916b71d8231e97b19898bc9bf0"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0">onErrorBeforeClose</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *, <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>)</td></tr>
+<tr class="separator:a4eb1e4916b71d8231e97b19898bc9bf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a76bd3ef3e00396e10c21812003654cfe"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe">onErrorAfterClose</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *, <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>)</td></tr>
+<tr class="separator:a76bd3ef3e00396e10c21812003654cfe"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a> defines a callback interface for being alerted when a stream has an error or is disconnected using <code>onError*</code> methods.</p>
+<p>It is used with <a class="el" href="classoboe_1_1_audio_stream_builder.html#aacb66f530bfc6f545911b5e169774567">AudioStreamBuilder::setErrorCallback()</a>. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a5ad4b8936746ecbb2160a9389b117fc3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ad4b8936746ecbb2160a9389b117fc3">◆ </a></span>onError()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual bool oboe::AudioStreamErrorCallback::onError </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This will be called before other <code>onError</code> methods when an error occurs on a stream, such as when the stream is disconnected.</p>
+<p>It can be used to override and customize the normal error processing. Use of this method is considered an advanced technique. It might, for example, be used if an app want to use a high level lock when closing and reopening a stream. Or it might be used when an app want to signal a management thread that handles all of the stream state.</p>
+<p>If this method returns false it indicates that the stream has *not been stopped and closed by the application. In this case it will be stopped by Oboe in the following way: <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0">onErrorBeforeClose()</a> will be called, then the stream will be closed and <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe">onErrorAfterClose()</a> will be closed.</p>
+<p>If this method returns true it indicates that the stream <em>has</em> been stopped and closed by the application and Oboe will not do this. In that case, the app MUST stop() and close() the stream.</p>
+<p>This method will be called on a thread created by Oboe.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">audioStream</td><td>pointer to the associated stream </td></tr>
+ <tr><td class="paramname">error</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>true if the stream has been stopped and closed, false if not </dd></dl>
+
+</div>
+</div>
+<a id="a76bd3ef3e00396e10c21812003654cfe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a76bd3ef3e00396e10c21812003654cfe">◆ </a></span>onErrorAfterClose()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void oboe::AudioStreamErrorCallback::onErrorAfterClose </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This will be called when an error occurs on a stream, such as when the stream is disconnected, and if <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">onError()</a> returns false (indicating that the error has not already been handled).</p>
+<p>The underlying AAudio or OpenSL ES stream will already be stopped AND closed by Oboe. So the underlying stream cannot be referenced. But you can still query most parameters.</p>
+<p>This callback could be used to reopen a new stream on another device.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">audioStream</td><td>pointer to the associated stream </td></tr>
+ <tr><td class="paramname">error</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Reimplemented in <a class="el" href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4">oboe::StabilizedCallback</a>.</p>
+
+</div>
+</div>
+<a id="a4eb1e4916b71d8231e97b19898bc9bf0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4eb1e4916b71d8231e97b19898bc9bf0">◆ </a></span>onErrorBeforeClose()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void oboe::AudioStreamErrorCallback::onErrorBeforeClose </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> * </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This will be called when an error occurs on a stream, such as when the stream is disconnected, and if <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">onError()</a> returns false (indicating that the error has not already been handled).</p>
+<p>Note that this will be called on a thread created by Oboe.</p>
+<p>The underlying stream will already be stopped by Oboe but not yet closed. So the stream can be queried.</p>
+<p>Do not close or delete the stream in this method because it will be closed after this method returns.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">audioStream</td><td>pointer to the associated stream </td></tr>
+ <tr><td class="paramname">error</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Reimplemented in <a class="el" href="classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10">oboe::StabilizedCallback</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>include/oboe/<a class="el" href="_audio_stream_callback_8h_source.html">AudioStreamCallback.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.15
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/classoboe_1_1_audio_stream_error_callback.png b/docs/reference/classoboe_1_1_audio_stream_error_callback.png
new file mode 100644
index 0000000..54c5ef2
--- /dev/null
+++ b/docs/reference/classoboe_1_1_audio_stream_error_callback.png
Binary files differ
diff --git a/docs/reference/classoboe_1_1_default_stream_values-members.html b/docs/reference/classoboe_1_1_default_stream_values-members.html
index 48ecabe..fe2013f 100644
--- a/docs/reference/classoboe_1_1_default_stream_values-members.html
+++ b/docs/reference/classoboe_1_1_default_stream_values-members.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/classoboe_1_1_default_stream_values.html b/docs/reference/classoboe_1_1_default_stream_values.html
index b23f727..282f323 100644
--- a/docs/reference/classoboe_1_1_default_stream_values.html
+++ b/docs/reference/classoboe_1_1_default_stream_values.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/classoboe_1_1_latency_tuner-members.html b/docs/reference/classoboe_1_1_latency_tuner-members.html
index 21ebcd3..55dcbe9 100644
--- a/docs/reference/classoboe_1_1_latency_tuner-members.html
+++ b/docs/reference/classoboe_1_1_latency_tuner-members.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -74,10 +74,14 @@
<p>This is the complete list of members for <a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a>, including all inherited members.</p>
<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getBufferSizeIncrement</b>() const (defined in <a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>getMinimumBufferSize</b>() const (defined in <a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#a45c013fd6787ad09d328385d6314c4d4">isAtMaximumBufferSize</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#a0263b9a55825c0a403653b2b508073ea">LatencyTuner</a>(AudioStream &stream)</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#ab437bd10605af9e5733d043f8adc0b43">LatencyTuner</a>(AudioStream &stream, int32_t maximumBufferSize)</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
<tr><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">requestReset</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#a2684b30205126c8acd2f75d01cce05db">setBufferSizeIncrement</a>(int32_t sizeIncrement)</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#adc96aa53b18a051b6ccdacb838139bf8">setMinimumBufferSize</a>(int32_t bufferSize)</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html#ad2be756965e6a9af3114008eda892174">tune</a>()</td><td class="entry"><a class="el" href="classoboe_1_1_latency_tuner.html">oboe::LatencyTuner</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/reference/classoboe_1_1_latency_tuner.html b/docs/reference/classoboe_1_1_latency_tuner.html
index 849d0db..4167acc 100644
--- a/docs/reference/classoboe_1_1_latency_tuner.html
+++ b/docs/reference/classoboe_1_1_latency_tuner.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -89,6 +89,16 @@
<tr class="separator:a6c0142e08dc65eda8f758b4794450867"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a45c013fd6787ad09d328385d6314c4d4"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_latency_tuner.html#a45c013fd6787ad09d328385d6314c4d4">isAtMaximumBufferSize</a> ()</td></tr>
<tr class="separator:a45c013fd6787ad09d328385d6314c4d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adc96aa53b18a051b6ccdacb838139bf8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_latency_tuner.html#adc96aa53b18a051b6ccdacb838139bf8">setMinimumBufferSize</a> (int32_t bufferSize)</td></tr>
+<tr class="separator:adc96aa53b18a051b6ccdacb838139bf8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaba4b3f075ed8d7c7ad4cad392545c08"><td class="memItemLeft" align="right" valign="top"><a id="aaba4b3f075ed8d7c7ad4cad392545c08"></a>
+int32_t </td><td class="memItemRight" valign="bottom"><b>getMinimumBufferSize</b> () const</td></tr>
+<tr class="separator:aaba4b3f075ed8d7c7ad4cad392545c08"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2684b30205126c8acd2f75d01cce05db"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_latency_tuner.html#a2684b30205126c8acd2f75d01cce05db">setBufferSizeIncrement</a> (int32_t sizeIncrement)</td></tr>
+<tr class="separator:a2684b30205126c8acd2f75d01cce05db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ea6114ac4f78f3e050d405168905123"><td class="memItemLeft" align="right" valign="top"><a id="a5ea6114ac4f78f3e050d405168905123"></a>
+int32_t </td><td class="memItemRight" valign="bottom"><b>getBufferSizeIncrement</b> () const</td></tr>
+<tr class="separator:a5ea6114ac4f78f3e050d405168905123"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p><a class="el" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a> can be used to dynamically tune the latency of an output stream. It adjusts the stream's bufferSize by monitoring the number of underruns.</p>
@@ -211,6 +221,72 @@
</div>
</div>
+<a id="a2684b30205126c8acd2f75d01cce05db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2684b30205126c8acd2f75d01cce05db">◆ </a></span>setBufferSizeIncrement()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void oboe::LatencyTuner::setBufferSizeIncrement </td>
+ <td>(</td>
+ <td class="paramtype">int32_t </td>
+ <td class="paramname"><em>sizeIncrement</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Set the amount the bufferSize will be incremented while tuning. By default, this will be one burst.</p>
+<p>Note that AAudio will quantize the buffer size to a multiple of the burstSize. So the final buffer sizes may not be a multiple of this increment.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sizeIncrement</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="adc96aa53b18a051b6ccdacb838139bf8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adc96aa53b18a051b6ccdacb838139bf8">◆ </a></span>setMinimumBufferSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void oboe::LatencyTuner::setMinimumBufferSize </td>
+ <td>(</td>
+ <td class="paramtype">int32_t </td>
+ <td class="paramname"><em>bufferSize</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Set the minimum bufferSize in frames that is used when the tuner is reset. You may wish to call <a class="el" href="classoboe_1_1_latency_tuner.html#a6c0142e08dc65eda8f758b4794450867">requestReset()</a> after calling this. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">bufferSize</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
<a id="ad2be756965e6a9af3114008eda892174"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad2be756965e6a9af3114008eda892174">◆ </a></span>tune()</h2>
diff --git a/docs/reference/classoboe_1_1_oboe_globals-members.html b/docs/reference/classoboe_1_1_oboe_globals-members.html
new file mode 100644
index 0000000..9ddac6f
--- /dev/null
+++ b/docs/reference/classoboe_1_1_oboe_globals-members.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.15"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Oboe
+  <span id="projectnumber">1.5</span>
+ </div>
+ <div id="projectbrief">A library for creating real-time audio apps on Android</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.15 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_oboe_globals.html">OboeGlobals</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">oboe::OboeGlobals Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classoboe_1_1_oboe_globals.html">oboe::OboeGlobals</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>areWorkaroundsEnabled</b>() (defined in <a class="el" href="classoboe_1_1_oboe_globals.html">oboe::OboeGlobals</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_oboe_globals.html">oboe::OboeGlobals</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_oboe_globals.html#af2b8af764c5a5e6fc007b7725117303b">setWorkaroundsEnabled</a>(bool enabled)</td><td class="entry"><a class="el" href="classoboe_1_1_oboe_globals.html">oboe::OboeGlobals</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.15
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/classoboe_1_1_oboe_globals.html b/docs/reference/classoboe_1_1_oboe_globals.html
new file mode 100644
index 0000000..c582e30
--- /dev/null
+++ b/docs/reference/classoboe_1_1_oboe_globals.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.15"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Oboe: oboe::OboeGlobals Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Oboe
+  <span id="projectnumber">1.5</span>
+ </div>
+ <div id="projectbrief">A library for creating real-time audio apps on Android</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.15 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="namespaceoboe.html">oboe</a></li><li class="navelem"><a class="el" href="classoboe_1_1_oboe_globals.html">OboeGlobals</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-static-methods">Static Public Member Functions</a> |
+<a href="classoboe_1_1_oboe_globals-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">oboe::OboeGlobals Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a37ba77c944e44c36a6b599eb4d630c9f"><td class="memItemLeft" align="right" valign="top"><a id="a37ba77c944e44c36a6b599eb4d630c9f"></a>
+static bool </td><td class="memItemRight" valign="bottom"><b>areWorkaroundsEnabled</b> ()</td></tr>
+<tr class="separator:a37ba77c944e44c36a6b599eb4d630c9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af2b8af764c5a5e6fc007b7725117303b"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_oboe_globals.html#af2b8af764c5a5e6fc007b7725117303b">setWorkaroundsEnabled</a> (bool enabled)</td></tr>
+<tr class="separator:af2b8af764c5a5e6fc007b7725117303b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="af2b8af764c5a5e6fc007b7725117303b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af2b8af764c5a5e6fc007b7725117303b">◆ </a></span>setWorkaroundsEnabled()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void oboe::OboeGlobals::setWorkaroundsEnabled </td>
+ <td>(</td>
+ <td class="paramtype">bool </td>
+ <td class="paramname"><em>enabled</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Disable this when writing tests to reproduce bugs in AAudio or OpenSL ES that have workarounds in Oboe. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">enabled</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>include/oboe/<a class="el" href="_definitions_8h_source.html">Definitions.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.15
+</small></address>
+</body>
+</html>
diff --git a/docs/reference/classoboe_1_1_result_with_value-members.html b/docs/reference/classoboe_1_1_result_with_value-members.html
index 4880127..a8fe74d 100644
--- a/docs/reference/classoboe_1_1_result_with_value-members.html
+++ b/docs/reference/classoboe_1_1_result_with_value-members.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/classoboe_1_1_result_with_value.html b/docs/reference/classoboe_1_1_result_with_value.html
index 3afcf32..58a0826 100644
--- a/docs/reference/classoboe_1_1_result_with_value.html
+++ b/docs/reference/classoboe_1_1_result_with_value.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/classoboe_1_1_stabilized_callback-members.html b/docs/reference/classoboe_1_1_stabilized_callback-members.html
index 722ba64..5b58d7b 100644
--- a/docs/reference/classoboe_1_1_stabilized_callback-members.html
+++ b/docs/reference/classoboe_1_1_stabilized_callback-members.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -75,10 +75,13 @@
<p>This is the complete list of members for <a class="el" href="classoboe_1_1_stabilized_callback.html">oboe::StabilizedCallback</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49">onAudioReady</a>(AudioStream *oboeStream, void *audioData, int32_t numFrames) override</td><td class="entry"><a class="el" href="classoboe_1_1_stabilized_callback.html">oboe::StabilizedCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4">onErrorAfterClose</a>(AudioStream *oboeStream, Result error) override</td><td class="entry"><a class="el" href="classoboe_1_1_stabilized_callback.html">oboe::StabilizedCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10">onErrorBeforeClose</a>(AudioStream *oboeStream, Result error) override</td><td class="entry"><a class="el" href="classoboe_1_1_stabilized_callback.html">oboe::StabilizedCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>StabilizedCallback</b>(AudioStreamCallback *callback) (defined in <a class="el" href="classoboe_1_1_stabilized_callback.html">oboe::StabilizedCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_stabilized_callback.html">oboe::StabilizedCallback</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamCallback</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">onError</a>(AudioStream *, Result)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4">onErrorAfterClose</a>(AudioStream *oboeStream, Result error) override</td><td class="entry"><a class="el" href="classoboe_1_1_stabilized_callback.html">oboe::StabilizedCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10">onErrorBeforeClose</a>(AudioStream *oboeStream, Result error) override</td><td class="entry"><a class="el" href="classoboe_1_1_stabilized_callback.html">oboe::StabilizedCallback</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>StabilizedCallback</b>(AudioStreamCallback *callback) (defined in <a class="el" href="classoboe_1_1_stabilized_callback.html">oboe::StabilizedCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_stabilized_callback.html">oboe::StabilizedCallback</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStreamCallback</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~AudioStreamDataCallback</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">oboe::AudioStreamDataCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>~AudioStreamErrorCallback</b>()=default (defined in <a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a>)</td><td class="entry"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/classoboe_1_1_stabilized_callback.html b/docs/reference/classoboe_1_1_stabilized_callback.html
index d37a824..0026cd0 100644
--- a/docs/reference/classoboe_1_1_stabilized_callback.html
+++ b/docs/reference/classoboe_1_1_stabilized_callback.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -80,7 +80,9 @@
<div class="center">
<img src="classoboe_1_1_stabilized_callback.png" usemap="#oboe::StabilizedCallback_map" alt=""/>
<map id="oboe::StabilizedCallback_map" name="oboe::StabilizedCallback_map">
-<area href="classoboe_1_1_audio_stream_callback.html" alt="oboe::AudioStreamCallback" shape="rect" coords="0,0,167,24"/>
+<area href="classoboe_1_1_audio_stream_callback.html" alt="oboe::AudioStreamCallback" shape="rect" coords="103,56,300,80"/>
+<area href="classoboe_1_1_audio_stream_data_callback.html" alt="oboe::AudioStreamDataCallback" shape="rect" coords="0,0,197,24"/>
+<area href="classoboe_1_1_audio_stream_error_callback.html" alt="oboe::AudioStreamErrorCallback" shape="rect" coords="207,0,404,24"/>
</map>
</div></div>
<table class="memberdecls">
@@ -95,6 +97,9 @@
<tr class="separator:a7ec0e9fca3181962ab78716bcda83e10"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af7521da42c4b08a71e6102994f6f41f4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4">onErrorAfterClose</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *oboeStream, <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a> error) override</td></tr>
<tr class="separator:af7521da42c4b08a71e6102994f6f41f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="inherit_header pub_methods_classoboe_1_1_audio_stream_error_callback"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classoboe_1_1_audio_stream_error_callback')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classoboe_1_1_audio_stream_error_callback.html">oboe::AudioStreamErrorCallback</a></td></tr>
+<tr class="memitem:a5ad4b8936746ecbb2160a9389b117fc3 inherit pub_methods_classoboe_1_1_audio_stream_error_callback"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">onError</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> *, <a class="el" href="namespaceoboe.html#a486512e787b609c80ba4436f23929af1">Result</a>)</td></tr>
+<tr class="separator:a5ad4b8936746ecbb2160a9389b117fc3 inherit pub_methods_classoboe_1_1_audio_stream_error_callback"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="ad447e12ebf732cf151655c1fbaf58a49"></a>
@@ -110,7 +115,7 @@
<td class="memname"><a class="el" href="namespaceoboe.html#af85fc9910a287df6c5df0ed396bb75cd">DataCallbackResult</a> oboe::StabilizedCallback::onAudioReady </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> * </td>
- <td class="paramname"><em>oboeStream</em>, </td>
+ <td class="paramname"><em>audioStream</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
@@ -171,7 +176,7 @@
<p>If you need to move data, eg. MIDI commands, in or out of the callback function then we recommend the use of non-blocking techniques such as an atomic FIFO.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">oboeStream</td><td>pointer to the associated stream </td></tr>
+ <tr><td class="paramname">audioStream</td><td>pointer to the associated stream </td></tr>
<tr><td class="paramname">audioData</td><td>buffer containing input data or a place to put output data </td></tr>
<tr><td class="paramname">numFrames</td><td>number of frames to be processed </td></tr>
</table>
@@ -179,7 +184,7 @@
</dl>
<dl class="section return"><dt>Returns</dt><dd>DataCallbackResult::Continue or DataCallbackResult::Stop </dd></dl>
-<p>Implements <a class="el" href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">oboe::AudioStreamCallback</a>.</p>
+<p>Implements <a class="el" href="classoboe_1_1_audio_stream_data_callback.html#ad8a3a9f609df5fd3a5d885cbe1b2204d">oboe::AudioStreamDataCallback</a>.</p>
</div>
</div>
@@ -216,17 +221,18 @@
</tr>
</table>
</div><div class="memdoc">
-<p>This will be called when an error occurs on a stream or when the stream is disconnected. The underlying AAudio or OpenSL ES stream will already be stopped AND closed by Oboe. So the underlying stream cannot be referenced. But you can still query most parameters.</p>
-<p>This callback could be used to reopen a new stream on another device. You can safely delete the old <a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> in this method.</p>
+<p>This will be called when an error occurs on a stream, such as when the stream is disconnected, and if <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">onError()</a> returns false (indicating that the error has not already been handled).</p>
+<p>The underlying AAudio or OpenSL ES stream will already be stopped AND closed by Oboe. So the underlying stream cannot be referenced. But you can still query most parameters.</p>
+<p>This callback could be used to reopen a new stream on another device.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">oboeStream</td><td>pointer to the associated stream </td></tr>
+ <tr><td class="paramname">audioStream</td><td>pointer to the associated stream </td></tr>
<tr><td class="paramname">error</td><td></td></tr>
</table>
</dd>
</dl>
-<p>Reimplemented from <a class="el" href="classoboe_1_1_audio_stream_callback.html#a57a1b21efc764e8bbf8d92008a993bfd">oboe::AudioStreamCallback</a>.</p>
+<p>Reimplemented from <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe">oboe::AudioStreamErrorCallback</a>.</p>
</div>
</div>
@@ -263,19 +269,19 @@
</tr>
</table>
</div><div class="memdoc">
-<p>This will be called when an error occurs on a stream or when the stream is disconnected.</p>
-<p>Note that this will be called on a different thread than the <a class="el" href="classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49">onAudioReady()</a> thread. This thread will be created by Oboe.</p>
+<p>This will be called when an error occurs on a stream, such as when the stream is disconnected, and if <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">onError()</a> returns false (indicating that the error has not already been handled).</p>
+<p>Note that this will be called on a thread created by Oboe.</p>
<p>The underlying stream will already be stopped by Oboe but not yet closed. So the stream can be queried.</p>
<p>Do not close or delete the stream in this method because it will be closed after this method returns.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">oboeStream</td><td>pointer to the associated stream </td></tr>
+ <tr><td class="paramname">audioStream</td><td>pointer to the associated stream </td></tr>
<tr><td class="paramname">error</td><td></td></tr>
</table>
</dd>
</dl>
-<p>Reimplemented from <a class="el" href="classoboe_1_1_audio_stream_callback.html#a77ceb641f941164d7b4d4c51c9a888b9">oboe::AudioStreamCallback</a>.</p>
+<p>Reimplemented from <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0">oboe::AudioStreamErrorCallback</a>.</p>
</div>
</div>
diff --git a/docs/reference/classoboe_1_1_stabilized_callback.png b/docs/reference/classoboe_1_1_stabilized_callback.png
index 94b40c3..f3748f8 100644
--- a/docs/reference/classoboe_1_1_stabilized_callback.png
+++ b/docs/reference/classoboe_1_1_stabilized_callback.png
Binary files differ
diff --git a/docs/reference/deprecated.html b/docs/reference/deprecated.html
index 3d89239..6d2aa37 100644
--- a/docs/reference/deprecated.html
+++ b/docs/reference/deprecated.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -69,7 +69,15 @@
<div class="contents">
<div class="textblock"><dl class="reflist">
<dt>Member <a class="el" href="classoboe_1_1_audio_stream.html#acb8edbc17ff79993a8ed996d216fe6f3">oboe::AudioStream::getTimestamp</a> (clockid_t, int64_t *, int64_t *)</dt>
-<dd><a class="anchor" id="_deprecated000001"></a>since 1.0, use <a class="el" href="classoboe_1_1_audio_stream.html#a49254e6b1b19cb6d0ca6c63058029771">AudioStream::getTimestamp(clockid_t clockId)</a> instead, which returns <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a> </dd>
+<dd><a class="anchor" id="_deprecated000001"></a>since 1.0, use <a class="el" href="classoboe_1_1_audio_stream.html#a49254e6b1b19cb6d0ca6c63058029771">AudioStream::getTimestamp(clockid_t clockId)</a> instead, which returns <a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a> </dd>
+<dt>Member <a class="el" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">oboe::AudioStreamBase::getFramesPerCallback</a> () const</dt>
+<dd><a class="anchor" id="_deprecated000002"></a>use <code>getFramesPerDataCallback</code> instead. </dd>
+<dt>Member <a class="el" href="classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074">oboe::AudioStreamBuilder::openStream</a> (<a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> **stream)</dt>
+<dd><a class="anchor" id="_deprecated000004"></a>Use <a class="el" href="classoboe_1_1_audio_stream_builder.html#a44b68216c48f8fb08a9e63178e0b0eeb">openStream(std::shared_ptr<oboe::AudioStream> &stream)</a> instead. </dd>
+<dt>Member <a class="el" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">oboe::AudioStreamBuilder::setFramesPerCallback</a> (int framesPerCallback)</dt>
+<dd><a class="anchor" id="_deprecated000003"></a>use <code>setFramesPerDataCallback</code> instead. </dd>
+<dt>Class <a class="el" href="classoboe_1_1_audio_stream_callback.html">oboe::AudioStreamCallback</a> </dt>
+<dd><a class="anchor" id="_deprecated000005"></a>Use <code><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a></code> and <code><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a></code> instead </dd>
</dl>
</div></div><!-- PageDoc -->
</div><!-- contents -->
diff --git a/docs/reference/dir_768f6301d9838e45d679001914ab2803.html b/docs/reference/dir_768f6301d9838e45d679001914ab2803.html
index ef76e48..4e1ebc5 100644
--- a/docs/reference/dir_768f6301d9838e45d679001914ab2803.html
+++ b/docs/reference/dir_768f6301d9838e45d679001914ab2803.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/dir_d44c64559bbebec7f509842c48db8b23.html b/docs/reference/dir_d44c64559bbebec7f509842c48db8b23.html
index 6bbd2b1..4620fd8 100644
--- a/docs/reference/dir_d44c64559bbebec7f509842c48db8b23.html
+++ b/docs/reference/dir_d44c64559bbebec7f509842c48db8b23.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/files.html b/docs/reference/files.html
index 6a02c5f..820f043 100644
--- a/docs/reference/files.html
+++ b/docs/reference/files.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/functions.html b/docs/reference/functions.html
index 7aa7a52..2debcc1 100644
--- a/docs/reference/functions.html
+++ b/docs/reference/functions.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -131,21 +131,24 @@
<li>getBytesPerSample()
: <a class="el" href="classoboe_1_1_audio_stream.html#a44dda61e6e948e49b68f87172f084d62">oboe::AudioStream</a>
</li>
-<li>getCallback()
-: <a class="el" href="classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797">oboe::AudioStreamBase</a>
-</li>
<li>getChannelCount()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575">oboe::AudioStreamBase</a>
</li>
<li>getContentType()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">oboe::AudioStreamBase</a>
</li>
+<li>getDataCallback()
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c">oboe::AudioStreamBase</a>
+</li>
<li>getDeviceId()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">oboe::AudioStreamBase</a>
</li>
<li>getDirection()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">oboe::AudioStreamBase</a>
</li>
+<li>getErrorCallback()
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0">oboe::AudioStreamBase</a>
+</li>
<li>getFormat()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">oboe::AudioStreamBase</a>
</li>
@@ -155,6 +158,9 @@
<li>getFramesPerCallback()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">oboe::AudioStreamBase</a>
</li>
+<li>getFramesPerDataCallback()
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38">oboe::AudioStreamBase</a>
+</li>
<li>getFramesRead()
: <a class="el" href="classoboe_1_1_audio_stream.html#aeebfc59abd978cd6dff07c16cfe266df">oboe::AudioStream</a>
</li>
@@ -164,6 +170,9 @@
<li>getInputPreset()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a">oboe::AudioStreamBase</a>
</li>
+<li>getLastErrorCallbackResult()
+: <a class="el" href="classoboe_1_1_audio_stream.html#a8fe8afdf164a1fe835c514f709743d75">oboe::AudioStream</a>
+</li>
<li>getPerformanceMode()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">oboe::AudioStreamBase</a>
</li>
@@ -183,7 +192,7 @@
: <a class="el" href="classoboe_1_1_audio_stream.html#a9d37cc6513823c685ae892626ff83ea8">oboe::AudioStream</a>
</li>
<li>getTimestamp()
-: <a class="el" href="classoboe_1_1_audio_stream.html#a49254e6b1b19cb6d0ca6c63058029771">oboe::AudioStream</a>
+: <a class="el" href="classoboe_1_1_audio_stream.html#acb8edbc17ff79993a8ed996d216fe6f3">oboe::AudioStream</a>
</li>
<li>getUnderlyingStream()
: <a class="el" href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f">oboe::AudioStream</a>
@@ -213,9 +222,18 @@
<li>isDataCallbackEnabled()
: <a class="el" href="classoboe_1_1_audio_stream.html#add85011ba825f74931deeb92c5edf831">oboe::AudioStream</a>
</li>
+<li>isDataCallbackSpecified()
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73">oboe::AudioStreamBase</a>
+</li>
+<li>isErrorCallbackSpecified()
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3">oboe::AudioStreamBase</a>
+</li>
<li>isFormatConversionAllowed()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4">oboe::AudioStreamBase</a>
</li>
+<li>isValidConfig()
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2">oboe::AudioStreamBase</a>
+</li>
<li>isXRunCountSupported()
: <a class="el" href="classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4">oboe::AudioStream</a>
</li>
@@ -248,12 +266,18 @@
<li>mContentType
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">oboe::AudioStreamBase</a>
</li>
+<li>mDataCallback
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">oboe::AudioStreamBase</a>
+</li>
<li>mDeviceId
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">oboe::AudioStreamBase</a>
</li>
<li>mDirection
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">oboe::AudioStreamBase</a>
</li>
+<li>mErrorCallback
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">oboe::AudioStreamBase</a>
+</li>
<li>mFormat
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">oboe::AudioStreamBase</a>
</li>
@@ -287,9 +311,6 @@
<li>mSharingMode
: <a class="el" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">oboe::AudioStreamBase</a>
</li>
-<li>mStreamCallback
-: <a class="el" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">oboe::AudioStreamBase</a>
-</li>
<li>mUsage
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">oboe::AudioStreamBase</a>
</li>
@@ -305,18 +326,21 @@
<h3><a id="index_o"></a>- o -</h3><ul>
<li>onAudioReady()
-: <a class="el" href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">oboe::AudioStreamCallback</a>
+: <a class="el" href="classoboe_1_1_audio_stream_data_callback.html#ad8a3a9f609df5fd3a5d885cbe1b2204d">oboe::AudioStreamDataCallback</a>
, <a class="el" href="classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49">oboe::StabilizedCallback</a>
</li>
<li>onDefaultCallback()
: <a class="el" href="classoboe_1_1_audio_stream.html#a0ea79e60f5a3d29fc5a1a116aba11dfe">oboe::AudioStream</a>
</li>
+<li>onError()
+: <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">oboe::AudioStreamErrorCallback</a>
+</li>
<li>onErrorAfterClose()
-: <a class="el" href="classoboe_1_1_audio_stream_callback.html#a57a1b21efc764e8bbf8d92008a993bfd">oboe::AudioStreamCallback</a>
+: <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe">oboe::AudioStreamErrorCallback</a>
, <a class="el" href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4">oboe::StabilizedCallback</a>
</li>
<li>onErrorBeforeClose()
-: <a class="el" href="classoboe_1_1_audio_stream_callback.html#a77ceb641f941164d7b4d4c51c9a888b9">oboe::AudioStreamCallback</a>
+: <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0">oboe::AudioStreamErrorCallback</a>
, <a class="el" href="classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10">oboe::StabilizedCallback</a>
</li>
<li>open()
@@ -388,6 +412,9 @@
<li>setBufferCapacityInFrames()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">oboe::AudioStreamBuilder</a>
</li>
+<li>setBufferSizeIncrement()
+: <a class="el" href="classoboe_1_1_latency_tuner.html#a2684b30205126c8acd2f75d01cce05db">oboe::LatencyTuner</a>
+</li>
<li>setBufferSizeInFrames()
: <a class="el" href="classoboe_1_1_audio_stream.html#a06e3f9e133b3a75515e7793939d1cd03">oboe::AudioStream</a>
</li>
@@ -403,6 +430,9 @@
<li>setContentType()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">oboe::AudioStreamBuilder</a>
</li>
+<li>setDataCallback()
+: <a class="el" href="classoboe_1_1_audio_stream_builder.html#acad307720e0f370267b4e2f9a626ae70">oboe::AudioStreamBuilder</a>
+</li>
<li>setDataCallbackEnabled()
: <a class="el" href="classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba">oboe::AudioStream</a>
</li>
@@ -412,6 +442,9 @@
<li>setDirection()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c">oboe::AudioStreamBuilder</a>
</li>
+<li>setErrorCallback()
+: <a class="el" href="classoboe_1_1_audio_stream_builder.html#aacb66f530bfc6f545911b5e169774567">oboe::AudioStreamBuilder</a>
+</li>
<li>setFormat()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">oboe::AudioStreamBuilder</a>
</li>
@@ -421,9 +454,15 @@
<li>setFramesPerCallback()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">oboe::AudioStreamBuilder</a>
</li>
+<li>setFramesPerDataCallback()
+: <a class="el" href="classoboe_1_1_audio_stream_builder.html#afb8e95e80df7edd1af27af490438785e">oboe::AudioStreamBuilder</a>
+</li>
<li>setInputPreset()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0">oboe::AudioStreamBuilder</a>
</li>
+<li>setMinimumBufferSize()
+: <a class="el" href="classoboe_1_1_latency_tuner.html#adc96aa53b18a051b6ccdacb838139bf8">oboe::LatencyTuner</a>
+</li>
<li>setPerformanceMode()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee">oboe::AudioStreamBuilder</a>
</li>
@@ -442,6 +481,9 @@
<li>setUsage()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a">oboe::AudioStreamBuilder</a>
</li>
+<li>setWorkaroundsEnabled()
+: <a class="el" href="classoboe_1_1_oboe_globals.html#af2b8af764c5a5e6fc007b7725117303b">oboe::OboeGlobals</a>
+</li>
<li>start()
: <a class="el" href="classoboe_1_1_audio_stream.html#af04f03eb6b64b564f1c4401688987d21">oboe::AudioStream</a>
</li>
diff --git a/docs/reference/functions_func.html b/docs/reference/functions_func.html
index 7b151b1..06fd3c1 100644
--- a/docs/reference/functions_func.html
+++ b/docs/reference/functions_func.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -125,21 +125,24 @@
<li>getBytesPerSample()
: <a class="el" href="classoboe_1_1_audio_stream.html#a44dda61e6e948e49b68f87172f084d62">oboe::AudioStream</a>
</li>
-<li>getCallback()
-: <a class="el" href="classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797">oboe::AudioStreamBase</a>
-</li>
<li>getChannelCount()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575">oboe::AudioStreamBase</a>
</li>
<li>getContentType()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82">oboe::AudioStreamBase</a>
</li>
+<li>getDataCallback()
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c">oboe::AudioStreamBase</a>
+</li>
<li>getDeviceId()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21">oboe::AudioStreamBase</a>
</li>
<li>getDirection()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1">oboe::AudioStreamBase</a>
</li>
+<li>getErrorCallback()
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0">oboe::AudioStreamBase</a>
+</li>
<li>getFormat()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86">oboe::AudioStreamBase</a>
</li>
@@ -149,6 +152,9 @@
<li>getFramesPerCallback()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086">oboe::AudioStreamBase</a>
</li>
+<li>getFramesPerDataCallback()
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38">oboe::AudioStreamBase</a>
+</li>
<li>getFramesRead()
: <a class="el" href="classoboe_1_1_audio_stream.html#aeebfc59abd978cd6dff07c16cfe266df">oboe::AudioStream</a>
</li>
@@ -158,6 +164,9 @@
<li>getInputPreset()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a">oboe::AudioStreamBase</a>
</li>
+<li>getLastErrorCallbackResult()
+: <a class="el" href="classoboe_1_1_audio_stream.html#a8fe8afdf164a1fe835c514f709743d75">oboe::AudioStream</a>
+</li>
<li>getPerformanceMode()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc">oboe::AudioStreamBase</a>
</li>
@@ -177,7 +186,7 @@
: <a class="el" href="classoboe_1_1_audio_stream.html#a9d37cc6513823c685ae892626ff83ea8">oboe::AudioStream</a>
</li>
<li>getTimestamp()
-: <a class="el" href="classoboe_1_1_audio_stream.html#a49254e6b1b19cb6d0ca6c63058029771">oboe::AudioStream</a>
+: <a class="el" href="classoboe_1_1_audio_stream.html#acb8edbc17ff79993a8ed996d216fe6f3">oboe::AudioStream</a>
</li>
<li>getUnderlyingStream()
: <a class="el" href="classoboe_1_1_audio_stream.html#a5458d7130415eb4defe3dbc11d479e2f">oboe::AudioStream</a>
@@ -207,9 +216,18 @@
<li>isDataCallbackEnabled()
: <a class="el" href="classoboe_1_1_audio_stream.html#add85011ba825f74931deeb92c5edf831">oboe::AudioStream</a>
</li>
+<li>isDataCallbackSpecified()
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73">oboe::AudioStreamBase</a>
+</li>
+<li>isErrorCallbackSpecified()
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3">oboe::AudioStreamBase</a>
+</li>
<li>isFormatConversionAllowed()
: <a class="el" href="classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4">oboe::AudioStreamBase</a>
</li>
+<li>isValidConfig()
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2">oboe::AudioStreamBase</a>
+</li>
<li>isXRunCountSupported()
: <a class="el" href="classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4">oboe::AudioStream</a>
</li>
@@ -228,18 +246,21 @@
<h3><a id="index_o"></a>- o -</h3><ul>
<li>onAudioReady()
-: <a class="el" href="classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df">oboe::AudioStreamCallback</a>
+: <a class="el" href="classoboe_1_1_audio_stream_data_callback.html#ad8a3a9f609df5fd3a5d885cbe1b2204d">oboe::AudioStreamDataCallback</a>
, <a class="el" href="classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49">oboe::StabilizedCallback</a>
</li>
<li>onDefaultCallback()
: <a class="el" href="classoboe_1_1_audio_stream.html#a0ea79e60f5a3d29fc5a1a116aba11dfe">oboe::AudioStream</a>
</li>
+<li>onError()
+: <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3">oboe::AudioStreamErrorCallback</a>
+</li>
<li>onErrorAfterClose()
-: <a class="el" href="classoboe_1_1_audio_stream_callback.html#a57a1b21efc764e8bbf8d92008a993bfd">oboe::AudioStreamCallback</a>
+: <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe">oboe::AudioStreamErrorCallback</a>
, <a class="el" href="classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4">oboe::StabilizedCallback</a>
</li>
<li>onErrorBeforeClose()
-: <a class="el" href="classoboe_1_1_audio_stream_callback.html#a77ceb641f941164d7b4d4c51c9a888b9">oboe::AudioStreamCallback</a>
+: <a class="el" href="classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0">oboe::AudioStreamErrorCallback</a>
, <a class="el" href="classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10">oboe::StabilizedCallback</a>
</li>
<li>open()
@@ -305,6 +326,9 @@
<li>setBufferCapacityInFrames()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef">oboe::AudioStreamBuilder</a>
</li>
+<li>setBufferSizeIncrement()
+: <a class="el" href="classoboe_1_1_latency_tuner.html#a2684b30205126c8acd2f75d01cce05db">oboe::LatencyTuner</a>
+</li>
<li>setBufferSizeInFrames()
: <a class="el" href="classoboe_1_1_audio_stream.html#a06e3f9e133b3a75515e7793939d1cd03">oboe::AudioStream</a>
</li>
@@ -320,6 +344,9 @@
<li>setContentType()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468">oboe::AudioStreamBuilder</a>
</li>
+<li>setDataCallback()
+: <a class="el" href="classoboe_1_1_audio_stream_builder.html#acad307720e0f370267b4e2f9a626ae70">oboe::AudioStreamBuilder</a>
+</li>
<li>setDataCallbackEnabled()
: <a class="el" href="classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba">oboe::AudioStream</a>
</li>
@@ -329,6 +356,9 @@
<li>setDirection()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c">oboe::AudioStreamBuilder</a>
</li>
+<li>setErrorCallback()
+: <a class="el" href="classoboe_1_1_audio_stream_builder.html#aacb66f530bfc6f545911b5e169774567">oboe::AudioStreamBuilder</a>
+</li>
<li>setFormat()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515">oboe::AudioStreamBuilder</a>
</li>
@@ -338,9 +368,15 @@
<li>setFramesPerCallback()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54">oboe::AudioStreamBuilder</a>
</li>
+<li>setFramesPerDataCallback()
+: <a class="el" href="classoboe_1_1_audio_stream_builder.html#afb8e95e80df7edd1af27af490438785e">oboe::AudioStreamBuilder</a>
+</li>
<li>setInputPreset()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0">oboe::AudioStreamBuilder</a>
</li>
+<li>setMinimumBufferSize()
+: <a class="el" href="classoboe_1_1_latency_tuner.html#adc96aa53b18a051b6ccdacb838139bf8">oboe::LatencyTuner</a>
+</li>
<li>setPerformanceMode()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee">oboe::AudioStreamBuilder</a>
</li>
@@ -359,6 +395,9 @@
<li>setUsage()
: <a class="el" href="classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a">oboe::AudioStreamBuilder</a>
</li>
+<li>setWorkaroundsEnabled()
+: <a class="el" href="classoboe_1_1_oboe_globals.html#af2b8af764c5a5e6fc007b7725117303b">oboe::OboeGlobals</a>
+</li>
<li>start()
: <a class="el" href="classoboe_1_1_audio_stream.html#af04f03eb6b64b564f1c4401688987d21">oboe::AudioStream</a>
</li>
diff --git a/docs/reference/functions_vars.html b/docs/reference/functions_vars.html
index 525a425..22e4c29 100644
--- a/docs/reference/functions_vars.html
+++ b/docs/reference/functions_vars.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -85,12 +85,18 @@
<li>mContentType
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b">oboe::AudioStreamBase</a>
</li>
+<li>mDataCallback
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f">oboe::AudioStreamBase</a>
+</li>
<li>mDeviceId
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8">oboe::AudioStreamBase</a>
</li>
<li>mDirection
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880">oboe::AudioStreamBase</a>
</li>
+<li>mErrorCallback
+: <a class="el" href="classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b">oboe::AudioStreamBase</a>
+</li>
<li>mFormat
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09">oboe::AudioStreamBase</a>
</li>
@@ -124,9 +130,6 @@
<li>mSharingMode
: <a class="el" href="classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473">oboe::AudioStreamBase</a>
</li>
-<li>mStreamCallback
-: <a class="el" href="classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4">oboe::AudioStreamBase</a>
-</li>
<li>mUsage
: <a class="el" href="classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c">oboe::AudioStreamBase</a>
</li>
diff --git a/docs/reference/hierarchy.html b/docs/reference/hierarchy.html
index 74fe0ff..d7d985c 100644
--- a/docs/reference/hierarchy.html
+++ b/docs/reference/hierarchy.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -68,18 +68,22 @@
</div><!--header-->
<div class="contents">
<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
-<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream_base.html" target="_self">oboe::AudioStreamBase</a></td><td class="desc"></td></tr>
<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream.html" target="_self">oboe::AudioStream</a></td><td class="desc"></td></tr>
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream_builder.html" target="_self">oboe::AudioStreamBuilder</a></td><td class="desc"></td></tr>
-<tr id="row_1_"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream_callback.html" target="_self">oboe::AudioStreamCallback</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_stabilized_callback.html" target="_self">oboe::StabilizedCallback</a></td><td class="desc"></td></tr>
-<tr id="row_2_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_default_stream_values.html" target="_self">oboe::DefaultStreamValues</a></td><td class="desc"></td></tr>
-<tr id="row_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structoboe_1_1_frame_timestamp.html" target="_self">oboe::FrameTimestamp</a></td><td class="desc"></td></tr>
-<tr id="row_4_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_latency_tuner.html" target="_self">oboe::LatencyTuner</a></td><td class="desc"></td></tr>
-<tr id="row_5_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_result_with_value.html" target="_self">oboe::ResultWithValue< T ></a></td><td class="desc"></td></tr>
-<tr id="row_6_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structoboe_1_1_stream_deleter_functor.html" target="_self">oboe::StreamDeleterFunctor</a></td><td class="desc"></td></tr>
-<tr id="row_7_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structoboe_1_1_version.html" target="_self">oboe::Version</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream_data_callback.html" target="_self">oboe::AudioStreamDataCallback</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_1_0_" class="arrow" onclick="toggleFolder('1_0_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream_callback.html" target="_self">oboe::AudioStreamCallback</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_"><td class="entry"><span style="width:48px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_stabilized_callback.html" target="_self">oboe::StabilizedCallback</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream_error_callback.html" target="_self">oboe::AudioStreamErrorCallback</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_audio_stream_callback.html" target="_self">oboe::AudioStreamCallback</a></td><td class="desc"></td></tr>
+<tr id="row_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_default_stream_values.html" target="_self">oboe::DefaultStreamValues</a></td><td class="desc"></td></tr>
+<tr id="row_4_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structoboe_1_1_frame_timestamp.html" target="_self">oboe::FrameTimestamp</a></td><td class="desc"></td></tr>
+<tr id="row_5_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_latency_tuner.html" target="_self">oboe::LatencyTuner</a></td><td class="desc"></td></tr>
+<tr id="row_6_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_oboe_globals.html" target="_self">oboe::OboeGlobals</a></td><td class="desc"></td></tr>
+<tr id="row_7_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classoboe_1_1_result_with_value.html" target="_self">oboe::ResultWithValue< T ></a></td><td class="desc"></td></tr>
+<tr id="row_8_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structoboe_1_1_stream_deleter_functor.html" target="_self">oboe::StreamDeleterFunctor</a></td><td class="desc"></td></tr>
+<tr id="row_9_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structoboe_1_1_version.html" target="_self">oboe::Version</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
diff --git a/docs/reference/index.html b/docs/reference/index.html
index 83fcbe3..9c83aee 100644
--- a/docs/reference/index.html
+++ b/docs/reference/index.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/namespacemembers.html b/docs/reference/namespacemembers.html
index b08bda1..9f20db9 100644
--- a/docs/reference/namespacemembers.html
+++ b/docs/reference/namespacemembers.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -117,6 +117,12 @@
<li>Generic
: <a class="el" href="namespaceoboe.html#a4477ed232b02e2694d9309baf55a8f06a0ba6f369e7f8a700c14afe2992290544">oboe</a>
</li>
+<li>getPropertyInteger()
+: <a class="el" href="namespaceoboe.html#a4284cffcf4d852ca4f357429303d7af5">oboe</a>
+</li>
+<li>getPropertyString()
+: <a class="el" href="namespaceoboe.html#a1ff1f1323d722494dac353a6b4d1bd5b">oboe</a>
+</li>
<li>getSdkVersion()
: <a class="el" href="namespaceoboe.html#a54528938e9fccab7ad8947ccf0e409db">oboe</a>
</li>
diff --git a/docs/reference/namespacemembers_enum.html b/docs/reference/namespacemembers_enum.html
index cb40dab..5e2c920 100644
--- a/docs/reference/namespacemembers_enum.html
+++ b/docs/reference/namespacemembers_enum.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/namespacemembers_eval.html b/docs/reference/namespacemembers_eval.html
index 97cc30b..004d6ca 100644
--- a/docs/reference/namespacemembers_eval.html
+++ b/docs/reference/namespacemembers_eval.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/namespacemembers_func.html b/docs/reference/namespacemembers_func.html
index 52aecb3..ab074f0 100644
--- a/docs/reference/namespacemembers_func.html
+++ b/docs/reference/namespacemembers_func.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -76,6 +76,12 @@
<li>convertToText()
: <a class="el" href="namespaceoboe.html#af65aaea3c5d82eee6906664d61c094b3">oboe</a>
</li>
+<li>getPropertyInteger()
+: <a class="el" href="namespaceoboe.html#a4284cffcf4d852ca4f357429303d7af5">oboe</a>
+</li>
+<li>getPropertyString()
+: <a class="el" href="namespaceoboe.html#a1ff1f1323d722494dac353a6b4d1bd5b">oboe</a>
+</li>
<li>getSdkVersion()
: <a class="el" href="namespaceoboe.html#a54528938e9fccab7ad8947ccf0e409db">oboe</a>
</li>
diff --git a/docs/reference/namespacemembers_vars.html b/docs/reference/namespacemembers_vars.html
index 70fc52c..745e0d6 100644
--- a/docs/reference/namespacemembers_vars.html
+++ b/docs/reference/namespacemembers_vars.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/namespaceoboe.html b/docs/reference/namespaceoboe.html
index c804144..a337dd7 100644
--- a/docs/reference/namespaceoboe.html
+++ b/docs/reference/namespaceoboe.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -84,12 +84,18 @@
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_callback.html">AudioStreamCallback</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_data_callback.html">AudioStreamDataCallback</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_audio_stream_error_callback.html">AudioStreamErrorCallback</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_default_stream_values.html">DefaultStreamValues</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structoboe_1_1_frame_timestamp.html">FrameTimestamp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_latency_tuner.html">LatencyTuner</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_oboe_globals.html">OboeGlobals</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_result_with_value.html">ResultWithValue</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classoboe_1_1_stabilized_callback.html">StabilizedCallback</a></td></tr>
@@ -274,6 +280,10 @@
<tr class="memitem:af65aaea3c5d82eee6906664d61c094b3"><td class="memTemplParams" colspan="2">template<typename FromType > </td></tr>
<tr class="memitem:af65aaea3c5d82eee6906664d61c094b3"><td class="memTemplItemLeft" align="right" valign="top">const char * </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#af65aaea3c5d82eee6906664d61c094b3">convertToText</a> (FromType input)</td></tr>
<tr class="separator:af65aaea3c5d82eee6906664d61c094b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1ff1f1323d722494dac353a6b4d1bd5b"><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#a1ff1f1323d722494dac353a6b4d1bd5b">getPropertyString</a> (const char *name)</td></tr>
+<tr class="separator:a1ff1f1323d722494dac353a6b4d1bd5b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4284cffcf4d852ca4f357429303d7af5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#a4284cffcf4d852ca4f357429303d7af5">getPropertyInteger</a> (const char *name, int defaultValue)</td></tr>
+<tr class="separator:a4284cffcf4d852ca4f357429303d7af5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a54528938e9fccab7ad8947ccf0e409db"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceoboe.html#a54528938e9fccab7ad8947ccf0e409db">getSdkVersion</a> ()</td></tr>
<tr class="separator:a54528938e9fccab7ad8947ccf0e409db"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a78417a797f5306478c8a37cee53fd12a"><td class="memItemLeft" align="right" valign="top"><a id="a78417a797f5306478c8a37cee53fd12a"></a>
@@ -854,6 +864,67 @@
</div>
</div>
+<a id="a4284cffcf4d852ca4f357429303d7af5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4284cffcf4d852ca4f357429303d7af5">◆ </a></span>getPropertyInteger()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int oboe::getPropertyInteger </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>defaultValue</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td></td></tr>
+ <tr><td class="paramname">defaultValue</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>integer value associated with a property or the default value </dd></dl>
+
+</div>
+</div>
+<a id="a1ff1f1323d722494dac353a6b4d1bd5b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1ff1f1323d722494dac353a6b4d1bd5b">◆ </a></span>getPropertyString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string oboe::getPropertyString </td>
+ <td>(</td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the value of a named system property in a string or empty string </dd></dl>
+
+</div>
+</div>
<a id="a54528938e9fccab7ad8947ccf0e409db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a54528938e9fccab7ad8947ccf0e409db">◆ </a></span>getSdkVersion()</h2>
diff --git a/docs/reference/namespaces.html b/docs/reference/namespaces.html
index 059d764..860d475 100644
--- a/docs/reference/namespaces.html
+++ b/docs/reference/namespaces.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/pages.html b/docs/reference/pages.html
index 182d5b5..a0c44c4 100644
--- a/docs/reference/pages.html
+++ b/docs/reference/pages.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/search/all_0.js b/docs/reference/search/all_0.js
index e151f87..8347df5 100644
--- a/docs/reference/search/all_0.js
+++ b/docs/reference/search/all_0.js
@@ -13,5 +13,7 @@
['audiostreambase',['AudioStreamBase',['../classoboe_1_1_audio_stream_base.html',1,'oboe::AudioStreamBase'],['../classoboe_1_1_audio_stream_base.html#aa6b103e1b0f808bbc4949d56f0829f98',1,'oboe::AudioStreamBase::AudioStreamBase()']]],
['audiostreambuilder',['AudioStreamBuilder',['../classoboe_1_1_audio_stream_builder.html',1,'oboe']]],
['audiostreamcallback',['AudioStreamCallback',['../classoboe_1_1_audio_stream_callback.html',1,'oboe']]],
+ ['audiostreamdatacallback',['AudioStreamDataCallback',['../classoboe_1_1_audio_stream_data_callback.html',1,'oboe']]],
+ ['audiostreamerrorcallback',['AudioStreamErrorCallback',['../classoboe_1_1_audio_stream_error_callback.html',1,'oboe']]],
['api_20reference',['API reference',['../index.html',1,'']]]
];
diff --git a/docs/reference/search/all_6.js b/docs/reference/search/all_6.js
index ad683db..ce9595c 100644
--- a/docs/reference/search/all_6.js
+++ b/docs/reference/search/all_6.js
@@ -8,18 +8,23 @@
['getbuffersizeinframes',['getBufferSizeInFrames',['../classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b',1,'oboe::AudioStreamBase']]],
['getbytesperframe',['getBytesPerFrame',['../classoboe_1_1_audio_stream.html#a5c01907a59d5f89a5e4b819fe66b08bc',1,'oboe::AudioStream']]],
['getbytespersample',['getBytesPerSample',['../classoboe_1_1_audio_stream.html#a44dda61e6e948e49b68f87172f084d62',1,'oboe::AudioStream']]],
- ['getcallback',['getCallback',['../classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797',1,'oboe::AudioStreamBase']]],
['getchannelcount',['getChannelCount',['../classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575',1,'oboe::AudioStreamBase']]],
['getcontenttype',['getContentType',['../classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82',1,'oboe::AudioStreamBase']]],
+ ['getdatacallback',['getDataCallback',['../classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c',1,'oboe::AudioStreamBase']]],
['getdeviceid',['getDeviceId',['../classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21',1,'oboe::AudioStreamBase']]],
['getdirection',['getDirection',['../classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1',1,'oboe::AudioStreamBase']]],
+ ['geterrorcallback',['getErrorCallback',['../classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0',1,'oboe::AudioStreamBase']]],
['getformat',['getFormat',['../classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86',1,'oboe::AudioStreamBase']]],
['getframesperburst',['getFramesPerBurst',['../classoboe_1_1_audio_stream.html#ac160acb656515814fa6fdd157c131a0a',1,'oboe::AudioStream']]],
['getframespercallback',['getFramesPerCallback',['../classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086',1,'oboe::AudioStreamBase']]],
+ ['getframesperdatacallback',['getFramesPerDataCallback',['../classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38',1,'oboe::AudioStreamBase']]],
['getframesread',['getFramesRead',['../classoboe_1_1_audio_stream.html#aeebfc59abd978cd6dff07c16cfe266df',1,'oboe::AudioStream']]],
['getframeswritten',['getFramesWritten',['../classoboe_1_1_audio_stream.html#ab43dd4074e1de57bac1c3fd111430341',1,'oboe::AudioStream']]],
['getinputpreset',['getInputPreset',['../classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a',1,'oboe::AudioStreamBase']]],
+ ['getlasterrorcallbackresult',['getLastErrorCallbackResult',['../classoboe_1_1_audio_stream.html#a8fe8afdf164a1fe835c514f709743d75',1,'oboe::AudioStream']]],
['getperformancemode',['getPerformanceMode',['../classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc',1,'oboe::AudioStreamBase']]],
+ ['getpropertyinteger',['getPropertyInteger',['../namespaceoboe.html#a4284cffcf4d852ca4f357429303d7af5',1,'oboe']]],
+ ['getpropertystring',['getPropertyString',['../namespaceoboe.html#a1ff1f1323d722494dac353a6b4d1bd5b',1,'oboe']]],
['getsamplerate',['getSampleRate',['../classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087',1,'oboe::AudioStreamBase']]],
['getsamplerateconversionquality',['getSampleRateConversionQuality',['../classoboe_1_1_audio_stream_base.html#a1de8d6982d411a0cf50a32efba0ca3f2',1,'oboe::AudioStreamBase']]],
['getsdkversion',['getSdkVersion',['../namespaceoboe.html#a54528938e9fccab7ad8947ccf0e409db',1,'oboe']]],
diff --git a/docs/reference/search/all_7.js b/docs/reference/search/all_7.js
index 93086e0..f8e2e06 100644
--- a/docs/reference/search/all_7.js
+++ b/docs/reference/search/all_7.js
@@ -9,6 +9,9 @@
['isatmaximumbuffersize',['isAtMaximumBufferSize',['../classoboe_1_1_latency_tuner.html#a45c013fd6787ad09d328385d6314c4d4',1,'oboe::LatencyTuner']]],
['ischannelconversionallowed',['isChannelConversionAllowed',['../classoboe_1_1_audio_stream_base.html#aa4ec3aa76e69350fbce6f00786211495',1,'oboe::AudioStreamBase']]],
['isdatacallbackenabled',['isDataCallbackEnabled',['../classoboe_1_1_audio_stream.html#add85011ba825f74931deeb92c5edf831',1,'oboe::AudioStream']]],
+ ['isdatacallbackspecified',['isDataCallbackSpecified',['../classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73',1,'oboe::AudioStreamBase']]],
+ ['iserrorcallbackspecified',['isErrorCallbackSpecified',['../classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3',1,'oboe::AudioStreamBase']]],
['isformatconversionallowed',['isFormatConversionAllowed',['../classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4',1,'oboe::AudioStreamBase']]],
+ ['isvalidconfig',['isValidConfig',['../classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2',1,'oboe::AudioStreamBase']]],
['isxruncountsupported',['isXRunCountSupported',['../classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4',1,'oboe::AudioStream']]]
];
diff --git a/docs/reference/search/all_a.js b/docs/reference/search/all_a.js
index 285495f..30be357 100644
--- a/docs/reference/search/all_a.js
+++ b/docs/reference/search/all_a.js
@@ -5,9 +5,11 @@
['mbuffersizeinframes',['mBufferSizeInFrames',['../classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a',1,'oboe::AudioStreamBase']]],
['mchannelcount',['mChannelCount',['../classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206',1,'oboe::AudioStreamBase']]],
['mcontenttype',['mContentType',['../classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b',1,'oboe::AudioStreamBase']]],
+ ['mdatacallback',['mDataCallback',['../classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f',1,'oboe::AudioStreamBase']]],
['mdeviceid',['mDeviceId',['../classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8',1,'oboe::AudioStreamBase']]],
['mdirection',['mDirection',['../classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880',1,'oboe::AudioStreamBase']]],
['media',['Media',['../namespaceoboe.html#a104ee8396c173fefac429759ea3c21a0a3b563524fdb17b4a86590470d40bef74',1,'oboe']]],
+ ['merrorcallback',['mErrorCallback',['../classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b',1,'oboe::AudioStreamBase']]],
['mformat',['mFormat',['../classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09',1,'oboe::AudioStreamBase']]],
['mframesperburst',['mFramesPerBurst',['../classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e',1,'oboe::AudioStreamBase']]],
['mframespercallback',['mFramesPerCallback',['../classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899',1,'oboe::AudioStreamBase']]],
@@ -21,7 +23,6 @@
['msamplerate',['mSampleRate',['../classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea',1,'oboe::AudioStreamBase']]],
['msessionid',['mSessionId',['../classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737',1,'oboe::AudioStreamBase']]],
['msharingmode',['mSharingMode',['../classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473',1,'oboe::AudioStreamBase']]],
- ['mstreamcallback',['mStreamCallback',['../classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4',1,'oboe::AudioStreamBase']]],
['musage',['mUsage',['../classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c',1,'oboe::AudioStreamBase']]],
['music',['Music',['../namespaceoboe.html#a2a3cec6f021c1a324df60273710c604bac156fcc7b29059305cef26f3904d4517',1,'oboe']]]
];
diff --git a/docs/reference/search/all_c.js b/docs/reference/search/all_c.js
index 2b6b0bf..dcdc687 100644
--- a/docs/reference/search/all_c.js
+++ b/docs/reference/search/all_c.js
@@ -1,14 +1,16 @@
var searchData=
[
['oboe',['oboe',['../namespaceoboe.html',1,'']]],
- ['onaudioready',['onAudioReady',['../classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df',1,'oboe::AudioStreamCallback::onAudioReady()'],['../classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49',1,'oboe::StabilizedCallback::onAudioReady()']]],
+ ['oboeglobals',['OboeGlobals',['../classoboe_1_1_oboe_globals.html',1,'oboe']]],
+ ['onaudioready',['onAudioReady',['../classoboe_1_1_audio_stream_data_callback.html#ad8a3a9f609df5fd3a5d885cbe1b2204d',1,'oboe::AudioStreamDataCallback::onAudioReady()'],['../classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49',1,'oboe::StabilizedCallback::onAudioReady()']]],
['ondefaultcallback',['onDefaultCallback',['../classoboe_1_1_audio_stream.html#a0ea79e60f5a3d29fc5a1a116aba11dfe',1,'oboe::AudioStream']]],
- ['onerrorafterclose',['onErrorAfterClose',['../classoboe_1_1_audio_stream_callback.html#a57a1b21efc764e8bbf8d92008a993bfd',1,'oboe::AudioStreamCallback::onErrorAfterClose()'],['../classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4',1,'oboe::StabilizedCallback::onErrorAfterClose()']]],
- ['onerrorbeforeclose',['onErrorBeforeClose',['../classoboe_1_1_audio_stream_callback.html#a77ceb641f941164d7b4d4c51c9a888b9',1,'oboe::AudioStreamCallback::onErrorBeforeClose()'],['../classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10',1,'oboe::StabilizedCallback::onErrorBeforeClose()']]],
+ ['onerror',['onError',['../classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3',1,'oboe::AudioStreamErrorCallback']]],
+ ['onerrorafterclose',['onErrorAfterClose',['../classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe',1,'oboe::AudioStreamErrorCallback::onErrorAfterClose()'],['../classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4',1,'oboe::StabilizedCallback::onErrorAfterClose()']]],
+ ['onerrorbeforeclose',['onErrorBeforeClose',['../classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0',1,'oboe::AudioStreamErrorCallback::onErrorBeforeClose()'],['../classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10',1,'oboe::StabilizedCallback::onErrorBeforeClose()']]],
['open',['open',['../classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6',1,'oboe::AudioStream']]],
['openmanagedstream',['openManagedStream',['../classoboe_1_1_audio_stream_builder.html#a7ab172a9be4fca2489aa5cbcc48c20ff',1,'oboe::AudioStreamBuilder']]],
['opensles',['OpenSLES',['../namespaceoboe.html#a92972414867c81d5974cb2ed7abefbf6a24e758ea9c1e842ef71cc8ff8b63fa9b',1,'oboe']]],
- ['openstream',['openStream',['../classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074',1,'oboe::AudioStreamBuilder']]],
+ ['openstream',['openStream',['../classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074',1,'oboe::AudioStreamBuilder::openStream(AudioStream **stream)'],['../classoboe_1_1_audio_stream_builder.html#a44b68216c48f8fb08a9e63178e0b0eeb',1,'oboe::AudioStreamBuilder::openStream(std::shared_ptr< oboe::AudioStream > &stream)']]],
['operator_20_21',['operator !',['../classoboe_1_1_result_with_value.html#a6fb3c61c5716a045ba48dc5a5dfc8169',1,'oboe::ResultWithValue']]],
['operator_20bool',['operator bool',['../classoboe_1_1_result_with_value.html#ae32b1953b777af7d1d0c94862ca39986',1,'oboe::ResultWithValue']]],
['operator_20result',['operator Result',['../classoboe_1_1_result_with_value.html#af62107817c0bc76047e6b655a78504ba',1,'oboe::ResultWithValue']]],
diff --git a/docs/reference/search/all_f.js b/docs/reference/search/all_f.js
index 8eb77d1..fd423fd 100644
--- a/docs/reference/search/all_f.js
+++ b/docs/reference/search/all_f.js
@@ -5,24 +5,30 @@
['sessionid',['SessionId',['../namespaceoboe.html#a5752250c10e96179e3618d7f72937eaf',1,'oboe']]],
['setaudioapi',['setAudioApi',['../classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391',1,'oboe::AudioStreamBuilder']]],
['setbuffercapacityinframes',['setBufferCapacityInFrames',['../classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef',1,'oboe::AudioStreamBuilder']]],
+ ['setbuffersizeincrement',['setBufferSizeIncrement',['../classoboe_1_1_latency_tuner.html#a2684b30205126c8acd2f75d01cce05db',1,'oboe::LatencyTuner']]],
['setbuffersizeinframes',['setBufferSizeInFrames',['../classoboe_1_1_audio_stream.html#a06e3f9e133b3a75515e7793939d1cd03',1,'oboe::AudioStream']]],
['setcallback',['setCallback',['../classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd',1,'oboe::AudioStreamBuilder']]],
['setchannelconversionallowed',['setChannelConversionAllowed',['../classoboe_1_1_audio_stream_builder.html#ad50f5d20cdf420d982bf499790cd3563',1,'oboe::AudioStreamBuilder']]],
['setchannelcount',['setChannelCount',['../classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7',1,'oboe::AudioStreamBuilder']]],
['setcontenttype',['setContentType',['../classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468',1,'oboe::AudioStreamBuilder']]],
+ ['setdatacallback',['setDataCallback',['../classoboe_1_1_audio_stream_builder.html#acad307720e0f370267b4e2f9a626ae70',1,'oboe::AudioStreamBuilder']]],
['setdatacallbackenabled',['setDataCallbackEnabled',['../classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba',1,'oboe::AudioStream']]],
['setdeviceid',['setDeviceId',['../classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e',1,'oboe::AudioStreamBuilder']]],
['setdirection',['setDirection',['../classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c',1,'oboe::AudioStreamBuilder']]],
+ ['seterrorcallback',['setErrorCallback',['../classoboe_1_1_audio_stream_builder.html#aacb66f530bfc6f545911b5e169774567',1,'oboe::AudioStreamBuilder']]],
['setformat',['setFormat',['../classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515',1,'oboe::AudioStreamBuilder']]],
['setformatconversionallowed',['setFormatConversionAllowed',['../classoboe_1_1_audio_stream_builder.html#a7ec5f427cd6fe55cb1ce536ff0cbb4d2',1,'oboe::AudioStreamBuilder']]],
['setframespercallback',['setFramesPerCallback',['../classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54',1,'oboe::AudioStreamBuilder']]],
+ ['setframesperdatacallback',['setFramesPerDataCallback',['../classoboe_1_1_audio_stream_builder.html#afb8e95e80df7edd1af27af490438785e',1,'oboe::AudioStreamBuilder']]],
['setinputpreset',['setInputPreset',['../classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0',1,'oboe::AudioStreamBuilder']]],
+ ['setminimumbuffersize',['setMinimumBufferSize',['../classoboe_1_1_latency_tuner.html#adc96aa53b18a051b6ccdacb838139bf8',1,'oboe::LatencyTuner']]],
['setperformancemode',['setPerformanceMode',['../classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee',1,'oboe::AudioStreamBuilder']]],
['setsamplerate',['setSampleRate',['../classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d',1,'oboe::AudioStreamBuilder']]],
['setsamplerateconversionquality',['setSampleRateConversionQuality',['../classoboe_1_1_audio_stream_builder.html#af7d24a9ec975d430732151e5ee0d1027',1,'oboe::AudioStreamBuilder']]],
['setsessionid',['setSessionId',['../classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d',1,'oboe::AudioStreamBuilder']]],
['setsharingmode',['setSharingMode',['../classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654',1,'oboe::AudioStreamBuilder']]],
['setusage',['setUsage',['../classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a',1,'oboe::AudioStreamBuilder']]],
+ ['setworkaroundsenabled',['setWorkaroundsEnabled',['../classoboe_1_1_oboe_globals.html#af2b8af764c5a5e6fc007b7725117303b',1,'oboe::OboeGlobals']]],
['shared',['Shared',['../namespaceoboe.html#a8330247b25429953a08354f41834d520aa6156ea9d66fef24e87e841fbabf7cca',1,'oboe']]],
['sharingmode',['SharingMode',['../namespaceoboe.html#a8330247b25429953a08354f41834d520',1,'oboe']]],
['sonification',['Sonification',['../namespaceoboe.html#a2a3cec6f021c1a324df60273710c604ba0885eef555037e94a7cf39fe683c2799',1,'oboe']]],
diff --git a/docs/reference/search/classes_0.js b/docs/reference/search/classes_0.js
index dbc8d2a..2a04f01 100644
--- a/docs/reference/search/classes_0.js
+++ b/docs/reference/search/classes_0.js
@@ -3,5 +3,7 @@
['audiostream',['AudioStream',['../classoboe_1_1_audio_stream.html',1,'oboe']]],
['audiostreambase',['AudioStreamBase',['../classoboe_1_1_audio_stream_base.html',1,'oboe']]],
['audiostreambuilder',['AudioStreamBuilder',['../classoboe_1_1_audio_stream_builder.html',1,'oboe']]],
- ['audiostreamcallback',['AudioStreamCallback',['../classoboe_1_1_audio_stream_callback.html',1,'oboe']]]
+ ['audiostreamcallback',['AudioStreamCallback',['../classoboe_1_1_audio_stream_callback.html',1,'oboe']]],
+ ['audiostreamdatacallback',['AudioStreamDataCallback',['../classoboe_1_1_audio_stream_data_callback.html',1,'oboe']]],
+ ['audiostreamerrorcallback',['AudioStreamErrorCallback',['../classoboe_1_1_audio_stream_error_callback.html',1,'oboe']]]
];
diff --git a/docs/reference/search/classes_4.js b/docs/reference/search/classes_4.js
index 991f31b..d1e1d90 100644
--- a/docs/reference/search/classes_4.js
+++ b/docs/reference/search/classes_4.js
@@ -1,4 +1,4 @@
var searchData=
[
- ['resultwithvalue',['ResultWithValue',['../classoboe_1_1_result_with_value.html',1,'oboe']]]
+ ['oboeglobals',['OboeGlobals',['../classoboe_1_1_oboe_globals.html',1,'oboe']]]
];
diff --git a/docs/reference/search/classes_5.js b/docs/reference/search/classes_5.js
index 6a6692b..991f31b 100644
--- a/docs/reference/search/classes_5.js
+++ b/docs/reference/search/classes_5.js
@@ -1,5 +1,4 @@
var searchData=
[
- ['stabilizedcallback',['StabilizedCallback',['../classoboe_1_1_stabilized_callback.html',1,'oboe']]],
- ['streamdeleterfunctor',['StreamDeleterFunctor',['../structoboe_1_1_stream_deleter_functor.html',1,'oboe']]]
+ ['resultwithvalue',['ResultWithValue',['../classoboe_1_1_result_with_value.html',1,'oboe']]]
];
diff --git a/docs/reference/search/classes_6.js b/docs/reference/search/classes_6.js
index 8578da8..6a6692b 100644
--- a/docs/reference/search/classes_6.js
+++ b/docs/reference/search/classes_6.js
@@ -1,4 +1,5 @@
var searchData=
[
- ['version',['Version',['../structoboe_1_1_version.html',1,'oboe']]]
+ ['stabilizedcallback',['StabilizedCallback',['../classoboe_1_1_stabilized_callback.html',1,'oboe']]],
+ ['streamdeleterfunctor',['StreamDeleterFunctor',['../structoboe_1_1_stream_deleter_functor.html',1,'oboe']]]
];
diff --git a/docs/reference/search/classes_7.html b/docs/reference/search/classes_7.html
new file mode 100644
index 0000000..794e394
--- /dev/null
+++ b/docs/reference/search/classes_7.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.15"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/reference/search/classes_7.js b/docs/reference/search/classes_7.js
new file mode 100644
index 0000000..8578da8
--- /dev/null
+++ b/docs/reference/search/classes_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['version',['Version',['../structoboe_1_1_version.html',1,'oboe']]]
+];
diff --git a/docs/reference/search/functions_4.js b/docs/reference/search/functions_4.js
index 9c9e593..eb44bb5 100644
--- a/docs/reference/search/functions_4.js
+++ b/docs/reference/search/functions_4.js
@@ -6,18 +6,23 @@
['getbuffersizeinframes',['getBufferSizeInFrames',['../classoboe_1_1_audio_stream_base.html#af5217ab05bfde0d7637024b599302d0b',1,'oboe::AudioStreamBase']]],
['getbytesperframe',['getBytesPerFrame',['../classoboe_1_1_audio_stream.html#a5c01907a59d5f89a5e4b819fe66b08bc',1,'oboe::AudioStream']]],
['getbytespersample',['getBytesPerSample',['../classoboe_1_1_audio_stream.html#a44dda61e6e948e49b68f87172f084d62',1,'oboe::AudioStream']]],
- ['getcallback',['getCallback',['../classoboe_1_1_audio_stream_base.html#a1b4a2a191546708da657510c3cd6b797',1,'oboe::AudioStreamBase']]],
['getchannelcount',['getChannelCount',['../classoboe_1_1_audio_stream_base.html#a87e6bf37d6a2a5e983b8ca8d29aea575',1,'oboe::AudioStreamBase']]],
['getcontenttype',['getContentType',['../classoboe_1_1_audio_stream_base.html#ab12e2d068fa87e0553b01a400d96eb82',1,'oboe::AudioStreamBase']]],
+ ['getdatacallback',['getDataCallback',['../classoboe_1_1_audio_stream_base.html#a9fb2f34ae62dbda2c10e8513b754fa0c',1,'oboe::AudioStreamBase']]],
['getdeviceid',['getDeviceId',['../classoboe_1_1_audio_stream_base.html#a093057d625bc896864b959974c265f21',1,'oboe::AudioStreamBase']]],
['getdirection',['getDirection',['../classoboe_1_1_audio_stream_base.html#a6f86f2233a04c5a0b056f0c1c261f1b1',1,'oboe::AudioStreamBase']]],
+ ['geterrorcallback',['getErrorCallback',['../classoboe_1_1_audio_stream_base.html#a1328fb9288166ff325995ce1ea1867f0',1,'oboe::AudioStreamBase']]],
['getformat',['getFormat',['../classoboe_1_1_audio_stream_base.html#ab1e640461d7bf9d596decb913da7ac86',1,'oboe::AudioStreamBase']]],
['getframesperburst',['getFramesPerBurst',['../classoboe_1_1_audio_stream.html#ac160acb656515814fa6fdd157c131a0a',1,'oboe::AudioStream']]],
['getframespercallback',['getFramesPerCallback',['../classoboe_1_1_audio_stream_base.html#a8878a90949badbb5486cc2e022a57086',1,'oboe::AudioStreamBase']]],
+ ['getframesperdatacallback',['getFramesPerDataCallback',['../classoboe_1_1_audio_stream_base.html#abc3ee2815568b425d15a40e132aa8e38',1,'oboe::AudioStreamBase']]],
['getframesread',['getFramesRead',['../classoboe_1_1_audio_stream.html#aeebfc59abd978cd6dff07c16cfe266df',1,'oboe::AudioStream']]],
['getframeswritten',['getFramesWritten',['../classoboe_1_1_audio_stream.html#ab43dd4074e1de57bac1c3fd111430341',1,'oboe::AudioStream']]],
['getinputpreset',['getInputPreset',['../classoboe_1_1_audio_stream_base.html#a5c773b93b8aa38191c7199cab023428a',1,'oboe::AudioStreamBase']]],
+ ['getlasterrorcallbackresult',['getLastErrorCallbackResult',['../classoboe_1_1_audio_stream.html#a8fe8afdf164a1fe835c514f709743d75',1,'oboe::AudioStream']]],
['getperformancemode',['getPerformanceMode',['../classoboe_1_1_audio_stream_base.html#a2ddb935de0e24dd7ae8e2cfbecac9fdc',1,'oboe::AudioStreamBase']]],
+ ['getpropertyinteger',['getPropertyInteger',['../namespaceoboe.html#a4284cffcf4d852ca4f357429303d7af5',1,'oboe']]],
+ ['getpropertystring',['getPropertyString',['../namespaceoboe.html#a1ff1f1323d722494dac353a6b4d1bd5b',1,'oboe']]],
['getsamplerate',['getSampleRate',['../classoboe_1_1_audio_stream_base.html#ae9d32f3e09174bad69e74f147ee33087',1,'oboe::AudioStreamBase']]],
['getsamplerateconversionquality',['getSampleRateConversionQuality',['../classoboe_1_1_audio_stream_base.html#a1de8d6982d411a0cf50a32efba0ca3f2',1,'oboe::AudioStreamBase']]],
['getsdkversion',['getSdkVersion',['../namespaceoboe.html#a54528938e9fccab7ad8947ccf0e409db',1,'oboe']]],
diff --git a/docs/reference/search/functions_5.js b/docs/reference/search/functions_5.js
index 4cfa4d6..3d03906 100644
--- a/docs/reference/search/functions_5.js
+++ b/docs/reference/search/functions_5.js
@@ -5,6 +5,9 @@
['isatmaximumbuffersize',['isAtMaximumBufferSize',['../classoboe_1_1_latency_tuner.html#a45c013fd6787ad09d328385d6314c4d4',1,'oboe::LatencyTuner']]],
['ischannelconversionallowed',['isChannelConversionAllowed',['../classoboe_1_1_audio_stream_base.html#aa4ec3aa76e69350fbce6f00786211495',1,'oboe::AudioStreamBase']]],
['isdatacallbackenabled',['isDataCallbackEnabled',['../classoboe_1_1_audio_stream.html#add85011ba825f74931deeb92c5edf831',1,'oboe::AudioStream']]],
+ ['isdatacallbackspecified',['isDataCallbackSpecified',['../classoboe_1_1_audio_stream_base.html#a9a54d38b985a2eb12c6972104dc0ce73',1,'oboe::AudioStreamBase']]],
+ ['iserrorcallbackspecified',['isErrorCallbackSpecified',['../classoboe_1_1_audio_stream_base.html#aef579f6d1f779c89d051f0963f2976b3',1,'oboe::AudioStreamBase']]],
['isformatconversionallowed',['isFormatConversionAllowed',['../classoboe_1_1_audio_stream_base.html#ace3625a7332bf02a86818fdf63fcccb4',1,'oboe::AudioStreamBase']]],
+ ['isvalidconfig',['isValidConfig',['../classoboe_1_1_audio_stream_base.html#a5d5e07e98921d0193a5c0ccbe06f68c2',1,'oboe::AudioStreamBase']]],
['isxruncountsupported',['isXRunCountSupported',['../classoboe_1_1_audio_stream.html#a43d8a098440cde28f4ee8bedd6d107c4',1,'oboe::AudioStream']]]
];
diff --git a/docs/reference/search/functions_7.js b/docs/reference/search/functions_7.js
index ab211bf..d06a926 100644
--- a/docs/reference/search/functions_7.js
+++ b/docs/reference/search/functions_7.js
@@ -1,12 +1,13 @@
var searchData=
[
- ['onaudioready',['onAudioReady',['../classoboe_1_1_audio_stream_callback.html#af3a7c44f0254abe6e5e5bb566e2317df',1,'oboe::AudioStreamCallback::onAudioReady()'],['../classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49',1,'oboe::StabilizedCallback::onAudioReady()']]],
+ ['onaudioready',['onAudioReady',['../classoboe_1_1_audio_stream_data_callback.html#ad8a3a9f609df5fd3a5d885cbe1b2204d',1,'oboe::AudioStreamDataCallback::onAudioReady()'],['../classoboe_1_1_stabilized_callback.html#ad447e12ebf732cf151655c1fbaf58a49',1,'oboe::StabilizedCallback::onAudioReady()']]],
['ondefaultcallback',['onDefaultCallback',['../classoboe_1_1_audio_stream.html#a0ea79e60f5a3d29fc5a1a116aba11dfe',1,'oboe::AudioStream']]],
- ['onerrorafterclose',['onErrorAfterClose',['../classoboe_1_1_audio_stream_callback.html#a57a1b21efc764e8bbf8d92008a993bfd',1,'oboe::AudioStreamCallback::onErrorAfterClose()'],['../classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4',1,'oboe::StabilizedCallback::onErrorAfterClose()']]],
- ['onerrorbeforeclose',['onErrorBeforeClose',['../classoboe_1_1_audio_stream_callback.html#a77ceb641f941164d7b4d4c51c9a888b9',1,'oboe::AudioStreamCallback::onErrorBeforeClose()'],['../classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10',1,'oboe::StabilizedCallback::onErrorBeforeClose()']]],
+ ['onerror',['onError',['../classoboe_1_1_audio_stream_error_callback.html#a5ad4b8936746ecbb2160a9389b117fc3',1,'oboe::AudioStreamErrorCallback']]],
+ ['onerrorafterclose',['onErrorAfterClose',['../classoboe_1_1_audio_stream_error_callback.html#a76bd3ef3e00396e10c21812003654cfe',1,'oboe::AudioStreamErrorCallback::onErrorAfterClose()'],['../classoboe_1_1_stabilized_callback.html#af7521da42c4b08a71e6102994f6f41f4',1,'oboe::StabilizedCallback::onErrorAfterClose()']]],
+ ['onerrorbeforeclose',['onErrorBeforeClose',['../classoboe_1_1_audio_stream_error_callback.html#a4eb1e4916b71d8231e97b19898bc9bf0',1,'oboe::AudioStreamErrorCallback::onErrorBeforeClose()'],['../classoboe_1_1_stabilized_callback.html#a7ec0e9fca3181962ab78716bcda83e10',1,'oboe::StabilizedCallback::onErrorBeforeClose()']]],
['open',['open',['../classoboe_1_1_audio_stream.html#a686c6ce8a29051c858fd1de386805dc6',1,'oboe::AudioStream']]],
['openmanagedstream',['openManagedStream',['../classoboe_1_1_audio_stream_builder.html#a7ab172a9be4fca2489aa5cbcc48c20ff',1,'oboe::AudioStreamBuilder']]],
- ['openstream',['openStream',['../classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074',1,'oboe::AudioStreamBuilder']]],
+ ['openstream',['openStream',['../classoboe_1_1_audio_stream_builder.html#a86b94cfa47729bef2e04dce1a9086074',1,'oboe::AudioStreamBuilder::openStream(AudioStream **stream)'],['../classoboe_1_1_audio_stream_builder.html#a44b68216c48f8fb08a9e63178e0b0eeb',1,'oboe::AudioStreamBuilder::openStream(std::shared_ptr< oboe::AudioStream > &stream)']]],
['operator_20_21',['operator !',['../classoboe_1_1_result_with_value.html#a6fb3c61c5716a045ba48dc5a5dfc8169',1,'oboe::ResultWithValue']]],
['operator_20bool',['operator bool',['../classoboe_1_1_result_with_value.html#ae32b1953b777af7d1d0c94862ca39986',1,'oboe::ResultWithValue']]],
['operator_20result',['operator Result',['../classoboe_1_1_result_with_value.html#af62107817c0bc76047e6b655a78504ba',1,'oboe::ResultWithValue']]],
diff --git a/docs/reference/search/functions_a.js b/docs/reference/search/functions_a.js
index 3ac8b86..ed9e410 100644
--- a/docs/reference/search/functions_a.js
+++ b/docs/reference/search/functions_a.js
@@ -2,24 +2,30 @@
[
['setaudioapi',['setAudioApi',['../classoboe_1_1_audio_stream_builder.html#a38c6d6c5e718df1e3ac69daaac47c391',1,'oboe::AudioStreamBuilder']]],
['setbuffercapacityinframes',['setBufferCapacityInFrames',['../classoboe_1_1_audio_stream_builder.html#abaff480867af51ca0899bfa6fd7cc3ef',1,'oboe::AudioStreamBuilder']]],
+ ['setbuffersizeincrement',['setBufferSizeIncrement',['../classoboe_1_1_latency_tuner.html#a2684b30205126c8acd2f75d01cce05db',1,'oboe::LatencyTuner']]],
['setbuffersizeinframes',['setBufferSizeInFrames',['../classoboe_1_1_audio_stream.html#a06e3f9e133b3a75515e7793939d1cd03',1,'oboe::AudioStream']]],
['setcallback',['setCallback',['../classoboe_1_1_audio_stream_builder.html#a698cefa9af73bc97c020c004821fccbd',1,'oboe::AudioStreamBuilder']]],
['setchannelconversionallowed',['setChannelConversionAllowed',['../classoboe_1_1_audio_stream_builder.html#ad50f5d20cdf420d982bf499790cd3563',1,'oboe::AudioStreamBuilder']]],
['setchannelcount',['setChannelCount',['../classoboe_1_1_audio_stream_builder.html#a075d10291e1f998d90c2f73ef767b5a7',1,'oboe::AudioStreamBuilder']]],
['setcontenttype',['setContentType',['../classoboe_1_1_audio_stream_builder.html#a6a17bafc217c2b624179fbbf77fe4468',1,'oboe::AudioStreamBuilder']]],
+ ['setdatacallback',['setDataCallback',['../classoboe_1_1_audio_stream_builder.html#acad307720e0f370267b4e2f9a626ae70',1,'oboe::AudioStreamBuilder']]],
['setdatacallbackenabled',['setDataCallbackEnabled',['../classoboe_1_1_audio_stream.html#a0faa6d3a6fd4f367e6f80d5a29e6dcba',1,'oboe::AudioStream']]],
['setdeviceid',['setDeviceId',['../classoboe_1_1_audio_stream_builder.html#af36ddcd00686a9e1de661bdac0685a8e',1,'oboe::AudioStreamBuilder']]],
['setdirection',['setDirection',['../classoboe_1_1_audio_stream_builder.html#ab3fbd47b06197619c26393637e26354c',1,'oboe::AudioStreamBuilder']]],
+ ['seterrorcallback',['setErrorCallback',['../classoboe_1_1_audio_stream_builder.html#aacb66f530bfc6f545911b5e169774567',1,'oboe::AudioStreamBuilder']]],
['setformat',['setFormat',['../classoboe_1_1_audio_stream_builder.html#aa2e1d2d73cd6c2eb9f349bf2fe5f6515',1,'oboe::AudioStreamBuilder']]],
['setformatconversionallowed',['setFormatConversionAllowed',['../classoboe_1_1_audio_stream_builder.html#a7ec5f427cd6fe55cb1ce536ff0cbb4d2',1,'oboe::AudioStreamBuilder']]],
['setframespercallback',['setFramesPerCallback',['../classoboe_1_1_audio_stream_builder.html#a3f397821f61eabaeedaf31064c859a54',1,'oboe::AudioStreamBuilder']]],
+ ['setframesperdatacallback',['setFramesPerDataCallback',['../classoboe_1_1_audio_stream_builder.html#afb8e95e80df7edd1af27af490438785e',1,'oboe::AudioStreamBuilder']]],
['setinputpreset',['setInputPreset',['../classoboe_1_1_audio_stream_builder.html#a144a3d095fd668210282f1a91f23e1f0',1,'oboe::AudioStreamBuilder']]],
+ ['setminimumbuffersize',['setMinimumBufferSize',['../classoboe_1_1_latency_tuner.html#adc96aa53b18a051b6ccdacb838139bf8',1,'oboe::LatencyTuner']]],
['setperformancemode',['setPerformanceMode',['../classoboe_1_1_audio_stream_builder.html#a6cd1d65612e844e59da71a68ea0ab3ee',1,'oboe::AudioStreamBuilder']]],
['setsamplerate',['setSampleRate',['../classoboe_1_1_audio_stream_builder.html#a30ef3d5f51d56a9f980dc09600ed139d',1,'oboe::AudioStreamBuilder']]],
['setsamplerateconversionquality',['setSampleRateConversionQuality',['../classoboe_1_1_audio_stream_builder.html#af7d24a9ec975d430732151e5ee0d1027',1,'oboe::AudioStreamBuilder']]],
['setsessionid',['setSessionId',['../classoboe_1_1_audio_stream_builder.html#a54c1651bdbe089d0d714af499e8a5f1d',1,'oboe::AudioStreamBuilder']]],
['setsharingmode',['setSharingMode',['../classoboe_1_1_audio_stream_builder.html#a3e991742acbbfb6fe5ebcf592c478654',1,'oboe::AudioStreamBuilder']]],
['setusage',['setUsage',['../classoboe_1_1_audio_stream_builder.html#a593255a2f5eb972665775cfc5bc58f6a',1,'oboe::AudioStreamBuilder']]],
+ ['setworkaroundsenabled',['setWorkaroundsEnabled',['../classoboe_1_1_oboe_globals.html#af2b8af764c5a5e6fc007b7725117303b',1,'oboe::OboeGlobals']]],
['start',['start',['../classoboe_1_1_audio_stream.html#af04f03eb6b64b564f1c4401688987d21',1,'oboe::AudioStream']]],
['stop',['stop',['../classoboe_1_1_audio_stream.html#aec093859d42f0470c884edd1e976d9f3',1,'oboe::AudioStream']]]
];
diff --git a/docs/reference/search/searchdata.js b/docs/reference/search/searchdata.js
index 9af729f..cee1bb6 100644
--- a/docs/reference/search/searchdata.js
+++ b/docs/reference/search/searchdata.js
@@ -1,7 +1,7 @@
var indexSectionsWithContent =
{
0: "abcdefgiklmnoprstuvw",
- 1: "adflrsv",
+ 1: "adflorsv",
2: "o",
3: "acefgiloprstuvw",
4: "cfkmnpst",
diff --git a/docs/reference/search/variables_3.js b/docs/reference/search/variables_3.js
index 7739940..1f4218c 100644
--- a/docs/reference/search/variables_3.js
+++ b/docs/reference/search/variables_3.js
@@ -5,8 +5,10 @@
['mbuffersizeinframes',['mBufferSizeInFrames',['../classoboe_1_1_audio_stream_base.html#a3b65595d26d1eae1b8ce9925a5b98f6a',1,'oboe::AudioStreamBase']]],
['mchannelcount',['mChannelCount',['../classoboe_1_1_audio_stream_base.html#a5ff460bac9d14dfeac4eeddfcbb6e206',1,'oboe::AudioStreamBase']]],
['mcontenttype',['mContentType',['../classoboe_1_1_audio_stream_base.html#a5f8f0e5add381b841856de80ea4cdb2b',1,'oboe::AudioStreamBase']]],
+ ['mdatacallback',['mDataCallback',['../classoboe_1_1_audio_stream_base.html#a6d8493f66a945cb426506c70f0358e5f',1,'oboe::AudioStreamBase']]],
['mdeviceid',['mDeviceId',['../classoboe_1_1_audio_stream_base.html#a23dafa12fb1a6242b088ebd5a52798c8',1,'oboe::AudioStreamBase']]],
['mdirection',['mDirection',['../classoboe_1_1_audio_stream_base.html#a26e9294721561d3b16bcaeec5faf4880',1,'oboe::AudioStreamBase']]],
+ ['merrorcallback',['mErrorCallback',['../classoboe_1_1_audio_stream_base.html#adc0c8cc54adb6d3350c62b8a74b9c57b',1,'oboe::AudioStreamBase']]],
['mformat',['mFormat',['../classoboe_1_1_audio_stream_base.html#a7869f04836c2c2bdc10c7309ad4b8e09',1,'oboe::AudioStreamBase']]],
['mframesperburst',['mFramesPerBurst',['../classoboe_1_1_audio_stream_base.html#a54061319ed348329a29d883a5de2482e',1,'oboe::AudioStreamBase']]],
['mframespercallback',['mFramesPerCallback',['../classoboe_1_1_audio_stream_base.html#a3962eb94420ad0ecea70029236001899',1,'oboe::AudioStreamBase']]],
@@ -18,6 +20,5 @@
['msamplerate',['mSampleRate',['../classoboe_1_1_audio_stream_base.html#a998885bb6c4f37e145f4626ad4177dea',1,'oboe::AudioStreamBase']]],
['msessionid',['mSessionId',['../classoboe_1_1_audio_stream_base.html#abe1c1e9cada1ced9b5c1504ac9b07737',1,'oboe::AudioStreamBase']]],
['msharingmode',['mSharingMode',['../classoboe_1_1_audio_stream_base.html#ae9187492b679c97a0963e264954be473',1,'oboe::AudioStreamBase']]],
- ['mstreamcallback',['mStreamCallback',['../classoboe_1_1_audio_stream_base.html#ae3f72318212dd9977d7fa0ced92c91f4',1,'oboe::AudioStreamBase']]],
['musage',['mUsage',['../classoboe_1_1_audio_stream_base.html#a5b518e82f39c9fcbd7050fd66adb253c',1,'oboe::AudioStreamBase']]]
];
diff --git a/docs/reference/structoboe_1_1_frame_timestamp-members.html b/docs/reference/structoboe_1_1_frame_timestamp-members.html
index 23e92af..65258b7 100644
--- a/docs/reference/structoboe_1_1_frame_timestamp-members.html
+++ b/docs/reference/structoboe_1_1_frame_timestamp-members.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/structoboe_1_1_frame_timestamp.html b/docs/reference/structoboe_1_1_frame_timestamp.html
index 88cf8b4..fd8e1f4 100644
--- a/docs/reference/structoboe_1_1_frame_timestamp.html
+++ b/docs/reference/structoboe_1_1_frame_timestamp.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/structoboe_1_1_stream_deleter_functor-members.html b/docs/reference/structoboe_1_1_stream_deleter_functor-members.html
index e99d8b3..dec5ee1 100644
--- a/docs/reference/structoboe_1_1_stream_deleter_functor-members.html
+++ b/docs/reference/structoboe_1_1_stream_deleter_functor-members.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/structoboe_1_1_stream_deleter_functor.html b/docs/reference/structoboe_1_1_stream_deleter_functor.html
index bffff5f..1fa0714 100644
--- a/docs/reference/structoboe_1_1_stream_deleter_functor.html
+++ b/docs/reference/structoboe_1_1_stream_deleter_functor.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
@@ -84,7 +84,7 @@
<tr class="separator:aa63f56f03cbdc07e52159c99c7a005be"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>This struct is a stateless functor which closes a audiostream prior to its deletion. This means it can be used to safely delete a smart pointer referring to an open stream. </p>
+<div class="textblock"><p>This struct is a stateless functor which closes an <a class="el" href="classoboe_1_1_audio_stream.html">AudioStream</a> prior to its deletion. This means it can be used to safely delete a smart pointer referring to an open stream. </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>include/oboe/<a class="el" href="_audio_stream_8h_source.html">AudioStream.h</a></li>
</ul>
diff --git a/docs/reference/structoboe_1_1_version-members.html b/docs/reference/structoboe_1_1_version-members.html
index 6f78544..fd09739 100644
--- a/docs/reference/structoboe_1_1_version-members.html
+++ b/docs/reference/structoboe_1_1_version-members.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>
diff --git a/docs/reference/structoboe_1_1_version.html b/docs/reference/structoboe_1_1_version.html
index 6dddbf6..fe7af0b 100644
--- a/docs/reference/structoboe_1_1_version.html
+++ b/docs/reference/structoboe_1_1_version.html
@@ -22,7 +22,7 @@
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Oboe
-  <span id="projectnumber">1.2</span>
+  <span id="projectnumber">1.5</span>
</div>
<div id="projectbrief">A library for creating real-time audio apps on Android</div>
</td>