summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2010-08-01 03:42:17 +0200
committerGrigori Goronzy <greg@blackbox>2010-08-01 03:42:17 +0200
commit40c3574eb0714980697b7837e4e5457bd9076776 (patch)
tree2b9ab66a5a11816d9f263999397b7abcf6c842a2
parentec0d975158e5f3b1c6a60c44fb10171f1b3c1b32 (diff)
downloadlibass-40c3574eb0714980697b7837e4e5457bd9076776.tar.bz2
libass-40c3574eb0714980697b7837e4e5457bd9076776.tar.xz
refactor: extract cache check/management
-rw-r--r--libass/ass_render.c47
1 files changed, 27 insertions, 20 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 1fdbfe4..216e8d3 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -2302,6 +2302,32 @@ int ass_fonts_update(ASS_Renderer *render_priv)
}
/**
+ * \brief Check cache limits and reset cache if they are exceeded
+ */
+static void check_cache_limits(ASS_Renderer *priv, CacheStore *cache)
+{
+ if (cache->bitmap_cache->cache_size > cache->bitmap_max_size) {
+ ass_msg(priv->library, MSGL_V,
+ "Hitting hard bitmap cache limit (was: %ld bytes), "
+ "resetting.", (long) cache->bitmap_cache->cache_size);
+ cache->bitmap_cache = ass_bitmap_cache_reset(cache->bitmap_cache);
+ cache->composite_cache = ass_composite_cache_reset(
+ cache->composite_cache);
+ ass_free_images(priv->prev_images_root);
+ priv->prev_images_root = 0;
+ }
+
+ if (cache->glyph_cache->count > cache->glyph_max
+ || cache->glyph_cache->cache_size > cache->bitmap_max_size) {
+ ass_msg(priv->library, MSGL_V,
+ "Hitting hard glyph cache limit (was: %d glyphs, %ld bytes), "
+ "resetting.",
+ cache->glyph_cache->count, (long) cache->glyph_cache->cache_size);
+ cache->glyph_cache = ass_glyph_cache_reset(cache->glyph_cache);
+ }
+}
+
+/**
* \brief Start a new frame
*/
static int
@@ -2309,7 +2335,6 @@ ass_start_frame(ASS_Renderer *render_priv, ASS_Track *track,
long long now)
{
ASS_Settings *settings_priv = &render_priv->settings;
- CacheStore *cache = &render_priv->cache;
if (!render_priv->settings.frame_width
&& !render_priv->settings.frame_height)
@@ -2347,25 +2372,7 @@ ass_start_frame(ASS_Renderer *render_priv, ASS_Track *track,
render_priv->prev_images_root = render_priv->images_root;
render_priv->images_root = 0;
- if (cache->bitmap_cache->cache_size > cache->bitmap_max_size) {
- ass_msg(render_priv->library, MSGL_V,
- "Hitting hard bitmap cache limit (was: %ld bytes), "
- "resetting.", (long) cache->bitmap_cache->cache_size);
- cache->bitmap_cache = ass_bitmap_cache_reset(cache->bitmap_cache);
- cache->composite_cache = ass_composite_cache_reset(
- cache->composite_cache);
- ass_free_images(render_priv->prev_images_root);
- render_priv->prev_images_root = 0;
- }
-
- if (cache->glyph_cache->count > cache->glyph_max
- || cache->glyph_cache->cache_size > cache->bitmap_max_size) {
- ass_msg(render_priv->library, MSGL_V,
- "Hitting hard glyph cache limit (was: %d glyphs, %ld bytes), "
- "resetting.",
- cache->glyph_cache->count, (long) cache->glyph_cache->cache_size);
- cache->glyph_cache = ass_glyph_cache_reset(cache->glyph_cache);
- }
+ check_cache_limits(render_priv, &render_priv->cache);
return 0;
}