summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrcombs <rcombs@rcombs.me>2022-07-27 16:50:04 -0500
committerrcombs <rcombs@rcombs.me>2022-11-15 21:14:37 -0600
commit4943c18520c7d4a9a2f7fb5dc4cb45bd8004bbd3 (patch)
tree68e7c4b95478087c36c10bf58b3f16fb4284fb6d
parent63e592b3f4fce6ff7d5048d72e1937e1a74b882c (diff)
downloadlibass-4943c18520c7d4a9a2f7fb5dc4cb45bd8004bbd3.tar.bz2
libass-4943c18520c7d4a9a2f7fb5dc4cb45bd8004bbd3.tar.xz
ass_render: mover rasterizer into RenderContext
-rw-r--r--libass/ass_bitmap.c5
-rw-r--r--libass/ass_bitmap.h4
-rw-r--r--libass/ass_render.c14
-rw-r--r--libass/ass_render.h8
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;
};