Enable localization of video rotation, orientation, aspect ratio options. (#14744)

This commit is contained in:
zoltanvb 2022-12-19 21:36:06 +01:00 committed by GitHub
parent f5133d8cc4
commit 02ba825c88
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 139 additions and 28 deletions

View File

@ -75,6 +75,14 @@ enum rotation
ORIENTATION_END ORIENTATION_END
}; };
enum video_rotation_type
{
VIDEO_ROTATION_NORMAL = 0,
VIDEO_ROTATION_90_DEG,
VIDEO_ROTATION_180_DEG,
VIDEO_ROTATION_270_DEG
};
enum autoswitch_refresh_rate enum autoswitch_refresh_rate
{ {
AUTOSWITCH_REFRESH_RATE_EXCLUSIVE_FULLSCREEN = 0, AUTOSWITCH_REFRESH_RATE_EXCLUSIVE_FULLSCREEN = 0,

View File

@ -185,6 +185,7 @@ static const gfx_ctx_driver_t *gfx_ctx_gl_drivers[] = {
NULL NULL
}; };
/* Beware when changing this - it must match with enum aspect_ratio order */
struct aspect_ratio_elem aspectratio_lut[ASPECT_RATIO_END] = { struct aspect_ratio_elem aspectratio_lut[ASPECT_RATIO_END] = {
{ 4.0f / 3.0f , "4:3" }, { 4.0f / 3.0f , "4:3" },
{ 16.0f / 9.0f , "16:9" }, { 16.0f / 9.0f , "16:9" },
@ -206,11 +207,11 @@ struct aspect_ratio_elem aspectratio_lut[ASPECT_RATIO_END] = {
{ 19.0f / 14.0f, "19:14" }, { 19.0f / 14.0f, "19:14" },
{ 30.0f / 17.0f, "30:17" }, { 30.0f / 17.0f, "30:17" },
{ 32.0f / 9.0f , "32:9" }, { 32.0f / 9.0f , "32:9" },
{ 0.0f , "Config" }, { 0.0f , "" }, /* config - initialized in video_driver_init_internal */
{ 1.0f , "Square pixel" }, { 1.0f , "" }, /* square pixel - initialized in video_driver_set_viewport_square_pixel */
{ 1.0f , "Core provided" }, { 1.0f , "" }, /* core provided - initialized in video_driver_init_internal */
{ 0.0f , "Custom" }, { 0.0f , "" }, /* custom - initialized in video_driver_init_internal */
{ 4.0f / 3.0f , "Full" } { 4.0f / 3.0f , "" } /* full - initialized in video_driver_init_internal */
}; };
static void *video_null_init(const video_info_t *video, static void *video_null_init(const video_info_t *video,
@ -1621,7 +1622,8 @@ void video_driver_set_viewport_square_pixel(struct retro_game_geometry *geom)
snprintf(aspectratio_lut[ASPECT_RATIO_SQUARE].name, snprintf(aspectratio_lut[ASPECT_RATIO_SQUARE].name,
sizeof(aspectratio_lut[ASPECT_RATIO_SQUARE].name), sizeof(aspectratio_lut[ASPECT_RATIO_SQUARE].name),
"1:1 PAR (%u:%u DAR)", aspect_x, aspect_y); msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_SQUARE_PIXEL),
aspect_x, aspect_y);
aspectratio_lut[ASPECT_RATIO_SQUARE].value = (float)aspect_x / aspect_y; aspectratio_lut[ASPECT_RATIO_SQUARE].value = (float)aspect_x / aspect_y;
} }
@ -3294,6 +3296,19 @@ bool video_driver_init_internal(bool *video_is_threaded, bool verbosity_enabled)
scale = video_st->state_scale; scale = video_st->state_scale;
#endif #endif
strlcpy(aspectratio_lut[ASPECT_RATIO_CONFIG].name,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_CONFIG),
sizeof(aspectratio_lut[ASPECT_RATIO_CONFIG].name));
strlcpy(aspectratio_lut[ASPECT_RATIO_CORE].name,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_CORE_PROVIDED),
sizeof(aspectratio_lut[ASPECT_RATIO_CORE].name));
strlcpy(aspectratio_lut[ASPECT_RATIO_CUSTOM].name,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_CUSTOM),
sizeof(aspectratio_lut[ASPECT_RATIO_CUSTOM].name));
strlcpy(aspectratio_lut[ASPECT_RATIO_FULL].name,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_FULL),
sizeof(aspectratio_lut[ASPECT_RATIO_FULL].name));
/* Update core-dependent aspect ratio values. */ /* Update core-dependent aspect ratio values. */
video_driver_set_viewport_square_pixel(geom); video_driver_set_viewport_square_pixel(geom);
video_driver_set_viewport_core(); video_driver_set_viewport_core();

