[ALSA] Improve playback startup. Increase buffer size, and reduce xruns.
authorJames Courtier-Dutton <James@superbug.co.uk>
Sat, 9 Apr 2005 22:00:24 +0000 (00:00 +0200)
committerJaroslav Kysela <perex@suse.cz>
Sun, 29 May 2005 07:58:52 +0000 (09:58 +0200)
EMU10K1/EMU10K2 driver

Signed-off-by: James Courtier-Dutton <James@superbug.co.uk>
sound/pci/emu10k1/p16v.c

index 8dd8783..776761f 100644 (file)
@@ -124,9 +124,9 @@ static snd_pcm_hardware_t snd_p16v_playback_hw = {
        .rate_max =             192000,
        .channels_min =         8, 
        .channels_max =         8,
-       .buffer_bytes_max =     (32*1024),
+       .buffer_bytes_max =     ((65536 - 64) * 8),
        .period_bytes_min =     64,
-       .period_bytes_max =     (16*1024),
+       .period_bytes_max =     (65536 - 64),
        .periods_min =          2,
        .periods_max =          8,
        .fifo_size =            0,
@@ -347,7 +347,8 @@ static int snd_p16v_pcm_prepare_playback(snd_pcm_substream_t *substream)
        snd_emu10k1_ptr20_write(emu, PLAYBACK_LIST_SIZE, channel, (runtime->periods - 1) << 19);
        snd_emu10k1_ptr20_write(emu, PLAYBACK_LIST_PTR, channel, 0);
        snd_emu10k1_ptr20_write(emu, PLAYBACK_DMA_ADDR, channel, runtime->dma_addr);
-       snd_emu10k1_ptr20_write(emu, PLAYBACK_PERIOD_SIZE, channel, frames_to_bytes(runtime, runtime->period_size)<<16); // buffer size in bytes
+       //snd_emu10k1_ptr20_write(emu, PLAYBACK_PERIOD_SIZE, channel, frames_to_bytes(runtime, runtime->period_size)<<16); // buffer size in bytes
+       snd_emu10k1_ptr20_write(emu, PLAYBACK_PERIOD_SIZE, channel, 0); // buffer size in bytes
        snd_emu10k1_ptr20_write(emu, PLAYBACK_POINTER, channel, 0);
        snd_emu10k1_ptr20_write(emu, 0x07, channel, 0x0);
        snd_emu10k1_ptr20_write(emu, 0x08, channel, 0);
@@ -602,7 +603,7 @@ int snd_p16v_pcm(emu10k1_t *emu, int device, snd_pcm_t **rpcm)
                if ((err = snd_pcm_lib_preallocate_pages(substream, 
                                                         SNDRV_DMA_TYPE_DEV, 
                                                         snd_dma_pci_data(emu->pci), 
-                                                        64*1024, 64*1024)) < 0) /* FIXME: 32*1024 for sound buffer, between 32and64 for Periods table. */
+                                                        ((65536 - 64) * 8), ((65536 - 64) * 8))) < 0) 
                        return err;
                //snd_printk("preallocate playback substream: err=%d\n", err);
        }