Mercurial > mplayer.hg
annotate TOOLS/subfont-c/subfont.c @ 10624:cdfd4a43c406
I've juste found a bug which prevent to load a file whose name contain
a quote ('). The menu simply execute a "loadfile '%p'" but when the %p
is replaced by the actual value, quotes in it are not escaped !
Moreover, mp_input_parse_cmd contain some code to unescape strings but
this code was placed after the string was copied in his final buffer.
So this patch correct this issue.
By Aurlien Jacobs
author | albeu |
---|---|
date | Fri, 15 Aug 2003 18:45:35 +0000 |
parents | 6c2523d7f03b |
children | 03d3ab9f6400 |
rev | line source |
---|---|
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1 /* |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
2 * Renders antialiased fonts for mplayer using freetype library. |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
3 * Should work with TrueType, Type1 and any other font supported by libfreetype. |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
4 * Can generate font.desc for any encoding. |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
5 * |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
6 * |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
7 * Artur Zaprzala <zybi@fanthom.irc.pl> |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
8 * |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
9 */ |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
10 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
11 #include <stdio.h> |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
12 #include <stdlib.h> |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
13 #include <iconv.h> |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
14 #include <math.h> |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
15 #include <string.h> |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
16 #include <libgen.h> |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
17 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
18 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
19 #ifndef OLD_FREETYPE2 |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
20 #include <ft2build.h> |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
21 #include FT_FREETYPE_H |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
22 #include FT_GLYPH_H |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
23 #else /* freetype 2.0.1 */ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
24 #include <freetype/freetype.h> |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
25 #include <freetype/ftglyph.h> |
1677 | 26 #endif |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
27 |
1677 | 28 |
29 #include "../../bswap.h" | |
10211
4bc481804519
warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
alex
parents:
8765
diff
changeset
|
30 #include "../../osdep/timer.h" |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
31 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
32 #ifndef DEBUG |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
33 #define DEBUG 0 |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
34 #endif |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
35 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
36 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
37 //// default values |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
38 char *encoding = "iso-8859-1"; /* target encoding */ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
39 char *charmap = "ucs-4"; /* font charmap encoding, I hope ucs-4 is always big endian */ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
40 /* gcc 2.1.3 doesn't support ucs-4le, but supports ucs-4 (==ucs-4be) */ |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
41 float ppem = 22; /* font size in pixels */ |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
42 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
43 double radius = 2; /* blur radius */ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
44 double thickness = 1.5; /* outline thickness */ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
45 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
46 char* font_desc = "font.desc"; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
47 //char* font_desc = "/dev/stdout"; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
48 |
4935 | 49 char *outdir = "."; |
50 | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
51 //// constants |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
52 int const colors = 256; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
53 int const maxcolor = 255; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
54 unsigned const base = 256; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
55 unsigned const first_char = 33; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
56 #define max_charset_size 60000 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
57 //int const max_charset_size = 256; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
58 unsigned charset_size = 0; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
59 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
60 //// |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
61 char *command; |
1506
94d929f91b06
return value of iconv fixed for glibc 2.1.3, using strrchr instead of basename, as basename is buggy
arpi
parents:
1505
diff
changeset
|
62 char *encoding_name; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
63 char *font_path; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
64 //char *font_metrics; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
65 int append_mode = 0; |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
66 int unicode_desc = 0; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
67 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
68 unsigned char *bbuffer, *abuffer; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
69 int width, height; |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
70 int padding; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
71 static FT_ULong charset[max_charset_size]; /* characters we want to render; Unicode */ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
72 static FT_ULong charcodes[max_charset_size]; /* character codes in 'encoding' */ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
73 iconv_t cd; // iconv conversion descriptor |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
74 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
75 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
76 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
77 #define eprintf(...) fprintf(stderr, __VA_ARGS__) |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
78 #define ERROR_(msg, ...) (eprintf("%s: error: " msg "\n", command, __VA_ARGS__), exit(1)) |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
79 #define WARNING_(msg, ...) eprintf("%s: warning: " msg "\n", command, __VA_ARGS__) |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
80 #define ERROR(...) ERROR_(__VA_ARGS__, NULL) |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
81 #define WARNING(...) WARNING_(__VA_ARGS__, NULL) |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
82 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
83 |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
84 #define f266ToInt(x) (((x)+32)>>6) // round fractional fixed point number to integer |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
85 // coordinates are in 26.6 pixels (i.e. 1/64th of pixels) |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
86 #define f266CeilToInt(x) (((x)+63)>>6) // ceiling |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
87 #define f266FloorToInt(x) ((x)>>6) // floor |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
88 #define f1616ToInt(x) (((x)+0x8000)>>16) // 16.16 |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
89 #define floatTof266(x) ((int)((x)*(1<<6)+0.5)) |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
90 |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
91 #define ALIGN(x) (((x)+7)&~7) // 8 byte align |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
92 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
93 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
94 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
95 void paste_bitmap(FT_Bitmap *bitmap, int x, int y) { |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
96 int drow = x+y*width; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
97 int srow = 0; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
98 int sp, dp, w, h; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
99 if (bitmap->pixel_mode==ft_pixel_mode_mono) |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
100 for (h = bitmap->rows; h>0; --h, drow+=width, srow+=bitmap->pitch) |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
101 for (w = bitmap->width, sp=dp=0; w>0; --w, ++dp, ++sp) |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
102 bbuffer[drow+dp] = (bitmap->buffer[srow+sp/8] & (0x80>>(sp%8))) ? 255:0; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
103 else |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
104 for (h = bitmap->rows; h>0; --h, drow+=width, srow+=bitmap->pitch) |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
105 for (w = bitmap->width, sp=dp=0; w>0; --w, ++dp, ++sp) |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
106 bbuffer[drow+dp] = bitmap->buffer[srow+sp]; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
107 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
108 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
109 |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
110 void write_header(FILE *f) { |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
111 static unsigned char header[800] = "mhwanh"; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
112 int i; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
113 header[7] = 4; |
5928
48e91dc9534b
.raw width>=65536 support by Georgi Georgiev <chutz@chubaka.homeip.net>
arpi
parents:
4935
diff
changeset
|
114 if (width < 0x10000) { // are two bytes enough for the width? |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
115 header[8] = width>>8; header[9] = (unsigned char)width; |
5928
48e91dc9534b
.raw width>=65536 support by Georgi Georgiev <chutz@chubaka.homeip.net>
arpi
parents:
4935
diff
changeset
|
116 } else { // store width using 4 bytes at the end of the header |
48e91dc9534b
.raw width>=65536 support by Georgi Georgiev <chutz@chubaka.homeip.net>
arpi
parents:
4935
diff
changeset
|
117 header[8] = header[9] = 0; |
48e91dc9534b
.raw width>=65536 support by Georgi Georgiev <chutz@chubaka.homeip.net>
arpi
parents:
4935
diff
changeset
|
118 header[28] = (width >> 030) & 0xFF; |
48e91dc9534b
.raw width>=65536 support by Georgi Georgiev <chutz@chubaka.homeip.net>
arpi
parents:
4935
diff
changeset
|
119 header[29] = (width >> 020) & 0xFF; |
48e91dc9534b
.raw width>=65536 support by Georgi Georgiev <chutz@chubaka.homeip.net>
arpi
parents:
4935
diff
changeset
|
120 header[30] = (width >> 010) & 0xFF; |
48e91dc9534b
.raw width>=65536 support by Georgi Georgiev <chutz@chubaka.homeip.net>
arpi
parents:
4935
diff
changeset
|
121 header[31] = (width ) & 0xFF; |
48e91dc9534b
.raw width>=65536 support by Georgi Georgiev <chutz@chubaka.homeip.net>
arpi
parents:
4935
diff
changeset
|
122 } |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
123 header[10] = height>>8; header[11] = (unsigned char)height; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
124 header[12] = colors>>8; header[13] = (unsigned char)colors; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
125 for (i = 32; i<800; ++i) header[i] = (i-32)/3; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
126 fwrite(header, 1, 800, f); |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
127 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
128 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
129 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
130 void write_bitmap(void *buffer, char type) { |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
131 FILE *f; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
132 int const max_name = 128; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
133 char name[max_name]; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
134 |
4935 | 135 snprintf(name, max_name, "%s/%s-%c.raw", outdir, encoding_name, type); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
136 f = fopen(name, "wb"); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
137 if (f==NULL) ERROR("fopen failed."); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
138 write_header(f); |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
139 fwrite(buffer, 1, width*height, f); |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
140 fclose(f); |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
141 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
142 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
143 |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
144 void render() { |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
145 FT_Library library; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
146 FT_Face face; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
147 FT_Error error; |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
148 FT_Glyph *glyphs; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
149 FT_BitmapGlyph glyph; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
150 FILE *f; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
151 int const load_flags = FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING; |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
152 int pen_x = 0, pen_xa; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
153 int ymin = INT_MAX, ymax = INT_MIN; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
154 int i, uni_charmap = 1; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
155 int baseline, space_advance = 20; |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
156 int glyphs_count = 0; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
157 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
158 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
159 /* initialize freetype */ |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
160 error = FT_Init_FreeType(&library); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
161 if (error) ERROR("Init_FreeType failed."); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
162 error = FT_New_Face(library, font_path, 0, &face); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
163 if (error) ERROR("New_Face failed. Maybe the font path `%s' is wrong.", font_path); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
164 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
165 /* |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
166 if (font_metrics) { |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
167 error = FT_Attach_File(face, font_metrics); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
168 if (error) WARNING("FT_Attach_File failed."); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
169 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
170 */ |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
171 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
172 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
173 #if 0 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
174 /************************************************************/ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
175 eprintf("Font encodings:\n"); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
176 for (i = 0; i<face->num_charmaps; ++i) |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
177 eprintf("'%.4s'\n", (char*)&face->charmaps[i]->encoding); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
178 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
179 //error = FT_Select_Charmap(face, ft_encoding_unicode); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
180 //error = FT_Select_Charmap(face, ft_encoding_adobe_standard); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
181 //error = FT_Select_Charmap(face, ft_encoding_adobe_custom); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
182 //error = FT_Set_Charmap(face, face->charmaps[1]); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
183 //if (error) WARNING("FT_Select_Charmap failed."); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
184 #endif |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
185 |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
186 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
187 #if 0 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
188 /************************************************************/ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
189 if (FT_HAS_GLYPH_NAMES(face)) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
190 int const max_gname = 128; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
191 char gname[max_gname]; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
192 for (i = 0; i<face->num_glyphs; ++i) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
193 FT_Get_Glyph_Name(face, i, gname, max_gname); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
194 eprintf("%02x `%s'\n", i, gname); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
195 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
196 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
197 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
198 #endif |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
199 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
200 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
201 if (face->charmap==NULL || face->charmap->encoding!=ft_encoding_unicode) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
202 WARNING("Unicode charmap not available for this font. Very bad!"); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
203 uni_charmap = 0; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
204 error = FT_Set_Charmap(face, face->charmaps[0]); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
205 if (error) WARNING("No charmaps! Strange."); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
206 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
207 |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
208 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
209 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
210 /* set size */ |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
211 if (FT_IS_SCALABLE(face)) { |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
212 error = FT_Set_Char_Size(face, floatTof266(ppem), 0, 0, 0); |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
213 if (error) WARNING("FT_Set_Char_Size failed."); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
214 } else { |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
215 int j = 0; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
216 int jppem = face->available_sizes[0].height; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
217 /* find closest size */ |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
218 for (i = 0; i<face->num_fixed_sizes; ++i) { |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
219 if (fabs(face->available_sizes[i].height - ppem) < abs(face->available_sizes[i].height - jppem)) { |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
220 j = i; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
221 jppem = face->available_sizes[i].height; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
222 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
223 } |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
224 WARNING("Selected font is not scalable. Using ppem=%i.", face->available_sizes[j].height); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
225 error = FT_Set_Pixel_Sizes(face, face->available_sizes[j].width, face->available_sizes[j].height); |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
226 if (error) WARNING("FT_Set_Pixel_Sizes failed."); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
227 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
228 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
229 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
230 if (FT_IS_FIXED_WIDTH(face)) |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
231 WARNING("Selected font is fixed-width."); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
232 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
233 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
234 /* compute space advance */ |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
235 error = FT_Load_Char(face, ' ', load_flags); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
236 if (error) WARNING("spacewidth set to default."); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
237 else space_advance = f266ToInt(face->glyph->advance.x); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
238 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
239 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
240 /* create font.desc */ |
4935 | 241 { |
242 int const max_name = 128; | |
243 char name[max_name]; | |
244 | |
245 snprintf(name, max_name, "%s/%s", outdir, font_desc); | |
246 f = fopen(name, append_mode ? "a":"w"); | |
247 } | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
248 if (f==NULL) ERROR("fopen failed."); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
249 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
250 |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
251 /* print font.desc header */ |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
252 if (append_mode) { |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
253 fprintf(f, "\n\n# "); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
254 } else { |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
255 fprintf(f, "# This file was generated with subfont for Mplayer.\n" |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
256 "# Subfont by Artur Zaprzala <zybi@fanthom.irc.pl>.\n\n"); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
257 fprintf(f, "[info]\n"); |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
258 } |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
259 |
10422 | 260 fprintf(f, "name 'Subtitle font for %s %s, \"%s%s%s\" face, size: %.1f pixels, blur: %.1f, outline: %.1f'\n", |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
261 encoding_name, |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
262 unicode_desc ? "charset, Unicode encoding":"encoding", |
6788 | 263 face->family_name ? face->family_name : font_path, |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
264 face->style_name ? " ":"", face->style_name ? face->style_name:"", |
10422 | 265 ppem, radius, thickness); |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
266 |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
267 if (!append_mode) { |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
268 #ifdef NEW_DESC |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
269 fprintf(f, "descversion 2\n"); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
270 #else |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
271 fprintf(f, "descversion 1\n"); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
272 #endif |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
273 fprintf(f, "spacewidth %i\n", 2*padding + space_advance); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
274 #ifndef NEW_DESC |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
275 fprintf(f, "charspace %i\n", -2*padding); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
276 #endif |
8451 | 277 fprintf(f, "height %li\n", f266ToInt(face->size->metrics.height)); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
278 #ifdef NEW_DESC |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
279 fprintf(f, "ascender %i\n", f266CeilToInt(face->size->metrics.ascender)); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
280 fprintf(f, "descender %i\n", f266FloorToInt(face->size->metrics.descender)); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
281 #endif |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
282 } |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
283 fprintf(f, "\n[files]\n"); |
1506
94d929f91b06
return value of iconv fixed for glibc 2.1.3, using strrchr instead of basename, as basename is buggy
arpi
parents:
1505
diff
changeset
|
284 fprintf(f, "alpha %s-a.raw\n", encoding_name); |
94d929f91b06
return value of iconv fixed for glibc 2.1.3, using strrchr instead of basename, as basename is buggy
arpi
parents:
1505
diff
changeset
|
285 fprintf(f, "bitmap %s-b.raw\n", encoding_name); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
286 fprintf(f, "\n[characters]\n"); |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
287 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
288 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
289 // render glyphs, compute bitmap size and [characters] section |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
290 glyphs = (FT_Glyph*)malloc(charset_size*sizeof(FT_Glyph*)); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
291 for (i= 0; i<charset_size; ++i) { |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
292 FT_GlyphSlot slot; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
293 FT_ULong character, code; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
294 FT_UInt glyph_index; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
295 FT_BBox bbox; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
296 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
297 character = charset[i]; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
298 code = charcodes[i]; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
299 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
300 // get glyph index |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
301 if (character==0) |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
302 glyph_index = 0; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
303 else { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
304 glyph_index = FT_Get_Char_Index(face, uni_charmap ? character:code); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
305 if (glyph_index==0) { |
8451 | 306 WARNING("Glyph for char 0x%02lx|U+%04lX|%c not found.", code, character, |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
307 code<' '||code>255 ? '.':code); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
308 continue; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
309 } |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
310 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
311 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
312 // load glyph |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
313 error = FT_Load_Glyph(face, glyph_index, load_flags); |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
314 if (error) { |
8451 | 315 WARNING("FT_Load_Glyph 0x%02x (char 0x%02lx|U+%04lX) failed.", glyph_index, code, character); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
316 continue; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
317 } |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
318 slot = face->glyph; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
319 |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
320 // render glyph |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
321 if (slot->format != ft_glyph_format_bitmap) { |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
322 error = FT_Render_Glyph(slot, ft_render_mode_normal); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
323 if (error) { |
8451 | 324 WARNING("FT_Render_Glyph 0x%04x (char 0x%02lx|U+%04lX) failed.", glyph_index, code, character); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
325 continue; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
326 } |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
327 } |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
328 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
329 // extract glyph image |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
330 error = FT_Get_Glyph(slot, (FT_Glyph*)&glyph); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
331 if (error) { |
8451 | 332 WARNING("FT_Get_Glyph 0x%04x (char 0x%02lx|U+%04lX) failed.", glyph_index, code, character); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
333 continue; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
334 } |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
335 glyphs[glyphs_count++] = (FT_Glyph)glyph; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
336 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
337 #ifdef NEW_DESC |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
338 // max height |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
339 if (glyph->bitmap.rows > height) height = glyph->bitmap.rows; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
340 |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
341 // advance pen |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
342 pen_xa = pen_x + glyph->bitmap.width + 2*padding; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
343 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
344 // font.desc |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
345 fprintf(f, "0x%04x %i %i %i %i %i %i;\tU+%04X|%c\n", unicode_desc ? character:code, |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
346 pen_x, // bitmap start |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
347 glyph->bitmap.width + 2*padding, // bitmap width |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
348 glyph->bitmap.rows + 2*padding, // bitmap height |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
349 glyph->left - padding, // left bearing |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
350 glyph->top + padding, // top bearing |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
351 f266ToInt(slot->advance.x), // advance |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
352 character, code<' '||code>255 ? '.':code); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
353 #else |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
354 // max height |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
355 if (glyph->top > ymax) { |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
356 ymax = glyph->top; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
357 //eprintf("%3i: ymax %i (%c)\n", code, ymax, code); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
358 } |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
359 if (glyph->top - glyph->bitmap.rows < ymin) { |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
360 ymin = glyph->top - glyph->bitmap.rows; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
361 //eprintf("%3i: ymin %i (%c)\n", code, ymin, code); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
362 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
363 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
364 /* advance pen */ |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
365 pen_xa = pen_x + f266ToInt(slot->advance.x) + 2*padding; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
366 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
367 /* font.desc */ |
8451 | 368 fprintf(f, "0x%04lx %i %i;\tU+%04lX|%c\n", unicode_desc ? character:code, |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
369 pen_x, // bitmap start |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
370 pen_xa-1, // bitmap end |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
371 character, code<' '||code>255 ? '.':code); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
372 #endif |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
373 pen_x = ALIGN(pen_xa); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
374 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
375 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
376 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
377 width = pen_x; |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
378 pen_x = 0; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
379 #ifdef NEW_DESC |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
380 if (height<=0) ERROR("Something went wrong. Use the source!"); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
381 height += 2*padding; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
382 #else |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
383 if (ymax<=ymin) ERROR("Something went wrong. Use the source!"); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
384 height = ymax - ymin + 2*padding; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
385 baseline = ymax + padding; |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
386 #endif |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
387 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
388 // end of font.desc |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
389 if (DEBUG) eprintf("bitmap size: %ix%i\n", width, height); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
390 fprintf(f, "# bitmap size: %ix%i\n", width, height); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
391 fclose(f); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
392 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
393 bbuffer = (unsigned char*)malloc(width*height); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
394 if (bbuffer==NULL) ERROR("malloc failed."); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
395 memset(bbuffer, 0, width*height); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
396 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
397 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
398 /* paste glyphs */ |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
399 for (i= 0; i<glyphs_count; ++i) { |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
400 glyph = (FT_BitmapGlyph)glyphs[i]; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
401 #ifdef NEW_DESC |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
402 paste_bitmap(&glyph->bitmap, |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
403 pen_x + padding, |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
404 padding); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
405 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
406 /* advance pen */ |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
407 pen_x += glyph->bitmap.width + 2*padding; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
408 #else |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
409 paste_bitmap(&glyph->bitmap, |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
410 pen_x + padding + glyph->left, |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
411 baseline - glyph->top); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
412 |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
413 /* advance pen */ |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
414 pen_x += f1616ToInt(glyph->root.advance.x) + 2*padding; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
415 #endif |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
416 pen_x = ALIGN(pen_x); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
417 |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
418 FT_Done_Glyph((FT_Glyph)glyph); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
419 } |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
420 free(glyphs); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
421 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
422 |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
423 error = FT_Done_FreeType(library); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
424 if (error) ERROR("FT_Done_FreeType failed."); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
425 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
426 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
427 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
428 /* decode from 'encoding' to unicode */ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
429 FT_ULong decode_char(char c) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
430 FT_ULong o; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
431 char *inbuf = &c; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
432 char *outbuf = (char*)&o; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
433 int inbytesleft = 1; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
434 int outbytesleft = sizeof(FT_ULong); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
435 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
436 size_t count = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
437 |
1677 | 438 /* convert unicode BigEndian -> MachineEndian */ |
439 o = be2me_32(o); | |
440 | |
441 // if (count==-1) o = 0; // not OK, at least my iconv() returns E2BIG for all | |
442 if (outbytesleft!=0) o = 0; | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
443 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
444 /* we don't want control characters */ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
445 if (o>=0x7f && o<0xa0) o = 0; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
446 return o; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
447 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
448 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
449 |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
450 void prepare_charset() { |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
451 FILE *f; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
452 FT_ULong i; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
453 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
454 f = fopen(encoding, "r"); // try to read custom encoding |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
455 if (f==NULL) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
456 int count = 0; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
457 // check if ucs-4 is available |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
458 cd = iconv_open(charmap, charmap); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
459 if (cd==(iconv_t)-1) ERROR("iconv doesn't know %s encoding. Use the source!", charmap); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
460 iconv_close(cd); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
461 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
462 cd = iconv_open(charmap, encoding); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
463 if (cd==(iconv_t)-1) ERROR("Unsupported encoding `%s', use iconv --list to list character sets known on your system.", encoding); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
464 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
465 charset_size = 256 - first_char; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
466 for (i = 0; i<charset_size; ++i) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
467 charcodes[count] = i+first_char; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
468 charset[count] = decode_char(i+first_char); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
469 //eprintf("%04X U%04X\n", charcodes[count], charset[count]); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
470 if (charset[count]!=0) ++count; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
471 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
472 charcodes[count] = charset[count] = 0; ++count; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
473 charset_size = count; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
474 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
475 iconv_close(cd); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
476 } else { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
477 unsigned int character, code; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
478 int count; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
479 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
480 eprintf("Reading custom encoding from file '%s'.\n", encoding); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
481 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
482 while ((count = fscanf(f, "%x%*[ \t]%x", &character, &code)) != EOF) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
483 if (charset_size==max_charset_size) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
484 WARNING("There is no place for more than %i characters. Use the source!", max_charset_size); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
485 break; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
486 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
487 if (count==0) ERROR("Unable to parse custom encoding file."); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
488 if (character<32) continue; // skip control characters |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
489 charset[charset_size] = character; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
490 charcodes[charset_size] = count==2 ? code : character; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
491 ++charset_size; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
492 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
493 fclose(f); |
1506
94d929f91b06
return value of iconv fixed for glibc 2.1.3, using strrchr instead of basename, as basename is buggy
arpi
parents:
1505
diff
changeset
|
494 // encoding = basename(encoding); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
495 } |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
496 if (charset_size==0) ERROR("No characters to render!"); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
497 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
498 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
499 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
500 // general outline |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
501 void outline( |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
502 unsigned char *s, |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
503 unsigned char *t, |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
504 int width, |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
505 int height, |
7022 | 506 unsigned char *m, |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
507 int r, |
7022 | 508 int mwidth, |
509 int msize) { | |
1471
00a1f4b77803
dirty fix to get it work with glibc 2.1.x, and changed blur algorithm
arpi
parents:
1470
diff
changeset
|
510 |
1507 | 511 int x, y; |
7018
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
512 #if 1 |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
513 for (y = 0; y<height; y++) { |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
514 for (x = 0; x<width; x++) { |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
515 const int src= s[x]; |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
516 if(src==0) continue; |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
517 #if 0 |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
518 if(src==255 && x>0 && y>0 && x+1<width && y+1<height |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
519 && s[x-1]==255 && s[x+1]==255 && s[x-width]==255 && s[x+width]==255){ |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
520 t[x + y*width]=255; |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
521 }else |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
522 #endif |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
523 { |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
524 const int x1=(x<r) ? r-x : 0; |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
525 const int y1=(y<r) ? r-y : 0; |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
526 const int x2=(x+r>=width ) ? r+width -x : 2*r+1; |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
527 const int y2=(y+r>=height) ? r+height-y : 2*r+1; |
7021 | 528 register unsigned char *dstp= t + (y1+y-r)* width + x-r; |
7022 | 529 //register int *mp = m + y1 *mwidth; |
530 register unsigned char *mp= m + msize*src + y1*mwidth; | |
7018
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
531 int my; |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
532 |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
533 for(my= y1; my<y2; my++){ |
7021 | 534 // unsigned char *dstp= t + (my+y-r)* width + x-r; |
535 // int *mp = m + my *mwidth; | |
536 register int mx; | |
7018
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
537 for(mx= x1; mx<x2; mx++){ |
7022 | 538 // const int tmp= (src*mp[mx] + 128)>>8; |
539 // if(dstp[mx] < tmp) dstp[mx]= tmp; | |
540 if(dstp[mx] < mp[mx]) dstp[mx]= mp[mx]; | |
7018
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
541 } |
7021 | 542 dstp+=width; |
543 mp+=mwidth; | |
7018
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
544 } |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
545 } |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
546 } |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
547 s+= width; |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
548 } |
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
549 #else |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
550 for (y = 0; y<height; ++y) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
551 for (x = 0; x<width; ++x, ++s, ++t) { |
7016 | 552 //if(s[0]>=192) printf("%d\n",s[0]); |
553 if(s[0]!=255){ | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
554 unsigned max = 0; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
555 unsigned *mrow = m + r; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
556 unsigned char *srow = s -r*width; |
1507 | 557 int x1=(x<r)?-x:-r; |
558 int x2=(x+r>=width)?(width-x-1):r; | |
559 int my; | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
560 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
561 for (my = -r; my<=r; ++my, srow+= width, mrow+= mwidth) { |
1507 | 562 int mx; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
563 if (y+my < 0) continue; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
564 if (y+my >= height) break; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
565 |
1507 | 566 for (mx = x1; mx<=x2; ++mx) { |
567 unsigned v = srow[mx] * mrow[mx]; | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
568 if (v>max) max = v; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
569 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
570 } |
7016 | 571 // if(!max) *t = 0; else |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
572 *t = (max + base/2) / base; |
7016 | 573 } else |
574 *t = 255; | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
575 } |
1471
00a1f4b77803
dirty fix to get it work with glibc 2.1.x, and changed blur algorithm
arpi
parents:
1470
diff
changeset
|
576 } |
7018
89c0f67785d0
skip black in outline (white skip code is #if 0 as there is no speed difference)
michael
parents:
7016
diff
changeset
|
577 #endif |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
578 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
579 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
580 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
581 // 1 pixel outline |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
582 void outline1( |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
583 unsigned char *s, |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
584 unsigned char *t, |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
585 int width, |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
586 int height) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
587 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
588 int x, y, mx, my; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
589 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
590 for (x = 0; x<width; ++x, ++s, ++t) *t = *s; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
591 for (y = 1; y<height-1; ++y) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
592 *t++ = *s++; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
593 for (x = 1; x<width-1; ++x, ++s, ++t) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
594 unsigned v = ( |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
595 s[-1-width]+ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
596 s[-1+width]+ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
597 s[+1-width]+ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
598 s[+1+width] |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
599 )/2 + ( |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
600 s[-1]+ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
601 s[+1]+ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
602 s[-width]+ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
603 s[+width]+ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
604 s[0] |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
605 ); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
606 *t = v>maxcolor ? maxcolor : v; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
607 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
608 *t++ = *s++; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
609 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
610 for (x = 0; x<width; ++x, ++s, ++t) *t = *s; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
611 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
612 |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
613 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
614 // gaussian blur |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
615 void blur( |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
616 unsigned char *buffer, |
7028 | 617 unsigned short *tmp2, |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
618 int width, |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
619 int height, |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
620 int *m, |
7028 | 621 int *m2, |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
622 int r, |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
623 int mwidth, |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
624 unsigned volume) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
625 |
1507 | 626 int x, y; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
627 |
7030 | 628 #if 1 |
7028 | 629 unsigned char *s = buffer; |
630 unsigned short *t = tmp2+1; | |
631 for(y=0; y<height; y++){ | |
7040
94a56b859b04
10l patch by Jindrich Makovicka <makovick at KMLinux dot fjfi dot cvut dot cz>
michael
parents:
7030
diff
changeset
|
632 memset(t-1, 0, (width+1)*sizeof(short)); |
7028 | 633 // for(x=0; x<width+1; x++) |
634 // t[x]= 128; | |
635 | |
636 for(x=0; x<r; x++){ | |
637 const int src= s[x]; | |
638 if(src){ | |
639 register unsigned short *dstp= t + x-r; | |
640 int mx; | |
641 unsigned *m3= m2 + src*mwidth; | |
642 for(mx=r-x; mx<mwidth; mx++){ | |
643 dstp[mx]+= m3[mx]; | |
644 } | |
645 } | |
646 } | |
647 for(; x<width-r; x++){ | |
648 const int src= s[x]; | |
649 if(src){ | |
650 register unsigned short *dstp= t + x-r; | |
651 int mx; | |
652 unsigned *m3= m2 + src*mwidth; | |
653 for(mx=0; mx<mwidth; mx++){ | |
654 dstp[mx]+= m3[mx]; | |
655 } | |
656 } | |
657 } | |
658 for(; x<width; x++){ | |
659 const int src= s[x]; | |
660 if(src){ | |
661 register unsigned short *dstp= t + x-r; | |
662 int mx; | |
663 const int x2= r+width -x; | |
664 const int off= src*mwidth; | |
665 unsigned *m3= m2 + src*mwidth; | |
666 for(mx=0; mx<x2; mx++){ | |
667 dstp[mx]+= m3[mx]; | |
668 } | |
669 } | |
670 } | |
671 s+= width; | |
672 t+= width + 1; | |
673 } | |
674 | |
675 t = tmp2; | |
676 for(x=0; x<width; x++){ | |
677 for(y=0; y<r; y++){ | |
678 unsigned short *srcp= t + y*(width+1) + 1; | |
679 int src= *srcp; | |
680 if(src){ | |
681 register unsigned short *dstp= srcp - 1 + width+1; | |
682 const int src2= (src + 128)>>8; | |
683 unsigned *m3= m2 + src2*mwidth; | |
684 | |
685 int mx; | |
686 *srcp= 128; | |
687 for(mx=r-1; mx<mwidth; mx++){ | |
688 *dstp += m3[mx]; | |
689 dstp+= width+1; | |
690 } | |
691 } | |
692 } | |
693 for(; y<height-r; y++){ | |
694 unsigned short *srcp= t + y*(width+1) + 1; | |
695 int src= *srcp; | |
696 if(src){ | |
697 register unsigned short *dstp= srcp - 1 - r*(width+1); | |
698 const int src2= (src + 128)>>8; | |
699 unsigned *m3= m2 + src2*mwidth; | |
700 | |
701 int mx; | |
702 *srcp= 128; | |
703 for(mx=0; mx<mwidth; mx++){ | |
704 *dstp += m3[mx]; | |
705 dstp+= width+1; | |
706 } | |
707 } | |
708 } | |
709 for(; y<height; y++){ | |
710 unsigned short *srcp= t + y*(width+1) + 1; | |
711 int src= *srcp; | |
712 if(src){ | |
713 const int y2=r+height-y; | |
714 register unsigned short *dstp= srcp - 1 - r*(width+1); | |
715 const int src2= (src + 128)>>8; | |
716 unsigned *m3= m2 + src2*mwidth; | |
717 | |
718 int mx; | |
719 *srcp= 128; | |
720 for(mx=0; mx<y2; mx++){ | |
721 *dstp += m3[mx]; | |
722 dstp+= width+1; | |
723 } | |
724 } | |
725 } | |
726 t++; | |
727 } | |
728 | |
729 t = tmp2; | |
730 s = buffer; | |
731 for(y=0; y<height; y++){ | |
732 for(x=0; x<width; x++){ | |
733 s[x]= t[x]>>8; | |
734 } | |
735 s+= width; | |
736 t+= width + 1; | |
737 } | |
738 #else | |
739 unsigned char *tmp = (unsigned char*)tmp2; | |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
740 unsigned char *s = buffer - r; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
741 unsigned char *t = tmp; |
7023 | 742 |
743 int *m_end=m+256*mwidth; | |
744 | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
745 for (y = 0; y<height; ++y) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
746 for (x = 0; x<width; ++x, ++s, ++t) { |
7023 | 747 unsigned sum = 65536/2; |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
748 int x1 = (x<r) ? r-x:0; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
749 int x2 = (x+r>=width) ? (r+width-x):mwidth; |
7023 | 750 unsigned* mp = m + 256*x1; |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
751 int mx; |
7028 | 752 |
7023 | 753 for (mx = x1; mx<x2; ++mx, mp+=256) sum+= mp[s[mx]]; |
754 *t = sum>>16; | |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
755 } |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
756 } |
7028 | 757 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
758 tmp -= r*width; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
759 for (x = 0; x<width; ++x, ++tmp, ++buffer) { |
7023 | 760 int y1max=(r<height)?r:height; |
761 int y2min=height-r; | |
762 if(y2min<y1max) y2min=y1max; | |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
763 s = tmp; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
764 t = buffer; |
7023 | 765 #if 0 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
766 for (y = 0; y<height; ++y, s+= width, t+= width) { |
7023 | 767 unsigned sum = 65536/2; |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
768 int y1 = (y<r) ? r-y:0; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
769 int y2 = (y+r>=height) ? (r+height-y):mwidth; |
7023 | 770 register unsigned *mp = m + 256*y1; |
771 register unsigned char *smy = s + y1*width; | |
1507 | 772 int my; |
7023 | 773 for (my = y1; my<y2; ++my, smy+= width, mp+=256) |
774 sum+= mp[*smy]; | |
775 *t = sum>>16; | |
776 } | |
777 #else | |
778 // pass 1: 0..r | |
779 for (y = 0; y<y1max; ++y, s+= width, t+= width) { | |
780 unsigned sum = 65536/2; | |
781 int y1 = r-y; | |
782 int my = y1; | |
783 int y2 = (y+r>=height) ? (r+height-y):mwidth; | |
784 unsigned char *smy = s + y1*width; | |
785 unsigned* mp = m + 256*y1; | |
786 for (; my<y2; ++my, smy+= width, mp+=256) sum+=mp[*smy]; | |
787 *t = sum>>16; | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
788 } |
7023 | 789 // pass 2: r..(height-r) |
790 for (; y<y2min; ++y, s+= width, t+= width) { | |
791 unsigned sum = 65536/2; | |
792 unsigned char *smy = s; | |
793 unsigned* mp = m; | |
794 // int my=0; | |
795 // for (; my<mwidth; ++my, smy+=width, mp+=256) sum+=mp[*smy]; | |
796 for (; mp<m_end; smy+=width, mp+=256) sum+=mp[*smy]; | |
797 *t = sum>>16; | |
798 } | |
799 // pass 3: (height-r)..height | |
800 for (; y<height; ++y, s+= width, t+= width) { | |
801 unsigned sum = 65536/2; | |
802 int y2 = r+height-y; | |
803 unsigned char *smy = s; | |
804 unsigned* mp = m; | |
805 int my=0; | |
806 for (; my<y2; ++my, smy+= width, mp+=256) sum+=mp[*smy]; | |
807 *t = sum>>16; | |
808 } | |
809 #endif | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
810 } |
7028 | 811 #endif |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
812 } |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
813 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
814 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
815 // Gaussian matrix |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
816 // Maybe for future use. |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
817 unsigned gmatrix(unsigned *m, int r, int w, double const A) { |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
818 unsigned volume = 0; // volume under Gaussian area is exactly -pi*base/A |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
819 int mx, my; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
820 |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
821 for (my = 0; my<w; ++my) { |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
822 for (mx = 0; mx<w; ++mx) { |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
823 m[mx+my*w] = (unsigned)(exp(A * ((mx-r)*(mx-r)+(my-r)*(my-r))) * base + .5); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
824 volume+= m[mx+my*w]; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
825 if (DEBUG) eprintf("%3i ", m[mx+my*w]); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
826 } |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
827 if (DEBUG) eprintf("\n"); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
828 } |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
829 if (DEBUG) { |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
830 eprintf("A= %f\n", A); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
831 eprintf("volume: %i; exact: %.0f; volume/exact: %.6f\n\n", volume, -M_PI*base/A, volume/(-M_PI*base/A)); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
832 } |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
833 return volume; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
834 } |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
835 |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
836 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
837 void alpha() { |
7016 | 838 unsigned int ttime; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
839 int const g_r = ceil(radius); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
840 int const o_r = ceil(thickness); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
841 int const g_w = 2*g_r+1; // matrix size |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
842 int const o_w = 2*o_r+1; // matrix size |
7022 | 843 int const o_size = o_w * o_w; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
844 double const A = log(1.0/base)/(radius*radius*2); |
7028 | 845 double volume_factor=0.0; |
846 double volume_diff; | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
847 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
848 int mx, my, i; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
849 unsigned volume = 0; // volume under Gaussian area is exactly -pi*base/A |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
850 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
851 unsigned *g = (unsigned*)malloc(g_w * sizeof(unsigned)); |
7023 | 852 unsigned *gt = (unsigned*)malloc(256 * g_w * sizeof(unsigned)); |
7028 | 853 unsigned *gt2 = (unsigned*)malloc(256 * g_w * sizeof(unsigned)); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
854 unsigned *om = (unsigned*)malloc(o_w*o_w * sizeof(unsigned)); |
7022 | 855 unsigned char *omt = malloc(o_size*256); |
856 unsigned char *omtp = omt; | |
7028 | 857 unsigned short *tmp = malloc((width+1)*height*sizeof(short)); |
7022 | 858 |
7028 | 859 if (g==NULL || gt==NULL || gt2==NULL || om==NULL || omt==NULL) ERROR("malloc failed."); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
860 |
7028 | 861 // gaussian curve with volume = 256 |
862 for (volume_diff=10000000; volume_diff>0.0000001; volume_diff*=0.5){ | |
863 volume_factor+= volume_diff; | |
864 volume=0; | |
865 for (i = 0; i<g_w; ++i) { | |
866 g[i] = (unsigned)(exp(A * (i-g_r)*(i-g_r)) * volume_factor + .5); | |
867 volume+= g[i]; | |
868 } | |
869 if(volume>256) volume_factor-= volume_diff; | |
870 } | |
871 volume=0; | |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
872 for (i = 0; i<g_w; ++i) { |
7028 | 873 g[i] = (unsigned)(exp(A * (i-g_r)*(i-g_r)) * volume_factor + .5); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
874 volume+= g[i]; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
875 if (DEBUG) eprintf("%3i ", g[i]); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
876 } |
7028 | 877 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
878 //volume *= volume; |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
879 if (DEBUG) eprintf("\n"); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
880 |
7023 | 881 // gauss table: |
882 for(mx=0;mx<g_w;mx++){ | |
7028 | 883 for(i=0;i<256;i++){ |
7023 | 884 gt[256*mx+i] = (i*g[mx]*65536+(volume/2))/volume; |
7028 | 885 gt2[mx+i*g_w] = i*g[mx]; |
886 } | |
7023 | 887 } |
888 | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
889 /* outline matrix */ |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
890 for (my = 0; my<o_w; ++my) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
891 for (mx = 0; mx<o_w; ++mx) { |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
892 // antialiased circle would be perfect here, but this one is good enough |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
893 double d = thickness + 1 - sqrt((mx-o_r)*(mx-o_r)+(my-o_r)*(my-o_r)); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
894 om[mx+my*o_w] = d>=1 ? base : d<=0 ? 0 : (d*base + .5); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
895 if (DEBUG) eprintf("%3i ", om[mx+my*o_w]); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
896 } |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
897 if (DEBUG) eprintf("\n"); |
1471
00a1f4b77803
dirty fix to get it work with glibc 2.1.x, and changed blur algorithm
arpi
parents:
1470
diff
changeset
|
898 } |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
899 if (DEBUG) eprintf("\n"); |
1474 | 900 |
7022 | 901 // outline table: |
902 for(i=0;i<256;i++){ | |
903 for(mx=0;mx<o_size;mx++) *(omtp++) = (i*om[mx] + (base/2))/base; | |
904 } | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
905 |
7016 | 906 ttime=GetTimer(); |
1507 | 907 if(thickness==1.0) |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
908 outline1(bbuffer, abuffer, width, height); // FAST solid 1 pixel outline |
1507 | 909 else |
7022 | 910 outline(bbuffer, abuffer, width, height, omt, o_r, o_w, o_size); // solid outline |
7016 | 911 //outline(bbuffer, abuffer, width, height, gm, g_r, g_w); // Gaussian outline |
912 ttime=GetTimer()-ttime; | |
913 printf("outline: %7d us\n",ttime); | |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
914 |
7016 | 915 ttime=GetTimer(); |
7023 | 916 // blur(abuffer, bbuffer, width, height, g, g_r, g_w, volume); |
7028 | 917 blur(abuffer, tmp, width, height, gt, gt2, g_r, g_w, volume); |
7016 | 918 ttime=GetTimer()-ttime; |
919 printf("gauss: %7d us\n",ttime); | |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
920 |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
921 free(g); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
922 free(om); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
923 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
924 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
925 |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
926 void usage() { |
4935 | 927 printf("Usage: %s [--outdir dir] [--append] [--unicode] [--blur b] [--outline o] encoding ppem font\n", command); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
928 printf("\n" |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
929 " Program creates 3 files: font.desc, <encoding>-a.raw, <encoding>-b.raw.\n" |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
930 "\n" |
4935 | 931 " --outdir output directory to place files.\n" |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
932 " --append append results to existing font.desc, suppress info header.\n" |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
933 " --unicode use Unicode in font.desc. This will work with -utf8 option of mplayer.\n" |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
934 " --blur b specify blur radius, float.\n" |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
935 " --outline o specify outline thickness, float.\n" |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
936 " encoding must be an 8 bit encoding, like iso-8859-2, or path to custom encoding file (see README).\n" |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
937 " To list encodings available on your system use iconv --list.\n" |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
938 " ppem Font size in pixels (default 24), float.\n" |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
939 " font Font file path. Any format supported by the freetype library (*.ttf, *.pfb, ...).\n" |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
940 ); |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
941 exit(1); |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
942 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
943 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
944 |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
945 void parse_args(int argc, char **argv) { |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
946 int i, a = 0; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
947 double d; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
948 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
949 command = strrchr(argv[a], '/'); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
950 if (command==NULL) command = argv[a]; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
951 else ++command; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
952 ++a; --argc; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
953 |
4935 | 954 if (argc>=1 && strcmp(argv[a], "--outdir")==0) { |
955 ++a; --argc; | |
956 if (argc==0) usage(); | |
957 | |
958 outdir = strdup(argv[a]); | |
959 ++a; --argc; | |
960 } | |
961 | |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
962 if (argc>=1 && strcmp(argv[a], "--append")==0) { |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
963 append_mode = 1; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
964 ++a; --argc; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
965 } |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
966 |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
967 if (argc>=1 && strcmp(argv[a], "--unicode")==0) { |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
968 unicode_desc = 1; |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
969 ++a; --argc; |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
970 } |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
971 |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
972 if (argc>=1 && strcmp(argv[a], "--blur")==0) { |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
973 ++a; --argc; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
974 if (argc==0) usage(); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
975 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
976 d = atof(argv[a]); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
977 if (d>=0 && d<20) radius = d; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
978 else WARNING("using default blur radius."); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
979 ++a; --argc; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
980 } |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
981 |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
982 if (argc>=1 && strcmp(argv[a], "--outline")==0) { |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
983 ++a; --argc; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
984 if (argc==0) usage(); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
985 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
986 d = atof(argv[a]); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
987 if (d>=0 && d<20) thickness = d; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
988 else WARNING("using default outline thickness."); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
989 ++a; --argc; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
990 } |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
991 |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
992 if (argc<3) usage(); |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
993 |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
994 // encoding |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
995 if (argv[a][0]!=0) |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
996 encoding = argv[a]; |
1506
94d929f91b06
return value of iconv fixed for glibc 2.1.3, using strrchr instead of basename, as basename is buggy
arpi
parents:
1505
diff
changeset
|
997 encoding_name = strrchr(encoding, '/'); |
94d929f91b06
return value of iconv fixed for glibc 2.1.3, using strrchr instead of basename, as basename is buggy
arpi
parents:
1505
diff
changeset
|
998 if (!encoding_name) encoding_name=encoding; |
94d929f91b06
return value of iconv fixed for glibc 2.1.3, using strrchr instead of basename, as basename is buggy
arpi
parents:
1505
diff
changeset
|
999 else ++encoding_name; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
1000 ++a; --argc; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
1001 |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
1002 // ppem |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
1003 d = atof(argv[a]); |
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
1004 if (d>2.) ppem = d; |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
1005 ++a; --argc; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
1006 |
1675
8ccac62ddfb7
Added --unicode switch. This is for UTF-8 encoded subtitles.
zybi
parents:
1607
diff
changeset
|
1007 // font |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
1008 font_path = argv[a]; |
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
1009 ++a; --argc; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1010 } |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1011 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
1012 |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1013 int main(int argc, char **argv) { |
7016 | 1014 unsigned int ttime; |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1015 parse_args(argc, argv); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
1016 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
1017 padding = ceil(radius) + ceil(thickness); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1018 |
7016 | 1019 ttime=GetTimer(); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1020 prepare_charset(); |
7016 | 1021 ttime=GetTimer()-ttime; |
1022 printf("charset: %7d us\n",ttime); | |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
1023 |
7016 | 1024 ttime=GetTimer(); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1025 render(); |
7016 | 1026 ttime=GetTimer()-ttime; |
1027 printf("render: %7d us\n",ttime); | |
1028 | |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
1029 write_bitmap(bbuffer, 'b'); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
1030 |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
1031 abuffer = (unsigned char*)malloc(width*height); |
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
1032 if (abuffer==NULL) ERROR("malloc failed."); |
8765 | 1033 memset(abuffer, 0, width*height); |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
1034 alpha(); |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
1035 write_bitmap(abuffer, 'a'); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1036 |
1607
7336606415f2
Implemented new Gaussian blur algorithm, extended font.desc format, optimized for speed and memory usage.
zybi
parents:
1507
diff
changeset
|
1037 free(bbuffer); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1038 free(abuffer); |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1039 |
1505
842c29861e25
upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents:
1474
diff
changeset
|
1040 // fflush(stderr); |
1470
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1041 return 0; |
2c7b0478db0c
mplayer font-generator using FreeType 2.x by Artur Zaprzala <zybi@fanthom.irc.pl>
arpi
parents:
diff
changeset
|
1042 } |