summaryrefslogtreecommitdiffstats
path: root/libass/ass_render.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2009-02-28 05:58:59 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2009-02-28 05:58:59 +0200
commit0c6f667896620943ee6ae899d6e36c3da5c98c54 (patch)
treee9e9f2e7dc1632525250b8a54834c9c207aa80bc /libass/ass_render.c
parent54bb7a2582ce084895dcd0c6511dda4baf9a6c0e (diff)
parentcde07e8a61ba78a8c35b1548181c1e1fd43215d9 (diff)
downloadmpv-0c6f667896620943ee6ae899d6e36c3da5c98c54.tar.bz2
mpv-0c6f667896620943ee6ae899d6e36c3da5c98c54.tar.xz
Merge svn changes up to r28755
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r--libass/ass_render.c99
1 files changed, 50 insertions, 49 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index b3ef0ca76f..a755f23223 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -581,12 +581,9 @@ static void change_border(double border)
if (!render_context.font) return;
if (border < 0) {
- if (render_context.style->BorderStyle == 1) {
- if (render_context.style->Outline == 0 && render_context.style->Shadow > 0)
- border = 1.;
- else
- border = render_context.style->Outline;
- } else
+ if (render_context.style->BorderStyle == 1)
+ border = render_context.style->Outline;
+ else
border = 1.;
}
render_context.border = border;
@@ -705,31 +702,31 @@ static char* parse_tag(char* p, double pwr) {
mp_msg(MSGT_ASS, MSGL_V, "stub: \\ybord%.2f\n", val);
} else if (mystrcmp(&p, "xshad")) {
int val;
- if (mystrtoi(&p, 10, &val))
+ if (mystrtoi(&p, &val))
mp_msg(MSGT_ASS, MSGL_V, "stub: \\xshad%d\n", val);
} else if (mystrcmp(&p, "yshad")) {
int val;
- if (mystrtoi(&p, 10, &val))
+ if (mystrtoi(&p, &val))
mp_msg(MSGT_ASS, MSGL_V, "stub: \\yshad%d\n", val);
} else if (mystrcmp(&p, "fax")) {
int val;
- if (mystrtoi(&p, 10, &val))
+ if (mystrtoi(&p, &val))
mp_msg(MSGT_ASS, MSGL_V, "stub: \\fax%d\n", val);
} else if (mystrcmp(&p, "fay")) {
int val;
- if (mystrtoi(&p, 10, &val))
+ if (mystrtoi(&p, &val))
mp_msg(MSGT_ASS, MSGL_V, "stub: \\fay%d\n", val);
} else if (mystrcmp(&p, "iclip")) {
int x0, y0, x1, y1;
int res = 1;
skip('(');
- res &= mystrtoi(&p, 10, &x0);
+ res &= mystrtoi(&p, &x0);
skip(',');
- res &= mystrtoi(&p, 10, &y0);
+ res &= mystrtoi(&p, &y0);
skip(',');
- res &= mystrtoi(&p, 10, &x1);
+ res &= mystrtoi(&p, &x1);
skip(',');
- res &= mystrtoi(&p, 10, &y1);
+ res &= mystrtoi(&p, &y1);
skip(')');
mp_msg(MSGT_ASS, MSGL_V, "stub: \\iclip(%d,%d,%d,%d)\n", x0, y0, x1, y1);
} else if (mystrcmp(&p, "blur")) {
@@ -784,18 +781,18 @@ static char* parse_tag(char* p, double pwr) {
double x, y;
double k;
skip('(');
- x1 = strtol(p, &p, 10);
+ mystrtoi(&p, &x1);
skip(',');
- y1 = strtol(p, &p, 10);
+ mystrtoi(&p, &y1);
skip(',');
- x2 = strtol(p, &p, 10);
+ mystrtoi(&p, &x2);
skip(',');
- y2 = strtol(p, &p, 10);
+ mystrtoi(&p, &y2);
if (*p == ',') {
skip(',');
- t1 = strtoll(p, &p, 10);
+ mystrtoll(&p, &t1);
skip(',');
- t2 = strtoll(p, &p, 10);
+ mystrtoll(&p, &t2);
mp_msg(MSGT_ASS, MSGL_DBG2, "movement6: (%d, %d) -> (%d, %d), (%" PRId64 " .. %" PRId64 ")\n",
x1, y1, x2, y2, (int64_t)t1, (int64_t)t2);
} else {
@@ -870,7 +867,7 @@ static char* parse_tag(char* p, double pwr) {
// FIXME: simplify
} else if (mystrcmp(&p, "an")) {
int val;
- if (mystrtoi(&p, 10, &val) && val) {
+ if (mystrtoi(&p, &val) && val) {
int v = (val - 1) / 3; // 0, 1 or 2 for vertical alignment
mp_msg(MSGT_ASS, MSGL_DBG2, "an %d\n", val);
if (v != 0) v = 3 - v;
@@ -882,16 +879,16 @@ static char* parse_tag(char* p, double pwr) {
render_context.alignment = render_context.style->Alignment;
} else if (mystrcmp(&p, "a")) {
int val;
- if (mystrtoi(&p, 10, &val) && val)
+ if (mystrtoi(&p, &val) && val)
render_context.alignment = val;
else
render_context.alignment = render_context.style->Alignment;
} else if (mystrcmp(&p, "pos")) {
int v1, v2;
skip('(');
- v1 = strtol(p, &p, 10);
+ mystrtoi(&p, &v1);
skip(',');
- v2 = strtol(p, &p, 10);
+ mystrtoi(&p, &v2);
skip(')');
mp_msg(MSGT_ASS, MSGL_DBG2, "pos(%d, %d)\n", v1, v2);
if (render_context.evt_type == EVENT_POSITIONED) {
@@ -908,9 +905,9 @@ static char* parse_tag(char* p, double pwr) {
long long t1, t2, t3, t4;
if (*p == 'e') ++p; // either \fad or \fade
skip('(');
- a1 = strtol(p, &p, 10);
+ mystrtoi(&p, &a1);
skip(',');
- a2 = strtol(p, &p, 10);
+ mystrtoi(&p, &a2);
if (*p == ')') {
// 2-argument version (\fad, according to specs)
// a1 and a2 are fade-in and fade-out durations
@@ -925,24 +922,24 @@ static char* parse_tag(char* p, double pwr) {
// 6-argument version (\fade)
// a1 and a2 (and a3) are opacity values
skip(',');
- a3 = strtol(p, &p, 10);
+ mystrtoi(&p, &a3);
skip(',');
- t1 = strtoll(p, &p, 10);
+ mystrtoll(&p, &t1);
skip(',');
- t2 = strtoll(p, &p, 10);
+ mystrtoll(&p, &t2);
skip(',');
- t3 = strtoll(p, &p, 10);
+ mystrtoll(&p, &t3);
skip(',');
- t4 = strtoll(p, &p, 10);
+ mystrtoll(&p, &t4);
}
skip(')');
render_context.fade = interpolate_alpha(frame_context.time - render_context.event->Start, t1, t2, t3, t4, a1, a2, a3);
} else if (mystrcmp(&p, "org")) {
int v1, v2;
skip('(');
- v1 = strtol(p, &p, 10);
+ mystrtoi(&p, &v1);
skip(',');
- v2 = strtol(p, &p, 10);
+ mystrtoi(&p, &v2);
skip(')');
mp_msg(MSGT_ASS, MSGL_DBG2, "org(%d, %d)\n", v1, v2);
// render_context.evt_type = EVENT_POSITIONED;
@@ -996,13 +993,13 @@ static char* parse_tag(char* p, double pwr) {
int x0, y0, x1, y1;
int res = 1;
skip('(');
- res &= mystrtoi(&p, 10, &x0);
+ res &= mystrtoi(&p, &x0);
skip(',');
- res &= mystrtoi(&p, 10, &y0);
+ res &= mystrtoi(&p, &y0);
skip(',');
- res &= mystrtoi(&p, 10, &x1);
+ res &= mystrtoi(&p, &x1);
skip(',');
- res &= mystrtoi(&p, 10, &y1);
+ res &= mystrtoi(&p, &y1);
skip(')');
if (res) {
render_context.clip_x0 = render_context.clip_x0 * (1-pwr) + x0 * pwr;
@@ -1045,7 +1042,7 @@ static char* parse_tag(char* p, double pwr) {
reset_render_context();
} else if (mystrcmp(&p, "be")) {
int val;
- if (mystrtoi(&p, 10, &val)) {
+ if (mystrtoi(&p, &val)) {
// Clamp to 10, since high values need excessive CPU
val = (val < 0) ? 0 : val;
val = (val > 10) ? 10 : val;
@@ -1054,7 +1051,7 @@ static char* parse_tag(char* p, double pwr) {
render_context.be = 0;
} else if (mystrcmp(&p, "b")) {
int b;
- if (mystrtoi(&p, 10, &b)) {
+ if (mystrtoi(&p, &b)) {
if (pwr >= .5)
render_context.bold = b;
} else
@@ -1062,41 +1059,45 @@ static char* parse_tag(char* p, double pwr) {
update_font();
} else if (mystrcmp(&p, "i")) {
int i;
- if (mystrtoi(&p, 10, &i)) {
+ if (mystrtoi(&p, &i)) {
if (pwr >= .5)
render_context.italic = i;
} else
render_context.italic = render_context.style->Italic;
update_font();
} else if (mystrcmp(&p, "kf") || mystrcmp(&p, "K")) {
- int val = strtol(p, &p, 10);
+ int val = 0;
+ mystrtoi(&p, &val);
render_context.effect_type = EF_KARAOKE_KF;
if (render_context.effect_timing)
render_context.effect_skip_timing += render_context.effect_timing;
render_context.effect_timing = val * 10;
} else if (mystrcmp(&p, "ko")) {
- int val = strtol(p, &p, 10);
+ int val = 0;
+ mystrtoi(&p, &val);
render_context.effect_type = EF_KARAOKE_KO;
if (render_context.effect_timing)
render_context.effect_skip_timing += render_context.effect_timing;
render_context.effect_timing = val * 10;
} else if (mystrcmp(&p, "k")) {
- int val = strtol(p, &p, 10);
+ int val = 0;
+ mystrtoi(&p, &val);
render_context.effect_type = EF_KARAOKE;
if (render_context.effect_timing)
render_context.effect_skip_timing += render_context.effect_timing;
render_context.effect_timing = val * 10;
} else if (mystrcmp(&p, "shad")) {
int val;
- if (mystrtoi(&p, 10, &val))
+ if (mystrtoi(&p, &val))
render_context.shadow = val;
else
render_context.shadow = render_context.style->Shadow;
} else if (mystrcmp(&p, "pbo")) {
- (void)strtol(p, &p, 10); // ignored
+ int val = 0;
+ mystrtoi(&p, &val); // ignored
} else if (mystrcmp(&p, "p")) {
int val;
- if (!mystrtoi(&p, 10, &val))
+ if (!mystrtoi(&p, &val))
val = 0;
render_context.drawing_mode = !!val;
}
@@ -1150,7 +1151,7 @@ static unsigned get_next_char(char** str)
return ' ';
}
}
- chr = utf8_get_char(&p);
+ chr = utf8_get_char((const char **)&p);
*str = p;
return chr;
}
@@ -1312,7 +1313,7 @@ static void get_outline_glyph(int symbol, glyph_info_t* info, FT_Vector* advance
key.italic = render_context.italic;
key.outline = render_context.border * 0xFFFF;
- info->glyph = info->outline_glyph = 0;
+ memset(info, 0, sizeof(glyph_info_t));
val = cache_find_glyph(&key);
if (val) {
@@ -2049,7 +2050,7 @@ static int ass_render_event(ass_event_t* event, event_images_t* event_images)
center.x = x2scr(render_context.org_x);
center.y = y2scr(render_context.org_y);
} else {
- int bx, by;
+ int bx = 0, by = 0;
get_base_point(bbox, alignment, &bx, &by);
center.x = device_x + bx;
center.y = device_y + by;