changeset 8635:81dbd28ef7c0

these patches let ,,oldstyle'' and freetype subtitle renderers live together happily. if an oldstyle subtitle (font.desc) is found, it will be used. otherwise mplayer will choose subfont.ttf, if freetype was detected during ./configure. (also you can use -font /path/to/font.desc and -font /path/to/foobar.ttf too) patch-set by Wojtek Kaniewski <wojtekka@bydg.pdi.net>
author arpi
date Sun, 29 Dec 2002 14:59:23 +0000
parents a8c4246b6869
children db4a1b1254cb
files DOCS/documentation.html Gui/interface.c libmenu/vf_menu.c libvo/font_load.c libvo/font_load.h libvo/font_load_ft.c libvo/sub.c mplayer.c
diffstat 8 files changed, 41 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/DOCS/documentation.html	Sun Dec 29 14:36:56 2002 +0000
+++ b/DOCS/documentation.html	Sun Dec 29 14:59:23 2002 +0000
@@ -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
--- a/Gui/interface.c	Sun Dec 29 14:36:56 2002 +0000
+++ b/Gui/interface.c	Sun Dec 29 14:59:23 2002 +0000
@@ -305,7 +305,7 @@
 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 )
   {
--- a/libmenu/vf_menu.c	Sun Dec 29 14:36:56 2002 +0000
+++ b/libmenu/vf_menu.c	Sun Dec 29 14:59:23 2002 +0000
@@ -244,7 +244,7 @@
   // 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);
--- a/libvo/font_load.c	Sun Dec 29 14:36:56 2002 +0000
+++ b/libvo/font_load.c	Sun Dec 29 14:59:23 2002 +0000
@@ -1,7 +1,5 @@
 #include "config.h"
 
-#ifndef HAVE_FREETYPE
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -56,6 +54,7 @@
 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 @@
   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 @@
 }
 #endif
 
-#endif /* HAVE_FREETYPE */
--- a/libvo/font_load.h	Sun Dec 29 14:36:56 2002 +0000
+++ b/libvo/font_load.h	Sun Dec 29 14:59:23 2002 +0000
@@ -31,6 +31,7 @@
     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 @@
 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
 
+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);
 
-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){}
-
-#endif
-
 #endif /* ! __MPLAYER_FONT_LOAD_H */
--- a/libvo/font_load_ft.c	Sun Dec 29 14:36:56 2002 +0000
+++ b/libvo/font_load_ft.c	Sun Dec 29 14:59:23 2002 +0000
@@ -50,6 +50,8 @@
 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 @@
     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 @@
 	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 @@
     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 @@
     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
 }
 
--- a/libvo/sub.c	Sun Dec 29 14:36:56 2002 +0000
+++ b/libvo/sub.c	Sun Dec 29 14:59:23 2002 +0000
@@ -526,9 +526,9 @@
 
 #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
 
--- a/mplayer.c	Sun Dec 29 14:36:56 2002 +0000
+++ b/mplayer.c	Sun Dec 29 14:59:23 2002 +0000
@@ -894,7 +894,6 @@
 //------ 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(!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();