diff options
author | rcombs <rcombs@rcombs.me> | 2022-07-26 23:55:12 -0500 |
---|---|---|
committer | rcombs <rcombs@rcombs.me> | 2022-11-15 21:14:37 -0600 |
commit | b79678d8434c2d2fec71c7d41f24c2341572df3e (patch) | |
tree | 9a25ecfca58c24dbd05c56ecf1e445c9234ab1fe | |
parent | 1ff207aada6db91be3af00550518421bd4393492 (diff) | |
download | libass-b79678d8434c2d2fec71c7d41f24c2341572df3e.tar.bz2 libass-b79678d8434c2d2fec71c7d41f24c2341572df3e.tar.xz |
ass_shaper: move cache ownership to the renderer
-rw-r--r-- | libass/ass_render.c | 6 | ||||
-rw-r--r-- | libass/ass_render.h | 1 | ||||
-rw-r--r-- | libass/ass_render_api.c | 3 | ||||
-rw-r--r-- | libass/ass_shaper.c | 14 | ||||
-rw-r--r-- | libass/ass_shaper.h | 4 |
5 files changed, 12 insertions, 16 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index d6d96f1..dc50b32 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -98,7 +98,8 @@ ASS_Renderer *ass_renderer_init(ASS_Library *library) priv->cache.bitmap_cache = ass_bitmap_cache_create(); priv->cache.composite_cache = ass_composite_cache_create(); priv->cache.outline_cache = ass_outline_cache_create(); - if (!priv->cache.font_cache || !priv->cache.bitmap_cache || !priv->cache.composite_cache || !priv->cache.outline_cache) + priv->cache.metrics_cache = ass_glyph_metrics_cache_create(); + if (!priv->cache.font_cache || !priv->cache.bitmap_cache || !priv->cache.composite_cache || !priv->cache.outline_cache || !priv->cache.metrics_cache) goto fail; priv->cache.glyph_max = GLYPH_CACHE_MAX; @@ -124,7 +125,7 @@ ASS_Renderer *ass_renderer_init(ASS_Library *library) priv->settings.font_size_coeff = 1.; priv->settings.selective_style_overrides = ASS_OVERRIDE_BIT_SELECTIVE_FONT_SCALE; - if (!(priv->shaper = ass_shaper_new())) + if (!(priv->shaper = ass_shaper_new(priv->cache.metrics_cache))) goto fail; ass_shaper_info(library); @@ -152,6 +153,7 @@ void ass_renderer_done(ASS_Renderer *render_priv) ass_cache_done(render_priv->cache.composite_cache); 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->shaper); ass_cache_done(render_priv->cache.font_cache); diff --git a/libass/ass_render.h b/libass/ass_render.h index cf0eb41..cfbd8a3 100644 --- a/libass/ass_render.h +++ b/libass/ass_render.h @@ -296,6 +296,7 @@ typedef struct { Cache *outline_cache; Cache *bitmap_cache; Cache *composite_cache; + Cache *metrics_cache; size_t glyph_max; size_t bitmap_max_size; size_t composite_max_size; diff --git a/libass/ass_render_api.c b/libass/ass_render_api.c index c324395..30268c8 100644 --- a/libass/ass_render_api.c +++ b/libass/ass_render_api.c @@ -154,8 +154,7 @@ void ass_set_fonts(ASS_Renderer *priv, const char *default_font, ass_reconfigure(priv); ass_cache_empty(priv->cache.font_cache); - if (priv->shaper) - ass_shaper_empty_cache(priv->shaper); + ass_cache_empty(priv->cache.metrics_cache); if (priv->fontselect) ass_fontselect_free(priv->fontselect); diff --git a/libass/ass_shaper.c b/libass/ass_shaper.c index c8ffb07..db61963 100644 --- a/libass/ass_shaper.c +++ b/libass/ass_shaper.c @@ -125,7 +125,6 @@ static bool check_allocations(ASS_Shaper *shaper, size_t new_size, size_t n_pars */ void ass_shaper_free(ASS_Shaper *shaper) { - ass_cache_done(shaper->metrics_cache); free(shaper->features); free(shaper->ctypes); #ifdef USE_FRIBIDI_EX_API @@ -137,11 +136,6 @@ void ass_shaper_free(ASS_Shaper *shaper) free(shaper); } -void ass_shaper_empty_cache(ASS_Shaper *shaper) -{ - ass_cache_empty(shaper->metrics_cache); -} - void ass_shaper_font_data_free(ASS_ShaperFontData *priv) { int i; @@ -1036,8 +1030,10 @@ bool ass_shaper_shape(ASS_Shaper *shaper, TextInfo *text_info) /** * \brief Create a new shaper instance */ -ASS_Shaper *ass_shaper_new(void) +ASS_Shaper *ass_shaper_new(Cache *metrics_cache) { + assert(metrics_cache); + ASS_Shaper *shaper = calloc(sizeof(*shaper), 1); if (!shaper) return NULL; @@ -1046,9 +1042,7 @@ ASS_Shaper *ass_shaper_new(void) if (!init_features(shaper)) goto error; - shaper->metrics_cache = ass_glyph_metrics_cache_create(); - if (!shaper->metrics_cache) - goto error; + shaper->metrics_cache = metrics_cache; return shaper; diff --git a/libass/ass_shaper.h b/libass/ass_shaper.h index 0c7a11b..819a3fd 100644 --- a/libass/ass_shaper.h +++ b/libass/ass_shaper.h @@ -24,15 +24,15 @@ typedef struct ass_shaper ASS_Shaper; #include <fribidi.h> #include <stdbool.h> #include "ass_render.h" +#include "ass_cache.h" #if FRIBIDI_MAJOR_VERSION >= 1 #define USE_FRIBIDI_EX_API #endif void ass_shaper_info(ASS_Library *lib); -ASS_Shaper *ass_shaper_new(void); +ASS_Shaper *ass_shaper_new(Cache *metrics_cache); void ass_shaper_free(ASS_Shaper *shaper); -void ass_shaper_empty_cache(ASS_Shaper *shaper); void ass_shaper_set_kerning(ASS_Shaper *shaper, bool kern); void ass_shaper_find_runs(ASS_Shaper *shaper, ASS_Renderer *render_priv, GlyphInfo *glyphs, size_t len); |