mirror of
https://github.com/libretro/RetroArch
synced 2025-03-03 04:14:00 +00:00
Merge pull request #7295 from fr500/master
WIP: Streaming/Recording Options
This commit is contained in:
commit
e170c3db29
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -19,7 +19,8 @@
|
||||
"iosfwd": "c",
|
||||
"xlocbuf": "c",
|
||||
"xmemory0": "c",
|
||||
"ios": "c"
|
||||
"ios": "c",
|
||||
"list": "c"
|
||||
},
|
||||
"C_Cpp.dimInactiveRegions": false,
|
||||
}
|
@ -54,6 +54,10 @@
|
||||
|
||||
#include "../list_special.h"
|
||||
|
||||
#ifdef HAVE_FFMPEG
|
||||
#include "record/record_driver.h"
|
||||
#endif
|
||||
|
||||
static const char* invalid_filename_chars[] = {
|
||||
/* https://support.microsoft.com/en-us/help/905231/information-about-the-characters-that-you-cannot-use-in-site-names--fo */
|
||||
"~", "#", "%", "&", "*", "{", "}", "\\", ":", "[", "]", "?", "/", "|", "\'", "\"",
|
||||
@ -1593,7 +1597,6 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
|
||||
SETTING_UINT("aspect_ratio_index", &settings->uints.video_aspect_ratio_idx, true, aspect_ratio_idx, false);
|
||||
#ifdef HAVE_NETWORKING
|
||||
SETTING_UINT("netplay_ip_port", &settings->uints.netplay_port, true, RARCH_DEFAULT_PORT, false);
|
||||
SETTING_UINT("video_stream_port", &settings->uints.video_stream_port, true, RARCH_STREAM_DEFAULT_PORT, false);
|
||||
SETTING_OVERRIDE(RARCH_OVERRIDE_SETTING_NETPLAY_IP_PORT);
|
||||
SETTING_UINT("netplay_input_latency_frames_min",&settings->uints.netplay_input_latency_frames_min, true, 0, false);
|
||||
SETTING_UINT("netplay_input_latency_frames_range",&settings->uints.netplay_input_latency_frames_range, true, 0, false);
|
||||
@ -1614,6 +1617,14 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
|
||||
|
||||
SETTING_UINT("midi_volume", &settings->uints.midi_volume, true, midi_volume, false);
|
||||
|
||||
#ifdef HAVE_FFMPEG
|
||||
SETTING_UINT("video_stream_port", &settings->uints.video_stream_port, true, RARCH_STREAM_DEFAULT_PORT, false);
|
||||
SETTING_UINT("video_record_quality", &settings->uints.video_record_quality, true, RECORD_CONFIG_TYPE_RECORDING_LOSSLESS_QUALITY, false);
|
||||
SETTING_UINT("video_stream_quality", &settings->uints.video_stream_quality, true, RECORD_CONFIG_TYPE_STREAMING_LOW_QUALITY, false);
|
||||
SETTING_UINT("video_record_scale_factor", &settings->uints.video_record_scale_factor, true, 1, false);
|
||||
SETTING_UINT("video_stream_scale_factor", &settings->uints.video_stream_scale_factor, true, 1, false);
|
||||
#endif
|
||||
|
||||
*size = count;
|
||||
|
||||
return tmp;
|
||||
|
@ -388,6 +388,10 @@ typedef struct settings
|
||||
unsigned video_msg_bgcolor_green;
|
||||
unsigned video_msg_bgcolor_blue;
|
||||
unsigned video_stream_port;
|
||||
unsigned video_record_quality;
|
||||
unsigned video_stream_quality;
|
||||
unsigned video_record_scale_factor;
|
||||
unsigned video_stream_scale_factor;
|
||||
|
||||
unsigned menu_thumbnails;
|
||||
unsigned menu_left_thumbnails;
|
||||
|
@ -903,6 +903,8 @@ MSG_HASH(MENU_ENUM_LABEL_RECORDING_SETTINGS,
|
||||
"recording_settings")
|
||||
MSG_HASH(MENU_ENUM_LABEL_RECORD_CONFIG,
|
||||
"record_config")
|
||||
MSG_HASH(MENU_ENUM_LABEL_STREAM_CONFIG,
|
||||
"stream_config")
|
||||
MSG_HASH(MENU_ENUM_LABEL_RECORD_DRIVER,
|
||||
"record_driver")
|
||||
MSG_HASH(MENU_ENUM_LABEL_MIDI_DRIVER,
|
||||
|
@ -2151,7 +2151,11 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_RECORD_CONFIG,
|
||||
"Load Recording Config..."
|
||||
"Custom Record Config"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_STREAM_CONFIG,
|
||||
"Custom Stream Config"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_RECORD_DRIVER,
|
||||
|
@ -118,6 +118,7 @@ generic_deferred_push(deferred_push_cheat_file_load, DISPLAYLIST_
|
||||
generic_deferred_push(deferred_push_cheat_file_load_append, DISPLAYLIST_CHEAT_FILES)
|
||||
generic_deferred_push(deferred_push_remap_file_load, DISPLAYLIST_REMAP_FILES)
|
||||
generic_deferred_push(deferred_push_record_configfile, DISPLAYLIST_RECORD_CONFIG_FILES)
|
||||
generic_deferred_push(deferred_push_stream_configfile, DISPLAYLIST_STREAM_CONFIG_FILES)
|
||||
generic_deferred_push(deferred_push_input_overlay, DISPLAYLIST_OVERLAYS)
|
||||
generic_deferred_push(deferred_push_video_font_path, DISPLAYLIST_FONTS)
|
||||
generic_deferred_push(deferred_push_xmb_font_path, DISPLAYLIST_FONTS)
|
||||
@ -1034,6 +1035,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
|
||||
case MENU_ENUM_LABEL_RECORD_CONFIG:
|
||||
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_record_configfile);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_STREAM_CONFIG:
|
||||
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_stream_configfile);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_SHADER_OPTIONS:
|
||||
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_shader_options);
|
||||
break;
|
||||
|
@ -7058,6 +7058,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
|
||||
MENU_ENUM_LABEL_RECORD_CONFIG,
|
||||
PARSE_ONLY_PATH, false) == 0)
|
||||
count++;
|
||||
if (menu_displaylist_parse_settings_enum(menu, info,
|
||||
MENU_ENUM_LABEL_STREAM_CONFIG,
|
||||
PARSE_ONLY_PATH, false) == 0)
|
||||
count++;
|
||||
if (menu_displaylist_parse_settings_enum(menu, info,
|
||||
MENU_ENUM_LABEL_RECORD_PATH,
|
||||
PARSE_ONLY_STRING, false) == 0)
|
||||
@ -7618,6 +7622,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
|
||||
info->exts = strdup("cfg");
|
||||
break;
|
||||
case DISPLAYLIST_RECORD_CONFIG_FILES:
|
||||
case DISPLAYLIST_STREAM_CONFIG_FILES:
|
||||
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
|
||||
filebrowser_clear_type();
|
||||
info->type_default = FILE_TYPE_RECORD_CONFIG;
|
||||
|
@ -102,6 +102,7 @@ enum menu_displaylist_ctl_state
|
||||
DISPLAYLIST_CHEAT_FILES,
|
||||
DISPLAYLIST_REMAP_FILES,
|
||||
DISPLAYLIST_RECORD_CONFIG_FILES,
|
||||
DISPLAYLIST_STREAM_CONFIG_FILES,
|
||||
DISPLAYLIST_CONFIG_FILES,
|
||||
DISPLAYLIST_CONTENT_HISTORY,
|
||||
DISPLAYLIST_IMAGES,
|
||||
|
@ -5952,8 +5952,8 @@ static bool setting_append_list(
|
||||
START_SUB_GROUP(list, list_info, "State", &group_info, &subgroup_info, parent_group);
|
||||
CONFIG_PATH(
|
||||
list, list_info,
|
||||
global->record.config,
|
||||
sizeof(global->record.config),
|
||||
settings->paths.path_record_config,
|
||||
sizeof(settings->paths.path_record_config),
|
||||
MENU_ENUM_LABEL_RECORD_CONFIG,
|
||||
MENU_ENUM_LABEL_VALUE_RECORD_CONFIG,
|
||||
"",
|
||||
@ -5964,35 +5964,34 @@ static bool setting_append_list(
|
||||
general_read_handler);
|
||||
menu_settings_list_current_add_values(list, list_info, "cfg");
|
||||
|
||||
CONFIG_STRING(
|
||||
CONFIG_PATH(
|
||||
list, list_info,
|
||||
global->record.path,
|
||||
sizeof(global->record.path),
|
||||
MENU_ENUM_LABEL_RECORD_PATH,
|
||||
MENU_ENUM_LABEL_VALUE_RECORD_PATH,
|
||||
settings->paths.path_stream_config,
|
||||
sizeof(settings->paths.path_stream_config),
|
||||
MENU_ENUM_LABEL_STREAM_CONFIG,
|
||||
MENU_ENUM_LABEL_VALUE_STREAM_CONFIG,
|
||||
"",
|
||||
&group_info,
|
||||
&subgroup_info,
|
||||
parent_group,
|
||||
general_write_handler,
|
||||
general_read_handler);
|
||||
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT);
|
||||
menu_settings_list_current_add_values(list, list_info, "cfg");
|
||||
|
||||
CONFIG_BOOL(
|
||||
list, list_info,
|
||||
recording_driver_get_use_output_dir_ptr(),
|
||||
MENU_ENUM_LABEL_RECORD_USE_OUTPUT_DIRECTORY,
|
||||
MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY,
|
||||
false,
|
||||
MENU_ENUM_LABEL_VALUE_OFF,
|
||||
MENU_ENUM_LABEL_VALUE_ON,
|
||||
&group_info,
|
||||
&subgroup_info,
|
||||
parent_group,
|
||||
general_write_handler,
|
||||
general_read_handler,
|
||||
SD_FLAG_NONE
|
||||
);
|
||||
CONFIG_DIR(
|
||||
list, list_info,
|
||||
global->record.output_dir,
|
||||
sizeof(global->record.output_dir),
|
||||
MENU_ENUM_LABEL_SCREENSHOT_DIRECTORY,
|
||||
MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY,
|
||||
g_defaults.dirs[DEFAULT_DIR_SCREENSHOT],
|
||||
MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT,
|
||||
&group_info,
|
||||
&subgroup_info,
|
||||
parent_group,
|
||||
general_write_handler,
|
||||
general_read_handler);
|
||||
(*list)[list_info->index - 1].action_start = directory_action_start_generic;
|
||||
|
||||
END_SUB_GROUP(list, list_info, parent_group);
|
||||
|
||||
|
@ -1680,6 +1680,7 @@ enum msg_hash_enums
|
||||
MENU_LABEL(VIDEO_GPU_RECORD),
|
||||
MENU_LABEL(RECORD_USE_OUTPUT_DIRECTORY),
|
||||
MENU_LABEL(RECORD_CONFIG),
|
||||
MENU_LABEL(STREAM_CONFIG),
|
||||
MENU_LABEL(RECORD_PATH),
|
||||
MENU_LABEL(VIDEO_POST_FILTER_RECORD),
|
||||
MENU_LABEL(RECORD_ENABLE),
|
||||
|
@ -89,6 +89,10 @@ extern "C" {
|
||||
#define PIX_FMT_YUV444P AV_PIX_FMT_YUV444P
|
||||
#endif
|
||||
|
||||
#ifndef PIX_FMT_YUV420P
|
||||
#define PIX_FMT_YUV420P AV_PIX_FMT_YUV420P
|
||||
#endif
|
||||
|
||||
#ifndef PIX_FMT_BGR24
|
||||
#define PIX_FMT_BGR24 AV_PIX_FMT_BGR24
|
||||
#endif
|
||||
@ -544,29 +548,125 @@ static bool ffmpeg_init_video(ffmpeg_t *handle)
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool ffmpeg_init_config_common(struct ff_config_param *params)
|
||||
static bool ffmpeg_init_config_common(struct ff_config_param *params, unsigned preset)
|
||||
{
|
||||
params->scale_factor = 1;
|
||||
params->threads = 1;
|
||||
params->frame_drop_ratio = 1;
|
||||
params->audio_enable = true;
|
||||
params->audio_global_quality = 75;
|
||||
params->out_pix_fmt = PIX_FMT_YUV444P;
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
strlcpy(params->vcodec, "libx264", sizeof(params->vcodec));
|
||||
strlcpy(params->acodec, "libmp3lame", sizeof(params->acodec));
|
||||
strlcpy(params->format, "flv", sizeof(params->format));
|
||||
switch (preset)
|
||||
{
|
||||
case RECORD_CONFIG_TYPE_RECORDING_LOW_QUALITY:
|
||||
case RECORD_CONFIG_TYPE_STREAMING_LOW_QUALITY:
|
||||
params->threads = 1;
|
||||
params->frame_drop_ratio = 1;
|
||||
params->audio_enable = true;
|
||||
params->audio_global_quality = 75;
|
||||
params->out_pix_fmt = PIX_FMT_YUV420P;
|
||||
|
||||
av_dict_set(¶ms->video_opts, "video_preset", "ultrafast", 0);
|
||||
av_dict_set(¶ms->video_opts, "video_tune", "ultrafast", 0);
|
||||
av_dict_set(¶ms->video_opts, "video_crf", "18", 0);
|
||||
av_dict_set(¶ms->audio_opts, "audio_global_quality", "75", 0);
|
||||
strlcpy(params->vcodec, "libx264", sizeof(params->vcodec));
|
||||
strlcpy(params->acodec, "libmp3lame", sizeof(params->acodec));
|
||||
|
||||
av_dict_set(¶ms->video_opts, "preset", "ultrafast", 0);
|
||||
av_dict_set(¶ms->video_opts, "tune", "animation", 0);
|
||||
av_dict_set(¶ms->video_opts, "crf", "30", 0);
|
||||
av_dict_set(¶ms->audio_opts, "audio_global_quality", "75", 0);
|
||||
break;
|
||||
case RECORD_CONFIG_TYPE_RECORDING_MED_QUALITY:
|
||||
case RECORD_CONFIG_TYPE_STREAMING_MED_QUALITY:
|
||||
params->threads = 1;
|
||||
params->frame_drop_ratio = 1;
|
||||
params->audio_enable = true;
|
||||
params->audio_global_quality = 75;
|
||||
params->out_pix_fmt = PIX_FMT_YUV420P;
|
||||
|
||||
strlcpy(params->vcodec, "libx264", sizeof(params->vcodec));
|
||||
strlcpy(params->acodec, "libmp3lame", sizeof(params->acodec));
|
||||
|
||||
av_dict_set(¶ms->video_opts, "preset", "superfast", 0);
|
||||
av_dict_set(¶ms->video_opts, "tune", "animation", 0);
|
||||
av_dict_set(¶ms->video_opts, "crf", "25", 0);
|
||||
av_dict_set(¶ms->audio_opts, "audio_global_quality", "75", 0);
|
||||
break;
|
||||
case RECORD_CONFIG_TYPE_RECORDING_HIGH_QUALITY:
|
||||
case RECORD_CONFIG_TYPE_STREAMING_HIGH_QUALITY:
|
||||
params->threads = 1;
|
||||
params->frame_drop_ratio = 1;
|
||||
params->audio_enable = true;
|
||||
params->audio_global_quality = 100;
|
||||
params->out_pix_fmt = PIX_FMT_YUV444P;
|
||||
|
||||
strlcpy(params->vcodec, "libx264", sizeof(params->vcodec));
|
||||
strlcpy(params->acodec, "libmp3lame", sizeof(params->acodec));
|
||||
|
||||
av_dict_set(¶ms->video_opts, "preset", "medium", 0);
|
||||
av_dict_set(¶ms->video_opts, "tune", "animation", 0);
|
||||
av_dict_set(¶ms->video_opts, "crf", "15", 0);
|
||||
av_dict_set(¶ms->audio_opts, "audio_global_quality", "100", 0);
|
||||
break;
|
||||
case RECORD_CONFIG_TYPE_RECORDING_LOSSLESS_QUALITY:
|
||||
params->threads = 1;
|
||||
params->frame_drop_ratio = 1;
|
||||
params->audio_enable = true;
|
||||
params->audio_global_quality = 100;
|
||||
params->out_pix_fmt = PIX_FMT_BGR24;
|
||||
|
||||
strlcpy(params->vcodec, "libx264rgb", sizeof(params->vcodec));
|
||||
strlcpy(params->acodec, "flac", sizeof(params->acodec));
|
||||
|
||||
av_dict_set(¶ms->video_opts, "preset", "medium", 0);
|
||||
av_dict_set(¶ms->video_opts, "tune", "animation", 0);
|
||||
av_dict_set(¶ms->video_opts, "crf", "0", 0);
|
||||
av_dict_set(¶ms->audio_opts, "audio_global_quality", "100", 0);
|
||||
break;
|
||||
case RECORD_CONFIG_TYPE_STREAMING_NETPLAY:
|
||||
params->threads = 1;
|
||||
params->frame_drop_ratio = 1;
|
||||
params->audio_enable = true;
|
||||
params->audio_global_quality = 50;
|
||||
params->out_pix_fmt = PIX_FMT_YUV420P;
|
||||
|
||||
strlcpy(params->vcodec, "libx264", sizeof(params->vcodec));
|
||||
strlcpy(params->acodec, "mp3", sizeof(params->acodec));
|
||||
|
||||
av_dict_set(¶ms->video_opts, "preset", "ultrafast", 0);
|
||||
av_dict_set(¶ms->video_opts, "tune", "zerolatency", 0);
|
||||
av_dict_set(¶ms->video_opts, "crf", "20", 0);
|
||||
av_dict_set(¶ms->audio_opts, "audio_global_quality", "50", 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (preset <= RECORD_CONFIG_TYPE_RECORDING_LOSSLESS_QUALITY)
|
||||
{
|
||||
if (!settings->bools.video_gpu_record)
|
||||
params->scale_factor = settings->uints.video_record_scale_factor > 0 ?
|
||||
settings->uints.video_record_scale_factor : 1;
|
||||
else
|
||||
params->scale_factor = 1;
|
||||
strlcpy(params->format, "matroska", sizeof(params->format));
|
||||
}
|
||||
else if (preset <= RECORD_CONFIG_TYPE_STREAMING_HIGH_QUALITY)
|
||||
{
|
||||
if (!settings->bools.video_gpu_record)
|
||||
params->scale_factor = settings->uints.video_stream_scale_factor > 0 ?
|
||||
settings->uints.video_stream_scale_factor : 1;
|
||||
else
|
||||
params->scale_factor = 1;
|
||||
strlcpy(params->format, "flv", sizeof(params->format));
|
||||
}
|
||||
else
|
||||
{
|
||||
params->scale_factor = 1;
|
||||
strlcpy(params->format, "flv", sizeof(params->format));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
static bool ffmpeg_init_config_recording(struct ff_config_param *params)
|
||||
{
|
||||
return true;
|
||||
params->threads = 0;
|
||||
params->audio_global_quality = 100;
|
||||
|
||||
@ -580,6 +680,7 @@ static bool ffmpeg_init_config_recording(struct ff_config_param *params)
|
||||
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
static bool ffmpeg_init_config(struct ff_config_param *params,
|
||||
const char *config)
|
||||
@ -703,7 +804,7 @@ static bool ffmpeg_init_muxer_post(ffmpeg_t *handle)
|
||||
}
|
||||
|
||||
av_dict_set(&handle->muxer.ctx->metadata, "title",
|
||||
"RetroArch video dump", 0);
|
||||
"RetroArch Video Dump", 0);
|
||||
|
||||
return avformat_write_header(handle->muxer.ctx, NULL) >= 0;
|
||||
}
|
||||
@ -837,45 +938,13 @@ static void *ffmpeg_new(const struct record_params *params)
|
||||
|
||||
handle->params = *params;
|
||||
|
||||
if (params->config_type == RECORD_CONFIG_TYPE_RECORDING_CUSTOM)
|
||||
if (params->preset == RECORD_CONFIG_TYPE_RECORDING_CUSTOM)
|
||||
{
|
||||
if (!ffmpeg_init_config(&handle->config, params->config))
|
||||
goto error;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
switch (params->config_type)
|
||||
{
|
||||
case RECORD_CONFIG_TYPE_RECORDING_LOW_QUALITY:
|
||||
ffmpeg_init_config_common(&handle->config);
|
||||
ffmpeg_init_config_recording(&handle->config);
|
||||
break;
|
||||
case RECORD_CONFIG_TYPE_RECORDING_MED_QUALITY:
|
||||
ffmpeg_init_config_common(&handle->config);
|
||||
ffmpeg_init_config_recording(&handle->config);
|
||||
break;
|
||||
case RECORD_CONFIG_TYPE_RECORDING_HIGH_QUALITY:
|
||||
ffmpeg_init_config_common(&handle->config);
|
||||
ffmpeg_init_config_recording(&handle->config);
|
||||
break;
|
||||
case RECORD_CONFIG_TYPE_STREAM_YOUTUBE:
|
||||
ffmpeg_init_config_common(&handle->config);
|
||||
/* TODO/FIXME - fill this in */
|
||||
break;
|
||||
case RECORD_CONFIG_TYPE_STREAM_DISCORD:
|
||||
ffmpeg_init_config_common(&handle->config);
|
||||
/* TODO/FIXME - fill this in */
|
||||
break;
|
||||
case RECORD_CONFIG_TYPE_STREAM_TWITCH:
|
||||
ffmpeg_init_config_common(&handle->config);
|
||||
/* TODO/FIXME - fill this in */
|
||||
break;
|
||||
default:
|
||||
case RECORD_CONFIG_TYPE_RECORDING_CUSTOM:
|
||||
break;
|
||||
}
|
||||
}
|
||||
ffmpeg_init_config_common(&handle->config, params->preset);
|
||||
|
||||
if (!ffmpeg_init_muxer_pre(handle))
|
||||
goto error;
|
||||
|
@ -52,7 +52,6 @@ size_t recording_gpu_width = 0;
|
||||
size_t recording_gpu_height = 0;
|
||||
static bool recording_enable = false;
|
||||
static bool streaming_enable = false;
|
||||
static bool recording_use_output_dir = false;
|
||||
|
||||
static const record_driver_t *recording_driver = NULL;
|
||||
void *recording_data = NULL;
|
||||
@ -374,10 +373,6 @@ bool recording_init(void)
|
||||
|
||||
}
|
||||
}
|
||||
if (recording_use_output_dir)
|
||||
fill_pathname_join(output,
|
||||
global->record.output_dir,
|
||||
global->record.path, sizeof(output));
|
||||
|
||||
params.out_width = av_info->geometry.base_width;
|
||||
params.out_height = av_info->geometry.base_height;
|
||||
@ -396,9 +391,15 @@ bool recording_init(void)
|
||||
else
|
||||
{
|
||||
if (streaming_is_enabled())
|
||||
{
|
||||
params.config = settings->paths.path_stream_config;
|
||||
params.preset = settings->uints.video_stream_quality;
|
||||
}
|
||||
else
|
||||
{
|
||||
params.config = settings->paths.path_record_config;
|
||||
params.preset = settings->uints.video_record_quality;
|
||||
}
|
||||
}
|
||||
|
||||
if (video_driver_supports_recording())
|
||||
@ -510,11 +511,6 @@ void recording_driver_set_data_ptr(void *data)
|
||||
recording_data = data;
|
||||
}
|
||||
|
||||
bool *recording_driver_get_use_output_dir_ptr(void)
|
||||
{
|
||||
return &recording_use_output_dir;
|
||||
}
|
||||
|
||||
unsigned *recording_driver_get_width(void)
|
||||
{
|
||||
return &recording_width;
|
||||
@ -527,7 +523,6 @@ unsigned *recording_driver_get_height(void)
|
||||
|
||||
void recording_driver_free_state(void)
|
||||
{
|
||||
recording_use_output_dir = false;
|
||||
recording_gpu_width = 0;
|
||||
recording_gpu_height = 0;
|
||||
recording_width = 0;
|
||||
|
@ -37,9 +37,12 @@ enum record_config_type
|
||||
RECORD_CONFIG_TYPE_RECORDING_LOW_QUALITY,
|
||||
RECORD_CONFIG_TYPE_RECORDING_MED_QUALITY,
|
||||
RECORD_CONFIG_TYPE_RECORDING_HIGH_QUALITY,
|
||||
RECORD_CONFIG_TYPE_STREAM_YOUTUBE,
|
||||
RECORD_CONFIG_TYPE_STREAM_TWITCH,
|
||||
RECORD_CONFIG_TYPE_STREAM_DISCORD
|
||||
RECORD_CONFIG_TYPE_RECORDING_LOSSLESS_QUALITY,
|
||||
RECORD_CONFIG_TYPE_STREAMING_CUSTOM,
|
||||
RECORD_CONFIG_TYPE_STREAMING_LOW_QUALITY,
|
||||
RECORD_CONFIG_TYPE_STREAMING_MED_QUALITY,
|
||||
RECORD_CONFIG_TYPE_STREAMING_HIGH_QUALITY,
|
||||
RECORD_CONFIG_TYPE_STREAMING_NETPLAY
|
||||
};
|
||||
|
||||
/* Parameters passed to ffemu_new() */
|
||||
@ -66,7 +69,7 @@ struct record_params
|
||||
/* Audio channels. */
|
||||
unsigned channels;
|
||||
|
||||
enum record_config_type config_type;
|
||||
enum record_config_type preset;
|
||||
|
||||
/* Input pixel format. */
|
||||
enum ffemu_pix_format pix_fmt;
|
||||
@ -187,8 +190,6 @@ void recording_driver_clear_data_ptr(void);
|
||||
|
||||
void recording_driver_set_data_ptr(void *data);
|
||||
|
||||
bool *recording_driver_get_use_output_dir_ptr(void);
|
||||
|
||||
unsigned *recording_driver_get_width(void);
|
||||
|
||||
unsigned *recording_driver_get_height(void);
|
||||
|
Loading…
x
Reference in New Issue
Block a user