summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/documentation.html3
-rw-r--r--Gui/interface.c2
-rw-r--r--libmenu/vf_menu.c2
-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
-rw-r--r--mplayer.c6
8 files changed, 41 insertions, 23 deletions
diff --git a/DOCS/documentation.html b/DOCS/documentation.html
index 74fce4539d..60af81f301 100644
--- a/DOCS/documentation.html
+++ b/DOCS/documentation.html
@@ -960,8 +960,7 @@
<LI>use the font generator GIMP plugin at TOOLS/subfont-GIMP
(note: you must have HSI RAW plugin too, see URL below)</LI>
<LI>using a TrueType (TTF) font, by the means of the <B>freetype</B>
- library. Version 2.0.9 or greater is mandatory! You have to pass the
- <CODE>--enable-freetype</CODE> option to ./configure. Then you
+ library. Version 2.0.9 or greater is mandatory! Then you
have two methods:
<UL>
<LI>use the <CODE>-font /path/to/arial.ttf</CODE> option to specify
diff --git a/Gui/interface.c b/Gui/interface.c
index f4c93a1d34..9c62c28388 100644
--- a/Gui/interface.c
+++ b/Gui/interface.c
@@ -305,7 +305,7 @@ extern char ** vo_plugin_args;
void guiLoadFont( void )
{
#ifdef HAVE_FREETYPE
- load_font(vo_image_width, vo_image_height);
+ load_font_ft(vo_image_width, vo_image_height);
#else
if ( vo_font )
{
diff --git a/libmenu/vf_menu.c b/libmenu/vf_menu.c
index a69ba0c397..deba7b9043 100644
--- a/libmenu/vf_menu.c
+++ b/libmenu/vf_menu.c
@@ -244,7 +244,7 @@ static int config(struct vf_instance_s* vf, int width, int height, int d_width,
// here is the right place to get screen dimensions
if (force_load_font) {
force_load_font = 0;
- load_font(width,height);
+ load_font_ft(width,height);
}
#endif
return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
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
diff --git a/mplayer.c b/mplayer.c
index e97f0fbada..56333b181b 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -894,7 +894,6 @@ if(!parse_codec_cfg(get_path("codecs.conf"))){
//------ load global data first ------
#ifdef USE_OSD
-#ifndef HAVE_FREETYPE
// check font
if(font_name){
vo_font=read_font_desc(font_name,font_factor,verbose>1);
@@ -905,8 +904,9 @@ if(!parse_codec_cfg(get_path("codecs.conf"))){
if(!vo_font)
vo_font=read_font_desc(DATADIR"/font/font.desc",font_factor,verbose>1);
}
-#else
- init_freetype();
+#ifdef HAVE_FREETYPE
+ if (!vo_font)
+ init_freetype();
#endif
#endif
vo_init_osd();