Lines Matching refs:pcm

2  * \file pcm/pcm_mmap_emul.c
55 static int snd_pcm_mmap_emul_hw_refine(snd_pcm_t *pcm,
58 mmap_emul_t *map = pcm->private_data;
153 static int snd_pcm_mmap_emul_hw_params(snd_pcm_t *pcm,
156 mmap_emul_t *map = pcm->private_data;
200 snd_pcm_set_hw_ptr(pcm, &map->hw_ptr, -1, 0);
201 snd_pcm_set_appl_ptr(pcm, &map->appl_ptr, -1, 0);
209 static int snd_pcm_mmap_emul_sw_params(snd_pcm_t *pcm,
212 mmap_emul_t *map = pcm->private_data;
216 return snd_pcm_generic_sw_params(pcm, params);
221 params->start_threshold = pcm->boundary;
222 err = snd_pcm_generic_sw_params(pcm, params);
230 static int snd_pcm_mmap_emul_prepare(snd_pcm_t *pcm)
232 mmap_emul_t *map = pcm->private_data;
235 err = snd_pcm_generic_prepare(pcm);
242 static int snd_pcm_mmap_emul_reset(snd_pcm_t *pcm)
244 mmap_emul_t *map = pcm->private_data;
247 err = snd_pcm_generic_reset(pcm);
255 snd_pcm_mmap_emul_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
257 frames = snd_pcm_generic_rewind(pcm, frames);
259 snd_pcm_mmap_appl_backward(pcm, frames);
264 snd_pcm_mmap_emul_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
266 frames = snd_pcm_generic_forward(pcm, frames);
268 snd_pcm_mmap_appl_forward(pcm, frames);
274 sync_slave_write(snd_pcm_t *pcm)
276 mmap_emul_t *map = pcm->private_data;
282 pcm->start_threshold = pcm->boundary;
286 size += pcm->boundary;
288 offset = *slave->appl.ptr % pcm->buffer_size;
289 size = snd_pcm_write_mmap(pcm, offset, size);
291 pcm->start_threshold = map->start_threshold; /* restore */
297 sync_slave_read(snd_pcm_t *pcm)
299 mmap_emul_t *map = pcm->private_data;
306 size += pcm->boundary;
309 offset = map->hw_ptr % pcm->buffer_size;
310 size = snd_pcm_read_mmap(pcm, offset, size);
312 snd_pcm_mmap_hw_forward(pcm, size);
317 snd_pcm_mmap_emul_mmap_commit(snd_pcm_t *pcm, snd_pcm_uframes_t offset,
320 mmap_emul_t *map = pcm->private_data;
323 snd_pcm_mmap_appl_forward(pcm, size);
326 if (pcm->stream == SND_PCM_STREAM_PLAYBACK)
327 sync_slave_write(pcm);
331 static snd_pcm_sframes_t snd_pcm_mmap_emul_avail_update(snd_pcm_t *pcm)
333 mmap_emul_t *map = pcm->private_data;
336 if (!map->mmap_emul || pcm->stream == SND_PCM_STREAM_PLAYBACK)
339 sync_slave_read(pcm);
340 return snd_pcm_mmap_avail(pcm);
343 static void snd_pcm_mmap_emul_dump(snd_pcm_t *pcm, snd_output_t *out)
345 mmap_emul_t *map = pcm->private_data;
348 if (pcm->setup) {
350 snd_pcm_dump_setup(pcm, out);
410 snd_pcm_t *pcm;
420 err = snd_pcm_new(&pcm, SND_PCM_TYPE_MMAP_EMUL, name,
426 pcm->ops = &snd_pcm_mmap_emul_ops;
427 pcm->fast_ops = &snd_pcm_mmap_emul_fast_ops;
428 pcm->private_data = map;
429 pcm->poll_fd = slave->poll_fd;
430 pcm->poll_events = slave->poll_events;
431 pcm->tstamp_type = slave->tstamp_type;
432 snd_pcm_set_hw_ptr(pcm, &map->hw_ptr, -1, 0);
433 snd_pcm_set_appl_ptr(pcm, &map->appl_ptr, -1, 0);
434 *pcmp = pcm;
445 pcm.name {