summaryrefslogtreecommitdiffstats
path: root/libass/ass_font.c
diff options
context:
space:
mode:
Diffstat (limited to 'libass/ass_font.c')
-rw-r--r--libass/ass_font.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/libass/ass_font.c b/libass/ass_font.c
index 176dbed6ba..80490fad6a 100644
--- a/libass/ass_font.c
+++ b/libass/ass_font.c
@@ -52,13 +52,23 @@ static void charmap_magic(FT_Face face)
}
}
-ass_font_t* ass_font_new(FT_Library ftlibrary, void* fc_priv, ass_font_desc_t* desc)
+static int find_font(ass_library_t* library, char* name)
+{
+ int i;
+ for (i = 0; i < library->num_fontdata; ++i)
+ if (strcasecmp(name, library->fontdata[i].name) == 0)
+ return i;
+ return -1;
+}
+
+ass_font_t* ass_font_new(ass_library_t* library, FT_Library ftlibrary, void* fc_priv, ass_font_desc_t* desc)
{
char* path;
int index;
FT_Face face;
int error;
ass_font_t* font;
+ int mem_idx;
font = ass_font_cache_find(desc);
if (font)
@@ -66,11 +76,21 @@ ass_font_t* ass_font_new(FT_Library ftlibrary, void* fc_priv, ass_font_desc_t* d
path = fontconfig_select(fc_priv, desc->family, desc->bold, desc->italic, &index);
+ mem_idx = find_font(library, path);
+ if (mem_idx >= 0) {
+ error = FT_New_Memory_Face(ftlibrary, library->fontdata[mem_idx].data,
+ library->fontdata[mem_idx].size, 0, &face);
+ if (error) {
+ mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_ErrorOpeningMemoryFont, path);
+ return 0;
+ }
+ } else {
error = FT_New_Face(ftlibrary, path, index, &face);
if (error) {
mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_ErrorOpeningFont, path, index);
return 0;
}
+ }
charmap_magic(face);