mirror of
https://repo.dec05eba.com/gpu-screen-recorder
synced 2026-05-05 22:40:42 +09:00
Move argument parsing to different file
This commit is contained in:
105
include/args_parser.h
Normal file
105
include/args_parser.h
Normal file
@@ -0,0 +1,105 @@
|
||||
#ifndef GSR_ARGS_PARSER_H
|
||||
#define GSR_ARGS_PARSER_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include "defs.h"
|
||||
#include "vec2.h"
|
||||
|
||||
typedef struct gsr_egl gsr_egl;
|
||||
|
||||
#define NUM_ARGS 28
|
||||
#define WINDOW_STR_MAX_SIZE 128
|
||||
|
||||
typedef enum {
|
||||
ARG_TYPE_STRING,
|
||||
ARG_TYPE_BOOLEAN,
|
||||
ARG_TYPE_ENUM,
|
||||
ARG_TYPE_I64,
|
||||
ARG_TYPE_DOUBLE,
|
||||
} ArgType;
|
||||
|
||||
typedef struct {
|
||||
const char *name;
|
||||
int value;
|
||||
} ArgEnum;
|
||||
|
||||
typedef struct {
|
||||
ArgType type;
|
||||
const char **values;
|
||||
int capacity_num_values;
|
||||
int num_values;
|
||||
|
||||
const char *key;
|
||||
bool optional;
|
||||
bool list;
|
||||
|
||||
const ArgEnum *enum_values;
|
||||
int num_enum_values;
|
||||
|
||||
int64_t integer_value_min;
|
||||
int64_t integer_value_max;
|
||||
|
||||
union {
|
||||
bool boolean;
|
||||
int enum_value;
|
||||
int64_t i64_value;
|
||||
double d_value;
|
||||
} typed_value;
|
||||
} Arg;
|
||||
|
||||
typedef struct {
|
||||
void (*version)(void *userdata);
|
||||
void (*info)(void *userdata);
|
||||
void (*list_audio_devices)(void *userdata);
|
||||
void (*list_application_audio)(void *userdata);
|
||||
void (*list_capture_options)(const char *card_path, void *userdata);
|
||||
} args_handlers;
|
||||
|
||||
typedef struct {
|
||||
Arg args[NUM_ARGS];
|
||||
|
||||
gsr_video_encoder_hardware video_encoder;
|
||||
gsr_pixel_format pixel_format;
|
||||
gsr_framerate_mode framerate_mode;
|
||||
gsr_color_range color_range;
|
||||
gsr_tune tune;
|
||||
gsr_video_codec video_codec;
|
||||
gsr_audio_codec audio_codec;
|
||||
gsr_bitrate_mode bitrate_mode;
|
||||
gsr_video_quality video_quality;
|
||||
char window[WINDOW_STR_MAX_SIZE];
|
||||
const char *container_format;
|
||||
const char *filename;
|
||||
const char *portal_session_token_filepath;
|
||||
const char *recording_saved_script;
|
||||
bool verbose;
|
||||
bool gl_debug;
|
||||
bool record_cursor;
|
||||
bool date_folders;
|
||||
bool restore_portal_session;
|
||||
bool restart_replay_on_save;
|
||||
bool overclock;
|
||||
bool is_livestream;
|
||||
bool is_output_piped;
|
||||
bool low_latency_recording;
|
||||
bool very_old_gpu;
|
||||
int64_t video_bitrate;
|
||||
int64_t audio_bitrate;
|
||||
int64_t fps;
|
||||
int64_t replay_buffer_size_secs;
|
||||
double keyint;
|
||||
vec2i output_resolution;
|
||||
vec2i region_size;
|
||||
vec2i region_position;
|
||||
} args_parser;
|
||||
|
||||
/* |argv| is stored as a reference */
|
||||
bool args_parser_parse(args_parser *self, int argc, char **argv, const args_handlers *args_handlers, void *userdata);
|
||||
void args_parser_deinit(args_parser *self);
|
||||
|
||||
bool args_parser_validate_with_gl_info(args_parser *self, gsr_egl *egl);
|
||||
void args_parser_print_usage(void);
|
||||
Arg* args_parser_get_arg(args_parser *self, const char *arg_name);
|
||||
|
||||
#endif /* GSR_ARGS_PARSER_H */
|
||||
@@ -10,16 +10,6 @@
|
||||
#define GSR_COLOR_CONVERSION_MAX_GRAPHICS_SHADERS 6
|
||||
#define GSR_COLOR_CONVERSION_MAX_FRAMEBUFFERS 2
|
||||
|
||||
typedef enum {
|
||||
GSR_COLOR_RANGE_LIMITED,
|
||||
GSR_COLOR_RANGE_FULL
|
||||
} gsr_color_range;
|
||||
|
||||
typedef enum {
|
||||
GSR_COLOR_DEPTH_8_BITS,
|
||||
GSR_COLOR_DEPTH_10_BITS
|
||||
} gsr_color_depth;
|
||||
|
||||
typedef enum {
|
||||
GSR_SOURCE_COLOR_RGB,
|
||||
GSR_SOURCE_COLOR_BGR
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#define GSR_VIDEO_CODEC_AUTO -1
|
||||
#define GSR_BITRATE_MODE_AUTO -1
|
||||
|
||||
typedef enum {
|
||||
GSR_GPU_VENDOR_AMD,
|
||||
GSR_GPU_VENDOR_INTEL,
|
||||
@@ -29,4 +32,76 @@ typedef enum {
|
||||
GSR_CONNECTION_DRM
|
||||
} gsr_connection_type;
|
||||
|
||||
typedef enum {
|
||||
GSR_VIDEO_QUALITY_MEDIUM,
|
||||
GSR_VIDEO_QUALITY_HIGH,
|
||||
GSR_VIDEO_QUALITY_VERY_HIGH,
|
||||
GSR_VIDEO_QUALITY_ULTRA,
|
||||
} gsr_video_quality;
|
||||
|
||||
typedef enum {
|
||||
GSR_VIDEO_CODEC_H264,
|
||||
GSR_VIDEO_CODEC_HEVC,
|
||||
GSR_VIDEO_CODEC_HEVC_HDR,
|
||||
GSR_VIDEO_CODEC_HEVC_10BIT,
|
||||
GSR_VIDEO_CODEC_AV1,
|
||||
GSR_VIDEO_CODEC_AV1_HDR,
|
||||
GSR_VIDEO_CODEC_AV1_10BIT,
|
||||
GSR_VIDEO_CODEC_VP8,
|
||||
GSR_VIDEO_CODEC_VP9,
|
||||
GSR_VIDEO_CODEC_H264_VULKAN,
|
||||
GSR_VIDEO_CODEC_HEVC_VULKAN,
|
||||
} gsr_video_codec;
|
||||
|
||||
typedef enum {
|
||||
GSR_AUDIO_CODEC_AAC,
|
||||
GSR_AUDIO_CODEC_OPUS,
|
||||
GSR_AUDIO_CODEC_FLAC,
|
||||
} gsr_audio_codec;
|
||||
|
||||
typedef enum {
|
||||
GSR_PIXEL_FORMAT_YUV420,
|
||||
GSR_PIXEL_FORMAT_YUV444,
|
||||
} gsr_pixel_format;
|
||||
|
||||
typedef enum {
|
||||
GSR_FRAMERATE_MODE_CONSTANT,
|
||||
GSR_FRAMERATE_MODE_VARIABLE,
|
||||
GSR_FRAMERATE_MODE_CONTENT,
|
||||
} gsr_framerate_mode;
|
||||
|
||||
typedef enum {
|
||||
GSR_BITRATE_MODE_QP,
|
||||
GSR_BITRATE_MODE_VBR,
|
||||
GSR_BITRATE_MODE_CBR,
|
||||
} gsr_bitrate_mode;
|
||||
|
||||
typedef enum {
|
||||
GSR_TUNE_PERFORMANCE,
|
||||
GSR_TUNE_QUALITY,
|
||||
} gsr_tune;
|
||||
|
||||
typedef enum {
|
||||
GSR_VIDEO_ENCODER_HW_GPU,
|
||||
GSR_VIDEO_ENCODER_HW_CPU,
|
||||
} gsr_video_encoder_hardware;
|
||||
|
||||
typedef enum {
|
||||
GSR_COLOR_RANGE_LIMITED,
|
||||
GSR_COLOR_RANGE_FULL
|
||||
} gsr_color_range;
|
||||
|
||||
typedef enum {
|
||||
GSR_COLOR_DEPTH_8_BITS,
|
||||
GSR_COLOR_DEPTH_10_BITS
|
||||
} gsr_color_depth;
|
||||
|
||||
bool video_codec_is_hdr(gsr_video_codec video_codec);
|
||||
gsr_video_codec hdr_video_codec_to_sdr_video_codec(gsr_video_codec video_codec);
|
||||
gsr_color_depth video_codec_to_bit_depth(gsr_video_codec video_codec);
|
||||
const char* video_codec_to_string(gsr_video_codec video_codec);
|
||||
bool video_codec_is_av1(gsr_video_codec video_codec);
|
||||
bool video_codec_is_vulkan(gsr_video_codec video_codec);
|
||||
const char* audio_codec_get_name(gsr_audio_codec audio_codec);
|
||||
|
||||
#endif /* GSR_DEFS_H */
|
||||
|
||||
Reference in New Issue
Block a user