[v1,1/4] alsabat: add one option for XRUN injections
diff mbox

Message ID 20170831133709.25537-2-keqiao.zhang@intel.com
State New
Headers show

Commit Message

keqiao.zhang@intel.com Aug. 31, 2017, 1:37 p.m. UTC
This patch add a new option '-X' to alsabat, this option allows alsabat
to do the xrun injection with given period. eg. '-X 100' means do XRUN
injections every 100ms for both playback and capture. '-X 100p/c' means
do XRUN injections every 100ms for playback/capture.

Signed-off-by: Zhang Keqiao <keqiao.zhang@intel.com>
---
 bat/bat.c    | 9 ++++++++-
 bat/common.h | 4 ++++
 2 files changed, 12 insertions(+), 1 deletion(-)

Patch
diff mbox

diff --git a/bat/bat.c b/bat/bat.c
index 8645770..bf6873a 100644
--- a/bat/bat.c
+++ b/bat/bat.c
@@ -328,6 +328,7 @@  _("Usage: alsabat [-options]...\n"
 "  -p                     total number of periods to play/capture\n"
 "  -B                     buffer size in frames\n"
 "  -E                     period size in frames\n"
+"  -X                     period of xrun injection, given in millisecond\n"
 "      --log=#            file that both stdout and strerr redirecting to\n"
 "      --file=#           file for playback\n"
 "      --saveplay=#       file that storing playback content, for debug\n"
@@ -367,6 +368,9 @@  static void set_defaults(struct bat *bat)
 	bat->buffer_size = 0;
 	bat->period_size = 0;
 	bat->roundtriplatency = false;
+	bat->xrun_period = 0;
+	bat->xrun_playback = 0;
+	bat->xrun_capture = 0;
 #ifdef HAVE_LIBTINYALSA
 	bat->channels = 2;
 	bat->playback.fct = &playback_tinyalsa;
@@ -386,7 +390,7 @@  static void set_defaults(struct bat *bat)
 static void parse_arguments(struct bat *bat, int argc, char *argv[])
 {
 	int c, option_index, err;
-	static const char short_options[] = "D:P:C:f:n:F:c:r:s:k:p:B:E:lth";
+	static const char short_options[] = "D:P:C:f:n:F:c:r:s:k:p:B:E:X:lth";
 	static const struct option long_options[] = {
 		{"help",     0, 0, 'h'},
 		{"log",      1, 0, OPT_LOG},
@@ -479,6 +483,9 @@  static void parse_arguments(struct bat *bat, int argc, char *argv[])
 			bat->period_size = err >= MIN_PERIODSIZE
 					&& err < MAX_PERIODSIZE ? err : 0;
 			break;
+		case 'X':
+			bat->xarg = optarg;
+			break;
 		case 'h':
 		default:
 			usage(bat);
diff --git a/bat/common.h b/bat/common.h
index 1b07fbe..a014f87 100644
--- a/bat/common.h
+++ b/bat/common.h
@@ -214,6 +214,9 @@  struct bat {
 	enum _bat_pcm_format format;	/* PCM format */
 	int buffer_size;		/* buffer size in frames */
 	int period_size;		/* period size in frames */
+	int xrun_playback;		/* enable xrun injection for playback */
+	int xrun_capture;		/* enable xrun injection for capture */
+	int xrun_period;		/* period of XRUN injections, given in milliseconds */
 
 	float sigma_k;			/* threshold for peak detection */
 	float snr_thd_db;		/* threshold for noise detection (dB) */
@@ -221,6 +224,7 @@  struct bat {
 
 	int sinus_duration;		/* number of frames for playback */
 	char *narg;			/* argument string of duration */
+	char *xarg;			/* argument string of xrun injection */
 	char *logarg;			/* path name of log file */
 	char *debugplay;		/* path name to store playback signal */
 	bool standalone;		/* enable to bypass analysis */