[pulseaudio-tickets] [Bug 84804] Pulseaudio doesn't work on (pro audio- non interleaved access mode) soundcards with high channel counts

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Wed Jul 20 09:24:38 UTC 2016


https://bugs.freedesktop.org/show_bug.cgi?id=84804

--- Comment #40 from Raymond <superquad.vortex2 at gmail.com> ---
https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/pci/rme9652/hdsp.c

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;
}

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/pulseaudio-bugs/attachments/20160720/9ce07c22/attachment.html>


More information about the pulseaudio-bugs mailing list