Lines Matching defs:sndpcm
74 static int set_snd_pcm_params(struct bat *bat, struct pcm_container *sndpcm)
84 const char *device_name = snd_pcm_name(sndpcm->handle);
95 err = snd_pcm_hw_params_any(sndpcm->handle, params);
104 err = snd_pcm_hw_params_set_access(sndpcm->handle, params,
114 err = snd_pcm_hw_params_set_format(sndpcm->handle, params, format);
123 err = snd_pcm_hw_params_set_channels(sndpcm->handle,
135 err = snd_pcm_hw_params_set_rate_near(sndpcm->handle,
189 err = snd_pcm_hw_params_set_buffer_size_near(sndpcm->handle,
199 err = snd_pcm_hw_params_set_period_size_near(sndpcm->handle,
225 err = snd_pcm_hw_params_set_buffer_time_near(sndpcm->handle,
235 err = snd_pcm_hw_params_set_period_time_near(sndpcm->handle,
247 if (snd_pcm_hw_params(sndpcm->handle, params) < 0) {
255 &sndpcm->period_size, 0);
259 sndpcm->period_size,
264 err = snd_pcm_hw_params_get_buffer_size(params, &sndpcm->buffer_size);
268 sndpcm->buffer_size,
273 if (sndpcm->period_size == sndpcm->buffer_size) {
276 sndpcm->period_size);
281 (int) sndpcm->period_size, (int) sndpcm->buffer_size);
290 sndpcm->sample_bits = err;
292 sndpcm->frame_bits = sndpcm->sample_bits * bat->channels;
295 sndpcm->period_bytes = sndpcm->period_size * sndpcm->frame_bits / 8;
296 sndpcm->buffer = (char *) malloc(sndpcm->period_bytes);
297 if (sndpcm->buffer == NULL) {
299 sndpcm->period_bytes);
306 static int write_to_pcm(const struct pcm_container *sndpcm,
314 err = snd_pcm_writei(sndpcm->handle, sndpcm->buffer + offset,
317 snd_pcm_wait(sndpcm->handle, 500);
323 snd_pcm_prepare(sndpcm->handle);
325 while ((err = snd_pcm_resume(sndpcm->handle)) == -EAGAIN)
328 snd_pcm_prepare(sndpcm->handle);
337 offset += err * sndpcm->frame_bits / 8;
347 static int latencytest_process_output(struct pcm_container *sndpcm,
351 int bytes = sndpcm->period_bytes; /* playback buffer size */
352 int frames = sndpcm->period_size; /* frame count */
358 err = handleoutput(bat, sndpcm->buffer, bytes, frames);
362 err = write_to_pcm(sndpcm, frames, bat);
381 static int write_to_pcm_loop(struct pcm_container *sndpcm, struct bat *bat)
384 int bytes = sndpcm->period_bytes; /* playback buffer size */
385 int frames = bytes * 8 / sndpcm->frame_bits; /* frame count */
406 err = generate_input_data(bat, sndpcm->buffer, bytes, frames);
411 if (fwrite(sndpcm->buffer, 1, bytes, fp) != (size_t)bytes) {
423 err = write_to_pcm(sndpcm, frames, bat);
433 snd_pcm_drain(sndpcm->handle);
444 struct pcm_container sndpcm;
449 memset(&sndpcm, 0, sizeof(sndpcm));
451 err = snd_pcm_open(&sndpcm.handle, bat->playback.device,
460 err = set_snd_pcm_params(bat, &sndpcm);
491 err = latencytest_process_output(&sndpcm, bat);
493 err = write_to_pcm_loop(&sndpcm, bat);
503 free(sndpcm.buffer);
505 snd_pcm_close(sndpcm.handle);
510 static int read_from_pcm(struct pcm_container *sndpcm,
518 err = snd_pcm_readi(sndpcm->handle,
519 sndpcm->buffer + offset, remain);
521 snd_pcm_wait(sndpcm->handle, 500);
523 snd_pcm_prepare(sndpcm->handle);
529 while ((err = snd_pcm_resume(sndpcm->handle)) == -EAGAIN)
532 snd_pcm_prepare(sndpcm->handle);
541 offset += err * sndpcm->frame_bits / 8;
548 static int read_from_pcm_loop(struct pcm_container *sndpcm, struct bat *bat)
573 size = (remain <= sndpcm->period_bytes) ?
574 remain : sndpcm->period_bytes;
575 frames = size * 8 / sndpcm->frame_bits;
578 err = read_from_pcm(sndpcm, frames, bat);
583 if (fwrite(sndpcm->buffer, 1, size, fp) != (size_t)size) {
606 static int latencytest_process_input(struct pcm_container *sndpcm,
612 int frames = sndpcm->period_size;
613 int size = sndpcm->period_bytes;
634 err = read_from_pcm(sndpcm, frames, bat);
642 err = handleinput(bat, sndpcm->buffer, frames);
650 if (fwrite(sndpcm->buffer, 1, size, fp) != (size_t)size) {
678 struct pcm_container sndpcm;
685 memset(&sndpcm, 0, sizeof(sndpcm));
687 err = snd_pcm_open(&sndpcm.handle, bat->capture.device,
696 err = set_snd_pcm_params(bat, &sndpcm);
704 pthread_cleanup_push(pcm_cleanup, sndpcm.handle);
705 pthread_cleanup_push(free, sndpcm.buffer);
709 err = latencytest_process_input(&sndpcm, bat);
711 err = read_from_pcm_loop(&sndpcm, bat);
724 snd_pcm_drain(sndpcm.handle);
728 free(sndpcm.buffer);
730 snd_pcm_close(sndpcm.handle);