From 14586a1b2f3ae784ee2f29957b4d01207cc6c2a0 Mon Sep 17 00:00:00 2001 From: Oleg Oshmyan Date: Fri, 3 Feb 2017 21:36:23 +0200 Subject: Reuse numpad2align in parse_tag --- libass/ass.c | 23 ----------------------- libass/ass_parse.c | 11 +++-------- libass/ass_utils.c | 23 +++++++++++++++++++++++ libass/ass_utils.h | 1 + 4 files changed, 27 insertions(+), 31 deletions(-) (limited to 'libass') diff --git a/libass/ass.c b/libass/ass.c index 3a94290..c35f4ae 100644 --- a/libass/ass.c +++ b/libass/ass.c @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -237,28 +236,6 @@ static long long string2timecode(ASS_Library *library, char *p) return tm; } -/** - * \brief converts numpad-style align to align. - */ -static int numpad2align(int val) -{ - if (val < -INT_MAX) - // Pick an alignment somewhat arbitrarily. VSFilter handles - // INT32_MIN as a mix of 1, 2 and 3, so prefer one of those values. - val = 2; - else if (val < 0) - val = -val; - - int res = ((val - 1) % 3) + 1; // horizontal alignment - if (val <= 3) - res |= VALIGN_SUB; - else if (val <= 6) - res |= VALIGN_CENTER; - else - res |= VALIGN_TOP; - return res; -} - #define NEXT(str,token) \ token = next_token(&str); \ if (!token) break; diff --git a/libass/ass_parse.c b/libass/ass_parse.c index 5cd232f..dc27bf5 100644 --- a/libass/ass_parse.c +++ b/libass/ass_parse.c @@ -566,14 +566,9 @@ char *parse_tag(ASS_Renderer *render_priv, char *p, char *end, double pwr) } else if (tag("an")) { int val = argtoi(*args); if ((render_priv->state.parsed_tags & PARSED_A) == 0) { - if (val >= 1 && val <= 9) { - int v = (val - 1) / 3; // 0, 1 or 2 for vertical alignment - if (v != 0) - v = 3 - v; - val = ((val - 1) % 3) + 1; // horizontal alignment - val += v * 4; - render_priv->state.alignment = val; - } else + if (val >= 1 && val <= 9) + render_priv->state.alignment = numpad2align(val); + else render_priv->state.alignment = render_priv->state.style->Alignment; render_priv->state.parsed_tags |= PARSED_A; diff --git a/libass/ass_utils.c b/libass/ass_utils.c index 03900f2..8cd639d 100644 --- a/libass/ass_utils.c +++ b/libass/ass_utils.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "ass_library.h" @@ -327,6 +328,28 @@ int parse_ycbcr_matrix(char *str) return YCBCR_UNKNOWN; } +/** + * \brief converts numpad-style align to align. + */ +int numpad2align(int val) +{ + if (val < -INT_MAX) + // Pick an alignment somewhat arbitrarily. VSFilter handles + // INT32_MIN as a mix of 1, 2 and 3, so prefer one of those values. + val = 2; + else if (val < 0) + val = -val; + + int res = ((val - 1) % 3) + 1; // horizontal alignment + if (val <= 3) + res |= VALIGN_SUB; + else if (val <= 6) + res |= VALIGN_CENTER; + else + res |= VALIGN_TOP; + return res; +} + void ass_msg(ASS_Library *priv, int lvl, const char *fmt, ...) { va_list va; diff --git a/libass/ass_utils.h b/libass/ass_utils.h index 6c9f385..c2fcf30 100644 --- a/libass/ass_utils.h +++ b/libass/ass_utils.h @@ -87,6 +87,7 @@ uint32_t parse_color_tag(char *str); uint32_t parse_color_header(char *str); char parse_bool(char *str); int parse_ycbcr_matrix(char *str); +int numpad2align(int val); unsigned ass_utf8_get_char(char **str); unsigned ass_utf8_put_char(char *dest, uint32_t ch); void ass_utf16be_to_utf8(char *dst, size_t dst_size, uint8_t *src, size_t src_size); -- cgit v1.2.3