summaryrefslogtreecommitdiffstats
path: root/libvo/font_load_ft.c
diff options
context:
space:
mode:
Diffstat (limited to 'libvo/font_load_ft.c')
-rw-r--r--libvo/font_load_ft.c74
1 files changed, 37 insertions, 37 deletions
diff --git a/libvo/font_load_ft.c b/libvo/font_load_ft.c
index 5fb0ea4952..d116d6cf11 100644
--- a/libvo/font_load_ft.c
+++ b/libvo/font_load_ft.c
@@ -138,7 +138,7 @@ static int check_font(font_desc_t *desc, float ppem, int padding, int pic_idx,
int width, height;
unsigned char *bbuffer;
int i, uni_charmap = 1;
-
+
error = FT_Select_Charmap(face, ft_encoding_unicode);
// fprintf(stderr, "select unicode charmap: %d\n", error);
@@ -207,7 +207,7 @@ static int check_font(font_desc_t *desc, float ppem, int padding, int pic_idx,
ymax = (double)(face->bbox.yMax)/(double)face->units_per_EM*ppem+1;
ymin = (double)(face->bbox.yMin)/(double)face->units_per_EM*ppem-1;
-
+
width = ppem*(face->bbox.xMax-face->bbox.xMin)/face->units_per_EM+3+2*padding;
if (desc->max_width < width) desc->max_width = width;
width = ALIGN(width);
@@ -222,7 +222,7 @@ static int check_font(font_desc_t *desc, float ppem, int padding, int pic_idx,
mp_msg(MSGT_OSD, MSGL_ERR, "Something went wrong. Use the source!\n");
return -1;
}
-
+
height = ymax - ymin + 2*padding;
if (height <= 0) {
mp_msg(MSGT_OSD, MSGL_ERR, "Wrong bounding box, height <= 0 !\n");
@@ -231,7 +231,7 @@ static int check_font(font_desc_t *desc, float ppem, int padding, int pic_idx,
if (desc->max_height < height) desc->max_height = height;
desc->pic_b[pic_idx]->charheight = height;
-
+
// fprintf(stderr, "font height2: %d\n", height);
desc->pic_b[pic_idx]->baseline = ymax + padding;
desc->pic_b[pic_idx]->padding = padding;
@@ -239,7 +239,7 @@ static int check_font(font_desc_t *desc, float ppem, int padding, int pic_idx,
desc->pic_b[pic_idx]->current_count = 0;
bbuffer = NULL;
-
+
desc->pic_b[pic_idx]->w = width;
desc->pic_b[pic_idx]->h = height;
desc->pic_b[pic_idx]->c = colors;
@@ -261,7 +261,7 @@ static void outline(
int msize) {
int x, y;
-
+
for (y = 0; y<height; y++) {
for (x = 0; x<width; x++) {
const int src= s[x];
@@ -494,12 +494,12 @@ void render_one_glyph(font_desc_t *desc, int c)
FT_BitmapGlyph glyph;
int width, height, stride, maxw, off;
unsigned char *abuffer, *bbuffer;
-
+
int const load_flags = FT_LOAD_DEFAULT;
int pen_xa;
int font = desc->font[c];
int error;
-
+
// fprintf(stderr, "render_one_glyph %d\n", c);
if (!desc->dynamic) return;
@@ -507,7 +507,7 @@ void render_one_glyph(font_desc_t *desc, int c)
if (desc->font[c] == -1) return;
glyph_index = desc->glyph_index[c];
-
+
// load glyph
error = FT_Load_Glyph(desc->faces[font], glyph_index, load_flags);
if (error) {
@@ -538,7 +538,7 @@ void render_one_glyph(font_desc_t *desc, int c)
// fprintf(stderr, "glyph generated\n");
maxw = desc->pic_b[font]->charwidth;
-
+
if (glyph->bitmap.width > maxw) {
fprintf(stderr, "glyph too wide!\n");
}
@@ -559,7 +559,7 @@ void render_one_glyph(font_desc_t *desc, int c)
memset(desc->pic_b[font]->bmp+off, 0, increment);
memset(desc->pic_a[font]->bmp+off, 0, increment);
}
-
+
abuffer = desc->pic_a[font]->bmp;
bbuffer = desc->pic_b[font]->bmp;
@@ -571,10 +571,10 @@ void render_one_glyph(font_desc_t *desc, int c)
desc->pic_b[font]->baseline - glyph->top,
desc->pic_b[font]->charwidth, desc->pic_b[font]->charheight,
glyph->bitmap.width <= maxw ? glyph->bitmap.width : maxw);
-
+
// fprintf(stderr, "glyph pasted\n");
FT_Done_Glyph((FT_Glyph)glyph);
-
+
/* advance pen */
pen_xa = f266ToInt(slot->advance.x) + 2*desc->pic_b[font]->padding;
if (pen_xa > maxw) pen_xa = maxw;
@@ -594,7 +594,7 @@ void render_one_glyph(font_desc_t *desc, int c)
desc->tables.o_size);
}
// fprintf(stderr, "fg: outline t = %lf\n", GetTimer()-t);
-
+
if (desc->tables.g_r) {
blur(abuffer+off, desc->tables.tmp, width, height, stride,
desc->tables.gt2, desc->tables.g_r,
@@ -650,19 +650,19 @@ static int prepare_font(font_desc_t *desc, FT_Face face, float ppem, int pic_idx
// fprintf(stderr, "fg: w = %d, h = %d\n", desc->pic_a[pic_idx]->w, desc->pic_a[pic_idx]->h);
return 0;
-
+
}
static int generate_tables(font_desc_t *desc, double thickness, double radius)
{
int width = desc->max_height;
int height = desc->max_width;
-
+
double A = log(1.0/base)/(radius*radius*2);
int mx, my, i;
double volume_diff, volume_factor = 0;
unsigned char *omtp;
-
+
desc->tables.g_r = ceil(radius);
desc->tables.o_r = ceil(thickness);
desc->tables.g_w = 2*desc->tables.g_r+1;
@@ -683,7 +683,7 @@ static int generate_tables(font_desc_t *desc, double thickness, double radius)
omtp = desc->tables.omt;
desc->tables.tmp = malloc((width+1)*height*sizeof(short));
-
+
if (desc->tables.om==NULL || desc->tables.omt==NULL || desc->tables.tmp==NULL) {
return -1;
};
@@ -712,7 +712,7 @@ static int generate_tables(font_desc_t *desc, double thickness, double radius)
}
}
}
-
+
/* outline matrix */
for (my = 0; my<desc->tables.o_w; ++my) {
for (mx = 0; mx<desc->tables.o_w; ++mx) {
@@ -757,22 +757,22 @@ static int prepare_charset(char *charmap, char *encoding, FT_ULong *charset, FT_
int count = 0;
int charset_size;
iconv_t cd;
-
+
// check if ucs-4 is available
cd = iconv_open(charmap, charmap);
if (cd==(iconv_t)-1) {
mp_msg(MSGT_OSD, MSGL_ERR, "iconv doesn't know %s encoding. Use the source!\n", charmap);
return -1;
}
-
+
iconv_close(cd);
-
+
cd = iconv_open(charmap, encoding);
if (cd==(iconv_t)-1) {
mp_msg(MSGT_OSD, MSGL_ERR, "Unsupported encoding `%s', use iconv --list to list character sets known on your system.\n", encoding);
return -1;
}
-
+
charset_size = 256 - first_char;
for (i = 0; i<charset_size; ++i) {
charcodes[count] = i+first_char;
@@ -787,7 +787,7 @@ static int prepare_charset(char *charmap, char *encoding, FT_ULong *charset, FT_
mp_msg(MSGT_OSD, MSGL_ERR, "No characters to render!\n");
return -1;
}
-
+
return charset_size;
}
@@ -843,7 +843,7 @@ static font_desc_t* init_font_desc(void)
memset(desc,0,sizeof(font_desc_t));
desc->dynamic = 1;
-
+
/* setup sane defaults */
desc->name = NULL;
desc->fpath = NULL;
@@ -866,21 +866,21 @@ static font_desc_t* init_font_desc(void)
desc->start[i] = desc->width[i] = desc->font[i] = -1;
for(i = 0; i < 16; i++)
desc->pic_a[i] = desc->pic_b[i] = NULL;
-
+
return desc;
}
void free_font_desc(font_desc_t *desc)
{
int i;
-
+
if (!desc) return;
// if (!desc->dynamic) return; // some vo_aa crap, better leaking than crashing
if (desc->name) free(desc->name);
if (desc->fpath) free(desc->fpath);
-
+
for(i = 0; i < 16; i++) {
if (desc->pic_a[i]) {
if (desc->pic_a[i]->bmp) free(desc->pic_a[i]->bmp);
@@ -903,14 +903,14 @@ void free_font_desc(font_desc_t *desc)
for(i = 0; i < desc->face_cnt; i++) {
FT_Done_Face(desc->faces[i]);
}
-
+
free(desc);
}
static int load_sub_face(const char *name, int face_index, FT_Face *face)
{
int err = -1;
-
+
if (name) err = FT_New_Face(library, name, face_index, face);
if (err) {
@@ -940,12 +940,12 @@ static int load_osd_face(FT_Face *face)
int kerning(font_desc_t *desc, int prevc, int c)
{
FT_Vector kern;
-
+
if (!desc->dynamic) return 0;
if (prevc < 0 || c < 0) return 0;
if (desc->font[prevc] != desc->font[c]) return 0;
if (desc->font[prevc] == -1 || desc->font[c] == -1) return 0;
- FT_Get_Kerning(desc->faces[desc->font[c]],
+ FT_Get_Kerning(desc->faces[desc->font[c]],
desc->glyph_index[prevc], desc->glyph_index[c],
ft_kerning_default, &kern);
@@ -968,7 +968,7 @@ font_desc_t* read_font_desc_ft(const char *fname, int face_index, int movie_widt
int charset_size;
int i, j;
int unicode;
-
+
float movie_size;
float subtitle_font_ppem;
@@ -1065,14 +1065,14 @@ gen_osd:
err = prepare_font(desc, face, osd_font_ppem, desc->face_cnt-1,
OSD_CHARSET_SIZE, osd_charset, osd_charcodes, 0,
subtitle_font_thickness, subtitle_font_radius);
-
+
if (err) {
mp_tmsg(MSGT_OSD, MSGL_ERR, "Cannot prepare OSD font.\n");
goto err_out;
}
err = generate_tables(desc, subtitle_font_thickness, subtitle_font_radius);
-
+
if (err) {
mp_tmsg(MSGT_OSD, MSGL_ERR, "Cannot generate tables.\n");
goto err_out;
@@ -1108,7 +1108,7 @@ err_out:
int init_freetype(void)
{
int err;
-
+
/* initialize freetype */
err = FT_Init_FreeType(&library);
if (err) {
@@ -1126,7 +1126,7 @@ int done_freetype(void)
if (!using_freetype)
return 0;
-
+
err = FT_Done_FreeType(library);
if (err) {
mp_tmsg(MSGT_OSD, MSGL_ERR, "FT_Done_FreeType failed.\n");