diff options
author | 11rcombs <rodger.combs@gmail.com> | 2014-01-25 19:06:12 -0600 |
---|---|---|
committer | 11rcombs <rodger.combs@gmail.com> | 2014-01-25 19:09:15 -0600 |
commit | 5dd56af2f97419ce5a72d1dab2e9c19b34c1dd57 (patch) | |
tree | 1997f519ae3d5f75a76a3cee3dd95034e513210a /libass/ass_cache.c | |
parent | fa3b6fa3ee1de42232f0513539af2464a3c9203a (diff) | |
download | libass-5dd56af2f97419ce5a72d1dab2e9c19b34c1dd57.tar.bz2 libass-5dd56af2f97419ce5a72d1dab2e9c19b34c1dd57.tar.xz |
Combine bitmaps before applying blur and shadow
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)); } |