summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2016-12-29 01:42:38 +0300
committerDr.Smile <vabnick@gmail.com>2016-12-29 02:07:34 +0300
commit3ba18f666e87321c28d4a7281f808947c0712465 (patch)
tree69246f105f2ac9424738debac311f4f7a773c85a
parent53fee0874ab43ec53c62b3d5455a812b6d346506 (diff)
downloadlibass-3ba18f666e87321c28d4a7281f808947c0712465.tar.bz2
libass-3ba18f666e87321c28d4a7281f808947c0712465.tar.xz
api: make ass_set_cache_limits() work on total bitmap cache sizes
Previously was possible to set only bitmap_max_size, now requested memory amount is divided between bitmap_max_size and composite_max_size.
-rw-r--r--libass/ass_render.h6
-rw-r--r--libass/ass_render_api.c14
2 files changed, 16 insertions, 4 deletions
diff --git a/libass/ass_render.h b/libass/ass_render.h
index fad554b..d009128 100644
--- a/libass/ass_render.h
+++ b/libass/ass_render.h
@@ -42,8 +42,10 @@
#include "ass_rasterizer.h"
#define GLYPH_CACHE_MAX 10000
-#define BITMAP_CACHE_MAX_SIZE 128 * 1048576
-#define COMPOSITE_CACHE_MAX_SIZE 64 * 1048576
+#define MEGABYTE (1024 * 1024)
+#define BITMAP_CACHE_MAX_SIZE (128 * MEGABYTE)
+#define COMPOSITE_CACHE_RATIO 2
+#define COMPOSITE_CACHE_MAX_SIZE (BITMAP_CACHE_MAX_SIZE / COMPOSITE_CACHE_RATIO)
#define PARSED_FADE (1<<0)
#define PARSED_A (1<<1)
diff --git a/libass/ass_render_api.c b/libass/ass_render_api.c
index c59c204..d4b55de 100644
--- a/libass/ass_render_api.c
+++ b/libass/ass_render_api.c
@@ -180,8 +180,18 @@ void ass_set_cache_limits(ASS_Renderer *render_priv, int glyph_max,
int bitmap_max)
{
render_priv->cache.glyph_max = glyph_max ? glyph_max : GLYPH_CACHE_MAX;
- render_priv->cache.bitmap_max_size = bitmap_max ? 1048576 * bitmap_max :
- BITMAP_CACHE_MAX_SIZE;
+
+ size_t bitmap_cache, composite_cache;
+ if (bitmap_max) {
+ bitmap_cache = MEGABYTE * (size_t) bitmap_max;
+ composite_cache = bitmap_cache / (COMPOSITE_CACHE_RATIO + 1);
+ bitmap_cache -= composite_cache;
+ } else {
+ bitmap_cache = BITMAP_CACHE_MAX_SIZE;
+ composite_cache = COMPOSITE_CACHE_MAX_SIZE;
+ }
+ render_priv->cache.bitmap_max_size = bitmap_cache;
+ render_priv->cache.composite_max_size = composite_cache;
}
ASS_FontProvider *