View File

@ -1946,6 +1946,26 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_VIDEO_ASPECT_RATIO, MENU_ENUM_SUBLABEL_VIDEO_ASPECT_RATIO,
"Floating point value for video aspect ratio (width / height)." "Floating point value for video aspect ratio (width / height)."
) )
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_CONFIG,
"Config"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_SQUARE_PIXEL,
"1:1 PAR (%u:%u DAR)"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_CORE_PROVIDED,
"Core provided"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_CUSTOM,
"Custom"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_FULL,
"Full"
)
#if defined(DINGUX) #if defined(DINGUX)
MSG_HASH( MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_DINGUX_IPU_KEEP_ASPECT, MENU_ENUM_LABEL_VALUE_VIDEO_DINGUX_IPU_KEEP_ASPECT,
@ -2352,6 +2372,10 @@ MSG_HASH(
/* Settings > Audio > Mixer Settings > Mixer Stream */ /* Settings > Audio > Mixer Settings > Mixer Stream */
MSG_HASH(
MENU_ENUM_LABEL_MIXER_STREAM,
"Mixer stream #%d: %s"
)
MSG_HASH( MSG_HASH(
MENU_ENUM_LABEL_VALUE_MIXER_ACTION_PLAY, MENU_ENUM_LABEL_VALUE_MIXER_ACTION_PLAY,
"Play" "Play"
@ -8367,6 +8391,38 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_SELECT_FILE, MENU_ENUM_LABEL_VALUE_SELECT_FILE,
"Select File" "Select File"
) )
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION_NORMAL,
"Normal"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION_90_DEG,
"90 deg"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION_180_DEG,
"180 deg"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION_270_DEG,
"270 deg"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ORIENTATION_NORMAL,
"Normal"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ORIENTATION_VERTICAL,
"90 deg"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ORIENTATION_FLIPPED,
"180 deg"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_ORIENTATION_FLIPPED_ROTATED,
"270 deg"
)
/* Settings Options */ /* Settings Options */

View File

@ -367,9 +367,7 @@ static int action_get_title_dropdown_item(
static int action_get_title_mixer_stream_actions(const char *path, const char *label, unsigned menu_type, char *s, size_t len) static int action_get_title_mixer_stream_actions(const char *path, const char *label, unsigned menu_type, char *s, size_t len)
{ {
unsigned offset = (menu_type - MENU_SETTINGS_AUDIO_MIXER_STREAM_ACTIONS_BEGIN); unsigned offset = (menu_type - MENU_SETTINGS_AUDIO_MIXER_STREAM_ACTIONS_BEGIN);
/* TODO/FIXME - Localize */ snprintf(s, len , msg_hash_to_str(MENU_ENUM_LABEL_MIXER_STREAM), offset + 1, audio_driver_mixer_get_stream_name(offset));
size_t _len = strlcpy(s, "Mixer Stream", len);
snprintf(s + _len, len - _len, " #%d: %s", offset + 1, audio_driver_mixer_get_stream_name(offset));
return 0; return 0;
} }
#endif #endif

View File

@ -6343,7 +6343,7 @@ unsigned menu_displaylist_build_list(
{ {
char msg[128]; char msg[128];
char msg_lbl[128]; char msg_lbl[128];
snprintf(msg, sizeof(msg), "Mixer Stream #%d :\n", i+1); snprintf(msg, sizeof(msg), msg_hash_to_str(MENU_ENUM_LABEL_MIXER_STREAM), i+1, "\n");
snprintf(msg_lbl, sizeof(msg_lbl), "audio_mixer_stream_%d\n", i); snprintf(msg_lbl, sizeof(msg_lbl), "audio_mixer_stream_%d\n", i);
if (menu_entries_append(list, msg, msg_lbl, if (menu_entries_append(list, msg, msg_lbl,
MSG_UNKNOWN, MSG_UNKNOWN,

View File

@ -6383,16 +6383,25 @@ static void setting_get_string_representation_uint_video_rotation(rarch_setting_
{ {
if (setting) if (setting)
{ {
char rotation_lut[4][32] = switch (*setting->value.target.unsigned_integer)
{ {
"Normal", case VIDEO_ROTATION_NORMAL:
"90 deg", strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION_NORMAL),
"180 deg", len);
"270 deg" break;
}; case VIDEO_ROTATION_90_DEG:
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION_90_DEG),
strlcpy(s, rotation_lut[*setting->value.target.unsigned_integer], len);
len); break;
case VIDEO_ROTATION_180_DEG:
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION_180_DEG),
len);
break;
case VIDEO_ROTATION_270_DEG:
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION_270_DEG),
len);
break;
}
} }
} }
@ -6401,16 +6410,25 @@ static void setting_get_string_representation_uint_screen_orientation(rarch_sett
{ {
if (setting) if (setting)
{ {
char rotation_lut[4][32] = switch (*setting->value.target.unsigned_integer)
{ {
"Normal", case ORIENTATION_NORMAL:
"90 deg", strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ORIENTATION_NORMAL),
"180 deg", len);
"270 deg" break;
}; case ORIENTATION_VERTICAL:
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ORIENTATION_VERTICAL),
strlcpy(s, rotation_lut[*setting->value.target.unsigned_integer], len);
len); break;
case ORIENTATION_FLIPPED:
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ORIENTATION_FLIPPED),
len);
break;
case ORIENTATION_FLIPPED_ROTATED:
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_ORIENTATION_FLIPPED_ROTATED),
len);
break;
}
} }
} }

