From 7307cbdee9b46c2b20b141010ae2e5c534397ed8 Mon Sep 17 00:00:00 2001 From: "Dr.Smile" Date: Mon, 20 May 2019 01:09:08 +0300 Subject: outline: rearrange allocations --- libass/ass_drawing.c | 1 - libass/ass_outline.c | 10 ++++++---- libass/ass_render.c | 12 ++++-------- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/libass/ass_drawing.c b/libass/ass_drawing.c index fb71e15..1af250d 100644 --- a/libass/ass_drawing.c +++ b/libass/ass_drawing.c @@ -181,7 +181,6 @@ bool ass_drawing_parse(ASS_Outline *outline, ASS_Rect *cbox, { if (!outline_alloc(outline, DRAWING_INITIAL_POINTS, DRAWING_INITIAL_SEGMENTS)) return false; - outline->n_points = outline->n_segments = 0; rectangle_reset(cbox); ASS_DrawingToken *tokens = drawing_tokenize(text); diff --git a/libass/ass_outline.c b/libass/ass_outline.c index fd7e4ed..26bd424 100644 --- a/libass/ass_outline.c +++ b/libass/ass_outline.c @@ -35,6 +35,7 @@ bool outline_alloc(ASS_Outline *outline, size_t n_points, size_t n_segments) outline->max_points = n_points; outline->max_segments = n_segments; + outline->n_points = outline->n_segments = 0; return true; } @@ -61,7 +62,6 @@ bool outline_convert(ASS_Outline *outline, const FT_Outline *source) S_ON, S_Q, S_C1, S_C2 }; - outline->n_points = outline->n_segments = 0; for (size_t i = 0, j = 0; i < source->n_contours; i++) { ASS_Vector pt; bool skip_last = false; @@ -1344,13 +1344,15 @@ static bool close_contour(StrokerState *str, int dir) bool outline_stroke(ASS_Outline *result, ASS_Outline *result1, const ASS_Outline *path, int xbord, int ybord, int eps) { + outline_alloc(result, 2 * path->n_points, 2 * path->n_segments); + outline_alloc(result1, 2 * path->n_points, 2 * path->n_segments); + if (!result->max_points || !result1->max_points) + return false; + const int dir = 3; int rad = FFMAX(xbord, ybord); assert(rad >= eps); - result->n_points = result->n_segments = 0; - result1->n_points = result1->n_segments = 0; - StrokerState str; str.result[0] = result; str.result[1] = result1; diff --git a/libass/ass_render.c b/libass/ass_render.c index eb0a407..fc66569 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -1190,14 +1190,10 @@ size_t ass_outline_construct(void *key, void *value, void *priv) if (!outline_scale_pow2(&src, &k->outline->outline[0], k->scale_ord_x, k->scale_ord_y)) return 1; - - outline_alloc(&v->outline[0], 2 * src.n_points, 2 * src.n_segments); - outline_alloc(&v->outline[1], 2 * src.n_points, 2 * src.n_segments); - if (!v->outline[0].max_points || !v->outline[1].max_points || - !outline_stroke(&v->outline[0], &v->outline[1], &src, - k->border.x * STROKER_PRECISION, - k->border.y * STROKER_PRECISION, - STROKER_PRECISION)) { + if (!outline_stroke(&v->outline[0], &v->outline[1], &src, + k->border.x * STROKER_PRECISION, + k->border.y * STROKER_PRECISION, + STROKER_PRECISION)) { ass_msg(render_priv->library, MSGL_WARN, "Cannot stroke outline"); outline_free(&v->outline[0]); outline_free(&v->outline[1]); -- cgit v1.2.3