diff options
author | eugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-12-03 18:24:11 +0000 |
---|---|---|
committer | eugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-12-03 18:24:11 +0000 |
commit | 92256c07d1383814a69dcc6f8cfe55437a371b34 (patch) | |
tree | 8de70dd63452373731f3573ec640ef9a2cddffea /libass/ass_font.c | |
parent | f37cc953f5b5ff764edb0a858d81127cabf5cf59 (diff) | |
download | mpv-92256c07d1383814a69dcc6f8cfe55437a371b34.tar.bz2 mpv-92256c07d1383814a69dcc6f8cfe55437a371b34.tar.xz |
Open embedded fonts directly from memory.
FontConfig 2.4.2 (released yesterday) supports scanning fonts with
FcFreeTypeQueryFace without writing them to disk. With earlier FontConfig
versions, the old mechanism is used.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21476 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libass/ass_font.c')
-rw-r--r-- | libass/ass_font.c | 22 |
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); |