From 4943c18520c7d4a9a2f7fb5dc4cb45bd8004bbd3 Mon Sep 17 00:00:00 2001 From: rcombs Date: Wed, 27 Jul 2022 16:50:04 -0500 Subject: ass_render: mover rasterizer into RenderContext --- libass/ass_bitmap.c | 5 +++-- libass/ass_bitmap.h | 4 +++- libass/ass_render.c | 14 +++++++------- libass/ass_render.h | 8 +++++--- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/libass/ass_bitmap.c b/libass/ass_bitmap.c index 1b858cc..527916f 100644 --- a/libass/ass_bitmap.c +++ b/libass/ass_bitmap.c @@ -168,10 +168,11 @@ bool ass_copy_bitmap(const BitmapEngine *engine, Bitmap *dst, const Bitmap *src) return true; } -bool ass_outline_to_bitmap(ASS_Renderer *render_priv, Bitmap *bm, +bool ass_outline_to_bitmap(RenderContext *state, Bitmap *bm, ASS_Outline *outline1, ASS_Outline *outline2) { - RasterizerData *rst = &render_priv->rasterizer; + ASS_Renderer *render_priv = state->renderer; + RasterizerData *rst = &state->rasterizer; if (outline1 && !ass_rasterizer_set_outline(rst, outline1, false)) { ass_msg(render_priv->library, MSGL_WARN, "Failed to process glyph outline!\n"); return false; diff --git a/libass/ass_bitmap.h b/libass/ass_bitmap.h index e21d100..90973e0 100644 --- a/libass/ass_bitmap.h +++ b/libass/ass_bitmap.h @@ -102,7 +102,9 @@ bool ass_realloc_bitmap(const BitmapEngine *engine, Bitmap *bm, int32_t w, int32 bool ass_copy_bitmap(const BitmapEngine *engine, Bitmap *dst, const Bitmap *src); void ass_free_bitmap(Bitmap *bm); -bool ass_outline_to_bitmap(ASS_Renderer *render_priv, Bitmap *bm, +struct render_context; + +bool ass_outline_to_bitmap(struct render_context *state, Bitmap *bm, ASS_Outline *outline1, ASS_Outline *outline2); void ass_synth_blur(const BitmapEngine *engine, Bitmap *bm, diff --git a/libass/ass_render.c b/libass/ass_render.c index 54bb7fa..cbc9e28 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -119,7 +119,7 @@ ASS_Renderer *ass_renderer_init(ASS_Library *library) priv->engine = &ass_bitmap_engine_c; #endif - if (!ass_rasterizer_init(priv->engine, &priv->rasterizer, RASTERIZER_PRECISION)) + if (!ass_rasterizer_init(priv->engine, &priv->state.rasterizer, RASTERIZER_PRECISION)) goto fail; priv->cache.font_cache = ass_font_cache_create(); @@ -175,7 +175,7 @@ void ass_renderer_done(ASS_Renderer *render_priv) ass_shaper_free(render_priv->state.shaper); ass_cache_done(render_priv->cache.font_cache); - ass_rasterizer_done(&render_priv->rasterizer); + ass_rasterizer_done(&render_priv->state.rasterizer); if (render_priv->fontselect) ass_fontselect_free(render_priv->fontselect); @@ -716,7 +716,7 @@ static void blend_vector_clip(RenderContext *state, ASS_Image *head) ass_cache_dec_ref(key.outline); return; } - Bitmap *clip_bm = ass_cache_get(render_priv->cache.bitmap_cache, &key, render_priv); + Bitmap *clip_bm = ass_cache_get(render_priv->cache.bitmap_cache, &key, state); if (!clip_bm) return; @@ -1410,7 +1410,7 @@ get_bitmap_glyph(RenderContext *state, GlyphInfo *info, ass_cache_dec_ref(info->outline); return; } - info->bm = ass_cache_get(render_priv->cache.bitmap_cache, &key, render_priv); + info->bm = ass_cache_get(render_priv->cache.bitmap_cache, &key, state); if (!info->bm || !info->bm->buffer) { ass_cache_dec_ref(info->bm); info->bm = NULL; @@ -1537,7 +1537,7 @@ get_bitmap_glyph(RenderContext *state, GlyphInfo *info, ass_cache_dec_ref(key.outline); return; } - info->bm_o = ass_cache_get(render_priv->cache.bitmap_cache, &key, render_priv); + info->bm_o = ass_cache_get(render_priv->cache.bitmap_cache, &key, state); if (!info->bm_o || !info->bm_o->buffer) { ass_cache_dec_ref(info->bm_o); info->bm_o = NULL; @@ -1548,7 +1548,7 @@ get_bitmap_glyph(RenderContext *state, GlyphInfo *info, size_t ass_bitmap_construct(void *key, void *value, void *priv) { - ASS_Renderer *render_priv = priv; + RenderContext *state = priv; BitmapHashKey *k = key; Bitmap *bm = value; @@ -1564,7 +1564,7 @@ size_t ass_bitmap_construct(void *key, void *value, void *priv) ass_outline_transform_2d(&outline[1], &k->outline->outline[1], m); } - if (!ass_outline_to_bitmap(render_priv, bm, &outline[0], &outline[1])) + if (!ass_outline_to_bitmap(state, bm, &outline[0], &outline[1])) memset(bm, 0, sizeof(*bm)); ass_outline_free(&outline[0]); ass_outline_free(&outline[1]); diff --git a/libass/ass_render.h b/libass/ass_render.h index 31204bd..fadbee1 100644 --- a/libass/ass_render.h +++ b/libass/ass_render.h @@ -208,10 +208,11 @@ typedef struct { // Renderer state. // Values like current font face, color, screen position, clipping and so on are stored here. -typedef struct { +struct render_context { ASS_Renderer *renderer; TextInfo *text_info; ASS_Shaper *shaper; + RasterizerData rasterizer; ASS_Event *event; ASS_Style *style; @@ -292,7 +293,9 @@ typedef struct { double border_scale_x; double border_scale_y; double blur_scale; -} RenderContext; +}; + +typedef struct render_context RenderContext; typedef struct { Cache *font_cache; @@ -334,7 +337,6 @@ struct ass_renderer { CacheStore cache; const BitmapEngine *engine; - RasterizerData rasterizer; ASS_Style user_override_style; }; -- cgit v1.2.3