diff options
author | rcombs <rcombs@rcombs.me> | 2023-02-12 21:38:24 -0600 |
---|---|---|
committer | rcombs <rcombs@rcombs.me> | 2024-04-25 00:51:07 -0700 |
commit | e420bf642c25f1ba2effa586f491ad37a706e040 (patch) | |
tree | 1da682adbf97af28c47b62f05b7b4694eb84bd65 /libass | |
parent | abf5f167120b770d0ad739db310f61d19504432c (diff) | |
download | libass-e420bf642c25f1ba2effa586f491ad37a706e040.tar.bz2 libass-e420bf642c25f1ba2effa586f491ad37a706e040.tar.xz |
ass_render: pull RenderContext init and cleanup out into functions
Diffstat (limited to 'libass')
-rw-r--r-- | libass/ass_render.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index a6bbdd1..afcbf42 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -76,6 +76,29 @@ static void text_info_done(TextInfo* text_info) free(text_info->combined_bitmaps); } +static bool render_context_init(RenderContext *state, ASS_Renderer *priv) +{ + state->renderer = priv; + + if (!text_info_init(&state->text_info)) + return false; + + if (!(state->shaper = ass_shaper_new(priv->cache.metrics_cache))) + return false; + + return ass_rasterizer_init(&priv->engine, &state->rasterizer, RASTERIZER_PRECISION); +} + +static void render_context_done(RenderContext *state) +{ + ass_rasterizer_done(&state->rasterizer); + + if (state->shaper) + ass_shaper_free(state->shaper); + + text_info_done(&state->text_info); +} + ASS_Renderer *ass_renderer_init(ASS_Library *library) { int error; @@ -112,9 +135,6 @@ ASS_Renderer *ass_renderer_init(ASS_Library *library) #endif priv->engine = ass_bitmap_engine_init(flags); - if (!ass_rasterizer_init(&priv->engine, &priv->state.rasterizer, RASTERIZER_PRECISION)) - goto fail; - priv->cache.font_cache = ass_font_cache_create(); priv->cache.bitmap_cache = ass_bitmap_cache_create(); priv->cache.composite_cache = ass_composite_cache_create(); @@ -127,19 +147,14 @@ ASS_Renderer *ass_renderer_init(ASS_Library *library) priv->cache.bitmap_max_size = BITMAP_CACHE_MAX_SIZE; priv->cache.composite_max_size = COMPOSITE_CACHE_MAX_SIZE; - if (!text_info_init(&priv->state.text_info)) + if (!render_context_init(&priv->state, priv)) goto fail; priv->user_override_style.Name = "OverrideStyle"; // name insignificant - priv->state.renderer = priv; - priv->settings.font_size_coeff = 1.; priv->settings.selective_style_overrides = ASS_OVERRIDE_BIT_SELECTIVE_FONT_SCALE; - if (!(priv->state.shaper = ass_shaper_new(priv->cache.metrics_cache))) - goto fail; - ass_shaper_info(library); priv->settings.shaper = ASS_SHAPING_COMPLEX; @@ -166,18 +181,15 @@ void ass_renderer_done(ASS_Renderer *render_priv) ass_cache_done(render_priv->cache.bitmap_cache); ass_cache_done(render_priv->cache.outline_cache); ass_cache_done(render_priv->cache.metrics_cache); - ass_shaper_free(render_priv->state.shaper); ass_cache_done(render_priv->cache.font_cache); - ass_rasterizer_done(&render_priv->state.rasterizer); - if (render_priv->fontselect) ass_fontselect_free(render_priv->fontselect); if (render_priv->ftlibrary) FT_Done_FreeType(render_priv->ftlibrary); free(render_priv->eimg); - text_info_done(&render_priv->state.text_info); + render_context_done(&render_priv->state); free(render_priv->settings.default_font); free(render_priv->settings.default_family); |