At Wed, 12 Mar 2008 23:50:08 +0100, Pavel Hofman wrote: > > Hi, > > here is my scenario: > > ICE1724 card, trying to record from SPDIF input via AK4114, ICE1724 > slaved to SPDIF clock from the receiver. > > The card detects SPDIF input rate correctly (in my case ESI Juli where > AK4114 is provided with independent clock signal to enable the rate > detection). Let's say it is 192000. > > Now I want to arecord the input stream, let's say in CD quality, using > the plug plugin. The command fails, because of the check in ak4114.c: > > res = external_rate(rcs1); > if (!(flags & AK4114_CHECK_NO_RATE) && runtime && runtime->rate != res) { > snd_pcm_stream_lock_irqsave(ak4114->capture_substream, _flags); > if (snd_pcm_running(ak4114->capture_substream)) { > printk(KERN_DEBUG "rate changed (%i <- %i)\n", runtime->rate, res); > snd_pcm_stop(ak4114->capture_substream, SNDRV_PCM_STATE_DRAINING); > res = 1; > } > snd_pcm_stream_unlock_irqrestore(ak4114->capture_substream, _flags); > } > > The stream gets stopped because res = 192000 and runtime->rate = 44100. > > The problem is that the capture device still offers all the available > rates, instead of the single SPDIF input one. Thus, the plug plugin is > not forced to convert from 192000 to 44100 and runtime->rate is 44100 > instead of 192000. > > Of course recording at 192000 works fine. > > What would be the best way to force the SPDIF capture device to offer > (advertise) only the current rate? This functionality would have to be > applicable only to the few cards correctly detecting incoming rate > (unlike most ice1724 cards without independent clock in slave mode). What about to call snd_ak4114_check_rate_and_errors() at PCM open? You can pass AK4114_CHECK_NO_RATE to flags argument to skip the check there, at least. Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel