From 00e811e10c5b812e7fe77af16822edd8e429a45e Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Fri, 19 Oct 2018 20:43:28 +0200 Subject: [PATCH] Make it possible to change the working directory. --- db.cpp | 6 +++--- db.h | 3 ++- flags.cpp | 7 ++++++- flags.h | 1 + main.cpp | 3 ++- mainwindow.cpp | 3 ++- 6 files changed, 16 insertions(+), 7 deletions(-) diff --git a/db.cpp b/db.cpp index 77e3b73..9b0de35 100644 --- a/db.cpp +++ b/db.cpp @@ -4,11 +4,11 @@ using namespace std; -DB::DB(const char *filename) +DB::DB(const std::string &filename) { - int ret = sqlite3_open(filename, &db); + int ret = sqlite3_open(filename.c_str(), &db); if (ret != SQLITE_OK) { - fprintf(stderr, "%s: %s\n", filename, sqlite3_errmsg(db)); + fprintf(stderr, "%s: %s\n", filename.c_str(), sqlite3_errmsg(db)); exit(1); } diff --git a/db.h b/db.h index 13a7e51..40a6602 100644 --- a/db.h +++ b/db.h @@ -4,10 +4,11 @@ #include "state.pb.h" #include +#include class DB { public: - explicit DB(const char *filename); + explicit DB(const std::string &filename); DB(const DB &) = delete; StateProto get_state(); diff --git a/flags.cpp b/flags.cpp index b3b59fa..c10f9d7 100644 --- a/flags.cpp +++ b/flags.cpp @@ -28,6 +28,7 @@ void usage() fprintf(stderr, " 2 = default (realtime 720p on fast embedded GPUs)\n"); fprintf(stderr, " 3 = good (realtime 720p on GTX 970 or so)\n"); fprintf(stderr, " 4 = best (not realtime on any current GPU)\n"); + fprintf(stderr, " -d, --working-directory DIR where to store frames and database\n"); } void parse_flags(int argc, char * const argv[]) @@ -36,11 +37,12 @@ void parse_flags(int argc, char * const argv[]) { "help", no_argument, 0, OPTION_HELP }, { "slow-down-input", no_argument, 0, OPTION_SLOW_DOWN_INPUT }, { "interpolation-quality", required_argument, 0, 'q' }, + { "working-directory", required_argument, 0, 'd' }, { 0, 0, 0, 0 } }; for ( ;; ) { int option_index = 0; - int c = getopt_long(argc, argv, "q:", long_options, &option_index); + int c = getopt_long(argc, argv, "q:d:", long_options, &option_index); if (c == -1) { break; @@ -52,6 +54,9 @@ void parse_flags(int argc, char * const argv[]) case 'q': global_flags.interpolation_quality = atoi(optarg); break; + case 'd': + global_flags.working_directory = optarg; + break; case OPTION_HELP: usage(); exit(0); diff --git a/flags.h b/flags.h index ea4d423..8b2563c 100644 --- a/flags.h +++ b/flags.h @@ -5,6 +5,7 @@ struct Flags { std::string stream_source; + std::string working_directory = "."; bool slow_down_input = false; int interpolation_quality = 2; }; diff --git a/main.cpp b/main.cpp index 1266c2a..bf97575 100644 --- a/main.cpp +++ b/main.cpp @@ -50,7 +50,8 @@ int64_t current_pts = 0; string filename_for_frame(unsigned stream_idx, int64_t pts) { char filename[256]; - snprintf(filename, sizeof(filename), "frames/cam%d-pts%09ld.jpeg", stream_idx, pts); + snprintf(filename, sizeof(filename), "%s/frames/cam%d-pts%09ld.jpeg", + global_flags.working_directory.c_str(), stream_idx, pts); return filename; } diff --git a/mainwindow.cpp b/mainwindow.cpp index 5598942..198a631 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -2,6 +2,7 @@ #include "clip_list.h" #include "disk_space_estimator.h" +#include "flags.h" #include "player.h" #include "post_to_main_thread.h" #include "timebase.h" @@ -29,7 +30,7 @@ extern vector frames[MAX_STREAMS]; MainWindow::MainWindow() : ui(new Ui::MainWindow), - db("futatabi.db") + db(global_flags.working_directory + "/futatabi.db") { global_mainwindow = this; ui->setupUi(this); -- 2.39.2