]> git.sesse.net Git - nageru/blob - nageru/flags.h
Support sending a separate x264 encode to disk.
[nageru] / nageru / flags.h
1 #ifndef _FLAGS_H
2 #define _FLAGS_H
3
4 #include <math.h>
5
6 #include <map>
7 #include <string>
8 #include <vector>
9
10 #include "defs.h"
11 #include "ycbcr_interpretation.h"
12
13 struct Flags {
14         int width = 1280, height = 720;
15         int min_num_cards = 2;
16         int max_num_cards = MAX_VIDEO_CARDS;
17         std::string va_display;
18         bool fake_cards_audio = false;
19         bool uncompressed_video_to_http = false;
20         bool x264_video_to_http = false;
21         bool x264_video_to_disk = false;  // Disables Quick Sync entirely. Implies x264_video_to_http == true.
22         bool x264_separate_disk_encode = false;  // Disables Quick Sync entirely. Implies x264_video_to_disk == true.
23         std::vector<std::string> theme_dirs { ".", PREFIX "/share/nageru" };
24         std::string recording_dir = ".";
25         std::string theme_filename = "theme.lua";
26         bool locut_enabled = true;
27         bool gain_staging_auto = true;
28         float initial_gain_staging_db = 0.0f;
29         bool compressor_enabled = true;
30         bool limiter_enabled = true;
31         bool final_makeup_gain_auto = true;
32         bool flush_pbos = true;
33         std::string stream_mux_name = DEFAULT_STREAM_MUX_NAME;
34         bool stream_coarse_timebase = false;
35         std::string stream_audio_codec_name;  // Blank = use the same as for the recording.
36         int stream_audio_codec_bitrate = DEFAULT_AUDIO_OUTPUT_BIT_RATE;  // Ignored if stream_audio_codec_name is blank.
37         std::string x264_preset;  // Empty will be overridden by X264_DEFAULT_PRESET, unless speedcontrol is set.
38         std::string x264_tune = X264_DEFAULT_TUNE;
39         bool x264_speedcontrol = false;
40         bool x264_speedcontrol_verbose = false;
41         int x264_bitrate = -1;  // In kilobit/sec. -1 = not set = DEFAULT_X264_OUTPUT_BIT_RATE.
42         float x264_crf = HUGE_VAL;  // From 51 - QP_MAX_SPEC to 51. HUGE_VAL = not set = use x264_bitrate instead.
43         int x264_vbv_max_bitrate = -1;  // In kilobits. 0 = no limit, -1 = same as <x264_bitrate> (CBR).
44         int x264_vbv_buffer_size = -1;  // In kilobits. 0 = one-frame VBV, -1 = same as <x264_bitrate> (one-second VBV).
45         std::vector<std::string> x264_extra_param;  // In “key[,value]” format.
46
47         std::string x264_separate_disk_preset;  // Empty will be overridden by X264_DEFAULT_PRESET, unless speedcontrol is set.
48         std::string x264_separate_disk_tune = X264_DEFAULT_TUNE;
49         int x264_separate_disk_bitrate = -1;
50         float x264_separate_disk_crf = HUGE_VAL;
51         std::vector<std::string> x264_separate_disk_extra_param;  // In “key[,value]” format.
52
53         std::string v4l_output_device;  // Empty if none.
54         bool enable_alsa_output = true;
55         std::map<int, int> default_stream_mapping;
56         bool multichannel_mapping_mode = false;  // Implicitly true if input_mapping_filename is nonempty.
57         std::string input_mapping_filename;  // Empty for none.
58         std::string midi_mapping_filename;  // Empty for none.
59         bool default_hdmi_input = false;
60         bool print_video_latency = false;
61         double audio_queue_length_ms = 100.0;
62         bool ycbcr_rec709_coefficients = false;  // Will be overridden by HDMI/SDI output if ycbcr_auto_coefficients == true.
63         bool ycbcr_auto_coefficients = true;
64         int output_card = -1;
65         double output_buffer_frames = 6.0;
66         double output_slop_frames = 0.5;
67         int max_input_queue_frames = 6;
68         int http_port = DEFAULT_HTTPD_PORT;
69         int srt_port = DEFAULT_SRT_PORT;  // -1 for none.
70         bool enable_srt = true;  // UI toggle; not settable from the command line. See also srt_port.
71         bool display_timecode_in_stream = false;
72         bool display_timecode_on_stdout = false;
73         bool enable_quick_cut_keys = false;
74         bool ten_bit_input = false;
75         bool ten_bit_output = false;  // Implies x264_video_to_disk == true and x264_bit_depth == 10.
76         YCbCrInterpretation ycbcr_interpretation[MAX_VIDEO_CARDS];
77         bool transcode_video = true;  // Kaeru only.
78         bool transcode_audio = true;  // Kaeru only.
79         bool enable_audio = true;  // Kaeru only. If false, then transcode_audio is also false.
80         int x264_bit_depth = 8;  // Not user-settable.
81         bool use_zerocopy = false;  // Not user-settable.
82         bool fullscreen = false;
83         std::map<unsigned, unsigned> card_to_mjpeg_stream_export;  // If a card is not in the map, it is not exported.
84 };
85 extern Flags global_flags;
86
87 enum Program {
88         PROGRAM_NAGERU,
89         PROGRAM_KAERU
90 };
91 void usage(Program program);
92 void parse_flags(Program program, int argc, char * const argv[]);
93
94 #endif  // !defined(_FLAGS_H)