forked from pool/alsa-utils
Takashi Iwai
141a404e6c
- Backport alsa-utils fixes from upstream: 0001-alsamixer-fix-display-of-active-inactive-controls.patch 0002-alsaloop-libsamplerate-requires-specific-formats-for.patch 0003-alsaloop-another-try-to-force-correct-formats-for-li.patch 0004-alsamixer-fix-build-on-uClibc.patch 0005-alsactl-init-Mute-CD-Playback-volume-by-default.patch 0006-Revert-alsactl-Display-help-for-names-command.patch 0007-alsaucm-Add-list1-command-for-non-tuple-lists.patch 0008-alsaucm-Don-t-double-free-empty-lists.patch 0009-aplay-Add-i-option-for-interactive-mode.patch 0010-aplay-Avoid-recursive-signal-handling.patch 0012-alsaloop-Use-AM_CFLAGS-in-Makefile.am.patch 0013-Updated-COPYING-with-the-recent-FSF-address.patch 0014-alsamixer-Fix-64bit-issues.patch 0015-aplay-Add-include-files-for-mkdir.patch 0016-aplay-Use-standard-endian-convesions.patch OBS-URL: https://build.opensuse.org/request/show/72632 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa-utils?expand=0&rev=33
110 lines
3.4 KiB
Diff
110 lines
3.4 KiB
Diff
From d67a965aec800483ba48d6de736cb3851163e678 Mon Sep 17 00:00:00 2001
|
|
From: Takashi Iwai <tiwai@suse.de>
|
|
Date: Fri, 3 Jun 2011 12:41:26 +0200
|
|
Subject: [PATCH 09/16] aplay: Add -i option for interactive mode
|
|
|
|
The recent addition of pause/resume control via keyboard brought
|
|
a problem when aplay/arecord is invoked in background. For avoiding
|
|
regressions, it's safer to use non-interactive mode as default and
|
|
enable the new feature via an option.
|
|
|
|
Tested-by: Stephen Warren <swarren@nvidia.com>
|
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
---
|
|
aplay/aplay.1 | 4 ++++
|
|
aplay/aplay.c | 14 +++++++++++++-
|
|
2 files changed, 17 insertions(+), 1 deletions(-)
|
|
|
|
diff --git a/aplay/aplay.1 b/aplay/aplay.1
|
|
index b6caf0b..8ccf556 100644
|
|
--- a/aplay/aplay.1
|
|
+++ b/aplay/aplay.1
|
|
@@ -137,6 +137,10 @@ by typing aplay.
|
|
Record. This is the default if the program is invoked
|
|
by typing arecord.
|
|
.TP
|
|
+\fI\-i, \-\-interactive\fP
|
|
+Allow interactive operation via stdin.
|
|
+Currently only pause/resume via space or enter key is implemented.
|
|
+.TP
|
|
\fI\-\-disable\-resample\fP
|
|
Disable automatic rate resample.
|
|
.TP
|
|
diff --git a/aplay/aplay.c b/aplay/aplay.c
|
|
index c09f23c..04959b8 100644
|
|
--- a/aplay/aplay.c
|
|
+++ b/aplay/aplay.c
|
|
@@ -103,6 +103,7 @@ static int avail_min = -1;
|
|
static int start_delay = 0;
|
|
static int stop_delay = 0;
|
|
static int monotonic = 0;
|
|
+static int interactive = 0;
|
|
static int can_pause = 0;
|
|
static int verbose = 0;
|
|
static int vumeter = VUMETER_NONE;
|
|
@@ -200,6 +201,7 @@ _("Usage: %s [OPTION]... [FILE]...\n"
|
|
"-v, --verbose show PCM structure and setup (accumulative)\n"
|
|
"-V, --vumeter=TYPE enable VU meter (TYPE: mono or stereo)\n"
|
|
"-I, --separate-channels one file for each channel\n"
|
|
+"-i, --interactive allow interactive operation from stdin\n"
|
|
" --disable-resample disable automatic rate resample\n"
|
|
" --disable-channels disable automatic channel conversions\n"
|
|
" --disable-format disable automatic format conversions\n"
|
|
@@ -404,7 +406,7 @@ enum {
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int option_index;
|
|
- static const char short_options[] = "hnlLD:qt:c:f:r:d:MNF:A:R:T:B:vV:IPC";
|
|
+ static const char short_options[] = "hnlLD:qt:c:f:r:d:MNF:A:R:T:B:vV:IPCi";
|
|
static const struct option long_options[] = {
|
|
{"help", 0, 0, 'h'},
|
|
{"version", 0, 0, OPT_VERSION},
|
|
@@ -442,6 +444,7 @@ int main(int argc, char *argv[])
|
|
{"max-file-time", 1, 0, OPT_MAX_FILE_TIME},
|
|
{"process-id-file", 1, 0, OPT_PROCESS_ID_FILE},
|
|
{"use-strftime", 0, 0, OPT_USE_STRFTIME},
|
|
+ {"interactive", 0, 0, 'i'},
|
|
{0, 0, 0, 0}
|
|
};
|
|
char *pcm_name = "default";
|
|
@@ -608,6 +611,9 @@ int main(int argc, char *argv[])
|
|
if (file_type == FORMAT_DEFAULT)
|
|
file_type = FORMAT_WAVE;
|
|
break;
|
|
+ case 'i':
|
|
+ interactive = 1;
|
|
+ break;
|
|
case OPT_DISABLE_RESAMPLE:
|
|
open_mode |= SND_PCM_NO_AUTO_RESAMPLE;
|
|
break;
|
|
@@ -1206,6 +1212,8 @@ static void init_stdin(void)
|
|
struct termios term;
|
|
long flags;
|
|
|
|
+ if (!interactive)
|
|
+ return;
|
|
tcgetattr(fileno(stdin), &term);
|
|
term_c_lflag = term.c_lflag;
|
|
if (fd == fileno(stdin))
|
|
@@ -1221,6 +1229,8 @@ static void done_stdin(void)
|
|
{
|
|
struct termios term;
|
|
|
|
+ if (!interactive)
|
|
+ return;
|
|
if (fd == fileno(stdin) || term_c_lflag == -1)
|
|
return;
|
|
tcgetattr(fileno(stdin), &term);
|
|
@@ -1258,6 +1268,8 @@ static void check_stdin(void)
|
|
{
|
|
unsigned char b;
|
|
|
|
+ if (!interactive)
|
|
+ return;
|
|
if (fd != fileno(stdin)) {
|
|
while (read(fileno(stdin), &b, 1) == 1) {
|
|
if (b == ' ' || b == '\r') {
|
|
--
|
|
1.7.5.3
|
|
|