summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gardiner <bengardiner@nanometrics.ca>2012-03-15 23:51:02 -0400
committerTakashi Iwai <tiwai@suse.de>2012-03-19 15:44:16 +0100
commit658c3cfd5726eb1efb44472909651402c6f8fa15 (patch)
tree6ce1f67b55a29499e7830af83c5a3b0b245f327d
parenta2b66855e69b0f1dc27dab37f24057f717359884 (diff)
downloadalsa-utils-658c3cfd5726eb1efb44472909651402c6f8fa15.tar.gz
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>
-rw-r--r--aplay/aplay.14
-rw-r--r--aplay/aplay.c17
2 files changed, 19 insertions, 2 deletions
diff --git a/aplay/aplay.1 b/aplay/aplay.1
index 0195322..bf9b53e 100644
--- a/aplay/aplay.1
+++ b/aplay/aplay.1
@@ -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.
For raw device hw:X this option basically lists hardware capabilities of
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
When recording, SIGINT, SIGTERM and SIGABRT will close the output
diff --git a/aplay/aplay.c b/aplay/aplay.c
index 0633cbd..1ce34c4 100644
--- a/aplay/aplay.c
+++ b/aplay/aplay.c
@@ -115,6 +115,7 @@ static int stop_delay = 0;
static int monotonic = 0;
static int interactive = 0;
static int can_pause = 0;
+static int fatal_errors = 0;
static int verbose = 0;
static int vumeter = VUMETER_NONE;
static int buffer_pos = 0;
@@ -225,7 +226,8 @@ _("Usage: %s [OPTION]... [FILE]...\n"
" for this many seconds\n"
" --process-id-file write the process ID here\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);
printf(_("Recognized sample formats are:"));
for (k = 0; k < SND_PCM_FORMAT_LAST; ++k) {
@@ -419,7 +421,8 @@ enum {
OPT_MAX_FILE_TIME,
OPT_PROCESS_ID_FILE,
OPT_USE_STRFTIME,
- OPT_DUMP_HWPARAMS
+ OPT_DUMP_HWPARAMS,
+ OPT_FATAL_ERRORS,
};
int main(int argc, char *argv[])
@@ -465,6 +468,7 @@ int main(int argc, char *argv[])
{"use-strftime", 0, 0, OPT_USE_STRFTIME},
{"interactive", 0, 0, 'i'},
{"dump-hw-params", 0, 0, OPT_DUMP_HWPARAMS},
+ {"fatal-errors", 0, 0, OPT_FATAL_ERRORS},
{0, 0, 0, 0}
};
char *pcm_name = "default";
@@ -669,6 +673,9 @@ int main(int argc, char *argv[])
case OPT_DUMP_HWPARAMS:
dump_hw_params = 1;
break;
+ case OPT_FATAL_ERRORS:
+ fatal_errors = 1;
+ break;
default:
fprintf(stderr, _("Try `%s --help' for more information.\n"), command);
return 1;
@@ -1350,6 +1357,12 @@ static void xrun(void)
prg_exit(EXIT_FAILURE);
}
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) {
#ifdef HAVE_CLOCK_GETTIME
struct timespec now, diff, tstamp;