From 2432bbd43d0dc22af0a5f57d2921448ed76a53c4 Mon Sep 17 00:00:00 2001 From: greg Date: Thu, 5 Mar 2009 20:36:48 +0000 Subject: Support ScaledBorderAndShadow property. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28820 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libass/ass.c | 2 ++ libass/ass_render.c | 5 ++++- libass/ass_types.h | 1 + libass/ass_utils.c | 11 +++++++++++ libass/ass_utils.h | 1 + 5 files changed, 19 insertions(+), 1 deletion(-) (limited to 'libass') diff --git a/libass/ass.c b/libass/ass.c index 8022dfc9be..e1be966b65 100644 --- a/libass/ass.c +++ b/libass/ass.c @@ -520,6 +520,8 @@ static int process_info_line(ass_track_t* track, char *str) track->Timer = atof(str + 6); } else if (!strncmp(str,"WrapStyle:", 10)) { track->WrapStyle = atoi(str + 10); + } else if (!strncmp(str, "ScaledBorderAndShadow:", 22)) { + track->ScaledBorderAndShadow = parse_bool(str + 22); } return 0; } diff --git a/libass/ass_render.c b/libass/ass_render.c index 399ca533cd..5371afa06d 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -2233,7 +2233,10 @@ static int ass_start_frame(ass_renderer_t *priv, ass_track_t* track, long long n frame_context.font_scale = global_settings->font_size_coeff * frame_context.orig_height / frame_context.track->PlayResY; - frame_context.border_scale = ((double)frame_context.orig_height) / frame_context.track->PlayResY; + if (frame_context.track->ScaledBorderAndShadow) + frame_context.border_scale = ((double)frame_context.orig_height) / frame_context.track->PlayResY; + else + frame_context.border_scale = 1.; frame_context.font_scale_x = 1.; diff --git a/libass/ass_types.h b/libass/ass_types.h index 870fab4caa..52aff0fb85 100644 --- a/libass/ass_types.h +++ b/libass/ass_types.h @@ -105,6 +105,7 @@ typedef struct ass_track_s { int PlayResY; double Timer; int WrapStyle; + char ScaledBorderAndShadow; int default_style; // index of default style diff --git a/libass/ass_utils.c b/libass/ass_utils.c index 25e4d4fe7b..7f728f1bb1 100644 --- a/libass/ass_utils.c +++ b/libass/ass_utils.c @@ -96,6 +96,17 @@ int strtocolor(char** q, uint32_t* res) return result; } +// Return a boolean value for a string +char parse_bool(char* str) { + while (*str == ' ' || *str == '\t') + str++; + if (!strncasecmp(str, "yes", 3)) + return 1; + else if (strtol(str, NULL, 10) > 0) + return 1; + return 0; +} + #if 0 static void sprint_tag(uint32_t tag, char* dst) { diff --git a/libass/ass_utils.h b/libass/ass_utils.h index f37bc0edc1..8c5f3e8f49 100644 --- a/libass/ass_utils.h +++ b/libass/ass_utils.h @@ -30,6 +30,7 @@ int mystrtoll(char** p, long long* res); int mystrtou32(char** p, int base, uint32_t* res); int mystrtod(char** p, double* res); int strtocolor(char** q, uint32_t* res); +char parse_bool(char* str); static inline int d6_to_int(int x) { return (x + 32) >> 6; -- cgit v1.2.3