diff options
Diffstat (limited to 'libass/ass_cache.c')
-rw-r--r-- | libass/ass_cache.c | 22 |
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)); } |