annotate libvo/font_load.c @ 14742:76d461a061df

Unified colorkey code for vo xv and vo xvmc. Made the code also more flexible. Colorkey drawing is now by default done as proposed by Marko Macek. Patch also approved by iive.
author al
date Sun, 20 Feb 2005 22:43:25 +0000
parents de6ed5d2805d
children b8be9bedc108
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents: 5928
diff changeset
1 #include "config.h"
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents: 5928
diff changeset
2
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
3 #include <stdio.h>
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
4 #include <stdlib.h>
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
5 #include <string.h>
1446
a49fd85fc431 DATADIR/font/ patch by Adam Tla/lka atlka@pg.gda.pl
arpi
parents: 1359
diff changeset
6 #include <sys/types.h>
a49fd85fc431 DATADIR/font/ patch by Adam Tla/lka atlka@pg.gda.pl
arpi
parents: 1359
diff changeset
7 #include <sys/stat.h>
a49fd85fc431 DATADIR/font/ patch by Adam Tla/lka atlka@pg.gda.pl
arpi
parents: 1359
diff changeset
8 #include <unistd.h>
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
9
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
10 #include "font_load.h"
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
11 #include "mp_msg.h"
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
12
2476
a6c5a537f30a a few warning fixes (missing #include's)
pl
parents: 2238
diff changeset
13 extern char *get_path ( char * );
216
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
14
339
e7e89cd4169f printf's only if verbose>1
arpi_esp
parents: 250
diff changeset
15 raw_file* load_raw(char *name,int verbose){
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
16 int bpp;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
17 raw_file* raw=malloc(sizeof(raw_file));
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
18 unsigned char head[32];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
19 FILE *f=fopen(name,"rb");
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
20 if(!f) return NULL; // can't open
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
21 if(fread(head,32,1,f)<1) return NULL; // too small
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
22 if(memcmp(head,"mhwanh",6)) return NULL; // not raw file
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
23 raw->w=head[8]*256+head[9];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
24 raw->h=head[10]*256+head[11];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
25 raw->c=head[12]*256+head[13];
5928
48e91dc9534b .raw width>=65536 support by Georgi Georgiev <chutz@chubaka.homeip.net>
arpi
parents: 2476
diff changeset
26 if(raw->w == 0) // 2 bytes were not enough for the width... read 4 bytes from the end of the header
48e91dc9534b .raw width>=65536 support by Georgi Georgiev <chutz@chubaka.homeip.net>
arpi
parents: 2476
diff changeset
27 raw->w = ((head[28]*0x100 + head[29])*0x100 + head[30])*0x100 + head[31];
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
28 if(raw->c>256) return NULL; // too many colors!?
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
29 mp_msg(MSGT_OSD, MSGL_DBG2, "RAW: %s %d x %d, %d colors\n",name,raw->w,raw->h,raw->c);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
30 if(raw->c){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
31 raw->pal=malloc(raw->c*3);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
32 fread(raw->pal,3,raw->c,f);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
33 bpp=1;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
34 } else {
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
35 raw->pal=NULL;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
36 bpp=3;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
37 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
38 raw->bmp=malloc(raw->h*raw->w*bpp);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
39 fread(raw->bmp,raw->h*raw->w*bpp,1,f);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
40 fclose(f);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
41 return raw;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
42 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
43
728
138d38a5915a fixed extern
arpi_esp
parents: 727
diff changeset
44 extern int sub_unicode;
138d38a5915a fixed extern
arpi_esp
parents: 727
diff changeset
45
339
e7e89cd4169f printf's only if verbose>1
arpi_esp
parents: 250
diff changeset
46 font_desc_t* read_font_desc(char* fname,float factor,int verbose){
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
47 unsigned char sor[1024];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
48 unsigned char sor2[1024];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
49 font_desc_t *desc;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
50 FILE *f;
2222
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
51 char *dn;
1446
a49fd85fc431 DATADIR/font/ patch by Adam Tla/lka atlka@pg.gda.pl
arpi
parents: 1359
diff changeset
52 struct stat fstate;
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
53 char section[64];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
54 int i,j;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
55 int chardb=0;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
56 int fontdb=-1;
214
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
57 int version=0;
8635
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 7122
diff changeset
58 int first=1;
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
59
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
60 desc=malloc(sizeof(font_desc_t));if(!desc) goto fail_out;
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
61 memset(desc,0,sizeof(font_desc_t));
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
62
14065
de6ed5d2805d more verbosity spam fixes
rfelker
parents: 13897
diff changeset
63 f=fopen(fname,"rt");if(!f){ mp_msg(MSGT_OSD, MSGL_V, "font: can't open file: %s\n",fname); goto fail_out;}
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
64
2222
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
65 i = strlen (fname) - 9;
2223
560267b2ede8 cosmetic changes
atlka
parents: 2222
diff changeset
66 if ((dn = malloc(i+1))){
2222
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
67 strncpy (dn, fname, i);
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
68 dn[i]='\0';
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
69 }
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
70
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
71 desc->fpath = dn; // search in the same dir as fonts.desc
1446
a49fd85fc431 DATADIR/font/ patch by Adam Tla/lka atlka@pg.gda.pl
arpi
parents: 1359
diff changeset
72
2222
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
73 // desc->fpath=get_path("font/");
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
74 // if (stat(desc->fpath, &fstate)!=0) desc->fpath=DATADIR"/font";
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
75
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
76
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
77
1446
a49fd85fc431 DATADIR/font/ patch by Adam Tla/lka atlka@pg.gda.pl
arpi
parents: 1359
diff changeset
78
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
79 // set up some defaults, and erase table
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
80 desc->charspace=2;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
81 desc->spacewidth=12;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
82 desc->height=0;
12609
4be019266884 array initialization fix by SungKwanKang <ksquarekr at yahoo.com>
faust3
parents: 10272
diff changeset
83 for(i=0;i<65536;i++) desc->start[i]=desc->width[i]=desc->font[i]=-1;
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
84
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
85 section[0]=0;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
86
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
87 while(fgets(sor,1020,f)){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
88 unsigned char* p[8];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
89 int pdb=0;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
90 unsigned char *s=sor;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
91 unsigned char *d=sor2;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
92 int ec=' ';
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
93 int id=0;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
94 sor[1020]=0;
8635
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 7122
diff changeset
95
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 7122
diff changeset
96 /* skip files that look like: TTF (0x00, 0x01), PFM (0x00, 0x01), PFB
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 7122
diff changeset
97 * (0x80, 0x01), PCF (0x01, 0x66), fon ("MZ"), gzipped (0x1f, 0x8b) */
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 7122
diff changeset
98
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 7122
diff changeset
99 if (first) {
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 7122
diff changeset
100 if (!sor[0] || sor[1] == 1 || (sor[0] == 'M' && sor[1] == 'Z') || (sor[0] == 0x1f && sor[1] == 0x8b) || (sor[0] == 1 && sor[1] == 0x66)) {
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
101 mp_msg(MSGT_OSD, MSGL_ERR, "%s doesn't look like a font description, ignoring.\n", fname);
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
102 goto fail_out;
8635
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 7122
diff changeset
103 }
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 7122
diff changeset
104 first = 0;
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 7122
diff changeset
105 }
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 7122
diff changeset
106
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
107 p[0]=d;++pdb;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
108 while(1){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
109 int c=*s++;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
110 if(c==0 || c==13 || c==10) break;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
111 if(!id){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
112 if(c==39 || c==34){ id=c;continue;} // idezojel
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
113 if(c==';' || c=='#') break;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
114 if(c==9) c=' ';
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
115 if(c==' '){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
116 if(ec==' ') continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
117 *d=0; ++d;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
118 p[pdb]=d;++pdb;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
119 if(pdb>=8) break;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
120 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
121 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
122 } else {
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
123 if(id==c){ id=0;continue;} // idezojel
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
124
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
125 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
126 *d=c;d++;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
127 ec=c;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
128 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
129 if(d==sor2) continue; // skip empty lines
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
130 *d=0;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
131
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
132 // printf("params=%d sor=%s\n",pdb,sor);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
133 // for(i=0;i<pdb;i++) printf(" param %d = '%s'\n",i,p[i]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
134
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
135 if(pdb==1 && p[0][0]=='['){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
136 int len=strlen(p[0]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
137 if(len && len<63 && p[0][len-1]==']'){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
138 strcpy(section,p[0]);
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
139 mp_msg(MSGT_OSD, MSGL_DBG2, "font: Reading section: %s\n",section);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
140 if(strcmp(section,"[files]")==0){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
141 ++fontdb;
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
142 if(fontdb>=16){ mp_msg(MSGT_OSD, MSGL_ERR, "font: Too many bitmaps defined.\n");goto fail_out;}
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
143 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
144 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
145 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
146 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
147
1353
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
148 if(strcmp(section,"[fpath]")==0){
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
149 if(pdb==1){
2222
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
150 if (desc->fpath)
ddf897c38fb1 read font files from the same dir as font.desc or as specified in font.desc
atlka
parents: 1446
diff changeset
151 free (desc->fpath); // release previously allocated memory
1353
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
152 desc->fpath=strdup(p[0]);
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
153 continue;
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
154 }
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
155 } else
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
156
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
157 if(strcmp(section,"[files]")==0){
10272
7b0bc557987b renames: DATADIR->MPLAYER_DATADIR, CONFDIR->MPLAYER_CONFDIR, LIBDIR->MPLAYER_LIBDIR
arpi
parents: 8635
diff changeset
158 char *default_dir=MPLAYER_DATADIR "/font";
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
159 if(pdb==2 && strcmp(p[0],"alpha")==0){
1353
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
160 char *cp;
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
161 if (!(cp=malloc(strlen(desc->fpath)+strlen(p[1])+2))) goto fail_out;
1353
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
162
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
163 snprintf(cp,strlen(desc->fpath)+strlen(p[1])+2,"%s/%s",
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
164 desc->fpath,p[1]);
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
165 if(!((desc->pic_a[fontdb]=load_raw(cp,verbose)))){
216
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
166 free(cp);
2238
be4160d7db48 if not found using fpath try to load font bitmaps from default dir
atlka
parents: 2223
diff changeset
167 if (!(cp=malloc(strlen(default_dir)+strlen(p[1])+2)))
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
168 goto fail_out;
2238
be4160d7db48 if not found using fpath try to load font bitmaps from default dir
atlka
parents: 2223
diff changeset
169 snprintf(cp,strlen(default_dir)+strlen(p[1])+2,"%s/%s",
be4160d7db48 if not found using fpath try to load font bitmaps from default dir
atlka
parents: 2223
diff changeset
170 default_dir,p[1]);
be4160d7db48 if not found using fpath try to load font bitmaps from default dir
atlka
parents: 2223
diff changeset
171 if (!((desc->pic_a[fontdb]=load_raw(cp,verbose)))){
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
172 mp_msg(MSGT_OSD, MSGL_ERR, "Can't load font bitmap: %s\n",p[1]);
2238
be4160d7db48 if not found using fpath try to load font bitmaps from default dir
atlka
parents: 2223
diff changeset
173 free(cp);
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
174 goto fail_out;
2238
be4160d7db48 if not found using fpath try to load font bitmaps from default dir
atlka
parents: 2223
diff changeset
175 }
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
176 }
216
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
177 free(cp);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
178 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
179 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
180 if(pdb==2 && strcmp(p[0],"bitmap")==0){
1353
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
181 char *cp;
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
182 if (!(cp=malloc(strlen(desc->fpath)+strlen(p[1])+2))) goto fail_out;
1353
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
183
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
184 snprintf(cp,strlen(desc->fpath)+strlen(p[1])+2,"%s/%s",
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
185 desc->fpath,p[1]);
c3e3b0ae4d06 Applied DATADIR patch by Vladimir Kushnir
arpi
parents: 947
diff changeset
186 if(!((desc->pic_b[fontdb]=load_raw(cp,verbose)))){
216
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
187 free(cp);
2238
be4160d7db48 if not found using fpath try to load font bitmaps from default dir
atlka
parents: 2223
diff changeset
188 if (!(cp=malloc(strlen(default_dir)+strlen(p[1])+2)))
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
189 goto fail_out;
2238
be4160d7db48 if not found using fpath try to load font bitmaps from default dir
atlka
parents: 2223
diff changeset
190 snprintf(cp,strlen(default_dir)+strlen(p[1])+2,"%s/%s",
be4160d7db48 if not found using fpath try to load font bitmaps from default dir
atlka
parents: 2223
diff changeset
191 default_dir,p[1]);
be4160d7db48 if not found using fpath try to load font bitmaps from default dir
atlka
parents: 2223
diff changeset
192 if (!((desc->pic_b[fontdb]=load_raw(cp,verbose)))){
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
193 mp_msg(MSGT_OSD, MSGL_ERR, "Can't load font bitmap: %s\n",p[1]);
2238
be4160d7db48 if not found using fpath try to load font bitmaps from default dir
atlka
parents: 2223
diff changeset
194 free(cp);
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
195 goto fail_out;
2238
be4160d7db48 if not found using fpath try to load font bitmaps from default dir
atlka
parents: 2223
diff changeset
196 }
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
197 }
216
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
198 free(cp);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
199 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
200 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
201 } else
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
202
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
203 if(strcmp(section,"[info]")==0){
214
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
204 if(pdb==2 && strcmp(p[0],"name")==0){
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
205 desc->name=strdup(p[1]);
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
206 continue;
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
207 }
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
208 if(pdb==2 && strcmp(p[0],"descversion")==0){
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
209 version=atoi(p[1]);
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
210 continue;
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
211 }
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
212 if(pdb==2 && strcmp(p[0],"spacewidth")==0){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
213 desc->spacewidth=atoi(p[1]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
214 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
215 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
216 if(pdb==2 && strcmp(p[0],"charspace")==0){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
217 desc->charspace=atoi(p[1]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
218 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
219 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
220 if(pdb==2 && strcmp(p[0],"height")==0){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
221 desc->height=atoi(p[1]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
222 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
223 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
224 } else
214
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
225
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
226 if(strcmp(section,"[characters]")==0){
219
bc5c75b7a401 hex charcode support
arpi_esp
parents: 217
diff changeset
227 if(pdb==3){
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
228 int chr=p[0][0];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
229 int start=atoi(p[1]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
230 int end=atoi(p[2]);
727
cc208ebcb9f6 Deals with unicode/nounicode.
atmosfear
parents: 706
diff changeset
231 if(sub_unicode && (chr>=0x80)) chr=(chr<<8)+p[0][1];
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 340
diff changeset
232 else if(strlen(p[0])!=1) chr=strtol(p[0],NULL,0);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
233 if(end<start) {
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
234 mp_msg(MSGT_OSD, MSGL_WARN, "error in font desc: end<start for char '%c'\n",chr);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
235 } else {
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
236 desc->start[chr]=start;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
237 desc->width[chr]=end-start+1;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
238 desc->font[chr]=fontdb;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
239 // printf("char %d '%c' start=%d width=%d\n",chr,chr,desc->start[chr],desc->width[chr]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
240 ++chardb;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
241 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
242 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
243 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
244 }
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
245 mp_msg(MSGT_OSD, MSGL_ERR, "Syntax error in font desc: %s",sor);
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
246 goto fail_out;
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
247
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
248 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
249 fclose(f);
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
250 f = NULL;
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
251
12793
a9429d90157a avoid using corrupted font descriptions patch by Daniel von Dincklage <danielvd+mpl@cs.colorado.edu>
faust3
parents: 12609
diff changeset
252 if (first == 1) {
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
253 mp_msg(MSGT_OSD, MSGL_ERR, "%s is empty or a directory, ignoring.\n", fname);
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
254 goto fail_out;
12793
a9429d90157a avoid using corrupted font descriptions patch by Daniel von Dincklage <danielvd+mpl@cs.colorado.edu>
faust3
parents: 12609
diff changeset
255 }
a9429d90157a avoid using corrupted font descriptions patch by Daniel von Dincklage <danielvd+mpl@cs.colorado.edu>
faust3
parents: 12609
diff changeset
256
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
257 //printf("font: pos of U = %d\n",desc->start[218]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
258
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
259 for(i=0;i<=fontdb;i++){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
260 if(!desc->pic_a[i] || !desc->pic_b[i]){
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
261 mp_msg(MSGT_OSD, MSGL_ERR, "font: Missing bitmap(s) for sub-font #%d\n",i);
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
262 goto fail_out;
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
263 }
249
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
264 //if(factor!=1.0f)
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
265 {
215
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
266 // re-sample alpha
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
267 int f=factor*256.0f;
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
268 int size=desc->pic_a[i]->w*desc->pic_a[i]->h;
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
269 int j;
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
270 mp_msg(MSGT_OSD, MSGL_DBG2, "font: resampling alpha by factor %5.3f (%d) ",factor,f);fflush(stdout);
215
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
271 for(j=0;j<size;j++){
947
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
272 int x=desc->pic_a[i]->bmp[j]; // alpha
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
273 int y=desc->pic_b[i]->bmp[j]; // bitmap
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
274
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
275 #ifdef FAST_OSD
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
276 x=(x<(255-f))?0:1;
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
277 #else
249
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
278
250
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
279 x=255-((x*f)>>8); // scale
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
280 //if(x<0) x=0; else if(x>255) x=255;
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
281 //x^=255; // invert
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
282
249
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
283 if(x+y>255) x=255-y; // to avoid overflows
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
284
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
285 //x=0;
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
286 //x=((x*f*(255-y))>>16);
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
287 //x=((x*f*(255-y))>>16)+y;
215
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
288 //x=(x*f)>>8;if(x<y) x=y;
250
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
289
249
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
290 if(x<1) x=1; else
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
291 if(x>=252) x=0;
947
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
292 #endif
250
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
293
215
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
294 desc->pic_a[i]->bmp[j]=x;
250
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
295 // desc->pic_b[i]->bmp[j]=0; // hack
215
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
296 }
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
297 mp_msg(MSGT_OSD, MSGL_DBG2, "DONE!\n");
215
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
298 }
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
299 if(!desc->height) desc->height=desc->pic_a[i]->h;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
300 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
301
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
302 j='_';if(desc->font[j]<0) j='?';
12609
4be019266884 array initialization fix by SungKwanKang <ksquarekr at yahoo.com>
faust3
parents: 10272
diff changeset
303 for(i=0;i<65536;i++)
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
304 if(desc->font[i]<0){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
305 desc->start[i]=desc->start[j];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
306 desc->width[i]=desc->width[j];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
307 desc->font[i]=desc->font[j];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
308 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
309 desc->font[' ']=-1;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
310 desc->width[' ']=desc->spacewidth;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
311
13897
41a4fc8421e9 Converted printf calls to mp_msg, reduced verbosity.
diego
parents: 13641
diff changeset
312 mp_msg(MSGT_OSD, MSGL_V, "Font %s loaded successfully! (%d chars)\n",fname,chardb);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
313
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
314 return desc;
13641
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
315
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
316 fail_out:
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
317 if (f)
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
318 fclose(f);
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
319 if (desc->fpath)
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
320 free(desc->fpath);
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
321 if (desc->name)
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
322 free(desc->name);
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
323 if (desc)
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
324 free(desc);
a22f1b86ec0f some memory leaks fixed
reimar
parents: 12793
diff changeset
325 return NULL;
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
326 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
327
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
328 #if 0
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
329 int main(){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
330
339
e7e89cd4169f printf's only if verbose>1
arpi_esp
parents: 250
diff changeset
331 read_font_desc("high_arpi.desc",1);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
332
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
333 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
334 #endif
7122
0dc9cb756b68 freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents: 5928
diff changeset
335