Lines Matching defs:handle
101 static int set_hwparams(snd_pcm_t *handle,
110 err = snd_pcm_hw_params_any(handle, params);
116 err = snd_pcm_hw_params_set_rate_resample(handle, params, resample);
122 err = snd_pcm_hw_params_set_access(handle, params, access);
128 err = snd_pcm_hw_params_set_format(handle, params, format);
134 err = snd_pcm_hw_params_set_channels(handle, params, channels);
141 err = snd_pcm_hw_params_set_rate_near(handle, params, &rrate, 0);
151 err = snd_pcm_hw_params_set_buffer_time_near(handle, params, &buffer_time, &dir);
163 err = snd_pcm_hw_params_set_period_time_near(handle, params, &period_time, &dir);
175 err = snd_pcm_hw_params(handle, params);
183 static int set_swparams(snd_pcm_t *handle, snd_pcm_sw_params_t *swparams)
188 err = snd_pcm_sw_params_current(handle, swparams);
195 err = snd_pcm_sw_params_set_start_threshold(handle, swparams, (buffer_size / period_size) * period_size);
202 err = snd_pcm_sw_params_set_avail_min(handle, swparams, period_event ? buffer_size : period_size);
209 err = snd_pcm_sw_params_set_period_event(handle, swparams, 1);
216 err = snd_pcm_sw_params(handle, swparams);
228 static int xrun_recovery(snd_pcm_t *handle, int err)
233 err = snd_pcm_prepare(handle);
238 while ((err = snd_pcm_resume(handle)) == -EAGAIN)
241 err = snd_pcm_prepare(handle);
254 static int write_loop(snd_pcm_t *handle,
267 err = snd_pcm_writei(handle, ptr, cptr);
271 if (xrun_recovery(handle, err) < 0) {
287 static int wait_for_poll(snd_pcm_t *handle, struct pollfd *ufds, unsigned int count)
293 snd_pcm_poll_descriptors_revents(handle, ufds, count, &revents);
301 static int write_and_poll_loop(snd_pcm_t *handle,
310 count = snd_pcm_poll_descriptors_count (handle);
321 if ((err = snd_pcm_poll_descriptors(handle, ufds, count)) < 0) {
329 err = wait_for_poll(handle, ufds, count);
331 if (snd_pcm_state(handle) == SND_PCM_STATE_XRUN ||
332 snd_pcm_state(handle) == SND_PCM_STATE_SUSPENDED) {
333 err = snd_pcm_state(handle) == SND_PCM_STATE_XRUN ? -EPIPE : -ESTRPIPE;
334 if (xrun_recovery(handle, err) < 0) {
350 err = snd_pcm_writei(handle, ptr, cptr);
352 if (xrun_recovery(handle, err) < 0) {
359 if (snd_pcm_state(handle) == SND_PCM_STATE_RUNNING)
367 err = wait_for_poll(handle, ufds, count);
369 if (snd_pcm_state(handle) == SND_PCM_STATE_XRUN ||
370 snd_pcm_state(handle) == SND_PCM_STATE_SUSPENDED) {
371 err = snd_pcm_state(handle) == SND_PCM_STATE_XRUN ? -EPIPE : -ESTRPIPE;
372 if (xrun_recovery(handle, err) < 0) {
398 snd_pcm_t *handle = snd_async_handler_get_pcm(ahandler);
405 avail = snd_pcm_avail_update(handle);
408 err = snd_pcm_writei(handle, samples, period_size);
417 avail = snd_pcm_avail_update(handle);
421 static int async_loop(snd_pcm_t *handle,
432 err = snd_async_add_pcm_handler(&ahandler, handle, async_callback, &data);
439 err = snd_pcm_writei(handle, samples, period_size);
449 if (snd_pcm_state(handle) == SND_PCM_STATE_PREPARED) {
450 err = snd_pcm_start(handle);
470 snd_pcm_t *handle = snd_async_handler_get_pcm(ahandler);
479 state = snd_pcm_state(handle);
481 err = xrun_recovery(handle, -EPIPE);
488 err = xrun_recovery(handle, -ESTRPIPE);
494 avail = snd_pcm_avail_update(handle);
496 err = xrun_recovery(handle, avail);
507 err = snd_pcm_start(handle);
520 err = snd_pcm_mmap_begin(handle, &my_areas, &offset, &frames);
522 if ((err = xrun_recovery(handle, err)) < 0) {
529 commitres = snd_pcm_mmap_commit(handle, offset, frames);
531 if ((err = xrun_recovery(handle, commitres >= 0 ? -EPIPE : commitres)) < 0) {
542 static int async_direct_loop(snd_pcm_t *handle,
556 err = snd_async_add_pcm_handler(&ahandler, handle, async_direct_callback, &data);
565 err = snd_pcm_mmap_begin(handle, &my_areas, &offset, &frames);
567 if ((err = xrun_recovery(handle, err)) < 0) {
573 commitres = snd_pcm_mmap_commit(handle, offset, frames);
575 if ((err = xrun_recovery(handle, commitres >= 0 ? -EPIPE : commitres)) < 0) {
583 err = snd_pcm_start(handle);
600 static int direct_loop(snd_pcm_t *handle,
612 state = snd_pcm_state(handle);
614 err = xrun_recovery(handle, -EPIPE);
621 err = xrun_recovery(handle, -ESTRPIPE);
627 avail = snd_pcm_avail_update(handle);
629 err = xrun_recovery(handle, avail);
640 err = snd_pcm_start(handle);
646 err = snd_pcm_wait(handle, -1);
648 if ((err = xrun_recovery(handle, err)) < 0) {
660 err = snd_pcm_mmap_begin(handle, &my_areas, &offset, &frames);
662 if ((err = xrun_recovery(handle, err)) < 0) {
669 commitres = snd_pcm_mmap_commit(handle, offset, frames);
671 if ((err = xrun_recovery(handle, commitres >= 0 ? -EPIPE : commitres)) < 0) {
686 static int direct_write_loop(snd_pcm_t *handle,
699 err = snd_pcm_mmap_writei(handle, ptr, cptr);
703 if (xrun_recovery(handle, err) < 0) {
722 int (*transfer_loop)(snd_pcm_t *handle,
787 snd_pcm_t *handle;
888 if ((err = snd_pcm_open(&handle, device, SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
893 if ((err = set_hwparams(handle, hwparams, transfer_methods[method].access)) < 0) {
897 if ((err = set_swparams(handle, swparams)) < 0) {
903 snd_pcm_dump(handle, output);
922 err = transfer_methods[method].transfer_loop(handle, samples, areas);
928 snd_pcm_close(handle);