mirror of
https://github.com/mpv-player/mpv
synced 2025-02-19 06:17:00 +00:00
Remove obsolete bitmap font tools.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22857 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
c5bdfbc886
commit
1b06161629
@ -8,7 +8,6 @@ OBJS = alaw-gen$(EXESUF) \
|
||||
avisubdump$(EXESUF) \
|
||||
dump_mp4$(EXESUF) \
|
||||
movinfo$(EXESUF) \
|
||||
png2raw$(EXESUF) \
|
||||
subrip$(EXESUF) \
|
||||
# vivodump$(EXESUF) \
|
||||
|
||||
@ -18,9 +17,6 @@ endif
|
||||
|
||||
all: $(OBJS)
|
||||
|
||||
png2raw$(EXESUF): png2raw.c
|
||||
$(CC) $< -o $@ -lpng
|
||||
|
||||
subrip$(EXESUF): subrip.c
|
||||
$(CC) $(CFLAGS) -g -o $@ $< ../vobsub.o ../spudec.o ../mp_msg.o \
|
||||
../unrarlib.o ../libswscale/libswscale.a ../libavutil/libavutil.a \
|
||||
|
@ -391,15 +391,6 @@ Description: Show QuickTime MOV file structure.
|
||||
Usage: movinfo <filename.mov>
|
||||
|
||||
|
||||
png2raw
|
||||
|
||||
Author: Arpi
|
||||
|
||||
Description: PNG to RAW image converter, used by .raw font creators.
|
||||
|
||||
Usage: png2raw <file1> [file2...]
|
||||
|
||||
|
||||
vivodump
|
||||
|
||||
Author: Arpi
|
||||
|
@ -1,15 +0,0 @@
|
||||
|
||||
TARGET = mpfc-ce mpfc-kr
|
||||
|
||||
LIBS=-lgd -lttf -lpng
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
mpfc-ce: mpfc-ce.c
|
||||
$(CC) -Wall -O2 -o $@ $< $(LIBS)
|
||||
|
||||
mpfc-kr: mpfc-kr.c
|
||||
$(CC) -Wall -O2 -o $@ $< $(LIBS)
|
||||
|
||||
clean:
|
||||
-rm -f $(TARGET)
|
@ -1,284 +0,0 @@
|
||||
/*
|
||||
|
||||
mplayer font creator for central-europe (latin-1 etc) charset
|
||||
|
||||
This program uses gd & freetype2 library to draw each characters then
|
||||
write the image to stdout.
|
||||
|
||||
Written by Sunjin Yang <lethean@realtime.ssu.ac.kr> May 03, 2001.
|
||||
Modified by Arpad Gereoffy <arpi@thot.banki.hu> Jun 18, 2001.
|
||||
|
||||
*/
|
||||
|
||||
#include <gd.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define UPSCALE_FACTOR 2
|
||||
|
||||
#define X_ALIGN (8*UPSCALE_FACTOR)
|
||||
#define ALIGNED(x) (((x)+(X_ALIGN-1))&(~(X_ALIGN-1)))
|
||||
|
||||
#define DEF_FONT_SIZE 16.0
|
||||
|
||||
#define DEF_CHAR_GAP 6
|
||||
#define CHAR_SKIP(gap) (gap / 4)
|
||||
|
||||
#define AUTHOR "Sunjin Yang <lethean@realtime.ssu.ac.kr>"
|
||||
#define VERSION "0.1"
|
||||
|
||||
struct code_range {
|
||||
int start, end;
|
||||
};
|
||||
|
||||
/* basic alphabet character range */
|
||||
//static struct code_range ascii_range = { 0x21, 0x7E };
|
||||
static struct code_range ascii_range = { 0x20, 0x1FF };
|
||||
|
||||
#ifdef USE_UNIFIED_KOREAN
|
||||
|
||||
/* Unified Hangul Code Encoding */
|
||||
static struct code_range first_byte_range[] = {
|
||||
{ 0x81, 0xFE }, { 0, 0 }
|
||||
};
|
||||
static struct code_range second_byte_range[] = {
|
||||
{ 0x41, 0x5A }, { 0x61, 0x7A }, { 0x81, 0x9F }, { 0xA0, 0xBF },
|
||||
{ 0xC0, 0xDF }, { 0xE0, 0xFE }, { 0, 0 }
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
/* KSX 1001:1992 */
|
||||
static struct code_range first_byte_range[] = {
|
||||
{ 0xA1, 0xAC }, { 0xB0, 0xFD }, { 0, 0 }
|
||||
};
|
||||
static struct code_range second_byte_range[] = {
|
||||
{ 0xA1, 0xAF }, { 0xB0, 0xBF }, { 0xC0, 0xCF }, { 0xD0, 0xDF },
|
||||
{ 0xE0, 0xEF }, { 0xF0, 0xFE }, { 0, 0 }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#define _output(msg...) fprintf(stdout, ##msg)
|
||||
|
||||
/* debugging macros */
|
||||
#define _print(msg...) fprintf(stderr, ##msg)
|
||||
#define _info(msg...) { _print("mpfc: "); _print(##msg); _print("\n"); }
|
||||
#define _abort(msg...) { _info(##msg); exit(1); }
|
||||
|
||||
static double size;
|
||||
static int gap,vgap;
|
||||
static char *name, *font, *eng_font, *kor_font;
|
||||
static int file_index;
|
||||
static char filename[20];
|
||||
|
||||
static int base_x, char_count;
|
||||
static gdImagePtr char_image[65536];
|
||||
|
||||
static gdImagePtr concat_char_images(void)
|
||||
{
|
||||
gdImagePtr ret;
|
||||
int width, height, i, x,black, white;
|
||||
|
||||
/* get image's width & height */
|
||||
height = size + (vgap * 2);
|
||||
for (width = 0, i = 0; i < char_count; i++)
|
||||
width += ALIGNED(char_image[i]->sx);
|
||||
|
||||
ret = gdImageCreate(width, height);
|
||||
|
||||
/* background color (first allocated) */
|
||||
black = gdImageColorResolve(ret, 0, 0, 0);
|
||||
// white = gdImageColorResolve(ret, 255, 255, 255);
|
||||
for(x=1;x<=255;x++)
|
||||
white = gdImageColorResolve(ret, x,x,x);
|
||||
|
||||
width = 0;
|
||||
for (i = 0; i < char_count; i++) {
|
||||
gdImageCopy(ret, char_image[i], /* dst, src */
|
||||
width + 0, 0, /* dstX, dstY */
|
||||
0, 0, /* srcX, srcY */
|
||||
char_image[i]->sx, char_image[i]->sy); /* size */
|
||||
width += ALIGNED(char_image[i]->sx);
|
||||
gdImageDestroy(char_image[i]);
|
||||
}
|
||||
char_count = 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static gdImagePtr create_char_image(int code)
|
||||
{
|
||||
gdImagePtr im;
|
||||
int rect[8], black, white, width, height, x, y;
|
||||
char *err;
|
||||
char s[10];
|
||||
|
||||
#if 1
|
||||
sprintf(s,"&#%d;",code);
|
||||
#else
|
||||
if(code>=0x100){
|
||||
s[0]=code>>8;
|
||||
s[1]=code&0xFF;
|
||||
s[2]=0;
|
||||
} else {
|
||||
s[0]=code;
|
||||
s[1]=0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* obtain border rectangle so that we can size the image. */
|
||||
err = gdImageStringTTF(NULL, &rect[0], 0, font, size, .0, 0, 0, s);
|
||||
if (err)
|
||||
_abort("%s\n", err);
|
||||
|
||||
/* create an image big enough for a string plus a little whitespace. */
|
||||
width = rect[2] - rect[6] + gap;
|
||||
height = size + (vgap * 2);
|
||||
im = gdImageCreate(width, height);
|
||||
|
||||
/* background color (first allocated) */
|
||||
black = gdImageColorResolve(im, 0, 0, 0);
|
||||
for(x=1;x<=255;x++)
|
||||
white = gdImageColorResolve(im, x,x,x);
|
||||
// white = gdImageColorResolve(im, 255, 255, 255);
|
||||
|
||||
/* render the string, offset origin to center string.
|
||||
note that we use top-left coordinate for adjustment
|
||||
since gd origin is in top-left with y increasing downwards. */
|
||||
x = (gap / 2) - rect[6];
|
||||
y = (vgap) - rect[7] + (size + rect[7]);
|
||||
err = gdImageStringTTF(im, &rect[0], white, font, size, .0, x, y, s);
|
||||
if (err)
|
||||
_abort("%s\n", err);
|
||||
|
||||
//if (*s == '"') _output("'%s' ", s); else _output("\"%s\" ", s);
|
||||
_output("0x%x %d %d\n", code,
|
||||
(base_x + CHAR_SKIP(gap))/UPSCALE_FACTOR -1,
|
||||
(base_x + width - CHAR_SKIP(gap))/UPSCALE_FACTOR - 0);
|
||||
base_x += ALIGNED(width);
|
||||
// base_x = (base_x+width+7)&(~7); // align to 8-pixel boundary for fast MMX code
|
||||
|
||||
return im;
|
||||
}
|
||||
|
||||
void make_charset_font(struct code_range *first, struct code_range *second)
|
||||
{
|
||||
gdImagePtr im;
|
||||
FILE *fd;
|
||||
int i, j;
|
||||
|
||||
base_x = 0;
|
||||
char_count = 0;
|
||||
|
||||
_output("[files]\n");
|
||||
//_output("alpha %s%d_a.raw\n", name, file_index);
|
||||
_output("alpha %s%02d_a.raw\n", name, file_index);
|
||||
_output("bitmap %s%02d_b.raw\n\n", name, file_index);
|
||||
_output("[characters]\n");
|
||||
|
||||
for (i = first->start; i <= first->end; i++) {
|
||||
if (!second) {
|
||||
char_image[char_count++] = create_char_image(i);
|
||||
} else
|
||||
for (j = second->start; j <= second->end; j++) {
|
||||
char_image[char_count++]= create_char_image((i<<8)|j);
|
||||
}
|
||||
}
|
||||
|
||||
_output("\n");
|
||||
|
||||
/* concatenate each character images into one image. */
|
||||
im = concat_char_images();
|
||||
|
||||
/* get filename and create one with it. */
|
||||
sprintf(filename, "%s%02d_b.png", name, file_index++);
|
||||
fd = fopen(filename, "w+");
|
||||
if (!fd)
|
||||
_abort(strerror(errno));
|
||||
|
||||
/* write image to the PNG file. */
|
||||
gdImagePng(im, fd);
|
||||
|
||||
fclose(fd);
|
||||
|
||||
/* destroy it */
|
||||
gdImageDestroy(im);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
if (argc < 4)
|
||||
_abort("usage:%s name eng-ttf kor-ttf [size gap vgap]",argv[0]);
|
||||
|
||||
/* get program parameter like font names, size... */
|
||||
name = argv[1];
|
||||
eng_font = argv[2];
|
||||
kor_font = argv[3];
|
||||
size = DEF_FONT_SIZE;
|
||||
gap = DEF_CHAR_GAP;
|
||||
vgap = DEF_CHAR_GAP;
|
||||
if (argc > 4) {
|
||||
float __s; sscanf(argv[4], "%f", &__s);
|
||||
size = (double)__s;
|
||||
}
|
||||
if (argc > 5)
|
||||
sscanf(argv[5], "%d", &gap);
|
||||
if (argc > 6)
|
||||
sscanf(argv[6], "%d", &vgap);
|
||||
|
||||
/* write basic font information. */
|
||||
_output("[info]\n");
|
||||
_output("name \"%s version %s - created by %s\"\n",
|
||||
name, VERSION, AUTHOR);
|
||||
_output("descversion 1\n");
|
||||
_output("spacewidth %d\n", (int)(size / 2));
|
||||
_output("charspace -%d\n", CHAR_SKIP(gap) + 1);
|
||||
_output("; height %d\n\n", (int)size + DEF_CHAR_GAP);
|
||||
|
||||
/* write general OSD fonts information. */
|
||||
_output("[files]\n");
|
||||
_output("alpha arpi_osd_a.raw\n");
|
||||
_output("bitmap arpi_osd_b.raw\n\n");
|
||||
_output("[characters]\n");
|
||||
_output("0x01 0 36\n");
|
||||
_output("0x02 35 71\n");
|
||||
_output("0x03 70 106\n");
|
||||
_output("0x04 116 152\n");
|
||||
_output("0x05 164 200\n");
|
||||
_output("0x06 209 245\n");
|
||||
_output("0x07 256 292\n");
|
||||
_output("0x08 305 342\n");
|
||||
_output("0x09 354 400\n");
|
||||
_output("0x0A 407 442\n");
|
||||
_output("0x0B 457 494\n");
|
||||
_output("[files]\n");
|
||||
_output("alpha arpi_progress_a.raw\n");
|
||||
_output("bitmap arpi_progress_b.raw\n\n");
|
||||
_output("[characters]\n");
|
||||
_output("0x10 4 21\n");
|
||||
_output("0x11 30 41\n");
|
||||
_output("0x12 50 66\n");
|
||||
_output("0x13 74 85\n\n");
|
||||
|
||||
|
||||
file_index = 0;
|
||||
|
||||
/* create basic alphabet character set. */
|
||||
font = eng_font;
|
||||
make_charset_font(&ascii_range, NULL);
|
||||
|
||||
#if 0
|
||||
/* create korean character set. */
|
||||
font = kor_font;
|
||||
for (i = 0; first_byte_range[i].start != 0; i++)
|
||||
for (j = 0; second_byte_range[j].start != 0; j++)
|
||||
make_charset_font(&first_byte_range[i], &second_byte_range[j]);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,255 +0,0 @@
|
||||
/*
|
||||
|
||||
mplayer font creator for korean(euc-kr) charset
|
||||
|
||||
This program uses gd & freetype2 library to draw each characters then
|
||||
write the image to stdout.
|
||||
|
||||
Written by Sunjin Yang <lethean@realtime.ssu.ac.kr> May 03, 2001.
|
||||
|
||||
*/
|
||||
|
||||
#include <gd.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define DEF_FONT_SIZE 16.0
|
||||
|
||||
#define DEF_CHAR_GAP 6
|
||||
#define CHAR_SKIP(gap) (gap / 4)
|
||||
|
||||
#define AUTHOR "Sunjin Yang <lethean@realtime.ssu.ac.kr>"
|
||||
#define VERSION "0.1"
|
||||
|
||||
struct code_range {
|
||||
int start, end;
|
||||
};
|
||||
|
||||
/* basic alphabet character range */
|
||||
static struct code_range ascii_range = { 0x21, 0x7E };
|
||||
|
||||
#ifdef USE_UNIFIED_KOREAN
|
||||
|
||||
/* Unified Hangul Code Encoding */
|
||||
static struct code_range first_byte_range[] = {
|
||||
{ 0x81, 0xFE }, { 0, 0 }
|
||||
};
|
||||
static struct code_range second_byte_range[] = {
|
||||
{ 0x41, 0x5A }, { 0x61, 0x7A }, { 0x81, 0x9F }, { 0xA0, 0xBF },
|
||||
{ 0xC0, 0xDF }, { 0xE0, 0xFE }, { 0, 0 }
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
/* KSX 1001:1992 */
|
||||
static struct code_range first_byte_range[] = {
|
||||
{ 0xA1, 0xAC }, { 0xB0, 0xFD }, { 0, 0 }
|
||||
};
|
||||
static struct code_range second_byte_range[] = {
|
||||
{ 0xA1, 0xAF }, { 0xB0, 0xBF }, { 0xC0, 0xCF }, { 0xD0, 0xDF },
|
||||
{ 0xE0, 0xEF }, { 0xF0, 0xFE }, { 0, 0 }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#define _output(msg...) fprintf(stdout, ##msg)
|
||||
|
||||
/* debugging macros */
|
||||
#define _print(msg...) fprintf(stderr, ##msg)
|
||||
#define _info(msg...) { _print("mpfc: "); _print(##msg); _print("\n"); }
|
||||
#define _abort(msg...) { _info(##msg); exit(1); }
|
||||
|
||||
static double size;
|
||||
static int gap;
|
||||
static char *name, *font, *eng_font, *kor_font;
|
||||
static int file_index;
|
||||
static char filename[20], str[10];
|
||||
|
||||
static int base_x, char_count;
|
||||
static gdImagePtr char_image[65536];
|
||||
|
||||
static gdImagePtr concat_char_images(void)
|
||||
{
|
||||
gdImagePtr ret;
|
||||
int width, height, i, black, white;
|
||||
|
||||
/* get image's width & height */
|
||||
height = size + (gap * 2);
|
||||
for (width = 0, i = 0; i < char_count; i++)
|
||||
width += char_image[i]->sx;
|
||||
|
||||
ret = gdImageCreate(width, height);
|
||||
|
||||
/* background color (first allocated) */
|
||||
black = gdImageColorResolve(ret, 0, 0, 0);
|
||||
white = gdImageColorResolve(ret, 255, 255, 255);
|
||||
|
||||
width = 0;
|
||||
for (i = 0; i < char_count; i++) {
|
||||
gdImageCopy(ret, char_image[i], /* dst, src */
|
||||
width + 0, 0, /* dstX, dstY */
|
||||
0, 0, /* srcX, srcY */
|
||||
char_image[i]->sx, char_image[i]->sy); /* size */
|
||||
width += char_image[i]->sx;
|
||||
gdImageDestroy(char_image[i]);
|
||||
}
|
||||
char_count = 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static gdImagePtr create_char_image(char *s)
|
||||
{
|
||||
gdImagePtr im;
|
||||
int rect[8], black, white, width, height, x, y;
|
||||
char *err;
|
||||
|
||||
/* obtain border rectangle so that we can size the image. */
|
||||
err = gdImageStringTTF(NULL, &rect[0], 0, font, size, .0, 0, 0, s);
|
||||
if (err)
|
||||
_abort("%s\n", err);
|
||||
|
||||
/* create an image big enough for a string plus a little whitespace. */
|
||||
width = rect[2] - rect[6] + gap;
|
||||
height = size + (gap * 2);
|
||||
im = gdImageCreate(width, height);
|
||||
|
||||
/* background color (first allocated) */
|
||||
black = gdImageColorResolve(im, 0, 0, 0);
|
||||
white = gdImageColorResolve(im, 255, 255, 255);
|
||||
|
||||
/* render the string, offset origin to center string.
|
||||
note that we use top-left coordinate for adjustment
|
||||
since gd origin is in top-left with y increasing downwards. */
|
||||
x = (gap / 2) - rect[6];
|
||||
y = (gap / 2) - rect[7] + (size + rect[7]);
|
||||
err = gdImageStringTTF(im, &rect[0], white, font, size, .0, x, y, s);
|
||||
if (err)
|
||||
_abort("%s\n", err);
|
||||
|
||||
if (*s == '"') _output("'%s' ", s); else _output("\"%s\" ", s);
|
||||
_output("%d %d\n",
|
||||
base_x + CHAR_SKIP(gap), base_x + width - CHAR_SKIP(gap) - 1);
|
||||
base_x += width;
|
||||
|
||||
return im;
|
||||
}
|
||||
|
||||
void make_charset_font(struct code_range *first, struct code_range *second)
|
||||
{
|
||||
gdImagePtr im;
|
||||
FILE *fd;
|
||||
int i, j;
|
||||
|
||||
base_x = 0;
|
||||
char_count = 0;
|
||||
|
||||
_output("[files]\n");
|
||||
//_output("alpha %s%d_a.raw\n", name, file_index);
|
||||
_output("alpha %s%02d_b.raw\n", name, file_index);
|
||||
_output("bitmap %s%02d_b.raw\n\n", name, file_index);
|
||||
_output("[characters]\n");
|
||||
|
||||
for (i = first->start; i <= first->end; i++) {
|
||||
str[0] = (char)i;
|
||||
if (!second) {
|
||||
str[1] = '\0';
|
||||
char_image[char_count++] = create_char_image(str);
|
||||
} else
|
||||
for (j = second->start; j <= second->end; j++) {
|
||||
str[1] = (char)j; str[2] = '\0';
|
||||
char_image[char_count++]= create_char_image(str);
|
||||
}
|
||||
}
|
||||
|
||||
_output("\n");
|
||||
|
||||
/* concatenate each character images into one image. */
|
||||
im = concat_char_images();
|
||||
|
||||
/* get filename and create one with it. */
|
||||
sprintf(filename, "%s%02d_b.png", name, file_index++);
|
||||
fd = fopen(filename, "w+");
|
||||
if (!fd)
|
||||
_abort(strerror(errno));
|
||||
|
||||
/* write image to the PNG file. */
|
||||
gdImagePng(im, fd);
|
||||
|
||||
fclose(fd);
|
||||
|
||||
/* destroy it */
|
||||
gdImageDestroy(im);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
if (argc < 4)
|
||||
_abort("usage:%s name eng-ttf kor-ttf [size gap]",argv[0]);
|
||||
|
||||
/* get program parameter like font names, size... */
|
||||
name = argv[1];
|
||||
eng_font = argv[2];
|
||||
kor_font = argv[3];
|
||||
size = DEF_FONT_SIZE;
|
||||
gap = DEF_CHAR_GAP;
|
||||
if (argc > 4) {
|
||||
float __s; sscanf(argv[4], "%f", &__s);
|
||||
size = (double)__s;
|
||||
}
|
||||
if (argc > 5)
|
||||
sscanf(argv[5], "%d", &gap);
|
||||
|
||||
/* write basic font information. */
|
||||
_output("[info]\n");
|
||||
_output("name \"%s version %s - created by %s\"\n",
|
||||
name, VERSION, AUTHOR);
|
||||
_output("descversion 1\n");
|
||||
_output("spacewidth %d\n", (int)(size / 2));
|
||||
_output("charspace -%d\n", CHAR_SKIP(gap) + 1);
|
||||
_output("height %d\n\n", (int)size + DEF_CHAR_GAP);
|
||||
|
||||
/* write general OSD fonts information. */
|
||||
_output("[files]\n");
|
||||
_output("alpha arpi_osd_a.raw\n");
|
||||
_output("bitmap arpi_osd_b.raw\n\n");
|
||||
_output("[characters]\n");
|
||||
_output("0x01 0 36\n");
|
||||
_output("0x02 35 71\n");
|
||||
_output("0x03 70 106\n");
|
||||
_output("0x04 116 152\n");
|
||||
_output("0x05 164 200\n");
|
||||
_output("0x06 209 245\n");
|
||||
_output("0x07 256 292\n");
|
||||
_output("0x08 305 342\n");
|
||||
_output("0x09 354 400\n");
|
||||
_output("0x0A 407 442\n");
|
||||
_output("0x0B 457 494\n");
|
||||
_output("[files]\n");
|
||||
_output("alpha arpi_progress_a.raw\n");
|
||||
_output("bitmap arpi_progress_b.raw\n\n");
|
||||
_output("[characters]\n");
|
||||
_output("0x10 4 21\n");
|
||||
_output("0x11 30 41\n");
|
||||
_output("0x12 50 66\n");
|
||||
_output("0x13 74 85\n\n");
|
||||
|
||||
|
||||
file_index = 0;
|
||||
|
||||
/* create basic alphabet character set. */
|
||||
font = eng_font;
|
||||
make_charset_font(&ascii_range, NULL);
|
||||
|
||||
/* create korean character set. */
|
||||
font = kor_font;
|
||||
for (i = 0; first_byte_range[i].start != 0; i++)
|
||||
for (j = 0; second_byte_range[j].start != 0; j++)
|
||||
make_charset_font(&first_byte_range[i], &second_byte_range[j]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
183
TOOLS/png2raw.c
183
TOOLS/png2raw.c
@ -1,183 +0,0 @@
|
||||
#define DEBUG
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
//#include "png.h"
|
||||
#include <png.h>
|
||||
|
||||
typedef struct _txSample
|
||||
{
|
||||
unsigned int Width;
|
||||
unsigned int Height;
|
||||
unsigned int BPP;
|
||||
unsigned long ImageSize;
|
||||
char * Image;
|
||||
} txSample;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned int Width;
|
||||
unsigned int Height;
|
||||
unsigned int Depth;
|
||||
unsigned int Alpha;
|
||||
|
||||
unsigned int Components;
|
||||
unsigned char * Data;
|
||||
unsigned char * Palette;
|
||||
} pngRawInfo;
|
||||
|
||||
int pngLoadRawF( FILE *fp,pngRawInfo *pinfo )
|
||||
{
|
||||
unsigned char header[8];
|
||||
png_structp png;
|
||||
png_infop info;
|
||||
png_infop endinfo;
|
||||
png_bytep data;
|
||||
png_bytep * row_p;
|
||||
png_uint_32 width,height;
|
||||
int depth,color;
|
||||
png_uint_32 i;
|
||||
|
||||
if ( pinfo == NULL ) return 1;
|
||||
|
||||
fread( header,1,8,fp );
|
||||
if ( !png_check_sig( header,8 ) ) return 1;
|
||||
|
||||
png=png_create_read_struct( PNG_LIBPNG_VER_STRING,NULL,NULL,NULL );
|
||||
info=png_create_info_struct( png );
|
||||
endinfo=png_create_info_struct( png );
|
||||
|
||||
png_init_io( png,fp );
|
||||
png_set_sig_bytes( png,8 );
|
||||
png_read_info( png,info );
|
||||
png_get_IHDR( png,info,&width,&height,&depth,&color,NULL,NULL,NULL );
|
||||
|
||||
pinfo->Width=width;
|
||||
pinfo->Height=height;
|
||||
pinfo->Depth=depth;
|
||||
|
||||
data=( png_bytep ) malloc( png_get_rowbytes( png,info )*height );
|
||||
row_p=( png_bytep * ) malloc( sizeof( png_bytep )*height );
|
||||
for ( i=0; i < height; i++ ) row_p[i]=&data[png_get_rowbytes( png,info )*i];
|
||||
|
||||
png_read_image( png,row_p );
|
||||
free( row_p );
|
||||
|
||||
if ( color == PNG_COLOR_TYPE_PALETTE )
|
||||
{
|
||||
int cols;
|
||||
png_get_PLTE( png,info,( png_colorp * ) &pinfo->Palette,&cols );
|
||||
}
|
||||
else pinfo->Palette=NULL;
|
||||
|
||||
if ( color&PNG_COLOR_MASK_ALPHA )
|
||||
{
|
||||
if ( color&PNG_COLOR_MASK_PALETTE || color == PNG_COLOR_TYPE_GRAY_ALPHA ) pinfo->Components=2;
|
||||
else pinfo->Components=4;
|
||||
pinfo->Alpha=8;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( color&PNG_COLOR_MASK_PALETTE || color == PNG_COLOR_TYPE_GRAY ) pinfo->Components=1;
|
||||
else pinfo->Components=3;
|
||||
pinfo->Alpha=0;
|
||||
}
|
||||
pinfo->Data=data;
|
||||
|
||||
png_read_end( png,endinfo );
|
||||
png_destroy_read_struct( &png,&info,&endinfo );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int pngLoadRaw( const char *filename,pngRawInfo *pinfo )
|
||||
{
|
||||
int result;
|
||||
FILE *fp=fopen( filename,"rb" );
|
||||
|
||||
if ( fp == NULL ) return 0;
|
||||
result=pngLoadRawF( fp,pinfo );
|
||||
if ( fclose( fp ) != 0 )
|
||||
{
|
||||
if ( result )
|
||||
{
|
||||
free( pinfo->Data );
|
||||
free( pinfo->Palette );
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int pngRead( unsigned char * fname,txSample * bf )
|
||||
{
|
||||
pngRawInfo raw;
|
||||
|
||||
if ( pngLoadRaw( fname,&raw ) )
|
||||
{
|
||||
#ifdef DEBUG
|
||||
fprintf( stderr,"[png] file read error ( %s ).\n",fname );
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
bf->Width=raw.Width;
|
||||
bf->Height=raw.Height;
|
||||
bf->BPP=( raw.Depth * raw.Components ) + raw.Alpha;
|
||||
bf->ImageSize=bf->Width * bf->Height * ( bf->BPP / 8 );
|
||||
if ( ( bf->Image=malloc( bf->ImageSize ) ) == NULL )
|
||||
{
|
||||
#ifdef DEBUG
|
||||
fprintf( stderr,"[png] Not enough memory for image buffer.\n" );
|
||||
#endif
|
||||
return 2;
|
||||
}
|
||||
memcpy( bf->Image,raw.Data,bf->ImageSize );
|
||||
free( raw.Data );
|
||||
#ifdef DEBUG
|
||||
fprintf( stderr,"[png] filename: %s.\n",fname );
|
||||
fprintf( stderr,"[png] size: %dx%d bits: %d\n",bf->Width,bf->Height,bf->BPP );
|
||||
fprintf( stderr,"[png] imagesize: %lu\n",bf->ImageSize );
|
||||
fprintf( stderr,"Palette: %s\n",raw.Palette?"yes":"no");
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char fname[256];
|
||||
|
||||
static unsigned char rawhead[32]={'m','h','w','a','n','h',0,4,
|
||||
0,0,0,0,1,0,0,0,
|
||||
0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0};
|
||||
static unsigned char rawpal[3*256];
|
||||
|
||||
int main(int argc,char* argv[]){
|
||||
txSample ize;
|
||||
FILE *f;
|
||||
int i;
|
||||
for(i=0;i<256;i++) rawpal[i*3]=rawpal[i*3+1]=rawpal[i*3+2]=i;
|
||||
|
||||
if(argc<2) {printf("Usage: png2raw file1 [file2...]\n");exit(1);}
|
||||
while(argc>1){
|
||||
++argv;--argc;
|
||||
printf("Converting %s...\n",argv[0]);
|
||||
if(pngRead(argv[0],&ize)) continue;
|
||||
if(ize.BPP!=8){ printf("Invalid BPP: %d\n",ize.BPP);continue;}
|
||||
snprintf(fname,256,"%s.raw",argv[0]);
|
||||
f=fopen(fname,"wb");
|
||||
rawhead[8]=ize.Width>>8;
|
||||
rawhead[9]=ize.Width&255;
|
||||
rawhead[10]=ize.Height>>8;
|
||||
rawhead[11]=ize.Height&255;
|
||||
fwrite(rawhead,32,1,f);
|
||||
fwrite(rawpal,3*256,1,f);
|
||||
fwrite(ize.Image,ize.ImageSize,1,f);
|
||||
fclose(f);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,25 +0,0 @@
|
||||
|
||||
MPROOT=../..
|
||||
|
||||
include $(MPROOT)/config.mak
|
||||
|
||||
LDLIBS=-lm $(MPROOT)/osdep/timer-lx.o $(shell freetype-config --libs)
|
||||
CFLAGS=$(OPTFLAGS) $(shell freetype-config --cflags) -I$(MPROOT)
|
||||
|
||||
#CFLAGS+=-O0 # for RedHat's gcc-2.96-95
|
||||
#CFLAGS+=-DOLD_FREETYPE2 # for FreeType 2.0.1
|
||||
#CFLAGS+=-g
|
||||
#CFLAGS+=-DDEBUG
|
||||
#CFLAGS+=-DNEW_DESC
|
||||
|
||||
|
||||
subfont: subfont.o
|
||||
|
||||
subfont.o: subfont.c
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
subfont.S: subfont.c
|
||||
$(CC) $(CFLAGS) -S $< -o $@
|
||||
|
||||
clean:
|
||||
rm -f subfont subfont.o subfont.S core
|
@ -1,112 +0,0 @@
|
||||
Usage:
|
||||
~~~~~~
|
||||
1. Make sure you have FreeType 2 installed.
|
||||
2. Get a TrueType or Type 1 font.
|
||||
3. Run ./configure from mplayer's root directory.
|
||||
4. Modify `runme' script for your encoding and font path.
|
||||
5. Type: ./runme
|
||||
6. Copy *.raw and font.desc files to ~/.mplayer/font/
|
||||
7. Run subfont alone to see more options.
|
||||
|
||||
|
||||
About:
|
||||
~~~~~~
|
||||
`subfont' program renders antialiased OSD and subtitle fonts for mplayer.
|
||||
|
||||
What you get are bitmap and alpha *.raw files and a font.desc.
|
||||
What you need is TrueType, Type 1 or any other font supported by FreeType.
|
||||
|
||||
Alpha channel is created using outline and Gaussian blur filters.
|
||||
|
||||
ANY encoding is now supported! That is, all 8-bit encodings known by libc
|
||||
and user-supplied encodings (also multibyte) through custom encoding files.
|
||||
|
||||
I prepared also Type 1 font `osd.pfb' for OSD characters based on bitmaps
|
||||
created by chass.
|
||||
|
||||
|
||||
Encodings:
|
||||
~~~~~~~~~~
|
||||
You can get any encoding and any charset.
|
||||
1. If you want 8-bit charset, which is known to libc, encoded either in 8-bit
|
||||
or Unicode (like ISO-8859-*, KOI8-*):
|
||||
|
||||
Find correct encoding name using `iconv --list' (on RedHat) and use it.
|
||||
For latin2 subtitles I would write:
|
||||
./subfont iso-8859-2 24 verdana.ttf
|
||||
and for UTF-8 subtitles with latin2 charset:
|
||||
./subfont --unicode iso-8859-2 24 verdana.ttf
|
||||
|
||||
2. If you want encoding not known to libc or non 8-bit (like EUC-KR):
|
||||
|
||||
Create file describing your charset:
|
||||
|
||||
For each character you want to render write the line consisting of:
|
||||
hexadecimal Unicode character code
|
||||
followed by whitespace
|
||||
followed by hexadecimal number representing your encoding
|
||||
followed by new line character
|
||||
or (for UTF-8 subtitles):
|
||||
hexadecimal Unicode character code
|
||||
followed by new line character.
|
||||
|
||||
Example:
|
||||
To render a single letter `aogonek' (Unicode 0x0105) and encode
|
||||
it using iso-8859-2 encoding (0xB1), your custom encoding file will consist
|
||||
of a sigle line:
|
||||
0105 B1
|
||||
|
||||
or to get unicode font.desc, write only:
|
||||
0105
|
||||
|
||||
Subfont was tested with Korean fonts from truetype-fonts-ko-2.0-1k.noarch.rpm
|
||||
I found on http://rpmfind.net/ and euc-kr encoding. Custom encoding file
|
||||
for euc-kr was generated from charmap I found in /usr/share/i18n/charmaps/EUC-KR.gz
|
||||
(glibc package). Simple script for this you will find in encodings directory.
|
||||
This should work with -unicode switch for mplayer (though this is not Unicode).
|
||||
It took about 10 seconds to render over 8000 characters on P3 @ 600MHz.
|
||||
|
||||
|
||||
New font.desc format (proposal):
|
||||
~~~~~~~~~~~~~~~~~~~~~==========~
|
||||
Subfont will generate new font.desc format when compiled with NEW_DESC macro defined
|
||||
(uncomment appropriate line in Makefile).
|
||||
|
||||
These changes are to make bitmaps smaller and processing faster.
|
||||
|
||||
Changes to [info] section:
|
||||
There is no `spacewidth'. It will not be useful.
|
||||
`height` is the distance from one baseline to the next.
|
||||
`ascender' is the distance from the baseline to the highest grid coordinate used to place the outline point.
|
||||
`descender' is the distance from the baseline to the lowest grid coordinate used to place the outline point.
|
||||
Note: upwards direction is positive.
|
||||
Read more: freetype-2.*/docs/glyphs/glyphs-3.html
|
||||
|
||||
Changes to [characters] section:
|
||||
Bitmap start and bitmap end are replaced with:
|
||||
bitmap start,
|
||||
bitmap width,
|
||||
bitmap height,
|
||||
left bearing -- the horizontal distance from the current pen position to the bitmaps's left edge,
|
||||
top bearing -- the vertical distance from the baseline to the bitmaps's top edge,
|
||||
advance -- the horizontal distance the pen position must be incremented by after each glyph is rendered.
|
||||
|
||||
To anderstand this you must think in verctorial coordinates.
|
||||
Necessarily read freetype-2.*/docs/glyphs/glyphs-7.html about vectorial coordinates!
|
||||
|
||||
|
||||
Notes:
|
||||
~~~~~~
|
||||
+ Starting x position of each character and the bitmap width is aligned
|
||||
to multiple of 8 (required by mplayer).
|
||||
|
||||
+ My development platform is RedHat 7.1. FreeType versions tested are
|
||||
2.0.1 through 2.0.4.
|
||||
|
||||
+ FreeType library has a bug that makes subfont display some warning message
|
||||
about Unicode charmap for osd.pfb.
|
||||
|
||||
|
||||
Author:
|
||||
~~~~~~~
|
||||
Artur Zaprzala <zybi@fanthom.irc.pl>
|
@ -1,11 +0,0 @@
|
||||
#!/usr/bin/awk -f
|
||||
# only for mostly 2-byte encodings like euc-kr
|
||||
|
||||
$2~"^/x..$" {
|
||||
c = substr($2, 3, 2)
|
||||
if (c<"80")
|
||||
print substr($1, 3, 4) "\t" c
|
||||
}
|
||||
$2~"^/x../x..$" {
|
||||
print substr($1, 3, 4) "\t" substr($2, 3, 2) substr($2, 7, 2)
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
E001 01
|
||||
E002 02
|
||||
E003 03
|
||||
E004 04
|
||||
E005 05
|
||||
E006 06
|
||||
E007 07
|
||||
E008 08
|
||||
E009 09
|
||||
E00A 0A
|
||||
E00B 0B
|
||||
E010 10
|
||||
E011 11
|
||||
E012 12
|
||||
E013 13
|
@ -1 +0,0 @@
|
||||
gunzip -c /usr/share/i18n/charmaps/EUC-KR.gz | ./charmap2enc > euc-kr
|
@ -1,170 +0,0 @@
|
||||
|
||||
;
|
||||
; MPlayer subtitle font description file - HighreS ONE
|
||||
; font created by a'rpi & chass
|
||||
; .desc created by chass & atmosfear
|
||||
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
;
|
||||
;
|
||||
; This file contains the data for MPlayer to build up the font
|
||||
; table from the bitmap files. These fonts are used for the OSD
|
||||
; (On Screen Display) and for the subtitles.
|
||||
;
|
||||
;
|
||||
; A few words for the novice user about the fonts:
|
||||
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
;
|
||||
; MPlayer uses antialiased bitmap fonts, which look far better
|
||||
; then the TTF rendering used by other players. A letter consists
|
||||
; of two main parts: the Bitmap and the Alpha chanel. The bitmap
|
||||
; is what you see on the screen, and the Aplha chanel makes the
|
||||
; Font fade smoothly ito the background. And in this font we use
|
||||
; the alpha to get a smooth black outline of the letters, which
|
||||
; makes them visible even on white areas of the movie.
|
||||
;
|
||||
; MPlayer needs at least two separate 8bit/pixel format bitmap
|
||||
; files and a .desc file to be able to use the font. One of the
|
||||
; files is the bitmap the other is the alpha. The .desc (like this
|
||||
; one) gives MPlayer the information needed to convert a bitmap
|
||||
; to characters. But the .desc allows to use more bitmap and alpha
|
||||
; files: this feature is useful when one wants to add local language
|
||||
; support for the subtitles.
|
||||
;
|
||||
; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
;
|
||||
; ABOUT THE .DESC
|
||||
;
|
||||
; [1],File layout: the file consists of several sections,
|
||||
; the sections are marked like [XXX] where XXX is the section
|
||||
; name. The three main sections:
|
||||
;
|
||||
; [info]: gives general information about the font, like the
|
||||
; version of the .desc, the author's name and general
|
||||
; rendering options like kerning.
|
||||
;
|
||||
; [files] & [characters] : they go togeather, they describe
|
||||
; the place of characters in the bitmap.
|
||||
; Up to 16 is allowed per .desc
|
||||
;
|
||||
; [2],The variables:
|
||||
;
|
||||
; [info]
|
||||
; name string name of the font, and misc information
|
||||
; desc int Version of this file
|
||||
; spacewidth int num of pixels for #32
|
||||
; charspace int the distance between chars
|
||||
; height int the distance between rows
|
||||
; [files]
|
||||
; alpha string name of alpha map file
|
||||
; bitmap string name of bitmap file
|
||||
; [character]
|
||||
; string int int the positon of a character
|
||||
;
|
||||
;
|
||||
; MPlayer can build up it's font table from up to 16*2 files (16 bitmap
|
||||
; and 16 alpha channels).
|
||||
;
|
||||
|
||||
|
||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
;informations about the font
|
||||
|
||||
;[info]
|
||||
|
||||
;the author and other stuff
|
||||
;name "HighreS ONE - created by A'rpi and cHaSS - pre-alpha version"
|
||||
|
||||
;version number of the file (if greater than version MPlayer can
|
||||
;handle, then ignores the unknown variables)
|
||||
|
||||
;descversion 1
|
||||
|
||||
;the length of #32 in pixels
|
||||
|
||||
;spacewidth 13
|
||||
|
||||
;the distance between chars. the alpha renderer can handle
|
||||
;negative numbers too
|
||||
|
||||
;charspace -3
|
||||
|
||||
;height 26
|
||||
;height 35
|
||||
|
||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
;file section
|
||||
|
||||
;[files]
|
||||
|
||||
;the name of the alpha file used for the next [characters]
|
||||
;section
|
||||
|
||||
;alpha arpi_a.raw
|
||||
;alpha nfont_a.raw
|
||||
|
||||
;the name of the bitmap file used for the next [characters]
|
||||
;section
|
||||
|
||||
;bitmap arpi_b.raw
|
||||
;bitmap nfont_b.raw
|
||||
|
||||
|
||||
|
||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
;the description of the characters:
|
||||
;each row specifies one character: first, the char (between " or ')
|
||||
;then the x-coordinate of the beginning and the end.
|
||||
|
||||
|
||||
;[characters]
|
||||
|
||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
[files]
|
||||
alpha arpi_osd_a.raw
|
||||
bitmap arpi_osd_b.raw
|
||||
|
||||
[characters]
|
||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
;Symbols for the OSD
|
||||
; range form 01 to 1F
|
||||
|
||||
;play
|
||||
0x01 0 36
|
||||
;pause
|
||||
0x02 35 71
|
||||
;stop
|
||||
0x03 70 106
|
||||
;rewind
|
||||
0x04 116 152
|
||||
;fast forward
|
||||
0x05 164 200
|
||||
;clock symbol for the OSD
|
||||
0x06 209 245
|
||||
;contrast
|
||||
0x07 256 292
|
||||
;stauration
|
||||
0x08 305 342
|
||||
;volume
|
||||
0x09 354 400
|
||||
;brightness
|
||||
0x0A 407 442
|
||||
;Hue
|
||||
0x0B 457 494
|
||||
|
||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
;OSD progress bar characters
|
||||
;
|
||||
[files]
|
||||
|
||||
alpha arpi_progress_a.raw
|
||||
bitmap arpi_progress_b.raw
|
||||
|
||||
[characters]
|
||||
; [ character
|
||||
0x10 4 21
|
||||
; | character
|
||||
0x11 30 41
|
||||
; ] character
|
||||
0x12 50 66
|
||||
; . char
|
||||
0x13 74 85
|
@ -1,53 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Font Generator script by alex@naxine.org
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo "fontgen: too few parameters"
|
||||
echo "fontgen: Usage: $0 <input font filename> <output dir>"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ ! -r $1 ]; then
|
||||
echo "fontgen: input font file not readable"
|
||||
exit
|
||||
fi
|
||||
|
||||
subfont_exec=subfont
|
||||
#unicode="--unicode"
|
||||
#font=arial.ttf
|
||||
#font=mints-mild.pcf
|
||||
#font=/home/alex/artwiz-mints-mild-latin2.hex
|
||||
font=$1
|
||||
if [ ! -z $2 ]; then
|
||||
outdir="--outdir $2"
|
||||
mkdir $2
|
||||
fi
|
||||
#font=verdana.ttf
|
||||
encoding=iso-8859-2
|
||||
fontsize=12
|
||||
symbolssize=10
|
||||
blur=2
|
||||
outline=1.5
|
||||
|
||||
if [ ! -x $subfont_exec ]; then
|
||||
echo "fontgen: 'subfont' not found or not executable!"
|
||||
echo "fontgen: trying to compile"
|
||||
|
||||
make || exit
|
||||
|
||||
if [ ! -x $subfont_exec ]; then
|
||||
echo "failed"
|
||||
exit
|
||||
fi
|
||||
|
||||
exit
|
||||
fi
|
||||
|
||||
# subfont <encoding> <size> <input>
|
||||
echo "fontgen: creating font..."
|
||||
./$subfont_exec $outdir $unicode --blur $blur --outline $outline "$encoding" $fontsize "$font" || exit
|
||||
echo "fontgen: creating osd symbols..."
|
||||
./$subfont_exec $outdir --append --blur $blur --outline $outline encodings/osd-mplayer $symbolssize osd/osd.pfb || exit
|
||||
|
||||
exit
|
@ -1,3 +0,0 @@
|
||||
Requires t1utils and python.
|
||||
|
||||
Based on font created by chass.
|
@ -1,440 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
from math import *
|
||||
import sys
|
||||
import string
|
||||
|
||||
k = (sqrt(2.)-1.)*4./3.
|
||||
|
||||
chars = []
|
||||
encoding = []
|
||||
count = 1
|
||||
first = 1
|
||||
|
||||
def append(s):
|
||||
chars.append(s)
|
||||
|
||||
def rint(x):
|
||||
return int(round(x))
|
||||
"""
|
||||
if x>=0:
|
||||
return int(x+0.5)
|
||||
else:
|
||||
return int(x-0.5)
|
||||
"""
|
||||
|
||||
class vec:
|
||||
def __init__(self, x, y=0):
|
||||
if type(x) is type(()):
|
||||
self.x, self.y = x
|
||||
else:
|
||||
self.x = x
|
||||
self.y = y
|
||||
def set(self, x, y):
|
||||
self.__init__(x, y)
|
||||
def move(self, x, y):
|
||||
self.x = self.x + x
|
||||
self.y = self.y + y
|
||||
def __add__(self, v):
|
||||
return vec(self.x+v.x, self.y+v.y)
|
||||
def __sub__(self, v):
|
||||
return vec(self.x-v.x, self.y-v.y)
|
||||
def int(self):
|
||||
return vec(rint(self.x), rint(self.y))
|
||||
def t(self):
|
||||
return (self.x, self.y)
|
||||
|
||||
class pvec(vec):
|
||||
def __init__(self, l, a):
|
||||
self.x = l * cos(a)
|
||||
self.y = l * sin(a)
|
||||
|
||||
|
||||
pen = vec(0,0)
|
||||
|
||||
def moveto(x, y=0):
|
||||
global first
|
||||
dx = rint(x-pen.x)
|
||||
dy = rint(y-pen.y)
|
||||
if dx!=0:
|
||||
if dy!=0:
|
||||
append("\t%i %i rmoveto" % (dx, dy))
|
||||
else:
|
||||
append("\t%i hmoveto" % (dx))
|
||||
elif dy!=0:
|
||||
append("\t%i vmoveto" % (dy))
|
||||
elif first:
|
||||
append("\t0 hmoveto")
|
||||
first = 0
|
||||
pen.x = pen.x+dx
|
||||
pen.y = pen.y+dx
|
||||
|
||||
def rlineto(v):
|
||||
if v.x!=0:
|
||||
if v.y!=0:
|
||||
append("\t%i %i rlineto" % (v.x, v.y))
|
||||
else:
|
||||
append("\t%i hlineto" % (v.x))
|
||||
elif v.y!=0:
|
||||
append("\t%i vlineto" % (v.y))
|
||||
|
||||
def closepath():
|
||||
append("\tclosepath")
|
||||
|
||||
history = []
|
||||
def movebase(x, y=0):
|
||||
history.append((x,y))
|
||||
pen.move(-x, -y)
|
||||
|
||||
def moveback():
|
||||
x, y = history.pop()
|
||||
pen.move(x, y)
|
||||
|
||||
def ellipse(rx, ry = None, half=0):
|
||||
# rx>0 => counter-clockwise (filled)
|
||||
# rx<0 => clockwise
|
||||
|
||||
if ry==None: ry = abs(rx)
|
||||
|
||||
dx1 = rint(k*rx)
|
||||
dx2 = rx-dx1
|
||||
|
||||
dy1 = rint(k*ry)
|
||||
dy2 = ry-dy1
|
||||
|
||||
rx = abs(rx)
|
||||
moveto(0, -ry)
|
||||
append("\t%i 0 %i %i 0 %i rrcurveto" % (+dx1, +dx2, +dy2, +dy1))
|
||||
append("\t0 %i %i %i %i 0 rrcurveto" % (+dy1, -dx2, +dy2, -dx1))
|
||||
if not half:
|
||||
append("\t%i 0 %i %i 0 %i rrcurveto" % (-dx1, -dx2, -dy2, -dy1))
|
||||
append("\t0 %i %i %i %i 0 rrcurveto" % (-dy1, +dx2, -dy2, +dx1))
|
||||
closepath()
|
||||
if half:
|
||||
pen.set(0, ry)
|
||||
else:
|
||||
pen.set(0, -ry)
|
||||
|
||||
circle = ellipse
|
||||
|
||||
def rect(w, h):
|
||||
moveto(0, 0)
|
||||
if w>0:
|
||||
append("\t%i hlineto" % (w))
|
||||
append("\t%i vlineto" % (h))
|
||||
append("\t%i hlineto" % (-w))
|
||||
pen.set(0, h)
|
||||
else:
|
||||
append("\t%i vlineto" % (h))
|
||||
append("\t%i hlineto" % (-w))
|
||||
append("\t%i vlineto" % (-h))
|
||||
pen.set(-w, 0)
|
||||
closepath()
|
||||
|
||||
def poly(p):
|
||||
moveto(0, 0)
|
||||
prev = vec(0, 0)
|
||||
for q in p:
|
||||
rlineto(vec(q)-prev)
|
||||
prev = vec(q)
|
||||
closepath()
|
||||
pen.set(prev.x, prev.y)
|
||||
|
||||
def line(w, l, a):
|
||||
vw = pvec(w*.5, a-pi*.5)
|
||||
vl = pvec(l, a)
|
||||
p = vw
|
||||
moveto(p.x, p.y)
|
||||
p0 = p
|
||||
#print '%%wla %i %i %.3f: %.3f %.3f' % (w, l, a, p0.x, p0.y)
|
||||
p = p+vl
|
||||
rlineto((p-p0).int())
|
||||
p0 = p
|
||||
#print '%%wla %i %i %.3f: %.3f %.3f' % (w, l, a, p0.x, p0.y)
|
||||
p = p-vw-vw
|
||||
rlineto((p-p0).int())
|
||||
p0 = p
|
||||
#print '%%wla %i %i %.3f: %.3f %.3f' % (w, l, a, p0.x, p0.y)
|
||||
p = p-vl
|
||||
#print '%%wla %i %i %.3f: %.3f %.3f' % (w, l, a, p.x, p.y)
|
||||
rlineto((p-p0).int())
|
||||
closepath()
|
||||
pen.set(p.x, p.y)
|
||||
|
||||
|
||||
def begin(name, code, hsb, w):
|
||||
global first, count, history
|
||||
history = []
|
||||
pen.set(0, 0)
|
||||
append("""\
|
||||
/uni%04X { %% %s
|
||||
%i %i hsbw""" % (code+0xE000, name, hsb, w))
|
||||
i = len(encoding)
|
||||
while i<code:
|
||||
encoding.append('dup %i /.notdef put' % (i,))
|
||||
i = i+1
|
||||
encoding.append('dup %i /uni%04X put' % (code, code+0xE000))
|
||||
count = count + 1
|
||||
first = 1
|
||||
|
||||
|
||||
def end():
|
||||
append("""\
|
||||
endchar
|
||||
} ND""")
|
||||
|
||||
|
||||
|
||||
########################################
|
||||
|
||||
r = 400
|
||||
s = 375
|
||||
hsb = 200 # horizontal side bearing
|
||||
hsb2 = 30
|
||||
over = 10 # overshoot
|
||||
width = 2*r+2*over+2*hsb2
|
||||
|
||||
########################################
|
||||
begin('play', 0x01, hsb, width)
|
||||
poly(( (s,r),
|
||||
(0, 2*r),))
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
w=150
|
||||
begin('pause', 0x02, hsb, width)
|
||||
rect(w, 2*r)
|
||||
movebase(2*w)
|
||||
rect(w, 2*r)
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('stop', 0x03, hsb, width)
|
||||
rect(665, 720)
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('rewind', 0x04, hsb/2, width)
|
||||
movebase(2*s+15)
|
||||
poly(( (0, 2*r),
|
||||
(-s, r),))
|
||||
movebase(-s-15)
|
||||
poly(( (0, 2*r),
|
||||
(-s, r),))
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('fast forward', 0x05, hsb/2, width)
|
||||
poly(( (s,r),
|
||||
(0, 2*r),))
|
||||
movebase(s+15)
|
||||
poly(( (s,r),
|
||||
(0, 2*r),))
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('clock', 0x06, hsb2, width)
|
||||
movebase(r, r)
|
||||
circle(r+over)
|
||||
wc = 65
|
||||
r0 = r-3*wc
|
||||
n = 4
|
||||
movebase(-wc/2, -wc/2)
|
||||
rect(-wc, wc)
|
||||
moveback()
|
||||
for i in range(n):
|
||||
a = i*2*pi/n
|
||||
v = pvec(r0, a)
|
||||
movebase(v.x, v.y)
|
||||
line(-wc, r-r0, a)
|
||||
moveback()
|
||||
hh = 11
|
||||
mm = 8
|
||||
line(-50, r*.5, pi/2-2*pi*(hh+mm/60.)/12)
|
||||
line(-40, r*.9, pi/2-2*pi*mm/60.)
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('contrast', 0x07, hsb2, width)
|
||||
movebase(r, r)
|
||||
circle(r+over)
|
||||
circle(-(r+over-80), half=1)
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('saturation', 0x08, hsb2, width)
|
||||
movebase(r, r)
|
||||
circle(r+over)
|
||||
circle(-(r+over-80))
|
||||
|
||||
v = pvec(160, pi/2)
|
||||
movebase(v.x, v.y)
|
||||
circle(80)
|
||||
moveback()
|
||||
|
||||
v = pvec(160, pi/2+pi*2/3)
|
||||
movebase(v.x, v.y)
|
||||
circle(80)
|
||||
moveback()
|
||||
|
||||
v = pvec(160, pi/2-pi*2/3)
|
||||
movebase(v.x, v.y)
|
||||
circle(80)
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('volume', 0x09, 0, 1000)
|
||||
poly(( (1000, 0),
|
||||
(1000, 500),))
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('brightness', 0x0A, hsb2, width)
|
||||
movebase(r, r)
|
||||
circle(150)
|
||||
circle(-100)
|
||||
|
||||
rb = 375
|
||||
wb = 50
|
||||
l = 140
|
||||
n = 8
|
||||
for i in range(n):
|
||||
a = i*2*pi/n
|
||||
v = pvec(l, a)
|
||||
movebase(v.x, v.y)
|
||||
line(wb, rb-l, a)
|
||||
moveback()
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('hue', 0x0B, hsb2, width)
|
||||
movebase(r, r)
|
||||
circle(r+over)
|
||||
ellipse(-(322), 166)
|
||||
movebase(0, 280)
|
||||
circle(-(60))
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('progress [', 0x10, (334-182)/2, 334)
|
||||
poly(( (182, 0),
|
||||
(182, 90),
|
||||
(145, 90),
|
||||
(145, 550),
|
||||
(182, 550),
|
||||
(182, 640),
|
||||
(0, 640),
|
||||
))
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('progress |', 0x11, (334-166)/2, 334)
|
||||
rect(166, 640)
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('progress ]', 0x12, (334-182)/2, 334)
|
||||
poly(( (182, 0),
|
||||
(182, 640),
|
||||
(0, 640),
|
||||
(0, 550),
|
||||
(37, 550),
|
||||
(37, 90),
|
||||
(0, 90),
|
||||
))
|
||||
end()
|
||||
|
||||
|
||||
########################################
|
||||
begin('progress .', 0x13, (334-130)/2, 334)
|
||||
movebase(0, (640-130)/2)
|
||||
rect(130, 130)
|
||||
end()
|
||||
|
||||
|
||||
|
||||
########################################
|
||||
print """\
|
||||
%!PS-AdobeFont-1.0: OSD 1.00
|
||||
%%CreationDate: Sun Jul 22 12:38:28 2001
|
||||
%
|
||||
%%EndComments
|
||||
12 dict begin
|
||||
/FontInfo 9 dict dup begin
|
||||
/version (Version 1.00) readonly def
|
||||
/Notice (This is generated file.) readonly def
|
||||
/FullName (OSD) readonly def
|
||||
/FamilyName (OSD) readonly def
|
||||
/Weight (Regular) readonly def
|
||||
/ItalicAngle 0.000000 def
|
||||
/isFixedPitch false def
|
||||
/UnderlinePosition -133 def
|
||||
/UnderlineThickness 49 def
|
||||
end readonly def
|
||||
/FontName /OSD def
|
||||
/PaintType 0 def
|
||||
/StrokeWidth 0 def
|
||||
/FontMatrix [0.001 0 0 0.001 0 0] def
|
||||
/FontBBox {0 -10 1000 810} readonly def
|
||||
/Encoding 256 array"""
|
||||
|
||||
print string.join(encoding, '\n')
|
||||
i = len(encoding)
|
||||
while i<256:
|
||||
print 'dup %i /.notdef put' % i
|
||||
i = i+1
|
||||
|
||||
|
||||
print """\
|
||||
readonly def
|
||||
currentdict end
|
||||
currentfile eexec
|
||||
dup /Private 15 dict dup begin
|
||||
/RD{string currentfile exch readstring pop}executeonly def
|
||||
/ND{noaccess def}executeonly def
|
||||
/NP{noaccess put}executeonly def
|
||||
/ForceBold false def
|
||||
/BlueValues [ -10 0 800 810 640 650 720 730 ] def
|
||||
/StdHW [ 65 ] def
|
||||
/StdVW [ 65 ] def
|
||||
/StemSnapH [ 65 800 ] def
|
||||
/StemSnapV [ 65 150 ] def
|
||||
/MinFeature {16 16} def
|
||||
/password 5839 def
|
||||
/Subrs 1 array
|
||||
dup 0 {
|
||||
return
|
||||
} NP
|
||||
ND
|
||||
2 index
|
||||
/CharStrings %i dict dup begin""" % count
|
||||
|
||||
print """\
|
||||
/.notdef {
|
||||
0 400 hsbw
|
||||
endchar
|
||||
} ND"""
|
||||
|
||||
print string.join(chars, '\n')
|
||||
|
||||
|
||||
print """\
|
||||
end
|
||||
end
|
||||
readonly put
|
||||
noaccess put
|
||||
dup/FontName get exch definefont pop
|
||||
mark currentfile closefile"""
|
@ -1,15 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
int c;
|
||||
int cnt;
|
||||
printf("unsigned char osd_font_pfb[] = {");
|
||||
for (cnt = 0;;cnt++) {
|
||||
if (cnt % 16 == 0) printf("\n");
|
||||
c = getchar();
|
||||
if (c < 0) break;
|
||||
printf("0x%02x,", c);
|
||||
}
|
||||
printf("};\n");
|
||||
}
|
Binary file not shown.
@ -1,4 +0,0 @@
|
||||
#
|
||||
./gen.py > osd.t1a &&
|
||||
t1asm --pfb osd.t1a osd.pfb &&
|
||||
ftview 80 osd.pfb > /dev/null 2>&1 &
|
@ -1,29 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
#unicode="--unicode"
|
||||
#font=arial.ttf
|
||||
#font=mints-mild.pcf
|
||||
#font=/home/alex/artwiz-mints-mild-latin2.hex
|
||||
font=$1
|
||||
#font=verdana.ttf
|
||||
encoding=iso-8859-2
|
||||
fontsize=$2
|
||||
symbolssize=$3
|
||||
blur=2
|
||||
outline=1.5
|
||||
|
||||
make || exit
|
||||
|
||||
./subfont $unicode --blur $blur --outline $outline "$encoding" $fontsize "$font" || exit
|
||||
./subfont --append --blur $blur --outline $outline encodings/osd-mplayer $symbolssize osd/osd.pfb || exit
|
||||
|
||||
#cp font.desc *.raw ~/.mplayer/font/
|
||||
|
||||
exit
|
||||
|
||||
# display *.raw files
|
||||
SIZE=`awk '/bitmap size:/ {print $NF; exit}' font.desc`+800
|
||||
display -size $SIZE gray:$encoding-a.raw &
|
||||
display -size $SIZE gray:$encoding-b.raw &
|
||||
#convert -size $SIZE gray:$encoding-a.raw $encoding-a.png
|
||||
#convert -size $SIZE gray:$encoding-b.raw $encoding-b.png
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user