diff --git a/bat/bat.c b/bat/bat.c index 8645770..17d025d 100644 --- a/bat/bat.c +++ b/bat/bat.c @@ -331,6 +331,8 @@ _("Usage: alsabat [-options]...\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" +" --readcapture=# file with previously captured content. File data\n" +" is used for analysis instead of capturing it.\n" " --local internal loop, set to bypass pcm hardware devices\n" " --standalone standalone mode, to bypass analysis\n" " --roundtriplatency round trip latency mode\n" @@ -397,6 +399,7 @@ static void parse_arguments(struct bat *bat, int argc, char *argv[]) {"roundtriplatency", 0, 0, OPT_ROUNDTRIPLATENCY}, {"snr-db", 1, 0, OPT_SNRTHD_DB}, {"snr-pc", 1, 0, OPT_SNRTHD_PC}, + {"readcapture", 1, 0, OPT_READCAPTURE}, {0, 0, 0, 0} }; @@ -412,6 +415,11 @@ static void parse_arguments(struct bat *bat, int argc, char *argv[]) case OPT_SAVEPLAY: bat->debugplay = optarg; break; + case OPT_READCAPTURE: + bat->capturefile = optarg; + bat->capture.mode = MODE_ANALYZE_ONLY; + bat->playback.mode = MODE_ANALYZE_ONLY; + break; case OPT_LOCAL: bat->local = true; break; @@ -708,6 +716,15 @@ int main(int argc, char *argv[]) goto analyze; } + if (bat.capture.mode == MODE_ANALYZE_ONLY && bat.capturefile) { + bat.capture.file = strdup(bat.capturefile); + fprintf(bat.log, + _("Using data from file %s for analysis\n"), + bat.capture.file); + fprintf(bat.log, _("Skipping playback and capture\n")); + goto analyze; + } + /* loopback thread: playback and capture in a loop */ if (bat.local == false) test_loopback(&bat); diff --git a/bat/common.h b/bat/common.h index 1b07fbe..a9bae5d 100644 --- a/bat/common.h +++ b/bat/common.h @@ -25,6 +25,7 @@ #define OPT_ROUNDTRIPLATENCY (OPT_BASE + 6) #define OPT_SNRTHD_DB (OPT_BASE + 7) #define OPT_SNRTHD_PC (OPT_BASE + 8) +#define OPT_READCAPTURE (OPT_BASE + 9) #define COMPOSE(a, b, c, d) ((a) | ((b)<<8) | ((c)<<16) | ((d)<<24)) #define WAV_RIFF COMPOSE('R', 'I', 'F', 'F') @@ -151,6 +152,7 @@ enum _bat_op_mode { MODE_UNKNOWN = -1, MODE_SINGLE = 0, MODE_LOOPBACK, + MODE_ANALYZE_ONLY, MODE_LAST }; @@ -223,6 +225,7 @@ struct bat { char *narg; /* argument string of duration */ char *logarg; /* path name of log file */ char *debugplay; /* path name to store playback signal */ + char *capturefile; /* path name for previously saved recording */ bool standalone; /* enable to bypass analysis */ bool roundtriplatency; /* enable round trip latency */