diff options
author | eugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-04-20 23:04:21 +0000 |
---|---|---|
committer | eugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-04-20 23:04:21 +0000 |
commit | 5b0e4436fc4416115aeb36a675314d4fd3925e1d (patch) | |
tree | 4d2a7cbb326ce5d0c088eb2a137cffc2aa4fc86e /libass/ass_cache.c | |
parent | 6c412d239ba1c2dc2484dc49392ab50cc6b2d3fb (diff) | |
download | mpv-5b0e4436fc4416115aeb36a675314d4fd3925e1d.tar.bz2 mpv-5b0e4436fc4416115aeb36a675314d4fd3925e1d.tar.xz |
Add outline glyph cache (unused yet).
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23036 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libass/ass_cache.c')
-rw-r--r-- | libass/ass_cache.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/libass/ass_cache.c b/libass/ass_cache.c index f4756b54e1..50ae7acf10 100644 --- a/libass/ass_cache.c +++ b/libass/ass_cache.c @@ -265,3 +265,49 @@ void ass_bitmap_cache_reset(void) ass_bitmap_cache_init(); } +//--------------------------------- +// glyph cache + +hashmap_t* glyph_cache; + +static void glyph_hash_dtor(void* key, size_t key_size, void* value, size_t value_size) +{ + glyph_hash_val_t* v = value; + if (v->glyph) FT_Done_Glyph(v->glyph); + free(key); + free(value); +} + +void cache_add_glyph(glyph_hash_key_t* key, glyph_hash_val_t* val) +{ + hashmap_insert(glyph_cache, key, val); +} + +/** + * \brief Get a glyph from glyph cache. + * \param key hash key + * \return requested hash val or 0 if not found +*/ +glyph_hash_val_t* cache_find_glyph(glyph_hash_key_t* key) +{ + return hashmap_find(glyph_cache, key); +} + +void ass_glyph_cache_init(void) +{ + glyph_cache = hashmap_init(sizeof(glyph_hash_key_t), + sizeof(glyph_hash_val_t), + 0xFFFF + 13, + glyph_hash_dtor, NULL, NULL); +} + +void ass_glyph_cache_done(void) +{ + hashmap_done(glyph_cache); +} + +void ass_glyph_cache_reset(void) +{ + ass_glyph_cache_done(); + ass_glyph_cache_init(); +} |