X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=flags.cpp;h=f3d9b658d286c125d057a1384cec6c1aff5538ad;hb=8f83d8ec96c5dd1a1b9d17489d3a93bde3eacac2;hp=5f20f48a755c53ad46fd5ee917444748608c7559;hpb=bdd32398c6cd92a181ae8f9fa1c15977cfc8bfdd;p=nageru diff --git a/flags.cpp b/flags.cpp index 5f20f48..f3d9b65 100644 --- a/flags.cpp +++ b/flags.cpp @@ -13,7 +13,9 @@ Flags global_flags; // Long options that have no corresponding short option. enum LongOption { - OPTION_VA_DISPLAY = 1000, + OPTION_MULTICHANNEL = 1000, + OPTION_MIDI_MAPPING, + OPTION_FAKE_CARDS_AUDIO, OPTION_HTTP_UNCOMPRESSED_VIDEO, OPTION_HTTP_X264_VIDEO, OPTION_X264_PRESET, @@ -49,12 +51,16 @@ void usage() fprintf(stderr, "Usage: nageru [OPTION]...\n"); fprintf(stderr, "\n"); fprintf(stderr, " -h, --help print usage information\n"); - fprintf(stderr, " -c, --num-cards set number of input cards, including fake cards (default 2)\n"); - fprintf(stderr, " -C, --num-fake-cards set number of fake cards (default 0)\n"); + fprintf(stderr, " -c, --num-cards set number of input cards (default 2)\n"); fprintf(stderr, " -t, --theme=FILE choose theme (default theme.lua)\n"); + fprintf(stderr, " -I, --theme-dir=DIR search for theme in this directory (can be given multiple times)\n"); fprintf(stderr, " -v, --va-display=SPEC VA-API device for H.264 encoding\n"); fprintf(stderr, " ($DISPLAY spec or /dev/dri/render* path)\n"); fprintf(stderr, " -m, --map-signal=SIGNAL,CARD set a default card mapping (can be given multiple times)\n"); + fprintf(stderr, " -M, --input-mapping=FILE start with the given audio input mapping (implies --multichannel)\n"); + fprintf(stderr, " --multichannel start in multichannel audio mapping mode\n"); + fprintf(stderr, " --midi-mapping=FILE start with the given MIDI controller mapping (implies --multichannel)\n"); + fprintf(stderr, " --fake-cards-audio make fake (disconnected) cards output a simple tone\n"); fprintf(stderr, " --http-uncompressed-video send uncompressed NV12 video to HTTP clients\n"); fprintf(stderr, " --http-x264-video send x264-compressed video to HTTP clients\n"); fprintf(stderr, " --x264-preset x264 quality preset (default " X264_DEFAULT_PRESET ")\n"); @@ -96,10 +102,14 @@ void parse_flags(int argc, char * const argv[]) static const option long_options[] = { { "help", no_argument, 0, 'h' }, { "num-cards", required_argument, 0, 'c' }, - { "num-fake-cards", required_argument, 0, 'C' }, { "theme", required_argument, 0, 't' }, + { "theme-dir", required_argument, 0, 'I' }, { "map-signal", required_argument, 0, 'm' }, - { "va-display", required_argument, 0, OPTION_VA_DISPLAY }, + { "input-mapping", required_argument, 0, 'M' }, + { "va-display", required_argument, 0, 'v' }, + { "multichannel", no_argument, 0, OPTION_MULTICHANNEL }, + { "midi-mapping", required_argument, 0, OPTION_MIDI_MAPPING }, + { "fake-cards-audio", no_argument, 0, OPTION_FAKE_CARDS_AUDIO }, { "http-uncompressed-video", no_argument, 0, OPTION_HTTP_UNCOMPRESSED_VIDEO }, { "http-x264-video", no_argument, 0, OPTION_HTTP_X264_VIDEO }, { "x264-preset", required_argument, 0, OPTION_X264_PRESET }, @@ -130,9 +140,10 @@ void parse_flags(int argc, char * const argv[]) { "no-flush-pbos", no_argument, 0, OPTION_NO_FLUSH_PBOS }, { 0, 0, 0, 0 } }; + vector theme_dirs; for ( ;; ) { int option_index = 0; - int c = getopt_long(argc, argv, "c:C:t:v:m:", long_options, &option_index); + int c = getopt_long(argc, argv, "c:t:I:v:m:M:", long_options, &option_index); if (c == -1) { break; @@ -141,12 +152,12 @@ void parse_flags(int argc, char * const argv[]) case 'c': global_flags.num_cards = atoi(optarg); break; - case 'C': - global_flags.num_fake_cards = atoi(optarg); - break; case 't': global_flags.theme_filename = optarg; break; + case 'I': + theme_dirs.push_back(optarg); + break; case 'm': { char *ptr = strchr(optarg, ','); if (ptr == nullptr) { @@ -164,9 +175,22 @@ void parse_flags(int argc, char * const argv[]) global_flags.default_stream_mapping[signal_num] = card_num; break; } - case OPTION_VA_DISPLAY: + case 'M': + global_flags.input_mapping_filename = optarg; + break; + case OPTION_MULTICHANNEL: + global_flags.multichannel_mapping_mode = true; + break; + case 'v': global_flags.va_display = optarg; break; + case OPTION_MIDI_MAPPING: + global_flags.midi_mapping_filename = optarg; + global_flags.multichannel_mapping_mode = true; + break; + case OPTION_FAKE_CARDS_AUDIO: + global_flags.fake_cards_audio = true; + break; case OPTION_HTTP_UNCOMPRESSED_VIDEO: global_flags.uncompressed_video_to_http = true; break; @@ -273,18 +297,10 @@ void parse_flags(int argc, char * const argv[]) fprintf(stderr, "ERROR: --http-uncompressed-video and --http-x264-video are mutually incompatible\n"); exit(1); } - if (global_flags.num_fake_cards > global_flags.num_cards) { - fprintf(stderr, "ERROR: More fake cards then total cards makes no sense\n"); - exit(1); - } if (global_flags.num_cards <= 0) { fprintf(stderr, "ERROR: --num-cards must be at least 1\n"); exit(1); } - if (global_flags.num_fake_cards < 0) { - fprintf(stderr, "ERROR: --num-fake-cards cannot be negative\n"); - exit(1); - } if (global_flags.x264_speedcontrol) { if (!global_flags.x264_preset.empty() && global_flags.x264_preset != "faster") { fprintf(stderr, "WARNING: --x264-preset is overridden by --x264-speedcontrol (implicitly uses \"faster\" as base preset)\n"); @@ -293,6 +309,9 @@ void parse_flags(int argc, char * const argv[]) } else if (global_flags.x264_preset.empty()) { global_flags.x264_preset = X264_DEFAULT_PRESET; } + if (!theme_dirs.empty()) { + global_flags.theme_dirs = theme_dirs; + } for (pair mapping : global_flags.default_stream_mapping) { if (mapping.second >= global_flags.num_cards) {