summaryrefslogtreecommitdiffstats
path: root/libass/ass_fontselect.c
diff options
context:
space:
mode:
authorOneric <oneric@oneric.stub>2021-03-26 17:30:25 +0100
committerOneric <oneric@oneric.stub>2021-04-22 23:56:34 +0200
commit1140b6b885c89d37eef13dc1f31f144e9a76a4d7 (patch)
tree7fc25926f73032bed2e5c85702196128df70d91c /libass/ass_fontselect.c
parent006c46b5a0eee4d410b87f20b9c435dd252a7109 (diff)
downloadlibass-1140b6b885c89d37eef13dc1f31f144e9a76a4d7.tar.bz2
libass-1140b6b885c89d37eef13dc1f31f144e9a76a4d7.tar.xz
Fix embedded and memory fonts
Previously only both only worked when ass_set_fonts was called after all embedded and memory fonts were already added. Especially for embedded fonts this meant it won't work for most users, except mpv, including our own utilities, even if extract_fonts was set. Now that it works, enable extract_fonts in our utilities. GitHub: fixes #266
Diffstat (limited to 'libass/ass_fontselect.c')
-rw-r--r--libass/ass_fontselect.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/libass/ass_fontselect.c b/libass/ass_fontselect.c
index d8313c5..9d25425 100644
--- a/libass/ass_fontselect.c
+++ b/libass/ass_fontselect.c
@@ -990,7 +990,7 @@ static void process_fontdata(ASS_FontProvider *priv, ASS_Library *library,
*/
static ASS_FontProvider *
ass_embedded_fonts_add_provider(ASS_Library *lib, ASS_FontSelector *selector,
- FT_Library ftlib)
+ FT_Library ftlib, size_t *num_emfonts)
{
ASS_FontProvider *priv = ass_font_provider_new(selector, &ft_funcs, NULL);
if (priv == NULL)
@@ -1002,6 +1002,7 @@ ass_embedded_fonts_add_provider(ASS_Library *lib, ASS_FontSelector *selector,
for (size_t i = 0; i < lib->num_fontdata; i++)
process_fontdata(priv, lib, ftlib, i);
+ *num_emfonts = lib->num_fontdata;
return priv;
}
@@ -1035,9 +1036,8 @@ struct font_constructors font_constructors[] = {
* \return newly created font selector
*/
ASS_FontSelector *
-ass_fontselect_init(ASS_Library *library,
- FT_Library ftlibrary, const char *family,
- const char *path, const char *config,
+ass_fontselect_init(ASS_Library *library, FT_Library ftlibrary, size_t *num_emfonts,
+ const char *family, const char *path, const char *config,
ASS_DefaultFontProvider dfp)
{
ASS_FontSelector *priv = calloc(1, sizeof(ASS_FontSelector));
@@ -1050,7 +1050,7 @@ ass_fontselect_init(ASS_Library *library,
priv->index_default = 0;
priv->embedded_provider = ass_embedded_fonts_add_provider(library, priv,
- ftlibrary);
+ ftlibrary, num_emfonts);
if (priv->embedded_provider == NULL) {
ass_msg(library, MSGL_WARN, "failed to create embedded font provider");
@@ -1134,3 +1134,14 @@ void ass_map_font(const ASS_FontMapping *map, int len, const char *name,
}
}
}
+
+size_t ass_update_embedded_fonts(ASS_Library *lib, ASS_FontSelector *selector,
+ FT_Library ftlib, size_t num_loaded)
+{
+ if (!selector->embedded_provider)
+ return num_loaded;
+
+ for (size_t i = num_loaded; i < lib->num_fontdata; i++)
+ process_fontdata(selector->embedded_provider, lib, ftlib, i);
+ return lib->num_fontdata;
+}