Try to fix period_time/period_size problems for direct plugin slaves

This commit is contained in:
Jaroslav Kysela 2004-10-29 10:56:13 +00:00
parent 00fba04f01
commit b7e8f57314
4 changed files with 16 additions and 3 deletions

View file

@ -1044,6 +1044,7 @@ snd_pcm_sframes_t snd_pcm_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
* \param pcm PCM handle * \param pcm PCM handle
* \param frames wanted skip in frames * \param frames wanted skip in frames
* \return a positive number for actual skip otherwise a negative error code * \return a positive number for actual skip otherwise a negative error code
* \retval 0 means no action
*/ */
#ifndef DOXYGEN #ifndef DOXYGEN
snd_pcm_sframes_t INTERNAL(snd_pcm_forward)(snd_pcm_t *pcm, snd_pcm_uframes_t frames) snd_pcm_sframes_t INTERNAL(snd_pcm_forward)(snd_pcm_t *pcm, snd_pcm_uframes_t frames)

View file

@ -1206,7 +1206,7 @@ int _snd_pcm_dmix_open(snd_pcm_t **pcmp, const char *name,
params.format = SND_PCM_FORMAT_S16; params.format = SND_PCM_FORMAT_S16;
params.rate = 48000; params.rate = 48000;
params.channels = 2; params.channels = 2;
params.period_time = 125000; /* 0.125 seconds */ params.period_time = -1;
params.buffer_time = -1; params.buffer_time = -1;
bsize = psize = -1; bsize = psize = -1;
params.periods = 3; params.periods = 3;
@ -1223,6 +1223,10 @@ int _snd_pcm_dmix_open(snd_pcm_t **pcmp, const char *name,
if (err < 0) if (err < 0)
return err; return err;
/* set a reasonable default */
if (psize == -1 && params.period_time == -1)
params.period_time = 125000; /* 0.125 seconds */
/* sorry, limited features */ /* sorry, limited features */
if (params.format != SND_PCM_FORMAT_S16 && if (params.format != SND_PCM_FORMAT_S16 &&
params.format != SND_PCM_FORMAT_S32) { params.format != SND_PCM_FORMAT_S32) {

View file

@ -874,7 +874,7 @@ int _snd_pcm_dshare_open(snd_pcm_t **pcmp, const char *name,
params.format = SND_PCM_FORMAT_S16; params.format = SND_PCM_FORMAT_S16;
params.rate = 48000; params.rate = 48000;
params.channels = 2; params.channels = 2;
params.period_time = 125000; /* 0.125 seconds */ params.period_time = -1;
params.buffer_time = -1; params.buffer_time = -1;
bsize = psize = -1; bsize = psize = -1;
params.periods = 3; params.periods = 3;
@ -890,6 +890,10 @@ int _snd_pcm_dshare_open(snd_pcm_t **pcmp, const char *name,
if (err < 0) if (err < 0)
return err; return err;
/* set a reasonable default */
if (psize == -1 && params.period_time == -1)
params.period_time = 125000; /* 0.125 seconds */
params.period_size = psize; params.period_size = psize;
params.buffer_size = bsize; params.buffer_size = bsize;
err = snd_pcm_dshare_open(pcmp, name, ipc_key, ipc_perm, &params, bindings, slowptr, root, sconf, stream, mode); err = snd_pcm_dshare_open(pcmp, name, ipc_key, ipc_perm, &params, bindings, slowptr, root, sconf, stream, mode);

View file

@ -824,7 +824,7 @@ int _snd_pcm_dsnoop_open(snd_pcm_t **pcmp, const char *name,
params.format = SND_PCM_FORMAT_S16; params.format = SND_PCM_FORMAT_S16;
params.rate = 48000; params.rate = 48000;
params.channels = 2; params.channels = 2;
params.period_time = 125000; /* 0.125 seconds */ params.period_time = -1;
params.buffer_time = -1; params.buffer_time = -1;
bsize = psize = -1; bsize = psize = -1;
params.periods = 3; params.periods = 3;
@ -840,6 +840,10 @@ int _snd_pcm_dsnoop_open(snd_pcm_t **pcmp, const char *name,
if (err < 0) if (err < 0)
return err; return err;
/* set a reasonable default */
if (psize == -1 && params.period_time == -1)
params.period_time = 125000; /* 0.125 seconds */
params.period_size = psize; params.period_size = psize;
params.buffer_size = bsize; params.buffer_size = bsize;
err = snd_pcm_dsnoop_open(pcmp, name, ipc_key, ipc_perm, &params, bindings, slowptr, root, sconf, stream, mode); err = snd_pcm_dsnoop_open(pcmp, name, ipc_key, ipc_perm, &params, bindings, slowptr, root, sconf, stream, mode);