summaryrefslogtreecommitdiffstats
path: root/libass/ass_cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'libass/ass_cache.c')
-rw-r--r--libass/ass_cache.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/libass/ass_cache.c b/libass/ass_cache.c
index 8234e5f..6baa924 100644
--- a/libass/ass_cache.c
+++ b/libass/ass_cache.c
@@ -125,12 +125,28 @@ static unsigned bitmap_compare (void *a, void *b, size_t key_size)
static void composite_destruct(void *key, void *value)
{
CompositeHashValue *v = value;
- free(v->a);
- free(v->b);
+ CompositeHashKey *k = key;
+ if (v->bm)
+ ass_free_bitmap(v->bm);
+ if (v->bm_o)
+ ass_free_bitmap(v->bm_o);
+ if (v->bm_s)
+ ass_free_bitmap(v->bm_s);
+ free(k->str);
free(key);
free(value);
}
+static size_t composite_size(void *value, size_t value_size)
+{
+ CompositeHashValue *val = value;
+ if (val->bm_o)
+ return val->bm_o->w * val->bm_o->h * 3;
+ else if (val->bm)
+ return val->bm->w * val->bm->h * 3;
+ return 0;
+}
+
// outline cache
static unsigned outline_hash(void *key, size_t key_size)
@@ -349,6 +365,6 @@ Cache *ass_bitmap_cache_create(void)
Cache *ass_composite_cache_create(void)
{
return ass_cache_create(composite_hash, composite_compare,
- composite_destruct, (ItemSize)NULL, sizeof(CompositeHashKey),
+ composite_destruct, composite_size, sizeof(CompositeHashKey),
sizeof(CompositeHashValue));
}