View File

@ -544,6 +544,7 @@ enum msg_hash_enums
MENU_LABEL(VIDEO_STREAM_QUALITY), MENU_LABEL(VIDEO_STREAM_QUALITY),
MENU_LABEL(STREAMING_URL), MENU_LABEL(STREAMING_URL),
MENU_LABEL(UDP_STREAM_PORT), MENU_LABEL(UDP_STREAM_PORT),
MENU_LABEL(MIXER_STREAM),
MENU_LABEL(ADD_TO_MIXER), MENU_LABEL(ADD_TO_MIXER),
MENU_LABEL(ADD_TO_MIXER_AND_PLAY), MENU_LABEL(ADD_TO_MIXER_AND_PLAY),
MENU_LABEL(ADD_TO_MIXER_AND_COLLECTION), MENU_LABEL(ADD_TO_MIXER_AND_COLLECTION),
@ -1186,7 +1187,17 @@ enum msg_hash_enums
MENU_LABEL(VIDEO_VIEWPORT_CUSTOM_WIDTH), MENU_LABEL(VIDEO_VIEWPORT_CUSTOM_WIDTH),
MENU_LABEL(VIDEO_VIEWPORT_CUSTOM_HEIGHT), MENU_LABEL(VIDEO_VIEWPORT_CUSTOM_HEIGHT),
MENU_LABEL(VIDEO_GAMMA), MENU_LABEL(VIDEO_GAMMA),
MENU_LABEL(VIDEO_ALLOW_ROTATE), MENU_LABEL(VIDEO_ALLOW_ROTATE),
MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION_NORMAL,
MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION_90_DEG,
MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION_180_DEG,
MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION_270_DEG,
MENU_ENUM_LABEL_VALUE_VIDEO_ORIENTATION_NORMAL,
MENU_ENUM_LABEL_VALUE_VIDEO_ORIENTATION_VERTICAL,
MENU_ENUM_LABEL_VALUE_VIDEO_ORIENTATION_FLIPPED,
MENU_ENUM_LABEL_VALUE_VIDEO_ORIENTATION_FLIPPED_ROTATED,
MENU_LABEL(VIDEO_SHARED_CONTEXT), MENU_LABEL(VIDEO_SHARED_CONTEXT),
MENU_LABEL(DRIVER_SWITCH_ENABLE), MENU_LABEL(DRIVER_SWITCH_ENABLE),
MENU_LABEL(VIDEO_THREADED), MENU_LABEL(VIDEO_THREADED),
@ -2774,6 +2785,11 @@ enum msg_hash_enums
MENU_LABEL(VIDEO_FORCE_ASPECT), MENU_LABEL(VIDEO_FORCE_ASPECT),
MENU_LABEL(VIDEO_ASPECT_RATIO_AUTO), MENU_LABEL(VIDEO_ASPECT_RATIO_AUTO),
MENU_LABEL(VIDEO_ASPECT_RATIO_INDEX), MENU_LABEL(VIDEO_ASPECT_RATIO_INDEX),
MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_CONFIG,
MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_SQUARE_PIXEL,
MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_CORE_PROVIDED,
MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_CUSTOM,
MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_FULL,
#if defined(DINGUX) #if defined(DINGUX)
MENU_LABEL(VIDEO_DINGUX_IPU_KEEP_ASPECT), MENU_LABEL(VIDEO_DINGUX_IPU_KEEP_ASPECT),
MENU_LABEL(VIDEO_DINGUX_IPU_FILTER_TYPE), MENU_LABEL(VIDEO_DINGUX_IPU_FILTER_TYPE),