changeset 30002:1d3f9930c663

Fix a crash when fontconfig is unable to select a font. e.g. if no config directory could be found.
author adrian
date Wed, 16 Dec 2009 11:11:31 +0000
parents 444f843a54ec
children e709ce5b5d34
files help/help_mp-en.h libvo/font_load_ft.c
diffstat 2 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/help/help_mp-en.h	Tue Dec 15 20:38:54 2009 +0000
+++ b/help/help_mp-en.h	Wed Dec 16 11:11:31 2009 +0000
@@ -856,6 +856,7 @@
 #define MSGTR_LIBVO_FONT_LOAD_FT_CannotPrepareOSDFont "Cannot prepare OSD font.\n"
 #define MSGTR_LIBVO_FONT_LOAD_FT_CannotGenerateTables "Cannot generate tables.\n"
 #define MSGTR_LIBVO_FONT_LOAD_FT_DoneFreeTypeFailed "FT_Done_FreeType failed.\n"
+#define MSGTR_LIBVO_FONT_LOAD_FT_FontconfigNoMatch "Fontconfig failed to select a font. Trying without fontconfig...\n"
 
 // sub.c
 #define MSGTR_VO_SUB_Seekbar "Seekbar"
--- a/libvo/font_load_ft.c	Tue Dec 15 20:38:54 2009 +0000
+++ b/libvo/font_load_ft.c	Wed Dec 16 11:11:31 2009 +0000
@@ -1144,6 +1144,7 @@
     FcChar8 *s;
     int face_index;
     FcBool scalable;
+    FcResult result;
 #endif
     font_desc_t *vo_font = *fontp;
     vo_image_width = width;
@@ -1162,7 +1163,8 @@
 	FcConfigSubstitute(0, fc_pattern, FcMatchPattern);
 	FcDefaultSubstitute(fc_pattern);
 	fc_pattern2 = fc_pattern;
-	fc_pattern = FcFontMatch(0, fc_pattern, 0);
+	fc_pattern = FcFontMatch(0, fc_pattern, &result);
+	if (result == FcResultMatch) {
 	FcPatternDestroy(fc_pattern2);
 	FcPatternGetBool(fc_pattern, FC_SCALABLE, 0, &scalable);
 	if (scalable != FcTrue) {
@@ -1179,8 +1181,11 @@
 	FcPatternGetInteger(fc_pattern, FC_INDEX, 0, &face_index);
 	*fontp=read_font_desc_ft(s, face_index, width, height, font_scale_factor);
 	FcPatternDestroy(fc_pattern);
+	return;
+	}
+	// Failed to match any font, try without fontconfig
+	mp_msg(MSGT_OSD, MSGL_ERR, MSGTR_LIBVO_FONT_LOAD_FT_FontconfigNoMatch);
     }
-    else
 #endif
     *fontp=read_font_desc_ft(font_name, 0, width, height, font_scale_factor);
 }