At Mon, 27 Apr 2009 12:05:02 +0200, Daniel Mack wrote: > > On Sun, Apr 26, 2009 at 01:18:52PM +0200, Takashi Iwai wrote: > > > The posting below didn't get any response yet, but the problem persists. > > > Any hints, anyone? > > > > The ALSA PCM core just relies upon two things from the lowlevel driver: > > > > 1. The lowlevel driver calls snd_pcm_period_elapsed() at each time > > when the set-up period size has been processed by the hardware. > > 2. The pointer callback reports the sane position as the current > > position; not below the previous position and not above the next > > period boundary. > > > > Especially pulseaudio is very sensitive about these two things, > > because it always asks the driver the current position. Thus, if your > > driver doesn't fulfill the above conditions, it won't work properly. > > Oh well. Stupid me. I think I fixed it, and wonder why it didn't break > more things. Could you apply the patch below? If you provide a proper changelog and your sign-off ;) thanks, Takashi > > Thanks, > Daniel > > diff --git a/sound/usb/caiaq/audio.c b/sound/usb/caiaq/audio.c > index 3f45c0f..b13ce76 100644 > --- a/sound/usb/caiaq/audio.c > +++ b/sound/usb/caiaq/audio.c > @@ -195,11 +195,14 @@ static int snd_usb_caiaq_pcm_prepare(struct snd_pcm_substream *substream) > > debug("%s(%p)\n", __func__, substream); > > - if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) > + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { > + dev->period_out_count[index] = BYTES_PER_SAMPLE + 1; > dev->audio_out_buf_pos[index] = BYTES_PER_SAMPLE + 1; > - else > + } else { > + dev->period_in_count[index] = BYTES_PER_SAMPLE; > dev->audio_in_buf_pos[index] = BYTES_PER_SAMPLE; > - > + } > + > if (dev->streaming) > return 0; > > @@ -300,8 +303,7 @@ static void check_for_elapsed_periods(struct snd_usb_caiaqdev *dev, > if (!sub) > continue; > > - pb = frames_to_bytes(sub->runtime, > - sub->runtime->period_size); > + pb = snd_pcm_lib_period_bytes(sub); > cnt = (sub->stream == SNDRV_PCM_STREAM_PLAYBACK) ? > &dev->period_out_count[stream] : > &dev->period_in_count[stream]; > diff --git a/sound/usb/caiaq/device.c b/sound/usb/caiaq/device.c > index 6d51770..515de1c 100644 > --- a/sound/usb/caiaq/device.c > +++ b/sound/usb/caiaq/device.c > @@ -35,7 +35,7 @@ > #include "input.h" > > MODULE_AUTHOR("Daniel Mack <daniel@xxxxxxxx>"); > -MODULE_DESCRIPTION("caiaq USB audio, version 1.3.13"); > +MODULE_DESCRIPTION("caiaq USB audio, version 1.3.14"); > MODULE_LICENSE("GPL"); > MODULE_SUPPORTED_DEVICE("{{Native Instruments, RigKontrol2}," > "{Native Instruments, RigKontrol3}," > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel