annotate libass/ass_cache.c @ 33263:5f527a9a9521

Add an exit function. This function will allow performing clean-up operations. (MPlayer calls guiDone() before exiting, but only if the GUI has been initialized, i.e. if guiInit() has been called successfully. Any exit_player()/exit_player_with_rc() after GUI's cfg_read() until guiInit(), or any exit_player() during guiInit() itself will end the GUI without calling guiDone(). This exit function will at least handle abortions during guiInit() itself. It will be called twice in case of an guiExit() after GUI initialization - first directly, next by guiDone() via MPlayer's exit_player_with_rc().)
author ib
date Tue, 03 May 2011 12:19:22 +0000
parents e64df5862cea
children 88eebbbbd6a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20008
fa122b7c71c6 Add copyright notice and vim/emacs comments to libass and vf_ass.c.
eugeni
parents: 19965
diff changeset
1 /*
26723
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
2 * Copyright (C) 2006 Evgeniy Stepanov <eugeni.stepanov@gmail.com>
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
3 *
26738
588ce97b44f2 Speak of libass instead of MPlayer in the libass license headers.
diego
parents: 26723
diff changeset
4 * This file is part of libass.
26723
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
5 *
26738
588ce97b44f2 Speak of libass instead of MPlayer in the libass license headers.
diego
parents: 26723
diff changeset
6 * libass is free software; you can redistribute it and/or modify
26723
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
7 * it under the terms of the GNU General Public License as published by
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
9 * (at your option) any later version.
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
10 *
26738
588ce97b44f2 Speak of libass instead of MPlayer in the libass license headers.
diego
parents: 26723
diff changeset
11 * libass is distributed in the hope that it will be useful,
26723
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
14 * GNU General Public License for more details.
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
15 *
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
16 * You should have received a copy of the GNU General Public License along
26738
588ce97b44f2 Speak of libass instead of MPlayer in the libass license headers.
diego
parents: 26723
diff changeset
17 * with libass; if not, write to the Free Software Foundation, Inc.,
26723
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
0f892cd714b2 Use standard license header.
diego
parents: 23214
diff changeset
19 */
20008
fa122b7c71c6 Add copyright notice and vim/emacs comments to libass and vf_ass.c.
eugeni
parents: 19965
diff changeset
20
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
21 #include "config.h"
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
22
22292
2f3f27a014ef Add some missing includes.
eugeni
parents: 22215
diff changeset
23 #include <inttypes.h>
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
24 #include <ft2build.h>
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
25 #include FT_FREETYPE_H
19846
bcc792bfa431 Store bitmap glyphs in a separate struct, instead of FreeType's internal buffer.
eugeni
parents: 19545
diff changeset
26 #include FT_GLYPH_H
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
27
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
28 #include <assert.h>
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
29
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
30 #include "ass_utils.h"
21458
7af6c25a0cfc Keep embedded fonts in ass_library_t and perform actual disk write
eugeni
parents: 21348
diff changeset
31 #include "ass.h"
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
32 #include "ass_fontconfig.h"
21322
bb55f4f7b3cb Fix compilation broken in previous commit.
eugeni
parents: 21317
diff changeset
33 #include "ass_font.h"
19846
bcc792bfa431 Store bitmap glyphs in a separate struct, instead of FreeType's internal buffer.
eugeni
parents: 19545
diff changeset
34 #include "ass_bitmap.h"
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
35 #include "ass_cache.h"
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
36
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
37 static unsigned hashmap_hash(void *buf, size_t len)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
38 {
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
39 return fnv_32a_buf(buf, len, FNV1_32A_INIT);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
40 }
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
41
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
42 static int hashmap_key_compare(void *a, void *b, size_t size)
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
43 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
44 return memcmp(a, b, size) == 0;
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
45 }
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
46
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
47 static void hashmap_item_dtor(void *key, size_t key_size, void *value,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
48 size_t value_size)
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
49 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
50 free(key);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
51 free(value);
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
52 }
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
53
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
54 Hashmap *hashmap_init(ASS_Library *library, size_t key_size,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
55 size_t value_size, int nbuckets,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
56 HashmapItemDtor item_dtor,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
57 HashmapKeyCompare key_compare,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
58 HashmapHash hash)
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
59 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
60 Hashmap *map = calloc(1, sizeof(Hashmap));
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
61 map->library = library;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
62 map->nbuckets = nbuckets;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
63 map->key_size = key_size;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
64 map->value_size = value_size;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
65 map->root = calloc(nbuckets, sizeof(hashmap_item_p));
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
66 map->item_dtor = item_dtor ? item_dtor : hashmap_item_dtor;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
67 map->key_compare = key_compare ? key_compare : hashmap_key_compare;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
68 map->hash = hash ? hash : hashmap_hash;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
69 return map;
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
70 }
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
71
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
72 void hashmap_done(Hashmap *map)
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
73 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
74 int i;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
75 // print stats
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
76 if (map->count > 0 || map->hit_count + map->miss_count > 0)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
77 ass_msg(map->library, MSGL_V,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
78 "cache statistics: \n total accesses: %d\n hits: %d\n "
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
79 "misses: %d\n object count: %d",
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
80 map->hit_count + map->miss_count, map->hit_count,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
81 map->miss_count, map->count);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28860
diff changeset
82
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
83 for (i = 0; i < map->nbuckets; ++i) {
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
84 HashmapItem *item = map->root[i];
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
85 while (item) {
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
86 HashmapItem *next = item->next;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
87 map->item_dtor(item->key, map->key_size, item->value,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
88 map->value_size);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
89 free(item);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
90 item = next;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
91 }
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
92 }
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
93 free(map->root);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
94 free(map);
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
95 }
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
96
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
97 // does nothing if key already exists
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
98 void *hashmap_insert(Hashmap *map, void *key, void *value)
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
99 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
100 unsigned hash = map->hash(key, map->key_size);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
101 HashmapItem **next = map->root + (hash % map->nbuckets);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
102 while (*next) {
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
103 if (map->key_compare(key, (*next)->key, map->key_size))
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
104 return (*next)->value;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
105 next = &((*next)->next);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
106 assert(next);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
107 }
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
108 (*next) = malloc(sizeof(HashmapItem));
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
109 (*next)->key = malloc(map->key_size);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
110 (*next)->value = malloc(map->value_size);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
111 memcpy((*next)->key, key, map->key_size);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
112 memcpy((*next)->value, value, map->value_size);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
113 (*next)->next = 0;
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
114
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
115 map->count++;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
116 return (*next)->value;
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
117 }
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
118
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
119 void *hashmap_find(Hashmap *map, void *key)
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
120 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
121 unsigned hash = map->hash(key, map->key_size);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
122 HashmapItem *item = map->root[hash % map->nbuckets];
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
123 while (item) {
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
124 if (map->key_compare(key, item->key, map->key_size)) {
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
125 map->hit_count++;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
126 return item->value;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
127 }
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
128 item = item->next;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
129 }
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
130 map->miss_count++;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
131 return 0;
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
132 }
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
133
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
134 //---------------------------------
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
135 // font cache
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
136
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
137 static unsigned font_desc_hash(void *buf, size_t len)
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
138 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
139 ASS_FontDesc *desc = buf;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
140 unsigned hval;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
141 hval = fnv_32a_str(desc->family, FNV1_32A_INIT);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
142 hval = fnv_32a_buf(&desc->bold, sizeof(desc->bold), hval);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
143 hval = fnv_32a_buf(&desc->italic, sizeof(desc->italic), hval);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
144 return hval;
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
145 }
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
146
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
147 static int font_compare(void *key1, void *key2, size_t key_size)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
148 {
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
149 ASS_FontDesc *a = key1;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
150 ASS_FontDesc *b = key2;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
151 if (strcmp(a->family, b->family) != 0)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
152 return 0;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
153 if (a->bold != b->bold)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
154 return 0;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
155 if (a->italic != b->italic)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
156 return 0;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
157 if (a->treat_family_as_pattern != b->treat_family_as_pattern)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
158 return 0;
31853
e64df5862cea Import libass 0.9.10
greg
parents: 30200
diff changeset
159 if (a->vertical != b->vertical)
e64df5862cea Import libass 0.9.10
greg
parents: 30200
diff changeset
160 return 0;
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
161 return 1;
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
162 }
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
163
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
164 static void font_hash_dtor(void *key, size_t key_size, void *value,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
165 size_t value_size)
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
166 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
167 ass_font_free(value);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
168 free(key);
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
169 }
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
170
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
171 ASS_Font *ass_font_cache_find(Hashmap *font_cache,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
172 ASS_FontDesc *desc)
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
173 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
174 return hashmap_find(font_cache, desc);
21317
dcfd069efd8f Move ass_font_t allocation to ass_font.h.
eugeni
parents: 21279
diff changeset
175 }
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
176
21317
dcfd069efd8f Move ass_font_t allocation to ass_font.h.
eugeni
parents: 21279
diff changeset
177 /**
dcfd069efd8f Move ass_font_t allocation to ass_font.h.
eugeni
parents: 21279
diff changeset
178 * \brief Add a face struct to cache.
dcfd069efd8f Move ass_font_t allocation to ass_font.h.
eugeni
parents: 21279
diff changeset
179 * \param font font struct
dcfd069efd8f Move ass_font_t allocation to ass_font.h.
eugeni
parents: 21279
diff changeset
180 */
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
181 void *ass_font_cache_add(Hashmap *font_cache, ASS_Font *font)
21317
dcfd069efd8f Move ass_font_t allocation to ass_font.h.
eugeni
parents: 21279
diff changeset
182 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
183 return hashmap_insert(font_cache, &(font->desc), font);
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
184 }
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
185
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
186 Hashmap *ass_font_cache_init(ASS_Library *library)
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
187 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
188 Hashmap *font_cache;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
189 font_cache = hashmap_init(library, sizeof(ASS_FontDesc),
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
190 sizeof(ASS_Font),
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
191 1000,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
192 font_hash_dtor, font_compare, font_desc_hash);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
193 return font_cache;
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
194 }
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
195
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
196 void ass_font_cache_done(Hashmap *font_cache)
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
197 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
198 hashmap_done(font_cache);
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
199 }
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
200
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
201
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
202 // Create hash/compare functions for bitmap and glyph
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
203 #define CREATE_HASH_FUNCTIONS
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
204 #include "ass_cache_template.h"
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
205 #define CREATE_COMPARISON_FUNCTIONS
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
206 #include "ass_cache_template.h"
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
207
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
208 //---------------------------------
23017
f3b04984b0da Rename glyph cache to bitmap cache.
eugeni
parents: 23016
diff changeset
209 // bitmap cache
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
210
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
211 static void bitmap_hash_dtor(void *key, size_t key_size, void *value,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
212 size_t value_size)
23016
a1ced37f2ee5 Add generic hash map implementation.
eugeni
parents: 22292
diff changeset
213 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
214 BitmapHashValue *v = value;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
215 if (v->bm)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
216 ass_free_bitmap(v->bm);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
217 if (v->bm_o)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
218 ass_free_bitmap(v->bm_o);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
219 if (v->bm_s)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
220 ass_free_bitmap(v->bm_s);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
221 free(key);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
222 free(value);
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
223 }
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
224
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
225 void *cache_add_bitmap(Hashmap *bitmap_cache, BitmapHashKey *key,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
226 BitmapHashValue *val)
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
227 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
228 // Note: this is only an approximation
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
229 if (val->bm_o)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
230 bitmap_cache->cache_size += val->bm_o->w * val->bm_o->h * 3;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
231 else if (val->bm)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
232 bitmap_cache->cache_size += val->bm->w * val->bm->h * 3;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
233
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
234 return hashmap_insert(bitmap_cache, key, val);
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
235 }
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
236
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
237 /**
23017
f3b04984b0da Rename glyph cache to bitmap cache.
eugeni
parents: 23016
diff changeset
238 * \brief Get a bitmap from bitmap cache.
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
239 * \param key hash key
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
240 * \return requested hash val or 0 if not found
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28860
diff changeset
241 */
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
242 BitmapHashValue *cache_find_bitmap(Hashmap *bitmap_cache,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
243 BitmapHashKey *key)
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
244 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
245 return hashmap_find(bitmap_cache, key);
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
246 }
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
247
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
248 Hashmap *ass_bitmap_cache_init(ASS_Library *library)
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
249 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
250 Hashmap *bitmap_cache;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
251 bitmap_cache = hashmap_init(library,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
252 sizeof(BitmapHashKey),
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
253 sizeof(BitmapHashValue),
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
254 0xFFFF + 13,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
255 bitmap_hash_dtor, bitmap_compare,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
256 bitmap_hash);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
257 return bitmap_cache;
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
258 }
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
259
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
260 void ass_bitmap_cache_done(Hashmap *bitmap_cache)
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
261 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
262 hashmap_done(bitmap_cache);
18937
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
263 }
9e95ac641e77 Initial libass release (without mencoder support).
eugeni
parents:
diff changeset
264
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
265 Hashmap *ass_bitmap_cache_reset(Hashmap *bitmap_cache)
19539
64009ae411fb Reset glyph cache on reconfigure.
eugeni
parents: 18937
diff changeset
266 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
267 ASS_Library *lib = bitmap_cache->library;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
268
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
269 ass_bitmap_cache_done(bitmap_cache);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
270 return ass_bitmap_cache_init(lib);
19539
64009ae411fb Reset glyph cache on reconfigure.
eugeni
parents: 18937
diff changeset
271 }
64009ae411fb Reset glyph cache on reconfigure.
eugeni
parents: 18937
diff changeset
272
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
273 //---------------------------------
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
274 // glyph cache
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
275
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
276 static void glyph_hash_dtor(void *key, size_t key_size, void *value,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
277 size_t value_size)
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
278 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
279 GlyphHashValue *v = value;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
280 if (v->glyph)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
281 FT_Done_Glyph(v->glyph);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
282 if (v->outline_glyph)
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
283 FT_Done_Glyph(v->outline_glyph);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
284 free(key);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
285 free(value);
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
286 }
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
287
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
288 void *cache_add_glyph(Hashmap *glyph_cache, GlyphHashKey *key,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
289 GlyphHashValue *val)
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
290 {
31853
e64df5862cea Import libass 0.9.10
greg
parents: 30200
diff changeset
291 if (val->glyph && val->glyph->format == FT_GLYPH_FORMAT_BITMAP) {
e64df5862cea Import libass 0.9.10
greg
parents: 30200
diff changeset
292 FT_Bitmap *bitmap = &((FT_BitmapGlyph) val->glyph)->bitmap;
e64df5862cea Import libass 0.9.10
greg
parents: 30200
diff changeset
293 glyph_cache->cache_size += bitmap->rows * bitmap->pitch;
e64df5862cea Import libass 0.9.10
greg
parents: 30200
diff changeset
294 }
e64df5862cea Import libass 0.9.10
greg
parents: 30200
diff changeset
295
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
296 return hashmap_insert(glyph_cache, key, val);
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
297 }
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
298
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
299 /**
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
300 * \brief Get a glyph from glyph cache.
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
301 * \param key hash key
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
302 * \return requested hash val or 0 if not found
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28860
diff changeset
303 */
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
304 GlyphHashValue *cache_find_glyph(Hashmap *glyph_cache,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
305 GlyphHashKey *key)
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
306 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
307 return hashmap_find(glyph_cache, key);
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
308 }
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
309
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
310 Hashmap *ass_glyph_cache_init(ASS_Library *library)
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
311 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
312 Hashmap *glyph_cache;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
313 glyph_cache = hashmap_init(library, sizeof(GlyphHashKey),
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
314 sizeof(GlyphHashValue),
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
315 0xFFFF + 13,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
316 glyph_hash_dtor, glyph_compare, glyph_hash);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
317 return glyph_cache;
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
318 }
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
319
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
320 void ass_glyph_cache_done(Hashmap *glyph_cache)
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
321 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
322 hashmap_done(glyph_cache);
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
323 }
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
324
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
325 Hashmap *ass_glyph_cache_reset(Hashmap *glyph_cache)
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
326 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
327 ASS_Library *lib = glyph_cache->library;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
328
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
329 ass_glyph_cache_done(glyph_cache);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
330 return ass_glyph_cache_init(lib);
23018
a4517aa83565 Add outline glyph cache (unused yet).
eugeni
parents: 23017
diff changeset
331 }
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
332
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
333
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
334 //---------------------------------
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
335 // composite cache
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
336
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
337 static void composite_hash_dtor(void *key, size_t key_size, void *value,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
338 size_t value_size)
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
339 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
340 CompositeHashValue *v = value;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
341 free(v->a);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
342 free(v->b);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
343 free(key);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
344 free(value);
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
345 }
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
346
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
347 void *cache_add_composite(Hashmap *composite_cache,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
348 CompositeHashKey *key,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
349 CompositeHashValue *val)
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
350 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
351 return hashmap_insert(composite_cache, key, val);
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
352 }
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
353
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
354 /**
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
355 * \brief Get a composite bitmap from composite cache.
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
356 * \param key hash key
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
357 * \return requested hash val or 0 if not found
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
358 */
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
359 CompositeHashValue *cache_find_composite(Hashmap *composite_cache,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
360 CompositeHashKey *key)
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
361 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
362 return hashmap_find(composite_cache, key);
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
363 }
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
364
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
365 Hashmap *ass_composite_cache_init(ASS_Library *library)
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
366 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
367 Hashmap *composite_cache;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
368 composite_cache = hashmap_init(library, sizeof(CompositeHashKey),
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
369 sizeof(CompositeHashValue),
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
370 0xFFFF + 13,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
371 composite_hash_dtor, composite_compare,
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
372 composite_hash);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
373 return composite_cache;
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
374 }
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
375
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
376 void ass_composite_cache_done(Hashmap *composite_cache)
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
377 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
378 hashmap_done(composite_cache);
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
379 }
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
380
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
381 Hashmap *ass_composite_cache_reset(Hashmap *composite_cache)
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
382 {
30200
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
383 ASS_Library *lib = composite_cache->library;
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
384
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
385 ass_composite_cache_done(composite_cache);
48d020c5ceca Update internal libass copy to commit 8db4a5
greg
parents: 29263
diff changeset
386 return ass_composite_cache_init(lib);
28789
a0ce88ba2557 Combine adjacent overlapping, translucent glyph borders and shadows to
greg
parents: 26759
diff changeset
387 }