Current File : //proc/self/root/kunden/usr/share/doc/alsa-lib-devel/doxygen/html/group___p_c_m___direct.html |
<!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.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ALSA project - the C library reference: Direct Access (MMAP) Functions</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">ALSA project - the C library reference
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<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','.html');
/* @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>
</div><!-- top -->
<!-- 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 class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Direct Access (MMAP) Functions<div class="ingroups"><a class="el" href="group___p_c_m.html">PCM Interface</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga6d4acf42de554d4d1177fb035d484ea4"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group___p_c_m___direct.html#ga6d4acf42de554d4d1177fb035d484ea4">snd_pcm_mmap_begin</a> (<a class="el" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> *pcm, const <a class="el" href="structsnd__pcm__channel__area__t.html">snd_pcm_channel_area_t</a> **areas, <a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> *offset, <a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> *frames)</td></tr>
<tr class="memdesc:ga6d4acf42de554d4d1177fb035d484ea4"><td class="mdescLeft"> </td><td class="mdescRight">Application request to access a portion of direct (mmap) area. <a href="group___p_c_m___direct.html#ga6d4acf42de554d4d1177fb035d484ea4">More...</a><br /></td></tr>
<tr class="separator:ga6d4acf42de554d4d1177fb035d484ea4"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gac306bd13c305825aa39dd9180a3ad520"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___p_c_m.html#ga71cdfa37e258d2210b8bd0216bf0c36c">snd_pcm_sframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___p_c_m___direct.html#gac306bd13c305825aa39dd9180a3ad520">snd_pcm_mmap_commit</a> (<a class="el" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> *pcm, <a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> offset, <a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> frames)</td></tr>
<tr class="memdesc:gac306bd13c305825aa39dd9180a3ad520"><td class="mdescLeft"> </td><td class="mdescRight">Application has completed the access to area requested with <a class="el" href="group___p_c_m___direct.html#ga6d4acf42de554d4d1177fb035d484ea4" title="Application request to access a portion of direct (mmap) area.">snd_pcm_mmap_begin</a>. <a href="group___p_c_m___direct.html#gac306bd13c305825aa39dd9180a3ad520">More...</a><br /></td></tr>
<tr class="separator:gac306bd13c305825aa39dd9180a3ad520"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga5a9ee8e1e764b12da6d54dfa195f7c52"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___p_c_m.html#ga71cdfa37e258d2210b8bd0216bf0c36c">snd_pcm_sframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___p_c_m___direct.html#ga5a9ee8e1e764b12da6d54dfa195f7c52">snd_pcm_mmap_writei</a> (<a class="el" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> *pcm, const void *buffer, <a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> size)</td></tr>
<tr class="memdesc:ga5a9ee8e1e764b12da6d54dfa195f7c52"><td class="mdescLeft"> </td><td class="mdescRight">Write interleaved frames to a PCM using direct buffer (mmap) <a href="group___p_c_m___direct.html#ga5a9ee8e1e764b12da6d54dfa195f7c52">More...</a><br /></td></tr>
<tr class="separator:ga5a9ee8e1e764b12da6d54dfa195f7c52"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga24b6c538c8d7ddd0776ee65f8fb909eb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___p_c_m.html#ga71cdfa37e258d2210b8bd0216bf0c36c">snd_pcm_sframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___p_c_m___direct.html#ga24b6c538c8d7ddd0776ee65f8fb909eb">snd_pcm_mmap_readi</a> (<a class="el" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> *pcm, void *buffer, <a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> size)</td></tr>
<tr class="memdesc:ga24b6c538c8d7ddd0776ee65f8fb909eb"><td class="mdescLeft"> </td><td class="mdescRight">Read interleaved frames from a PCM using direct buffer (mmap) <a href="group___p_c_m___direct.html#ga24b6c538c8d7ddd0776ee65f8fb909eb">More...</a><br /></td></tr>
<tr class="separator:ga24b6c538c8d7ddd0776ee65f8fb909eb"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga092b1a7f387e9fc2977649bfd43b0958"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___p_c_m.html#ga71cdfa37e258d2210b8bd0216bf0c36c">snd_pcm_sframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___p_c_m___direct.html#ga092b1a7f387e9fc2977649bfd43b0958">snd_pcm_mmap_writen</a> (<a class="el" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> *pcm, void **bufs, <a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> size)</td></tr>
<tr class="memdesc:ga092b1a7f387e9fc2977649bfd43b0958"><td class="mdescLeft"> </td><td class="mdescRight">Write non interleaved frames to a PCM using direct buffer (mmap) <a href="group___p_c_m___direct.html#ga092b1a7f387e9fc2977649bfd43b0958">More...</a><br /></td></tr>
<tr class="separator:ga092b1a7f387e9fc2977649bfd43b0958"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga29ce9af60eafb67f0303418a176bf3ea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___p_c_m.html#ga71cdfa37e258d2210b8bd0216bf0c36c">snd_pcm_sframes_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___p_c_m___direct.html#ga29ce9af60eafb67f0303418a176bf3ea">snd_pcm_mmap_readn</a> (<a class="el" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> *pcm, void **bufs, <a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> size)</td></tr>
<tr class="memdesc:ga29ce9af60eafb67f0303418a176bf3ea"><td class="mdescLeft"> </td><td class="mdescRight">Read non interleaved frames to a PCM using direct buffer (mmap) <a href="group___p_c_m___direct.html#ga29ce9af60eafb67f0303418a176bf3ea">More...</a><br /></td></tr>
<tr class="separator:ga29ce9af60eafb67f0303418a176bf3ea"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>See the <a class="el" href="pcm.html">PCM (digital audio) interface</a> page for more details. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga6d4acf42de554d4d1177fb035d484ea4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6d4acf42de554d4d1177fb035d484ea4">◆ </a></span>snd_pcm_mmap_begin()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int snd_pcm_mmap_begin </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> * </td>
<td class="paramname"><em>pcm</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structsnd__pcm__channel__area__t.html">snd_pcm_channel_area_t</a> ** </td>
<td class="paramname"><em>areas</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> * </td>
<td class="paramname"><em>offset</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> * </td>
<td class="paramname"><em>frames</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Application request to access a portion of direct (mmap) area. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">pcm</td><td>PCM handle </td></tr>
<tr><td class="paramname">areas</td><td>Returned mmap channel areas </td></tr>
<tr><td class="paramname">offset</td><td>Returned mmap area offset in area steps (== frames) </td></tr>
<tr><td class="paramname">frames</td><td>mmap area portion size in frames (wanted on entry, contiguous available on exit) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success otherwise a negative error code</dd></dl>
<p>It is necessary to call the <a class="el" href="group___p_c_m.html#ga8bb836bd0c414b59789d51a5f5379c08" title="Return number of frames ready to be read (capture) / written (playback)">snd_pcm_avail_update()</a> function directly before this call. Otherwise, this function can return a wrong count of available frames.</p>
<p>The function should be called before a sample-direct area can be accessed. The resulting size parameter is always less or equal to the input count of frames and can be zero, if no frames can be processed (the ring buffer is full).</p>
<p>See the <a class="el" href="group___p_c_m___direct.html#gac306bd13c305825aa39dd9180a3ad520" title="Application has completed the access to area requested with snd_pcm_mmap_begin.">snd_pcm_mmap_commit()</a> function to finish the frame processing in the direct areas.</p>
<p>The function is thread-safe when built with the proper option. </p>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="_2test_2pcm_8c-example.html#a45">/test/pcm.c</a>.</dd>
</dl>
</div>
</div>
<a id="gac306bd13c305825aa39dd9180a3ad520"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac306bd13c305825aa39dd9180a3ad520">◆ </a></span>snd_pcm_mmap_commit()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___p_c_m.html#ga71cdfa37e258d2210b8bd0216bf0c36c">snd_pcm_sframes_t</a> snd_pcm_mmap_commit </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> * </td>
<td class="paramname"><em>pcm</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> </td>
<td class="paramname"><em>offset</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> </td>
<td class="paramname"><em>frames</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Application has completed the access to area requested with <a class="el" href="group___p_c_m___direct.html#ga6d4acf42de554d4d1177fb035d484ea4" title="Application request to access a portion of direct (mmap) area.">snd_pcm_mmap_begin</a>. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">pcm</td><td>PCM handle </td></tr>
<tr><td class="paramname">offset</td><td>area offset in area steps (== frames) </td></tr>
<tr><td class="paramname">frames</td><td>area portion size in frames </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>count of transferred frames otherwise a negative error code</dd></dl>
<p>You should pass this function the offset value that <a class="el" href="group___p_c_m___direct.html#ga6d4acf42de554d4d1177fb035d484ea4" title="Application request to access a portion of direct (mmap) area.">snd_pcm_mmap_begin()</a> returned. The frames parameter should hold the number of frames you have written or read to/from the audio buffer. The frames parameter must never exceed the contiguous frames count that <a class="el" href="group___p_c_m___direct.html#ga6d4acf42de554d4d1177fb035d484ea4" title="Application request to access a portion of direct (mmap) area.">snd_pcm_mmap_begin()</a> returned. Each call to <a class="el" href="group___p_c_m___direct.html#ga6d4acf42de554d4d1177fb035d484ea4" title="Application request to access a portion of direct (mmap) area.">snd_pcm_mmap_begin()</a> must be followed by a call to <a class="el" href="group___p_c_m___direct.html#gac306bd13c305825aa39dd9180a3ad520" title="Application has completed the access to area requested with snd_pcm_mmap_begin.">snd_pcm_mmap_commit()</a>.</p>
<p>Example: </p><div class="fragment"><div class="line"> <span class="keywordtype">double</span> phase = 0;</div>
<div class="line"> <span class="keyword">const</span> snd_pcm_area_t *areas;</div>
<div class="line"> <a class="code" href="group___p_c_m.html#ga71cdfa37e258d2210b8bd0216bf0c36c">snd_pcm_sframes_t</a> avail, size, commitres;</div>
<div class="line"> <a class="code" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> offset, frames;</div>
<div class="line"> <span class="keywordtype">int</span> err;</div>
<div class="line"> </div>
<div class="line"> avail = <a class="code" href="group___p_c_m.html#ga8bb836bd0c414b59789d51a5f5379c08">snd_pcm_avail_update</a>(pcm);</div>
<div class="line"> <span class="keywordflow">if</span> (avail < 0)</div>
<div class="line"> error(avail);</div>
<div class="line"> <span class="comment">// at this point, we can transfer at least 'avail' frames</span></div>
<div class="line"> </div>
<div class="line"> <span class="comment">// we want to process frames in chunks (period_size)</span></div>
<div class="line"> <span class="keywordflow">if</span> (avail < period_size)</div>
<div class="line"> <span class="keywordflow">goto</span> _skip;</div>
<div class="line"> size = period_size;</div>
<div class="line"> <span class="comment">// it is possible that contiguous areas are smaller, thus we use a loop</span></div>
<div class="line"> <span class="keywordflow">while</span> (size > 0) {</div>
<div class="line"> frames = size;</div>
<div class="line"> </div>
<div class="line"> err = <a class="code" href="group___p_c_m___direct.html#ga6d4acf42de554d4d1177fb035d484ea4">snd_pcm_mmap_begin</a>(pcm_handle, &areas, &offset, &frames);</div>
<div class="line"> <span class="keywordflow">if</span> (err < 0)</div>
<div class="line"> error(err);</div>
<div class="line"> <span class="comment">// this function fills the areas from offset with count of frames</span></div>
<div class="line"> generate_sine(areas, offset, frames, &phase);</div>
<div class="line"> commitres = <a class="code" href="group___p_c_m___direct.html#gac306bd13c305825aa39dd9180a3ad520">snd_pcm_mmap_commit</a>(pcm_handle, offset, frames);</div>
<div class="line"> <span class="keywordflow">if</span> (commitres < 0 || commitres != frames)</div>
<div class="line"> error(commitres >= 0 ? -EPIPE : commitres);</div>
<div class="line"> </div>
<div class="line"> size -= frames;</div>
<div class="line"> }</div>
<div class="line">_skip:</div>
<div class="ttc" id="agroup___p_c_m___direct_html_ga6d4acf42de554d4d1177fb035d484ea4"><div class="ttname"><a href="group___p_c_m___direct.html#ga6d4acf42de554d4d1177fb035d484ea4">snd_pcm_mmap_begin</a></div><div class="ttdeci">int snd_pcm_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas, snd_pcm_uframes_t *offset, snd_pcm_uframes_t *frames)</div><div class="ttdoc">Application request to access a portion of direct (mmap) area.</div><div class="ttdef"><b>Definition:</b> pcm.c:7422</div></div>
<div class="ttc" id="agroup___p_c_m___direct_html_gac306bd13c305825aa39dd9180a3ad520"><div class="ttname"><a href="group___p_c_m___direct.html#gac306bd13c305825aa39dd9180a3ad520">snd_pcm_mmap_commit</a></div><div class="ttdeci">snd_pcm_sframes_t snd_pcm_mmap_commit(snd_pcm_t *pcm, snd_pcm_uframes_t offset, snd_pcm_uframes_t frames)</div><div class="ttdoc">Application has completed the access to area requested with snd_pcm_mmap_begin.</div><div class="ttdef"><b>Definition:</b> pcm.c:7535</div></div>
<div class="ttc" id="agroup___p_c_m_html_ga71cdfa37e258d2210b8bd0216bf0c36c"><div class="ttname"><a href="group___p_c_m.html#ga71cdfa37e258d2210b8bd0216bf0c36c">snd_pcm_sframes_t</a></div><div class="ttdeci">long snd_pcm_sframes_t</div><div class="ttdef"><b>Definition:</b> pcm.h:398</div></div>
<div class="ttc" id="agroup___p_c_m_html_ga8bb836bd0c414b59789d51a5f5379c08"><div class="ttname"><a href="group___p_c_m.html#ga8bb836bd0c414b59789d51a5f5379c08">snd_pcm_avail_update</a></div><div class="ttdeci">snd_pcm_sframes_t snd_pcm_avail_update(snd_pcm_t *pcm)</div><div class="ttdoc">Return number of frames ready to be read (capture) / written (playback)</div><div class="ttdef"><b>Definition:</b> pcm.c:3050</div></div>
<div class="ttc" id="agroup___p_c_m_html_gab01fcfe9b97382a8d3f2027c664b8b8a"><div class="ttname"><a href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a></div><div class="ttdeci">unsigned long snd_pcm_uframes_t</div><div class="ttdef"><b>Definition:</b> pcm.h:396</div></div>
</div><!-- fragment --><p>Look to the <a class="el" href="_2test_2pcm_8c-example.html#example_test_pcm">Sine-wave generator </a> example for more details about the generate_sine function.</p>
<p>The function is thread-safe when built with the proper option. </p>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="_2test_2pcm_8c-example.html#a46">/test/pcm.c</a>.</dd>
</dl>
</div>
</div>
<a id="ga24b6c538c8d7ddd0776ee65f8fb909eb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga24b6c538c8d7ddd0776ee65f8fb909eb">◆ </a></span>snd_pcm_mmap_readi()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___p_c_m.html#ga71cdfa37e258d2210b8bd0216bf0c36c">snd_pcm_sframes_t</a> snd_pcm_mmap_readi </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> * </td>
<td class="paramname"><em>pcm</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void * </td>
<td class="paramname"><em>buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> </td>
<td class="paramname"><em>size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Read interleaved frames from a PCM using direct buffer (mmap) </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">pcm</td><td>PCM handle </td></tr>
<tr><td class="paramname">buffer</td><td>frames containing buffer </td></tr>
<tr><td class="paramname">size</td><td>frames to be read </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a positive number of frames actually read otherwise a negative error code </dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">-EBADFD</td><td>PCM is not in the right state (<a class="el" href="group___p_c_m.html#gga61ac499cb3701ce536d4d83725908860a3eb4a3b75c7d2adb22f1829f3f738b27">SND_PCM_STATE_PREPARED</a> or <a class="el" href="group___p_c_m.html#gga61ac499cb3701ce536d4d83725908860a86f6fbc796881f19fde0e1957f878147">SND_PCM_STATE_RUNNING</a>) </td></tr>
<tr><td class="paramname">-EPIPE</td><td>an overrun occurred </td></tr>
<tr><td class="paramname">-ESTRPIPE</td><td>a suspend event occurred (stream is suspended and waiting for an application recovery)</td></tr>
</table>
</dd>
</dl>
<p>If the blocking behaviour was selected, then routine waits until all requested bytes are filled. The count of bytes can be less only if a signal or underrun occurred.</p>
<p>If the non-blocking behaviour is selected, then routine doesn't wait at all. </p>
</div>
</div>
<a id="ga29ce9af60eafb67f0303418a176bf3ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga29ce9af60eafb67f0303418a176bf3ea">◆ </a></span>snd_pcm_mmap_readn()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___p_c_m.html#ga71cdfa37e258d2210b8bd0216bf0c36c">snd_pcm_sframes_t</a> snd_pcm_mmap_readn </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> * </td>
<td class="paramname"><em>pcm</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void ** </td>
<td class="paramname"><em>bufs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> </td>
<td class="paramname"><em>size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Read non interleaved frames to a PCM using direct buffer (mmap) </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">pcm</td><td>PCM handle </td></tr>
<tr><td class="paramname">bufs</td><td>frames containing buffers (one for each channel) </td></tr>
<tr><td class="paramname">size</td><td>frames to be written </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a positive number of frames actually read otherwise a negative error code </dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">-EBADFD</td><td>PCM is not in the right state (<a class="el" href="group___p_c_m.html#gga61ac499cb3701ce536d4d83725908860a3eb4a3b75c7d2adb22f1829f3f738b27">SND_PCM_STATE_PREPARED</a> or <a class="el" href="group___p_c_m.html#gga61ac499cb3701ce536d4d83725908860a86f6fbc796881f19fde0e1957f878147">SND_PCM_STATE_RUNNING</a>) </td></tr>
<tr><td class="paramname">-EPIPE</td><td>an overrun occurred </td></tr>
<tr><td class="paramname">-ESTRPIPE</td><td>a suspend event occurred (stream is suspended and waiting for an application recovery)</td></tr>
</table>
</dd>
</dl>
<p>If the blocking behaviour was selected, then routine waits until all requested bytes are filled. The count of bytes can be less only if a signal or underrun occurred.</p>
<p>If the non-blocking behaviour is selected, then routine doesn't wait at all. </p>
</div>
</div>
<a id="ga5a9ee8e1e764b12da6d54dfa195f7c52"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5a9ee8e1e764b12da6d54dfa195f7c52">◆ </a></span>snd_pcm_mmap_writei()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___p_c_m.html#ga71cdfa37e258d2210b8bd0216bf0c36c">snd_pcm_sframes_t</a> snd_pcm_mmap_writei </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> * </td>
<td class="paramname"><em>pcm</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void * </td>
<td class="paramname"><em>buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> </td>
<td class="paramname"><em>size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Write interleaved frames to a PCM using direct buffer (mmap) </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">pcm</td><td>PCM handle </td></tr>
<tr><td class="paramname">buffer</td><td>frames containing buffer </td></tr>
<tr><td class="paramname">size</td><td>frames to be written </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a positive number of frames actually written otherwise a negative error code </dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">-EBADFD</td><td>PCM is not in the right state (<a class="el" href="group___p_c_m.html#gga61ac499cb3701ce536d4d83725908860a3eb4a3b75c7d2adb22f1829f3f738b27">SND_PCM_STATE_PREPARED</a> or <a class="el" href="group___p_c_m.html#gga61ac499cb3701ce536d4d83725908860a86f6fbc796881f19fde0e1957f878147">SND_PCM_STATE_RUNNING</a>) </td></tr>
<tr><td class="paramname">-EPIPE</td><td>an underrun occurred </td></tr>
<tr><td class="paramname">-ESTRPIPE</td><td>a suspend event occurred (stream is suspended and waiting for an application recovery)</td></tr>
</table>
</dd>
</dl>
<p>If the blocking behaviour is selected, then routine waits until all requested bytes are played or put to the playback ring buffer. The count of bytes can be less only if a signal or underrun occurred.</p>
<p>If the non-blocking behaviour is selected, then routine doesn't wait at all. </p>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="_2test_2pcm_8c-example.html#a48">/test/pcm.c</a>.</dd>
</dl>
</div>
</div>
<a id="ga092b1a7f387e9fc2977649bfd43b0958"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga092b1a7f387e9fc2977649bfd43b0958">◆ </a></span>snd_pcm_mmap_writen()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___p_c_m.html#ga71cdfa37e258d2210b8bd0216bf0c36c">snd_pcm_sframes_t</a> snd_pcm_mmap_writen </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#ga919e634deecd855b6e2e15174e70d3ea">snd_pcm_t</a> * </td>
<td class="paramname"><em>pcm</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void ** </td>
<td class="paramname"><em>bufs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group___p_c_m.html#gab01fcfe9b97382a8d3f2027c664b8b8a">snd_pcm_uframes_t</a> </td>
<td class="paramname"><em>size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Write non interleaved frames to a PCM using direct buffer (mmap) </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">pcm</td><td>PCM handle </td></tr>
<tr><td class="paramname">bufs</td><td>frames containing buffers (one for each channel) </td></tr>
<tr><td class="paramname">size</td><td>frames to be written </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a positive number of frames actually written otherwise a negative error code </dd></dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">-EBADFD</td><td>PCM is not in the right state (<a class="el" href="group___p_c_m.html#gga61ac499cb3701ce536d4d83725908860a3eb4a3b75c7d2adb22f1829f3f738b27">SND_PCM_STATE_PREPARED</a> or <a class="el" href="group___p_c_m.html#gga61ac499cb3701ce536d4d83725908860a86f6fbc796881f19fde0e1957f878147">SND_PCM_STATE_RUNNING</a>) </td></tr>
<tr><td class="paramname">-EPIPE</td><td>an underrun occurred </td></tr>
<tr><td class="paramname">-ESTRPIPE</td><td>a suspend event occurred (stream is suspended and waiting for an application recovery)</td></tr>
</table>
</dd>
</dl>
<p>If the blocking behaviour is selected, then routine waits until all requested bytes are played or put to the playback ring buffer. The count of bytes can be less only if a signal or underrun occurred.</p>
<p>If the non-blocking behaviour is selected, then routine doesn't wait at all. </p>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
</small></address>
</body>
</html>