Lines Matching full: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()
69 if (plugin->buf_frames < frames) { in snd_pcm_plugin_alloc()
70 kvfree(plugin->buf); in snd_pcm_plugin_alloc()
71 plugin->buf = kvzalloc(size, GFP_KERNEL); in snd_pcm_plugin_alloc()
72 plugin->buf_frames = frames; in snd_pcm_plugin_alloc()
74 if (!plugin->buf) { in snd_pcm_plugin_alloc()
75 plugin->buf_frames = 0; in snd_pcm_plugin_alloc()
78 c = plugin->buf_channels; in snd_pcm_plugin_alloc()
79 if (plugin->access == SNDRV_PCM_ACCESS_RW_INTERLEAVED) { in snd_pcm_plugin_alloc()
84 c->area.addr = plugin->buf; in snd_pcm_plugin_alloc()
88 } else if (plugin->access == SNDRV_PCM_ACCESS_RW_NONINTERLEAVED) { in snd_pcm_plugin_alloc()
96 c->area.addr = plugin->buf + (channel * size); in snd_pcm_plugin_alloc()
111 struct snd_pcm_plugin *plugin = snd_pcm_plug_first(plug); in snd_pcm_plug_alloc() local
112 while (plugin->next) { in snd_pcm_plug_alloc()
113 if (plugin->dst_frames) in snd_pcm_plug_alloc()
114 frames = plugin->dst_frames(plugin, frames); in snd_pcm_plug_alloc()
117 plugin = plugin->next; in snd_pcm_plug_alloc()
118 err = snd_pcm_plugin_alloc(plugin, frames); in snd_pcm_plug_alloc()
123 struct snd_pcm_plugin *plugin = snd_pcm_plug_last(plug); in snd_pcm_plug_alloc() local
124 while (plugin->prev) { in snd_pcm_plug_alloc()
125 if (plugin->src_frames) in snd_pcm_plug_alloc()
126 frames = plugin->src_frames(plugin, frames); in snd_pcm_plug_alloc()
129 plugin = plugin->prev; in snd_pcm_plug_alloc()
130 err = snd_pcm_plugin_alloc(plugin, frames); in snd_pcm_plug_alloc()
139 snd_pcm_sframes_t snd_pcm_plugin_client_channels(struct snd_pcm_plugin *plugin, in snd_pcm_plugin_client_channels() argument
143 *channels = plugin->buf_channels; in snd_pcm_plugin_client_channels()
154 struct snd_pcm_plugin *plugin; in snd_pcm_plugin_build() local
161 plugin = kzalloc(sizeof(*plugin) + extra, GFP_KERNEL); in snd_pcm_plugin_build()
162 if (plugin == NULL) in snd_pcm_plugin_build()
164 plugin->name = name; in snd_pcm_plugin_build()
165 plugin->plug = plug; in snd_pcm_plugin_build()
166 plugin->stream = snd_pcm_plug_stream(plug); in snd_pcm_plugin_build()
167 plugin->access = SNDRV_PCM_ACCESS_RW_INTERLEAVED; in snd_pcm_plugin_build()
168 plugin->src_format = *src_format; in snd_pcm_plugin_build()
169 plugin->src_width = snd_pcm_format_physical_width(src_format->format); in snd_pcm_plugin_build()
170 snd_BUG_ON(plugin->src_width <= 0); in snd_pcm_plugin_build()
171 plugin->dst_format = *dst_format; in snd_pcm_plugin_build()
172 plugin->dst_width = snd_pcm_format_physical_width(dst_format->format); in snd_pcm_plugin_build()
173 snd_BUG_ON(plugin->dst_width <= 0); in snd_pcm_plugin_build()
174 if (plugin->stream == SNDRV_PCM_STREAM_PLAYBACK) in snd_pcm_plugin_build()
178 plugin->buf_channels = kcalloc(channels, sizeof(*plugin->buf_channels), GFP_KERNEL); in snd_pcm_plugin_build()
179 if (plugin->buf_channels == NULL) { in snd_pcm_plugin_build()
180 snd_pcm_plugin_free(plugin); in snd_pcm_plugin_build()
183 plugin->client_channels = snd_pcm_plugin_client_channels; in snd_pcm_plugin_build()
184 *ret = plugin; in snd_pcm_plugin_build()
188 int snd_pcm_plugin_free(struct snd_pcm_plugin *plugin) in snd_pcm_plugin_free() argument
190 if (! plugin) in snd_pcm_plugin_free()
192 if (plugin->private_free) in snd_pcm_plugin_free()
193 plugin->private_free(plugin); in snd_pcm_plugin_free()
194 kfree(plugin->buf_channels); in snd_pcm_plugin_free()
195 kvfree(plugin->buf); in snd_pcm_plugin_free()
196 kfree(plugin); in snd_pcm_plugin_free()
204 struct snd_pcm_plugin *plugin, *plugin_next; in calc_dst_frames() local
206 plugin = snd_pcm_plug_first(plug); in calc_dst_frames()
207 while (plugin && frames > 0) { in calc_dst_frames()
208 plugin_next = plugin->next; in calc_dst_frames()
209 if (check_size && plugin->buf_frames && in calc_dst_frames()
210 frames > plugin->buf_frames) in calc_dst_frames()
211 frames = plugin->buf_frames; in calc_dst_frames()
212 if (plugin->dst_frames) { in calc_dst_frames()
213 frames = plugin->dst_frames(plugin, frames); in calc_dst_frames()
217 plugin = plugin_next; in calc_dst_frames()
226 struct snd_pcm_plugin *plugin, *plugin_prev; in calc_src_frames() local
228 plugin = snd_pcm_plug_last(plug); in calc_src_frames()
229 while (plugin && frames > 0) { in calc_src_frames()
230 plugin_prev = plugin->prev; in calc_src_frames()
231 if (plugin->src_frames) { in calc_src_frames()
232 frames = plugin->src_frames(plugin, frames); in calc_src_frames()
236 if (check_size && plugin->buf_frames && in calc_src_frames()
237 frames > plugin->buf_frames) in calc_src_frames()
238 frames = plugin->buf_frames; in calc_src_frames()
239 plugin = plugin_prev; in calc_src_frames()
376 struct snd_pcm_plugin *plugin = NULL; in snd_pcm_plug_format_plugins() local
428 &plugin); in snd_pcm_plug_format_plugins()
431 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
433 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
443 err = snd_pcm_plugin_build_route(plug, &srcformat, &tmpformat, &plugin); in snd_pcm_plug_format_plugins()
447 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
449 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
463 &plugin); in snd_pcm_plug_format_plugins()
466 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
468 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
477 &plugin); in snd_pcm_plug_format_plugins()
481 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
483 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
497 &plugin); in snd_pcm_plug_format_plugins()
503 &plugin); in snd_pcm_plug_format_plugins()
510 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
512 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
522 err = snd_pcm_plugin_build_route(plug, &srcformat, &tmpformat, &plugin); in snd_pcm_plug_format_plugins()
526 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
528 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
540 &plugin); in snd_pcm_plug_format_plugins()
544 err = snd_pcm_plugin_append(plugin); in snd_pcm_plug_format_plugins()
546 snd_pcm_plugin_free(plugin); in snd_pcm_plug_format_plugins()
559 struct snd_pcm_plugin *plugin; in snd_pcm_plug_client_channels_buf() local
568 plugin = snd_pcm_plug_first(plug); in snd_pcm_plug_client_channels_buf()
569 format = &plugin->src_format; in snd_pcm_plug_client_channels_buf()
571 plugin = snd_pcm_plug_last(plug); in snd_pcm_plug_client_channels_buf()
572 format = &plugin->dst_format; in snd_pcm_plug_client_channels_buf()
574 v = plugin->buf_channels; in snd_pcm_plug_client_channels_buf()
580 if (snd_BUG_ON(plugin->access != SNDRV_PCM_ACCESS_RW_INTERLEAVED && in snd_pcm_plug_client_channels_buf()
596 struct snd_pcm_plugin *plugin, *next; in snd_pcm_plug_write_transfer() local
601 plugin = snd_pcm_plug_first(plug); in snd_pcm_plug_write_transfer()
602 while (plugin) { in snd_pcm_plug_write_transfer()
605 next = plugin->next; in snd_pcm_plug_write_transfer()
608 if (plugin->dst_frames) { in snd_pcm_plug_write_transfer()
609 frames1 = plugin->dst_frames(plugin, frames); in snd_pcm_plug_write_transfer()
618 if (plugin->src_frames) { in snd_pcm_plug_write_transfer()
619 frames = plugin->src_frames(plugin, frames1); in snd_pcm_plug_write_transfer()
626 pdprintf("write plugin: %s, %li\n", plugin->name, frames); in snd_pcm_plug_write_transfer()
627 frames = plugin->transfer(plugin, src_channels, dst_channels, frames); in snd_pcm_plug_write_transfer()
631 plugin = next; in snd_pcm_plug_write_transfer()
638 struct snd_pcm_plugin *plugin, *next; in snd_pcm_plug_read_transfer() local
648 plugin = snd_pcm_plug_first(plug); in snd_pcm_plug_read_transfer()
649 while (plugin && frames > 0) { in snd_pcm_plug_read_transfer()
650 next = plugin->next; in snd_pcm_plug_read_transfer()
652 err = plugin->client_channels(plugin, frames, &dst_channels); in snd_pcm_plug_read_transfer()
659 pdprintf("read plugin: %s, %li\n", plugin->name, frames); in snd_pcm_plug_read_transfer()
660 frames = plugin->transfer(plugin, src_channels, dst_channels, frames); in snd_pcm_plug_read_transfer()
663 plugin = next; in snd_pcm_plug_read_transfer()