Lines Matching refs:plugin
49 static int snd_pcm_plugin_alloc(struct snd_pcm_plugin *plugin, snd_pcm_uframes_t frames) in snd_pcm_plugin_alloc() argument
57 if (plugin->stream == SNDRV_PCM_STREAM_PLAYBACK) { in snd_pcm_plugin_alloc()
58 format = &plugin->src_format; in snd_pcm_plugin_alloc()
60 format = &plugin->dst_format; in snd_pcm_plugin_alloc()
68 if (plugin->buf_frames < frames) { in snd_pcm_plugin_alloc()
69 kvfree(plugin->buf); in snd_pcm_plugin_alloc()
70 plugin->buf = kvzalloc(size, GFP_KERNEL); in snd_pcm_plugin_alloc()
71 plugin->buf_frames = frames; in snd_pcm_plugin_alloc()
73 if (!plugin->buf) { in snd_pcm_plugin_alloc()
74 plugin->buf_frames = 0; in snd_pcm_plugin_alloc()
77 c = plugin->buf_channels; in snd_pcm_plugin_alloc()
78 if (plugin->access == SNDRV_PCM_ACCESS_RW_INTERLEAVED) { in snd_pcm_plugin_alloc()
83 c->area.addr = plugin->buf; in snd_pcm_plugin_alloc()
87 } else if (plugin->access == SNDRV_PCM_ACCESS_RW_NONINTERLEAVED) { in snd_pcm_plugin_alloc()
95 c->area.addr = plugin->buf + (channel * size); in snd_pcm_plugin_alloc()
110 struct snd_pcm_plugin *plugin = snd_pcm_plug_first(plug); in snd_pcm_plug_alloc() local
111 while (plugin->next) { in snd_pcm_plug_alloc()
112 if (plugin->dst_frames) in snd_pcm_plug_alloc()
113 frames = plugin->dst_frames(plugin, frames); in snd_pcm_plug_alloc()
116 plugin = plugin->next; in snd_pcm_plug_alloc()
117 err = snd_pcm_plugin_alloc(plugin, frames); in snd_pcm_plug_alloc()
122 struct snd_pcm_plugin *plugin = snd_pcm_plug_last(plug); in snd_pcm_plug_alloc() local
123 while (plugin->prev) { in snd_pcm_plug_alloc()
124 if (plugin->src_frames) in snd_pcm_plug_alloc()
125 frames = plugin->src_frames(plugin, frames); in snd_pcm_plug_alloc()
128 plugin = plugin->prev; in snd_pcm_plug_alloc()
129 err = snd_pcm_plugin_alloc(plugin, frames); in snd_pcm_plug_alloc()
138 snd_pcm_sframes_t snd_pcm_plugin_client_channels(struct snd_pcm_plugin *plugin, in snd_pcm_plugin_client_channels() argument
142 *channels = plugin->buf_channels; in snd_pcm_plugin_client_channels()
153 struct snd_pcm_plugin *plugin; in snd_pcm_plugin_build() local
160 plugin = kzalloc(sizeof(*plugin) + extra, GFP_KERNEL); in snd_pcm_plugin_build()
161 if (plugin == NULL) in snd_pcm_plugin_build()
163 plugin->name = name; in snd_pcm_plugin_build()
164 plugin->plug = plug; in snd_pcm_plugin_build()
165 plugin->stream = snd_pcm_plug_stream(plug); in snd_pcm_plugin_build()
166 plugin->access = SNDRV_PCM_ACCESS_RW_INTERLEAVED; in snd_pcm_plugin_build()
167 plugin->src_format = *src_format; in snd_pcm_plugin_build()
168 plugin->src_width = snd_pcm_format_physical_width(src_format->format); in snd_pcm_plugin_build()
169 snd_BUG_ON(plugin->src_width <= 0); in snd_pcm_plugin_build()
170 plugin->dst_format = *dst_format; in snd_pcm_plugin_build()
171 plugin->dst_width = snd_pcm_format_physical_width(dst_format->format); in snd_pcm_plugin_build()
172 snd_BUG_ON(plugin->dst_width <= 0); in snd_pcm_plugin_build()
173 if (plugin->stream == SNDRV_PCM_STREAM_PLAYBACK) in snd_pcm_plugin_build()
177 plugin->buf_channels = kcalloc(channels, sizeof(*plugin->buf_channels), GFP_KERNEL); in snd_pcm_plugin_build()
178 if (plugin->buf_channels == NULL) { in snd_pcm_plugin_build()
179 snd_pcm_plugin_free(plugin); in snd_pcm_plugin_build()
182 plugin->client_channels = snd_pcm_plugin_client_channels; in snd_pcm_plugin_build()
183 *ret = plugin; in snd_pcm_plugin_build()
187 int snd_pcm_plugin_free(struct snd_pcm_plugin *plugin) in snd_pcm_plugin_free() argument
189 if (! plugin) in snd_pcm_plugin_free()
191 if (plugin->private_free) in snd_pcm_plugin_free()
192 plugin->private_free(plugin); in snd_pcm_plugin_free()
193 kfree(plugin->buf_channels); in snd_pcm_plugin_free()
194 kvfree(plugin->buf); in snd_pcm_plugin_free()
195 kfree(plugin); in snd_pcm_plugin_free()
201 struct snd_pcm_plugin *plugin, *plugin_prev, *plugin_next; in snd_pcm_plug_client_size() local
210 plugin = snd_pcm_plug_last(plug); in snd_pcm_plug_client_size()
211 while (plugin && drv_frames > 0) { in snd_pcm_plug_client_size()
212 plugin_prev = plugin->prev; in snd_pcm_plug_client_size()
213 if (plugin->src_frames) in snd_pcm_plug_client_size()
214 drv_frames = plugin->src_frames(plugin, drv_frames); in snd_pcm_plug_client_size()
215 plugin = plugin_prev; in snd_pcm_plug_client_size()
218 plugin = snd_pcm_plug_first(plug); in snd_pcm_plug_client_size()
219 while (plugin && drv_frames > 0) { in snd_pcm_plug_client_size()
220 plugin_next = plugin->next; in snd_pcm_plug_client_size()
221 if (plugin->dst_frames) in snd_pcm_plug_client_size()
222 drv_frames = plugin->dst_frames(plugin, drv_frames); in snd_pcm_plug_client_size()
223 plugin = plugin_next; in snd_pcm_plug_client_size()
232 struct snd_pcm_plugin *plugin, *plugin_prev, *plugin_next; in snd_pcm_plug_slave_size() local
243 plugin = snd_pcm_plug_first(plug); in snd_pcm_plug_slave_size()
244 while (plugin && frames > 0) { in snd_pcm_plug_slave_size()
245 plugin_next = plugin->next; in snd_pcm_plug_slave_size()
246 if (plugin->dst_frames) { in snd_pcm_plug_slave_size()
247 frames = plugin->dst_frames(plugin, frames); in snd_pcm_plug_slave_size()
251 plugin = plugin_next; in snd_pcm_plug_slave_size()
254 plugin = snd_pcm_plug_last(plug); in snd_pcm_plug_slave_size()
255 while (plugin) { in snd_pcm_plug_slave_size()
256 plugin_prev = plugin->prev; in snd_pcm_plug_slave_size()
257 if (plugin->src_frames) { in snd_pcm_plug_slave_size()
258 frames = plugin->src_frames(plugin, frames); in snd_pcm_plug_slave_size()
262 plugin = plugin_prev; in snd_pcm_plug_slave_size()
371 struct snd_pcm_plugin *plugin = NULL; in snd_pcm_plug_format_plugins() local
423 &plugin); in snd_pcm_plug_format_plugins()
426 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
428 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
438 err = snd_pcm_plugin_build_route(plug, &srcformat, &tmpformat, &plugin); in snd_pcm_plug_format_plugins()
442 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
444 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
458 &plugin); in snd_pcm_plug_format_plugins()
461 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
463 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
472 &plugin); in snd_pcm_plug_format_plugins()
476 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
478 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
492 &plugin); in snd_pcm_plug_format_plugins()
498 &plugin); in snd_pcm_plug_format_plugins()
505 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
507 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
517 err = snd_pcm_plugin_build_route(plug, &srcformat, &tmpformat, &plugin); in snd_pcm_plug_format_plugins()
521 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
523 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
535 &plugin); in snd_pcm_plug_format_plugins()
539 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
541 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
554 struct snd_pcm_plugin *plugin; in snd_pcm_plug_client_channels_buf() local
563 plugin = snd_pcm_plug_first(plug); in snd_pcm_plug_client_channels_buf()
564 format = &plugin->src_format; in snd_pcm_plug_client_channels_buf()
566 plugin = snd_pcm_plug_last(plug); in snd_pcm_plug_client_channels_buf()
567 format = &plugin->dst_format; in snd_pcm_plug_client_channels_buf()
569 v = plugin->buf_channels; in snd_pcm_plug_client_channels_buf()
574 if (snd_BUG_ON(plugin->access != SNDRV_PCM_ACCESS_RW_INTERLEAVED && in snd_pcm_plug_client_channels_buf()
590 struct snd_pcm_plugin *plugin, *next; in snd_pcm_plug_write_transfer() local
595 plugin = snd_pcm_plug_first(plug); in snd_pcm_plug_write_transfer()
596 while (plugin) { in snd_pcm_plug_write_transfer()
599 if ((next = plugin->next) != NULL) { in snd_pcm_plug_write_transfer()
601 if (plugin->dst_frames) { in snd_pcm_plug_write_transfer()
602 frames1 = plugin->dst_frames(plugin, frames); in snd_pcm_plug_write_transfer()
611 if (plugin->src_frames) { in snd_pcm_plug_write_transfer()
612 frames = plugin->src_frames(plugin, frames1); in snd_pcm_plug_write_transfer()
619 pdprintf("write plugin: %s, %li\n", plugin->name, frames); in snd_pcm_plug_write_transfer()
620 if ((frames = plugin->transfer(plugin, src_channels, dst_channels, frames)) < 0) in snd_pcm_plug_write_transfer()
623 plugin = next; in snd_pcm_plug_write_transfer()
630 struct snd_pcm_plugin *plugin, *next; in snd_pcm_plug_read_transfer() local
640 plugin = snd_pcm_plug_first(plug); in snd_pcm_plug_read_transfer()
641 while (plugin && frames > 0) { in snd_pcm_plug_read_transfer()
642 if ((next = plugin->next) != NULL) { in snd_pcm_plug_read_transfer()
643 if ((err = plugin->client_channels(plugin, frames, &dst_channels)) < 0) { in snd_pcm_plug_read_transfer()
650 pdprintf("read plugin: %s, %li\n", plugin->name, frames); in snd_pcm_plug_read_transfer()
651 if ((frames = plugin->transfer(plugin, src_channels, dst_channels, frames)) < 0) in snd_pcm_plug_read_transfer()
653 plugin = next; in snd_pcm_plug_read_transfer()