mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-11-10 03:45:42 +01:00
aplay/arecord: option to treat any xrun as fatal
Signed-off-by: Ben Gardiner <bengardiner@nanometrics.ca> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
a2b66855e6
commit
658c3cfd57
2 changed files with 19 additions and 2 deletions
|
@ -191,6 +191,10 @@ lists capabilities of the selected device such as supported formats,
|
||||||
sampling rates, numbers of channels, period and buffer bytes/sizes/times.
|
sampling rates, numbers of channels, period and buffer bytes/sizes/times.
|
||||||
For raw device hw:X this option basically lists hardware capabilities of
|
For raw device hw:X this option basically lists hardware capabilities of
|
||||||
the soundcard.
|
the soundcard.
|
||||||
|
.TP
|
||||||
|
\fI\-\-fatal\-errors\fP
|
||||||
|
Disables recovery attempts when errors (e.g. xrun) are encountered; the
|
||||||
|
aplay process instead aborts immediately.
|
||||||
|
|
||||||
.SH SIGNALS
|
.SH SIGNALS
|
||||||
When recording, SIGINT, SIGTERM and SIGABRT will close the output
|
When recording, SIGINT, SIGTERM and SIGABRT will close the output
|
||||||
|
|
|
@ -115,6 +115,7 @@ static int stop_delay = 0;
|
||||||
static int monotonic = 0;
|
static int monotonic = 0;
|
||||||
static int interactive = 0;
|
static int interactive = 0;
|
||||||
static int can_pause = 0;
|
static int can_pause = 0;
|
||||||
|
static int fatal_errors = 0;
|
||||||
static int verbose = 0;
|
static int verbose = 0;
|
||||||
static int vumeter = VUMETER_NONE;
|
static int vumeter = VUMETER_NONE;
|
||||||
static int buffer_pos = 0;
|
static int buffer_pos = 0;
|
||||||
|
@ -225,7 +226,8 @@ _("Usage: %s [OPTION]... [FILE]...\n"
|
||||||
" for this many seconds\n"
|
" for this many seconds\n"
|
||||||
" --process-id-file write the process ID here\n"
|
" --process-id-file write the process ID here\n"
|
||||||
" --use-strftime apply the strftime facility to the output file name\n"
|
" --use-strftime apply the strftime facility to the output file name\n"
|
||||||
" --dump-hw-params dump hw_params of the device\n")
|
" --dump-hw-params dump hw_params of the device\n"
|
||||||
|
" --fatal-errors treat all errors as fatal\n")
|
||||||
, command);
|
, command);
|
||||||
printf(_("Recognized sample formats are:"));
|
printf(_("Recognized sample formats are:"));
|
||||||
for (k = 0; k < SND_PCM_FORMAT_LAST; ++k) {
|
for (k = 0; k < SND_PCM_FORMAT_LAST; ++k) {
|
||||||
|
@ -419,7 +421,8 @@ enum {
|
||||||
OPT_MAX_FILE_TIME,
|
OPT_MAX_FILE_TIME,
|
||||||
OPT_PROCESS_ID_FILE,
|
OPT_PROCESS_ID_FILE,
|
||||||
OPT_USE_STRFTIME,
|
OPT_USE_STRFTIME,
|
||||||
OPT_DUMP_HWPARAMS
|
OPT_DUMP_HWPARAMS,
|
||||||
|
OPT_FATAL_ERRORS,
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
|
@ -465,6 +468,7 @@ int main(int argc, char *argv[])
|
||||||
{"use-strftime", 0, 0, OPT_USE_STRFTIME},
|
{"use-strftime", 0, 0, OPT_USE_STRFTIME},
|
||||||
{"interactive", 0, 0, 'i'},
|
{"interactive", 0, 0, 'i'},
|
||||||
{"dump-hw-params", 0, 0, OPT_DUMP_HWPARAMS},
|
{"dump-hw-params", 0, 0, OPT_DUMP_HWPARAMS},
|
||||||
|
{"fatal-errors", 0, 0, OPT_FATAL_ERRORS},
|
||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
char *pcm_name = "default";
|
char *pcm_name = "default";
|
||||||
|
@ -669,6 +673,9 @@ int main(int argc, char *argv[])
|
||||||
case OPT_DUMP_HWPARAMS:
|
case OPT_DUMP_HWPARAMS:
|
||||||
dump_hw_params = 1;
|
dump_hw_params = 1;
|
||||||
break;
|
break;
|
||||||
|
case OPT_FATAL_ERRORS:
|
||||||
|
fatal_errors = 1;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, _("Try `%s --help' for more information.\n"), command);
|
fprintf(stderr, _("Try `%s --help' for more information.\n"), command);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1350,6 +1357,12 @@ static void xrun(void)
|
||||||
prg_exit(EXIT_FAILURE);
|
prg_exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (snd_pcm_status_get_state(status) == SND_PCM_STATE_XRUN) {
|
if (snd_pcm_status_get_state(status) == SND_PCM_STATE_XRUN) {
|
||||||
|
if (fatal_errors) {
|
||||||
|
error(_("fatal %s: %s"),
|
||||||
|
stream == SND_PCM_STREAM_PLAYBACK ? _("underrun") : _("overrun"),
|
||||||
|
snd_strerror(res));
|
||||||
|
prg_exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
if (monotonic) {
|
if (monotonic) {
|
||||||
#ifdef HAVE_CLOCK_GETTIME
|
#ifdef HAVE_CLOCK_GETTIME
|
||||||
struct timespec now, diff, tstamp;
|
struct timespec now, diff, tstamp;
|
||||||
|
|
Loading…
Reference in a new issue