Lines Matching full:bat
60 static int format_convert(struct bat *bat, snd_pcm_format_t *fmt) in format_convert() argument
65 if (t->format_bat == bat->format) { in format_convert()
70 fprintf(bat->err, _("Invalid format!\n")); in format_convert()
74 static int set_snd_pcm_params(struct bat *bat, struct pcm_container *sndpcm) in set_snd_pcm_params() argument
87 err = format_convert(bat, &format); in set_snd_pcm_params()
97 fprintf(bat->err, _("Set parameter to device error: ")); in set_snd_pcm_params()
98 fprintf(bat->err, _("default params: %s: %s(%d)\n"), in set_snd_pcm_params()
107 fprintf(bat->err, _("Set parameter to device error: ")); in set_snd_pcm_params()
108 fprintf(bat->err, _("access type: %s: %s(%d)\n"), in set_snd_pcm_params()
116 fprintf(bat->err, _("Set parameter to device error: ")); in set_snd_pcm_params()
117 fprintf(bat->err, _("PCM format: %d %s: %s(%d)\n"), format, in set_snd_pcm_params()
124 params, bat->channels); in set_snd_pcm_params()
126 fprintf(bat->err, _("Set parameter to device error: ")); in set_snd_pcm_params()
127 fprintf(bat->err, _("channel number: %d %s: %s(%d)\n"), in set_snd_pcm_params()
128 bat->channels, in set_snd_pcm_params()
134 rate = bat->rate; in set_snd_pcm_params()
136 params, &bat->rate, in set_snd_pcm_params()
139 fprintf(bat->err, _("Set parameter to device error: ")); in set_snd_pcm_params()
140 fprintf(bat->err, _("sample rate: %d %s: %s(%d)\n"), in set_snd_pcm_params()
141 bat->rate, in set_snd_pcm_params()
145 if ((float) rate * (1 + RATE_RANGE) < bat->rate in set_snd_pcm_params()
146 || (float) rate * (1 - RATE_RANGE) > bat->rate) { in set_snd_pcm_params()
147 fprintf(bat->err, _("Invalid parameters: sample rate: ")); in set_snd_pcm_params()
148 fprintf(bat->err, _("requested %dHz, got %dHz\n"), in set_snd_pcm_params()
149 rate, bat->rate); in set_snd_pcm_params()
153 if (bat->buffer_size > 0 && bat->period_size == 0) in set_snd_pcm_params()
154 bat->period_size = bat->buffer_size / DIV_BUFFERSIZE; in set_snd_pcm_params()
156 if (bat->roundtriplatency && bat->buffer_size == 0) { in set_snd_pcm_params()
161 fprintf(bat->err, in set_snd_pcm_params()
163 fprintf(bat->err, _("buffer size min: %d %s: %s(%d)\n"), in set_snd_pcm_params()
171 fprintf(bat->err, in set_snd_pcm_params()
173 fprintf(bat->err, _("period size min: %d %s: %s(%d)\n"), in set_snd_pcm_params()
178 bat->buffer_size = (int) buffer_size; in set_snd_pcm_params()
179 bat->period_size = (int) period_size; in set_snd_pcm_params()
182 if (bat->buffer_size > 0) { in set_snd_pcm_params()
183 buffer_size = bat->buffer_size; in set_snd_pcm_params()
184 period_size = bat->period_size; in set_snd_pcm_params()
186 fprintf(bat->log, _("Set period size: %d buffer size: %d\n"), in set_snd_pcm_params()
192 fprintf(bat->err, _("Set parameter to device error: ")); in set_snd_pcm_params()
193 fprintf(bat->err, _("buffer size: %d %s: %s(%d)\n"), in set_snd_pcm_params()
202 fprintf(bat->err, _("Set parameter to device error: ")); in set_snd_pcm_params()
203 fprintf(bat->err, _("period size: %d %s: %s(%d)\n"), in set_snd_pcm_params()
211 fprintf(bat->err, in set_snd_pcm_params()
213 fprintf(bat->err, _("buffer time: %d %s: %s(%d)\n"), in set_snd_pcm_params()
228 fprintf(bat->err, _("Set parameter to device error: ")); in set_snd_pcm_params()
229 fprintf(bat->err, _("buffer time: %d %s: %s(%d)\n"), in set_snd_pcm_params()
238 fprintf(bat->err, _("Set parameter to device error: ")); in set_snd_pcm_params()
239 fprintf(bat->err, _("period time: %d %s: %s(%d)\n"), in set_snd_pcm_params()
248 fprintf(bat->err, _("Set parameter to device error: ")); in set_snd_pcm_params()
249 fprintf(bat->err, _("hw params: %s: %s(%d)\n"), in set_snd_pcm_params()
257 fprintf(bat->err, _("Get parameter from device error: ")); in set_snd_pcm_params()
258 fprintf(bat->err, _("period size: %zd %s: %s(%d)\n"), in set_snd_pcm_params()
266 fprintf(bat->err, _("Get parameter from device error: ")); in set_snd_pcm_params()
267 fprintf(bat->err, _("buffer size: %zd %s: %s(%d)\n"), in set_snd_pcm_params()
274 fprintf(bat->err, _("Invalid parameters: can't use period ")); in set_snd_pcm_params()
275 fprintf(bat->err, _("equal to buffer size (%zd)\n"), in set_snd_pcm_params()
280 fprintf(bat->log, _("Get period size: %d buffer size: %d\n"), in set_snd_pcm_params()
285 fprintf(bat->err, _("Invalid parameters: ")); in set_snd_pcm_params()
286 fprintf(bat->err, _("snd_pcm_format_physical_width: %d\n"), in set_snd_pcm_params()
292 sndpcm->frame_bits = sndpcm->sample_bits * bat->channels; in set_snd_pcm_params()
298 fprintf(bat->err, _("Not enough memory: size=%zd\n"), in set_snd_pcm_params()
307 int frames, struct bat *bat) in write_to_pcm() argument
319 fprintf(bat->err, _("Underrun: %s(%d)\n"), in write_to_pcm()
321 if (bat->roundtriplatency) in write_to_pcm()
322 bat->latency.xrun_error = true; in write_to_pcm()
330 fprintf(bat->err, _("Write PCM device error: %s(%d)\n"), in write_to_pcm()
348 struct bat *bat) in latencytest_process_output() argument
354 bat->latency.is_playing = true; in latencytest_process_output()
358 err = handleoutput(bat, sndpcm->buffer, bytes, frames); in latencytest_process_output()
362 err = write_to_pcm(sndpcm, frames, bat); in latencytest_process_output()
367 if (bat->latency.xrun_error == true) in latencytest_process_output()
370 if (bat->latency.state == LATENCY_STATE_COMPLETE_SUCCESS) in latencytest_process_output()
373 bat->periods_played++; in latencytest_process_output()
376 bat->latency.is_playing = false; in latencytest_process_output()
381 static int write_to_pcm_loop(struct pcm_container *sndpcm, struct bat *bat) in write_to_pcm_loop() argument
389 if (bat->debugplay) { in write_to_pcm_loop()
390 fp = fopen(bat->debugplay, "wb"); in write_to_pcm_loop()
393 fprintf(bat->err, _("Cannot open file: %s %d\n"), in write_to_pcm_loop()
394 bat->debugplay, err); in write_to_pcm_loop()
406 err = generate_input_data(bat, sndpcm->buffer, bytes, frames); in write_to_pcm_loop()
410 if (bat->debugplay) { in write_to_pcm_loop()
418 bat->periods_played++; in write_to_pcm_loop()
419 if (bat->period_is_limited in write_to_pcm_loop()
420 && bat->periods_played >= bat->periods_total) in write_to_pcm_loop()
423 err = write_to_pcm(sndpcm, frames, bat); in write_to_pcm_loop()
428 if (bat->debugplay) { in write_to_pcm_loop()
429 update_wav_header(bat, fp, bytes_total); in write_to_pcm_loop()
441 void *playback_alsa(struct bat *bat) in playback_alsa() argument
446 fprintf(bat->log, _("Entering playback thread (ALSA).\n")); in playback_alsa()
451 err = snd_pcm_open(&sndpcm.handle, bat->playback.device, in playback_alsa()
454 fprintf(bat->err, _("Cannot open PCM playback device: ")); in playback_alsa()
455 fprintf(bat->err, _("%s(%d)\n"), snd_strerror(err), err); in playback_alsa()
460 err = set_snd_pcm_params(bat, &sndpcm); in playback_alsa()
466 if (bat->playback.file == NULL) { in playback_alsa()
467 fprintf(bat->log, _("Playing generated audio sine wave")); in playback_alsa()
468 bat->sinus_duration == 0 ? in playback_alsa()
469 fprintf(bat->log, _(" endlessly\n")) : in playback_alsa()
470 fprintf(bat->log, _("\n")); in playback_alsa()
472 fprintf(bat->log, _("Playing input audio file: %s\n"), in playback_alsa()
473 bat->playback.file); in playback_alsa()
474 bat->fp = fopen(bat->playback.file, "rb"); in playback_alsa()
476 if (bat->fp == NULL) { in playback_alsa()
477 fprintf(bat->err, _("Cannot open file: %s %d\n"), in playback_alsa()
478 bat->playback.file, err); in playback_alsa()
483 err = read_wav_header(bat, bat->playback.file, bat->fp, true); in playback_alsa()
490 if (bat->roundtriplatency) in playback_alsa()
491 err = latencytest_process_output(&sndpcm, bat); in playback_alsa()
493 err = write_to_pcm_loop(&sndpcm, bat); in playback_alsa()
500 if (bat->playback.file) in playback_alsa()
501 fclose(bat->fp); in playback_alsa()
511 int frames, struct bat *bat) in read_from_pcm() argument
524 fprintf(bat->err, _("Overrun: %s(%d)\n"), in read_from_pcm()
526 if (bat->roundtriplatency) in read_from_pcm()
527 bat->latency.xrun_error = true; in read_from_pcm()
534 fprintf(bat->err, _("Read PCM device error: %s(%d)\n"), in read_from_pcm()
548 static int read_from_pcm_loop(struct pcm_container *sndpcm, struct bat *bat) in read_from_pcm_loop() argument
554 int bytes_count = bat->frames * bat->frame_size; in read_from_pcm_loop()
557 remove(bat->capture.file); in read_from_pcm_loop()
558 fp = fopen(bat->capture.file, "wb"); in read_from_pcm_loop()
561 fprintf(bat->err, _("Cannot open file: %s %d\n"), in read_from_pcm_loop()
562 bat->capture.file, err); in read_from_pcm_loop()
578 err = read_from_pcm(sndpcm, frames, bat); in read_from_pcm_loop()
590 bat->periods_played++; in read_from_pcm_loop()
592 if (bat->period_is_limited in read_from_pcm_loop()
593 && bat->periods_played >= bat->periods_total) in read_from_pcm_loop()
597 update_wav_header(bat, fp, bytes_read); in read_from_pcm_loop()
607 struct bat *bat) in latencytest_process_input() argument
614 int bytes_count = bat->frames * bat->frame_size; in latencytest_process_input()
616 remove(bat->capture.file); in latencytest_process_input()
617 fp = fopen(bat->capture.file, "wb"); in latencytest_process_input()
620 fprintf(bat->err, _("Cannot open file: %s %d\n"), in latencytest_process_input()
621 bat->capture.file, err); in latencytest_process_input()
630 bat->latency.is_capturing = true; in latencytest_process_input()
634 err = read_from_pcm(sndpcm, frames, bat); in latencytest_process_input()
639 if (bat->latency.xrun_error == true) in latencytest_process_input()
642 err = handleinput(bat, sndpcm->buffer, frames); in latencytest_process_input()
646 if (bat->latency.is_playing == false) in latencytest_process_input()
658 bat->latency.is_capturing = false; in latencytest_process_input()
660 update_wav_header(bat, fp, bytes_read); in latencytest_process_input()
675 void *record_alsa(struct bat *bat) in record_alsa() argument
682 fprintf(bat->log, _("Entering capture thread (ALSA).\n")); in record_alsa()
687 err = snd_pcm_open(&sndpcm.handle, bat->capture.device, in record_alsa()
690 fprintf(bat->err, _("Cannot open PCM capture device: ")); in record_alsa()
691 fprintf(bat->err, _("%s(%d)\n"), snd_strerror(err), err); in record_alsa()
696 err = set_snd_pcm_params(bat, &sndpcm); in record_alsa()
707 fprintf(bat->log, _("Recording ...\n")); in record_alsa()
708 if (bat->roundtriplatency) in record_alsa()
709 err = latencytest_process_input(&sndpcm, bat); in record_alsa()
711 err = read_from_pcm_loop(&sndpcm, bat); in record_alsa()