summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
Diffstat (limited to 'libvo')
-rw-r--r--libvo/font_load.c19
-rw-r--r--libvo/font_load.h16
-rw-r--r--libvo/font_load_ft.c12
-rw-r--r--libvo/sub.c4
4 files changed, 35 insertions, 16 deletions
diff --git a/libvo/font_load.c b/libvo/font_load.c
index 646817e0c1..82d8d6a81b 100644
--- a/libvo/font_load.c
+++ b/libvo/font_load.c
@@ -1,7 +1,5 @@
#include "config.h"
-#ifndef HAVE_FREETYPE
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -56,6 +54,7 @@ int i,j;
int chardb=0;
int fontdb=-1;
int version=0;
+int first=1;
desc=malloc(sizeof(font_desc_t));if(!desc) return NULL;
memset(desc,0,sizeof(font_desc_t));
@@ -92,6 +91,21 @@ while(fgets(sor,1020,f)){
int ec=' ';
int id=0;
sor[1020]=0;
+
+ /* skip files that look like: TTF (0x00, 0x01), PFM (0x00, 0x01), PFB
+ * (0x80, 0x01), PCF (0x01, 0x66), fon ("MZ"), gzipped (0x1f, 0x8b) */
+
+ if (first) {
+ if (!sor[0] || sor[1] == 1 || (sor[0] == 'M' && sor[1] == 'Z') || (sor[0] == 0x1f && sor[1] == 0x8b) || (sor[0] == 1 && sor[1] == 0x66)) {
+ printf("%s doesn't look like a font description, ignoring\n", fname);
+ fclose(f);
+ free(desc);
+ free(dn);
+ return NULL;
+ }
+ first = 0;
+ }
+
p[0]=d;++pdb;
while(1){
int c=*s++;
@@ -303,4 +317,3 @@ read_font_desc("high_arpi.desc",1);
}
#endif
-#endif /* HAVE_FREETYPE */
diff --git a/libvo/font_load.h b/libvo/font_load.h
index e4d4e83d2c..98517be1da 100644
--- a/libvo/font_load.h
+++ b/libvo/font_load.h
@@ -31,6 +31,7 @@ typedef struct {
short font[65536];
int start[65536]; // short is not enough for unicode fonts
short width[65536];
+ int freetype;
#ifdef HAVE_FREETYPE
int face_cnt;
@@ -78,23 +79,22 @@ extern int force_load_font;
int init_freetype();
int done_freetype();
-font_desc_t* read_font_desc(char* fname,int movie_width, int movie_height);
+font_desc_t* read_font_desc_ft(char* fname,int movie_width, int movie_height);
void free_font_desc(font_desc_t *desc);
void render_one_glyph(font_desc_t *desc, int c);
int kerning(font_desc_t *desc, int prevc, int c);
-void load_font(int width, int height);
+void load_font_ft(int width, int height);
#else
-raw_file* load_raw(char *name,int verbose);
-font_desc_t* read_font_desc(char* fname,float factor,int verbose);
-
-static void inline render_one_glyph(font_desc_t *desc, int c) {}
-static int inline kerning(font_desc_t *desc, int prevc, int c) { return 0; }
-static void inline load_font(int width, int height){}
+static void render_one_glyph(font_desc_t *desc, int c) {}
+static int kerning(font_desc_t *desc, int prevc, int c) { return 0; }
#endif
+raw_file* load_raw(char *name,int verbose);
+font_desc_t* read_font_desc(char* fname,float factor,int verbose);
+
#endif /* ! __MPLAYER_FONT_LOAD_H */
diff --git a/libvo/font_load_ft.c b/libvo/font_load_ft.c
index b829f6d00e..398e78b5a7 100644
--- a/libvo/font_load_ft.c
+++ b/libvo/font_load_ft.c
@@ -50,6 +50,8 @@ int vo_image_width = 0;
int vo_image_height = 0;
int force_load_font;
+int using_freetype = 0;
+
//// constants
static unsigned int const colors = 256;
static unsigned int const maxcolor = 255;
@@ -937,7 +939,7 @@ int kerning(font_desc_t *desc, int prevc, int c)
return f266ToInt(kern.x);
}
-font_desc_t* read_font_desc(char *fname, int movie_width, int movie_height)
+font_desc_t* read_font_desc_ft(char *fname, int movie_width, int movie_height)
{
font_desc_t *desc;
@@ -1086,12 +1088,16 @@ int init_freetype()
return -1;
}
fprintf(stderr, "init_freetype\n");
+ using_freetype = 1;
return 0;
}
int done_freetype()
{
int err;
+
+ if (!using_freetype)
+ return 0;
err = FT_Done_FreeType(library);
if (err) {
@@ -1102,7 +1108,7 @@ int done_freetype()
return 0;
}
-void load_font(int width, int height)
+void load_font_ft(int width, int height)
{
vo_image_width = width;
vo_image_height = height;
@@ -1113,7 +1119,7 @@ void load_font(int width, int height)
if (vo_font) free_font_desc(vo_font);
#ifdef USE_OSD
- vo_font=read_font_desc(font_name, width, height);
+ vo_font=read_font_desc_ft(font_name, width, height);
#endif
}
diff --git a/libvo/sub.c b/libvo/sub.c
index fe9385ba93..6bfb0d7d5c 100644
--- a/libvo/sub.c
+++ b/libvo/sub.c
@@ -526,9 +526,9 @@ int vo_update_osd(int dxs,int dys){
#ifdef HAVE_FREETYPE
// here is the right place to get screen dimensions
- if (force_load_font) {
+ if (!vo_font && force_load_font) {
force_load_font = 0;
- load_font(dxs, dys);
+ load_font_ft(dxs, dys);
}
#endif