From f164b4be3dee175f5bed160c85d213bf54eebd27 Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 26 May 2019 21:28:36 -0500 Subject: [PATCH] add apng --- menu/menu_setting.c | 5 ++++- record/drivers/record_ffmpeg.c | 28 +++++++++++++++++++++++++++- record/record_driver.c | 8 +++++++- record/record_driver.h | 1 + 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/menu/menu_setting.c b/menu/menu_setting.c index bf5c1f2d79..13df073f4e 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -2710,6 +2710,9 @@ static void setting_get_string_representation_video_record_quality(rarch_setting case RECORD_CONFIG_TYPE_RECORDING_GIF: strlcpy(s, "GIF", len); break; + case RECORD_CONFIG_TYPE_RECORDING_APNG: + strlcpy(s, "APNG", len); + break; } } @@ -10017,7 +10020,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_video_record_quality; - menu_settings_list_current_add_range(list, list_info, RECORD_CONFIG_TYPE_RECORDING_CUSTOM, RECORD_CONFIG_TYPE_RECORDING_GIF, 1, true, true); + menu_settings_list_current_add_range(list, list_info, RECORD_CONFIG_TYPE_RECORDING_CUSTOM, RECORD_CONFIG_TYPE_RECORDING_APNG, 1, true, true); (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_COMBOBOX; CONFIG_PATH( diff --git a/record/drivers/record_ffmpeg.c b/record/drivers/record_ffmpeg.c index 2a39d14c94..8016f448f5 100644 --- a/record/drivers/record_ffmpeg.c +++ b/record/drivers/record_ffmpeg.c @@ -110,6 +110,10 @@ extern "C" { #define PIX_FMT_RGB565 AV_PIX_FMT_RGB565 #endif +#ifndef PIX_FMT_RGBA +#define PIX_FMT_RGBA AV_PIX_FMT_RGBA +#endif + #ifndef PIX_FMT_NONE #define PIX_FMT_NONE AV_PIX_FMT_NONE #endif @@ -665,6 +669,19 @@ static bool ffmpeg_init_config_common(struct ff_config_param *params, unsigned p av_dict_set(¶ms->video_opts, "framerate", "30", 0); av_dict_set(¶ms->audio_opts, "audio_global_quality", "0", 0); break; + case RECORD_CONFIG_TYPE_RECORDING_APNG: + params->threads = settings->uints.video_record_threads; + params->frame_drop_ratio = 1; + params->audio_enable = false; + params->audio_global_quality = 0; + params->out_pix_fmt = PIX_FMT_RGB24; + + strlcpy(params->vcodec, "apng", sizeof(params->vcodec)); + strlcpy(params->acodec, "", sizeof(params->acodec)); + + av_dict_set(¶ms->video_opts, "pred", "avg", 0); + av_dict_set(¶ms->audio_opts, "audio_global_quality", "0", 0); + break; case RECORD_CONFIG_TYPE_STREAMING_NETPLAY: params->threads = settings->uints.video_record_threads; params->frame_drop_ratio = 1; @@ -715,10 +732,19 @@ static bool ffmpeg_init_config_common(struct ff_config_param *params, unsigned p params->scale_factor = 1; strlcpy(params->format, "webm", sizeof(params->format)); } + else if (preset >= RECORD_CONFIG_TYPE_RECORDING_GIF && preset < RECORD_CONFIG_TYPE_RECORDING_APNG) + { + 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, "gif", sizeof(params->format)); + } else if (preset < RECORD_CONFIG_TYPE_STREAMING_LOW_QUALITY) { params->scale_factor = 1; - strlcpy(params->format, "gif", sizeof(params->format)); + strlcpy(params->format, "apng", sizeof(params->format)); } else if (preset <= RECORD_CONFIG_TYPE_STREAMING_HIGH_QUALITY) { diff --git a/record/record_driver.c b/record/record_driver.c index 3b3752bb0a..ebaf519642 100644 --- a/record/record_driver.c +++ b/record/record_driver.c @@ -378,12 +378,18 @@ bool recording_init(void) "webm", sizeof(buf)); fill_pathname_join(output, global->record.output_dir, buf, sizeof(output)); } - else + else if (settings->uints.video_record_quality >= RECORD_CONFIG_TYPE_RECORDING_GIF && settings->uints.video_record_quality < RECORD_CONFIG_TYPE_RECORDING_APNG) { fill_str_dated_filename(buf, game_name, "gif", sizeof(buf)); fill_pathname_join(output, global->record.output_dir, buf, sizeof(output)); } + else + { + fill_str_dated_filename(buf, game_name, + "png", sizeof(buf)); + fill_pathname_join(output, global->record.output_dir, buf, sizeof(output)); + } } } diff --git a/record/record_driver.h b/record/record_driver.h index 6c20b7224d..a2ad2cfa59 100644 --- a/record/record_driver.h +++ b/record/record_driver.h @@ -49,6 +49,7 @@ enum record_config_type RECORD_CONFIG_TYPE_RECORDING_WEBM_FAST, RECORD_CONFIG_TYPE_RECORDING_WEBM_HIGH_QUALITY, RECORD_CONFIG_TYPE_RECORDING_GIF, + RECORD_CONFIG_TYPE_RECORDING_APNG, RECORD_CONFIG_TYPE_STREAMING_CUSTOM, RECORD_CONFIG_TYPE_STREAMING_LOW_QUALITY, RECORD_CONFIG_TYPE_STREAMING_MED_QUALITY,