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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1bf2c3dbc36e Resolved endianess issues.
zybi
parents: 1675
diff changeset
26 #endif
1505
842c29861e25 upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents: 1474
diff changeset
27
1677
1bf2c3dbc36e Resolved endianess issues.
zybi
parents: 1675
diff changeset
28
1bf2c3dbc36e Resolved endianess issues.
zybi
parents: 1675
diff changeset
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
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
49 char *outdir = ".";
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
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
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
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
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
241 {
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
242 int const max_name = 128;
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
243 char name[max_name];
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
244
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
245 snprintf(name, max_name, "%s/%s", outdir, font_desc);
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
246 f = fopen(name, append_mode ? "a":"w");
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
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
6c2523d7f03b putting blur and outline to the font.desc too
alex
parents: 10211
diff changeset
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
alex
parents: 5928
diff changeset
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
6c2523d7f03b putting blur and outline to the font.desc too
alex
parents: 10211
diff changeset
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
fb88ccbc5ccc compiler warning fixes
arpi
parents: 7040
diff changeset
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
fb88ccbc5ccc compiler warning fixes
arpi
parents: 7040
diff changeset
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
fb88ccbc5ccc compiler warning fixes
arpi
parents: 7040
diff changeset
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
fb88ccbc5ccc compiler warning fixes
arpi
parents: 7040
diff changeset
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
fb88ccbc5ccc compiler warning fixes
arpi
parents: 7040
diff changeset
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
fb88ccbc5ccc compiler warning fixes
arpi
parents: 7040
diff changeset
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
1bf2c3dbc36e Resolved endianess issues.
zybi
parents: 1675
diff changeset
438 /* convert unicode BigEndian -> MachineEndian */
1bf2c3dbc36e Resolved endianess issues.
zybi
parents: 1675
diff changeset
439 o = be2me_32(o);
1bf2c3dbc36e Resolved endianess issues.
zybi
parents: 1675
diff changeset
440
1bf2c3dbc36e Resolved endianess issues.
zybi
parents: 1675
diff changeset
441 // if (count==-1) o = 0; // not OK, at least my iconv() returns E2BIG for all
1bf2c3dbc36e Resolved endianess issues.
zybi
parents: 1675
diff changeset
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
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
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
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
508 int mwidth,
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
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
47a49d6d7132 speed optimized :)
arpi
parents: 1506
diff changeset
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
d27dd694e5ea more (~40%) speedup :)
arpi
parents: 7018
diff changeset
528 register unsigned char *dstp= t + (y1+y-r)* width + x-r;
7022
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
529 //register int *mp = m + y1 *mwidth;
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
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
d27dd694e5ea more (~40%) speedup :)
arpi
parents: 7018
diff changeset
534 // unsigned char *dstp= t + (my+y-r)* width + x-r;
d27dd694e5ea more (~40%) speedup :)
arpi
parents: 7018
diff changeset
535 // int *mp = m + my *mwidth;
d27dd694e5ea more (~40%) speedup :)
arpi
parents: 7018
diff changeset
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
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
538 // const int tmp= (src*mp[mx] + 128)>>8;
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
539 // if(dstp[mx] < tmp) dstp[mx]= tmp;
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
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
d27dd694e5ea more (~40%) speedup :)
arpi
parents: 7018
diff changeset
542 dstp+=width;
d27dd694e5ea more (~40%) speedup :)
arpi
parents: 7018
diff changeset
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
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
552 //if(s[0]>=192) printf("%d\n",s[0]);
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
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
47a49d6d7132 speed optimized :)
arpi
parents: 1506
diff changeset
557 int x1=(x<r)?-x:-r;
47a49d6d7132 speed optimized :)
arpi
parents: 1506
diff changeset
558 int x2=(x+r>=width)?(width-x-1):r;
47a49d6d7132 speed optimized :)
arpi
parents: 1506
diff changeset
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
47a49d6d7132 speed optimized :)
arpi
parents: 1506
diff changeset
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
47a49d6d7132 speed optimized :)
arpi
parents: 1506
diff changeset
566 for (mx = x1; mx<=x2; ++mx) {
47a49d6d7132 speed optimized :)
arpi
parents: 1506
diff changeset
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
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
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
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
573 } else
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
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
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
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
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
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
47a49d6d7132 speed optimized :)
arpi
parents: 1506
diff changeset
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
michael
parents: 7028
diff changeset
628 #if 1
7028
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
629 unsigned char *s = buffer;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
630 unsigned short *t = tmp2+1;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
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
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
633 // for(x=0; x<width+1; x++)
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
634 // t[x]= 128;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
635
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
636 for(x=0; x<r; x++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
637 const int src= s[x];
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
638 if(src){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
639 register unsigned short *dstp= t + x-r;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
640 int mx;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
641 unsigned *m3= m2 + src*mwidth;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
642 for(mx=r-x; mx<mwidth; mx++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
643 dstp[mx]+= m3[mx];
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
644 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
645 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
646 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
647 for(; x<width-r; x++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
648 const int src= s[x];
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
649 if(src){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
650 register unsigned short *dstp= t + x-r;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
651 int mx;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
652 unsigned *m3= m2 + src*mwidth;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
653 for(mx=0; mx<mwidth; mx++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
654 dstp[mx]+= m3[mx];
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
655 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
656 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
657 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
658 for(; x<width; x++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
659 const int src= s[x];
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
660 if(src){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
661 register unsigned short *dstp= t + x-r;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
662 int mx;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
663 const int x2= r+width -x;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
664 const int off= src*mwidth;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
665 unsigned *m3= m2 + src*mwidth;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
666 for(mx=0; mx<x2; mx++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
667 dstp[mx]+= m3[mx];
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
668 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
669 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
670 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
671 s+= width;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
672 t+= width + 1;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
673 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
674
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
675 t = tmp2;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
676 for(x=0; x<width; x++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
677 for(y=0; y<r; y++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
678 unsigned short *srcp= t + y*(width+1) + 1;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
679 int src= *srcp;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
680 if(src){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
681 register unsigned short *dstp= srcp - 1 + width+1;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
682 const int src2= (src + 128)>>8;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
683 unsigned *m3= m2 + src2*mwidth;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
684
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
685 int mx;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
686 *srcp= 128;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
687 for(mx=r-1; mx<mwidth; mx++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
688 *dstp += m3[mx];
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
689 dstp+= width+1;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
690 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
691 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
692 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
693 for(; y<height-r; y++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
694 unsigned short *srcp= t + y*(width+1) + 1;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
695 int src= *srcp;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
696 if(src){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
697 register unsigned short *dstp= srcp - 1 - r*(width+1);
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
698 const int src2= (src + 128)>>8;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
699 unsigned *m3= m2 + src2*mwidth;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
700
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
701 int mx;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
702 *srcp= 128;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
703 for(mx=0; mx<mwidth; mx++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
704 *dstp += m3[mx];
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
705 dstp+= width+1;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
706 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
707 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
708 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
709 for(; y<height; y++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
710 unsigned short *srcp= t + y*(width+1) + 1;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
711 int src= *srcp;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
712 if(src){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
713 const int y2=r+height-y;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
714 register unsigned short *dstp= srcp - 1 - r*(width+1);
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
715 const int src2= (src + 128)>>8;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
716 unsigned *m3= m2 + src2*mwidth;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
717
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
718 int mx;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
719 *srcp= 128;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
720 for(mx=0; mx<y2; mx++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
721 *dstp += m3[mx];
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
722 dstp+= width+1;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
723 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
724 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
725 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
726 t++;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
727 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
728
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
729 t = tmp2;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
730 s = buffer;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
731 for(y=0; y<height; y++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
732 for(x=0; x<width; x++){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
733 s[x]= t[x]>>8;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
734 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
735 s+= width;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
736 t+= width + 1;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
737 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
738 #else
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
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
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
742
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
743 int *m_end=m+256*mwidth;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
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
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
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
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
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
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
752
7023
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
753 for (mx = x1; mx<x2; ++mx, mp+=256) sum+= mp[s[mx]];
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
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
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
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
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
760 int y1max=(r<height)?r:height;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
761 int y2min=height-r;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
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
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
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
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
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
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
770 register unsigned *mp = m + 256*y1;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
771 register unsigned char *smy = s + y1*width;
1507
47a49d6d7132 speed optimized :)
arpi
parents: 1506
diff changeset
772 int my;
7023
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
773 for (my = y1; my<y2; ++my, smy+= width, mp+=256)
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
774 sum+= mp[*smy];
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
775 *t = sum>>16;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
776 }
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
777 #else
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
778 // pass 1: 0..r
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
779 for (y = 0; y<y1max; ++y, s+= width, t+= width) {
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
780 unsigned sum = 65536/2;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
781 int y1 = r-y;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
782 int my = y1;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
783 int y2 = (y+r>=height) ? (r+height-y):mwidth;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
784 unsigned char *smy = s + y1*width;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
785 unsigned* mp = m + 256*y1;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
786 for (; my<y2; ++my, smy+= width, mp+=256) sum+=mp[*smy];
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
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
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
789 // pass 2: r..(height-r)
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
790 for (; y<y2min; ++y, s+= width, t+= width) {
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
791 unsigned sum = 65536/2;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
792 unsigned char *smy = s;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
793 unsigned* mp = m;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
794 // int my=0;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
795 // for (; my<mwidth; ++my, smy+=width, mp+=256) sum+=mp[*smy];
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
796 for (; mp<m_end; smy+=width, mp+=256) sum+=mp[*smy];
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
797 *t = sum>>16;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
798 }
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
799 // pass 3: (height-r)..height
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
800 for (; y<height; ++y, s+= width, t+= width) {
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
801 unsigned sum = 65536/2;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
802 int y2 = r+height-y;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
803 unsigned char *smy = s;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
804 unsigned* mp = m;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
805 int my=0;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
806 for (; my<y2; ++my, smy+= width, mp+=256) sum+=mp[*smy];
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
807 *t = sum>>16;
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
808 }
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
809 #endif
1505
842c29861e25 upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents: 1474
diff changeset
810 }
7028
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
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
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
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
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
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
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
845 double volume_factor=0.0;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
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
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
852 unsigned *gt = (unsigned*)malloc(256 * g_w * sizeof(unsigned));
7028
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
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
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
855 unsigned char *omt = malloc(o_size*256);
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
856 unsigned char *omtp = omt;
7028
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
857 unsigned short *tmp = malloc((width+1)*height*sizeof(short));
7022
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
858
7028
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
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
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
861 // gaussian curve with volume = 256
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
862 for (volume_diff=10000000; volume_diff>0.0000001; volume_diff*=0.5){
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
863 volume_factor+= volume_diff;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
864 volume=0;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
865 for (i = 0; i<g_w; ++i) {
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
866 g[i] = (unsigned)(exp(A * (i-g_r)*(i-g_r)) * volume_factor + .5);
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
867 volume+= g[i];
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
868 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
869 if(volume>256) volume_factor-= volume_diff;
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
870 }
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
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
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
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
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
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
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
881 // gauss table:
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
882 for(mx=0;mx<g_w;mx++){
7028
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
883 for(i=0;i<256;i++){
7023
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
884 gt[256*mx+i] = (i*g[mx]*65536+(volume/2))/volume;
7028
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
885 gt2[mx+i*g_w] = i*g[mx];
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
886 }
7023
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
887 }
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
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
529a65694e40 more optimization
arpi
parents: 1472
diff changeset
900
7022
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
901 // outline table:
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
902 for(i=0;i<256;i++){
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
903 for(mx=0;mx<o_size;mx++) *(omtp++) = (i*om[mx] + (base/2))/base;
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
904 }
1505
842c29861e25 upgraded to 1.0b version by Artur Zaprzala <artur.zaprzala@talex.com.pl>
arpi
parents: 1474
diff changeset
905
7016
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
906 ttime=GetTimer();
1507
47a49d6d7132 speed optimized :)
arpi
parents: 1506
diff changeset
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
47a49d6d7132 speed optimized :)
arpi
parents: 1506
diff changeset
909 else
7022
ef9f4c1a3345 using precalculated src*om[][] table -> 25% faster.
arpi
parents: 7021
diff changeset
910 outline(bbuffer, abuffer, width, height, omt, o_r, o_w, o_size); // solid outline
7016
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
911 //outline(bbuffer, abuffer, width, height, gm, g_r, g_w); // Gaussian outline
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
912 ttime=GetTimer()-ttime;
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
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
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
915 ttime=GetTimer();
7023
273e374311c6 speedup of gauss
arpi
parents: 7022
diff changeset
916 // blur(abuffer, bbuffer, width, height, g, g_r, g_w, volume);
7028
9d4273713562 40% faster blur
michael
parents: 7023
diff changeset
917 blur(abuffer, tmp, width, height, gt, gt2, g_r, g_w, volume);
7016
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
918 ttime=GetTimer()-ttime;
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
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
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
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
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
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
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
954 if (argc>=1 && strcmp(argv[a], "--outdir")==0) {
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
955 ++a; --argc;
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
956 if (argc==0) usage();
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
957
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
958 outdir = strdup(argv[a]);
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
959 ++a; --argc;
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
960 }
958bcb3b5725 --outdir added
alex
parents: 1677
diff changeset
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
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
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
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
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
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
1021 ttime=GetTimer()-ttime;
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
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
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
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
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
1026 ttime=GetTimer()-ttime;
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
1027 printf("render: %7d us\n",ttime);
44ce5a673be2 added gettimeofday-based profiling/timing
arpi
parents: 6788
diff changeset
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
arpi
parents: 8451
diff changeset
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 }