summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2019-05-20 01:09:08 +0300
committerDr.Smile <vabnick@gmail.com>2019-05-20 01:09:08 +0300
commit7307cbdee9b46c2b20b141010ae2e5c534397ed8 (patch)
treed1e979a98a0af328e500051e19041c673f6fc0be
parentf6982a04037b9a935a2e52e8e4d6186fac912ca8 (diff)
downloadlibass-7307cbdee9b46c2b20b141010ae2e5c534397ed8.tar.bz2
libass-7307cbdee9b46c2b20b141010ae2e5c534397ed8.tar.xz
outline: rearrange allocations
-rw-r--r--libass/ass_drawing.c1
-rw-r--r--libass/ass_outline.c10
-rw-r--r--libass/ass_render.c12
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]);