At Tue, 16 Sep 2003 02:26:43 -0700,
Nick Hogle wrote:
> 
> I believe this is a bug: the loop in plug_alloc doesn't iterate completely 
> through the plugin linked list.   The problem with this, is that 
> snd_pcm_plugin_alloc won't get called for every plugin in the list, and 
> vital components of those plugins won't be initialized.
> 
> The solution would be to replace the while (plugin->next/prev) lines with 
> while (plugin), to move lines: plugin = plugin->next/prev to the spot just 
> after if (err < 0) return err;
> 
> I found that the aformentioned changes fixed a problem I was having with 
> reading from /dev/dsp.   Unless I set the rate to 48000, then read() would 
> always return 0.  This was because when read_transfer iterated through the 
> plugins, the "rate conversion" plugin, which had not been initialized, had 
> the value 0 in dst_channels[0].frames.  This caused the entire read call to 
> return 0.
> 
> BTW, I'm using the intel8x0 driver, and the latest 0.9.6 release of 
> alsa-drivers.
> 
> Anyone else agree that this is a bug?  Or am I missing something, that 
> requires that plug_alloc to NOT iterate completely through the list?

at least i agree that is a bug, but it's in the different place :)

you don't need allocate the buffer for the last plugin because the
last one will write to the recording buffer directly.

the attached patch will fix this problem.


Takashi

Attachment: plugin-rec-fix.dif
Description: Binary data

Reply via email to