annotate libvo/font_load.c @ 1346:d6e6132bff35

AUDIO_ENCODING_LINEAR8 format is not available on sunos 5.5. Format is unsupported in mplayer for now, to get the code compiled on that old version of the OS.
author jkeil
date Thu, 19 Jul 2001 20:04:54 +0000
parents 76fd9463b9d3
children c3e3b0ae4d06
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
1
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
2 #include <stdio.h>
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
3 #include <stdlib.h>
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
4 #include <string.h>
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
5
947
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
6 #include "config.h"
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
7 #include "font_load.h"
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
8
216
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
9 char *get_path ( char * );
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
10
339
e7e89cd4169f printf's only if verbose>1
arpi_esp
parents: 250
diff changeset
11 raw_file* load_raw(char *name,int verbose){
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
12 int bpp;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
13 raw_file* raw=malloc(sizeof(raw_file));
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
14 unsigned char head[32];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
15 FILE *f=fopen(name,"rb");
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
16 if(!f) return NULL; // can't open
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
17 if(fread(head,32,1,f)<1) return NULL; // too small
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
18 if(memcmp(head,"mhwanh",6)) return NULL; // not raw file
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
19 raw->w=head[8]*256+head[9];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
20 raw->h=head[10]*256+head[11];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
21 raw->c=head[12]*256+head[13];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
22 if(raw->c>256) return NULL; // too many colors!?
339
e7e89cd4169f printf's only if verbose>1
arpi_esp
parents: 250
diff changeset
23 if(verbose) printf("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
24 if(raw->c){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
25 raw->pal=malloc(raw->c*3);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
26 fread(raw->pal,3,raw->c,f);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
27 bpp=1;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
28 } else {
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
29 raw->pal=NULL;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
30 bpp=3;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
31 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
32 raw->bmp=malloc(raw->h*raw->w*bpp);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
33 fread(raw->bmp,raw->h*raw->w*bpp,1,f);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
34 fclose(f);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
35 return raw;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
36 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
37
728
138d38a5915a fixed extern
arpi_esp
parents: 727
diff changeset
38 extern int sub_unicode;
138d38a5915a fixed extern
arpi_esp
parents: 727
diff changeset
39
339
e7e89cd4169f printf's only if verbose>1
arpi_esp
parents: 250
diff changeset
40 font_desc_t* read_font_desc(char* fname,float factor,int verbose){
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
41 unsigned char sor[1024];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
42 unsigned char sor2[1024];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
43 font_desc_t *desc;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
44 FILE *f;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
45 char section[64];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
46 int i,j;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
47 int chardb=0;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
48 int fontdb=-1;
214
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
49 int version=0;
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
50
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
51 desc=malloc(sizeof(font_desc_t));if(!desc) return NULL;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
52 memset(desc,0,sizeof(font_desc_t));
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
53
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
54 f=fopen(fname,"rt");if(!f){ printf("font: can't open file: %s\n",fname); return NULL;}
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
55
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
56 // set up some defaults, and erase table
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
57 desc->charspace=2;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
58 desc->spacewidth=12;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
59 desc->height=0;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
60 for(i=0;i<512;i++) desc->start[i]=desc->width[i]=desc->font[i]=-1;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
61
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
62 section[0]=0;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
63
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
64 while(fgets(sor,1020,f)){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
65 unsigned char* p[8];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
66 int pdb=0;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
67 unsigned char *s=sor;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
68 unsigned char *d=sor2;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
69 int ec=' ';
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
70 int id=0;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
71 sor[1020]=0;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
72 p[0]=d;++pdb;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
73 while(1){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
74 int c=*s++;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
75 if(c==0 || c==13 || c==10) break;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
76 if(!id){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
77 if(c==39 || c==34){ id=c;continue;} // idezojel
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
78 if(c==';' || c=='#') break;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
79 if(c==9) c=' ';
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
80 if(c==' '){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
81 if(ec==' ') continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
82 *d=0; ++d;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
83 p[pdb]=d;++pdb;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
84 if(pdb>=8) break;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
85 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
86 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
87 } else {
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
88 if(id==c){ id=0;continue;} // idezojel
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
89
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
90 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
91 *d=c;d++;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
92 ec=c;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
93 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
94 if(d==sor2) continue; // skip empty lines
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
95 *d=0;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
96
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
97 // printf("params=%d sor=%s\n",pdb,sor);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
98 // for(i=0;i<pdb;i++) printf(" param %d = '%s'\n",i,p[i]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
99
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
100 if(pdb==1 && p[0][0]=='['){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
101 int len=strlen(p[0]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
102 if(len && len<63 && p[0][len-1]==']'){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
103 strcpy(section,p[0]);
339
e7e89cd4169f printf's only if verbose>1
arpi_esp
parents: 250
diff changeset
104 if(verbose) printf("font: Reading section: %s\n",section);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
105 if(strcmp(section,"[files]")==0){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
106 ++fontdb;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
107 if(fontdb>=16){ printf("font: Too many bitmaps defined!\n");return NULL;}
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
108 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
109 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
110 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
111 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
112
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
113 if(strcmp(section,"[files]")==0){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
114 if(pdb==2 && strcmp(p[0],"alpha")==0){
217
cb3b0d65dddd Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 216
diff changeset
115 char *cp,*cp2;
cb3b0d65dddd Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 216
diff changeset
116 if (!(cp=get_path("font/"))) return NULL;
cb3b0d65dddd Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 216
diff changeset
117 if (!(cp2=malloc(strlen(cp)+strlen(p[1])+1))) {
cb3b0d65dddd Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 216
diff changeset
118 free(cp);
cb3b0d65dddd Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 216
diff changeset
119 return NULL;
cb3b0d65dddd Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 216
diff changeset
120 }
216
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
121 sprintf(cp2,"%s%s",cp,p[1]);
339
e7e89cd4169f printf's only if verbose>1
arpi_esp
parents: 250
diff changeset
122 if(!((desc->pic_a[fontdb]=load_raw(cp2,verbose)))){
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
123 printf("Can't load font bitmap: %s\n",p[1]);
216
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
124 free(cp);
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
125 free(cp2);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
126 return NULL;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
127 }
216
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
128 free(cp);
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
129 free(cp2);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
130 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
131 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
132 if(pdb==2 && strcmp(p[0],"bitmap")==0){
217
cb3b0d65dddd Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 216
diff changeset
133 char *cp,*cp2;
cb3b0d65dddd Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 216
diff changeset
134 if (!(cp=get_path("font/"))) return NULL;
cb3b0d65dddd Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 216
diff changeset
135 if (!(cp2=malloc(strlen(cp)+strlen(p[1])+1))) {
cb3b0d65dddd Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 216
diff changeset
136 free(cp);
cb3b0d65dddd Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 216
diff changeset
137 return NULL;
cb3b0d65dddd Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 216
diff changeset
138 }
216
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
139 sprintf(cp2,"%s%s",cp,p[1]);
339
e7e89cd4169f printf's only if verbose>1
arpi_esp
parents: 250
diff changeset
140 if(!((desc->pic_b[fontdb]=load_raw(cp2,verbose)))){
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
141 printf("Can't load font bitmap: %s\n",p[1]);
216
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
142 free(cp);
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
143 free(cp2);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
144 return NULL;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
145 }
216
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
146 free(cp);
338b5664ea13 Search font files in ~/.mplayer/font/ instead of current dir
lgb
parents: 215
diff changeset
147 free(cp2);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
148 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
149 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
150 } else
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
151
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
152 if(strcmp(section,"[info]")==0){
214
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
153 if(pdb==2 && strcmp(p[0],"name")==0){
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
154 desc->name=strdup(p[1]);
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
155 continue;
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
156 }
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
157 if(pdb==2 && strcmp(p[0],"descversion")==0){
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
158 version=atoi(p[1]);
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
159 continue;
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
160 }
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
161 if(pdb==2 && strcmp(p[0],"spacewidth")==0){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
162 desc->spacewidth=atoi(p[1]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
163 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
164 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
165 if(pdb==2 && strcmp(p[0],"charspace")==0){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
166 desc->charspace=atoi(p[1]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
167 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
168 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
169 if(pdb==2 && strcmp(p[0],"height")==0){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
170 desc->height=atoi(p[1]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
171 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
172 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
173 } else
214
09d0f437b817 desc fileformat changes
arpi_esp
parents: 213
diff changeset
174
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
175 if(strcmp(section,"[characters]")==0){
219
bc5c75b7a401 hex charcode support
arpi_esp
parents: 217
diff changeset
176 if(pdb==3){
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
177 int chr=p[0][0];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
178 int start=atoi(p[1]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
179 int end=atoi(p[2]);
727
cc208ebcb9f6 Deals with unicode/nounicode.
atmosfear
parents: 706
diff changeset
180 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
181 else if(strlen(p[0])!=1) chr=strtol(p[0],NULL,0);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
182 if(end<start) {
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
183 printf("error in font desc: end<start for char '%c'\n",chr);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
184 } else {
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
185 desc->start[chr]=start;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
186 desc->width[chr]=end-start+1;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
187 desc->font[chr]=fontdb;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
188 // 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
189 ++chardb;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
190 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
191 continue;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
192 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
193 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
194 printf("Syntax error in font desc: %s\n",sor);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
195
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
196 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
197 fclose(f);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
198
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
199 //printf("font: pos of U = %d\n",desc->start[218]);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
200
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
201 for(i=0;i<=fontdb;i++){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
202 if(!desc->pic_a[i] || !desc->pic_b[i]){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
203 printf("font: Missing bitmap(s) for sub-font #%d\n",i);
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
204 return NULL;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
205 }
249
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
206 //if(factor!=1.0f)
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
207 {
215
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
208 // re-sample alpha
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
209 int f=factor*256.0f;
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
210 int size=desc->pic_a[i]->w*desc->pic_a[i]->h;
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
211 int j;
339
e7e89cd4169f printf's only if verbose>1
arpi_esp
parents: 250
diff changeset
212 if(verbose) printf("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
213 for(j=0;j<size;j++){
947
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
214 int x=desc->pic_a[i]->bmp[j]; // alpha
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
215 int y=desc->pic_b[i]->bmp[j]; // bitmap
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
216
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
217 #ifdef FAST_OSD
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
218 x=(x<(255-f))?0:1;
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
219 #else
249
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
220
250
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
221 x=255-((x*f)>>8); // scale
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
222 //if(x<0) x=0; else if(x>255) x=255;
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
223 //x^=255; // invert
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
224
249
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
225 if(x+y>255) x=255-y; // to avoid overflows
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
226
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
227 //x=0;
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
228 //x=((x*f*(255-y))>>16);
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
229 //x=((x*f*(255-y))>>16)+y;
215
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
230 //x=(x*f)>>8;if(x<y) x=y;
250
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
231
249
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
232 if(x<1) x=1; else
2dadc379a934 OSD/SUB image quality & speed improvement
arpi_esp
parents: 219
diff changeset
233 if(x>=252) x=0;
947
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 728
diff changeset
234 #endif
250
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
235
215
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
236 desc->pic_a[i]->bmp[j]=x;
250
d4f711fde94b optimized alpha resampling
arpi_esp
parents: 249
diff changeset
237 // desc->pic_b[i]->bmp[j]=0; // hack
215
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
238 }
339
e7e89cd4169f printf's only if verbose>1
arpi_esp
parents: 250
diff changeset
239 if(verbose) printf("DONE!\n");
215
09d565842a33 font alpha resampling, see -ffactor
arpi_esp
parents: 214
diff changeset
240 }
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
241 if(!desc->height) desc->height=desc->pic_a[i]->h;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
242 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
243
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
244 j='_';if(desc->font[j]<0) j='?';
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
245 for(i=0;i<512;i++)
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
246 if(desc->font[i]<0){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
247 desc->start[i]=desc->start[j];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
248 desc->width[i]=desc->width[j];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
249 desc->font[i]=desc->font[j];
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
250 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
251 desc->font[' ']=-1;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
252 desc->width[' ']=desc->spacewidth;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
253
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 339
diff changeset
254 printf("Font %s loaded successfully! (%d chars)\n",fname,chardb);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
255
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
256 return desc;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
257 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
258
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
259 #if 0
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
260 int main(){
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
261
339
e7e89cd4169f printf's only if verbose>1
arpi_esp
parents: 250
diff changeset
262 read_font_desc("high_arpi.desc",1);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
263
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
264 }
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents:
diff changeset
265 #endif