<html>
<head>
<base href="https://bugs.freedesktop.org/">
</head>
<body>
<p>
<div>
<b><a class="bz_bug_link
bz_status_REOPENED "
title="REOPENED - Pulseaudio doesn't work on (pro audio- non interleaved access mode) soundcards with high channel counts"
href="https://bugs.freedesktop.org/show_bug.cgi?id=84804#c40">Comment # 40</a>
on <a class="bz_bug_link
bz_status_REOPENED "
title="REOPENED - Pulseaudio doesn't work on (pro audio- non interleaved access mode) soundcards with high channel counts"
href="https://bugs.freedesktop.org/show_bug.cgi?id=84804">bug 84804</a>
from <span class="vcard"><a class="email" href="mailto:superquad.vortex2@gmail.com" title="Raymond <superquad.vortex2@gmail.com>"> <span class="fn">Raymond</span></a>
</span></b>
<pre><a href="https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/pci/rme9652/hdsp.c">https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/pci/rme9652/hdsp.c</a>
static struct snd_pcm_hardware snd_hdsp_capture_subinfo =
{
.info = (SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_NONINTERLEAVED |
SNDRV_PCM_INFO_SYNC_START),
#ifdef SNDRV_BIG_ENDIAN
.formats = SNDRV_PCM_FMTBIT_S32_BE,
#else
.formats = SNDRV_PCM_FMTBIT_S32_LE,
#endif
.rates = (SNDRV_PCM_RATE_32000 |
SNDRV_PCM_RATE_44100 |
SNDRV_PCM_RATE_48000 |
SNDRV_PCM_RATE_64000 |
SNDRV_PCM_RATE_88200 |
SNDRV_PCM_RATE_96000),
.rate_min = 32000,
.rate_max = 96000,
.channels_min = 5,
.channels_max = HDSP_MAX_CHANNELS,
.buffer_bytes_max = HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS,
.period_bytes_min = (64 * 4) * 10,
.period_bytes_max = (8192 * 4) * HDSP_MAX_CHANNELS,
.periods_min = 2,
.periods_max = 2,
.fifo_size = 0
};
only support 2 periods and non-interleaved access mode
pulseaudio cannot use 4 fragments
this mean one period of channel 1 , follow by one period of channel 2 ,..., one
period of channel n
seem has flag to control the precision of hw pointer
static snd_pcm_uframes_t hdsp_hw_pointer(struct hdsp *hdsp)
{
int position;
position = hdsp_read(hdsp, HDSP_statusRegister);
if (!hdsp->precise_ptr)
return (position & HDSP_BufferID) ? (hdsp->period_bytes / 4) :
0;
position &= HDSP_BufferPositionMask;
position /= 4;
position &= (hdsp->period_bytes/2) - 1;
return position;
}</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are the QA Contact for the bug.</li>
<li>You are the assignee for the bug.</li>
</ul>
</body>
</html>