summaryrefslogtreecommitdiffstats
path: root/libvo/sub.c
diff options
context:
space:
mode:
authorarpi_esp <arpi_esp@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-03-25 04:28:40 +0000
committerarpi_esp <arpi_esp@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-03-25 04:28:40 +0000
commit54afa85eef799a463366cc6a9e56ea78298f9c30 (patch)
tree286c20688b9e8ada162609939265d2cef2c66ec8 /libvo/sub.c
parent920d0153359f96350666b5e7b92ecc919825368c (diff)
downloadmpv-54afa85eef799a463366cc6a9e56ea78298f9c30.tar.bz2
mpv-54afa85eef799a463366cc6a9e56ea78298f9c30.tar.xz
subtitle+OSD font support
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@214 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo/sub.c')
-rw-r--r--libvo/sub.c125
1 files changed, 68 insertions, 57 deletions
diff --git a/libvo/sub.c b/libvo/sub.c
index 1ab62fcc6f..d64862f899 100644
--- a/libvo/sub.c
+++ b/libvo/sub.c
@@ -1,71 +1,82 @@
-typedef struct {
- unsigned char *bmp;
- unsigned char *pal;
- int w,h,c;
-} raw_file;
-
-raw_file* load_raw(char *name){
- int bpp;
- raw_file* raw=malloc(sizeof(raw_file));
- unsigned char head[32];
- FILE *f=fopen(name,"rb");
- if(!f) return NULL; // can't open
- if(fread(head,32,1,f)<1) return NULL; // too small
- if(memcmp(head,"mhwanh",6)) return NULL; // not raw file
- raw->w=head[8]*256+head[9];
- raw->h=head[10]*256+head[11];
- raw->c=head[12]*256+head[13];
- if(raw->c>256) return NULL; // too many colors!?
- printf("RAW: %d x %d, %d colors\n",raw->w,raw->h,raw->c);
- if(raw->c){
- raw->pal=malloc(raw->c*3);
- fread(raw->pal,3,raw->c,f);
- bpp=1;
- } else {
- raw->pal=NULL;
- bpp=3;
- }
- raw->bmp=malloc(raw->h*raw->w*bpp);
- fread(raw->bmp,raw->h*raw->w*bpp,1,f);
- fclose(f);
- return raw;
-}
-
-static int vo_font_loaded=-1;
-static raw_file* vo_font_bmp=NULL;
-static raw_file* vo_font_alpha=NULL;
-
-void vo_load_font(char *bmpname,char *alphaname){
- vo_font_loaded=0;
- if(!(vo_font_bmp=load_raw(bmpname)))
- printf("vo: Can't load font BMP\n"); else
- if(!(vo_font_alpha=load_raw(alphaname)))
- printf("vo: Can't load font Alpha\n"); else
- vo_font_loaded=1;
-}
+//static int vo_font_loaded=-1;
+font_desc_t* vo_font=NULL;
int vo_sub_lines=2;
-char* vo_sub_text[8];
+unsigned char* vo_sub_text[8];
+unsigned char* vo_osd_text="00:00:00";
-void vo_draw_text(void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){
+void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){
int i;
- int y=100;
+ int y;
+
+ if(!vo_font) return; // no font
+
+ if(vo_osd_text){
+ int len=strlen(vo_osd_text);
+ int j;
+ int y=10;
+ int x=20;
+
+ for(j=0;j<len;j++){
+ int c=vo_osd_text[j];
+ int font=vo_font->font[c];
+ if(font>=0)
+ draw_alpha(x,y,
+ vo_font->width[c],
+ vo_font->pic_a[font]->h,
+ vo_font->pic_b[font]->bmp+vo_font->start[c],
+ vo_font->pic_a[font]->bmp+vo_font->start[c],
+ vo_font->pic_a[font]->w);
+ x+=vo_font->width[c]+vo_font->charspace;
+ }
+
+ }
+
+#if 1
if(vo_sub_lines<=0) return; // no text
-
- if(vo_font_loaded==-1) vo_load_font("font_b.raw","font_a.raw");
- if(!vo_font_loaded) return; // no font
-
-// if(!vo_font_bmp) vo_load_font("mplayer_font_lowres_bitmap.raw","mplayer_font_lowres_alpha.raw");
+ y=dys-(1+vo_sub_lines)*vo_font->height;
for(i=0;i<vo_sub_lines;i++){
- char* text="Hello World!"; //vo_sub_text[i];
- draw_alpha(100,y,50,vo_font_bmp->h,vo_font_bmp->bmp,vo_font_alpha->bmp,vo_font_bmp->w);
-// x11_draw_alpha(100,y,50,vo_font_bmp->h,vo_font_bmp->bmp,vo_font_alpha->bmp,vo_font_bmp->w);
- y+=50;
+ unsigned char* text="Hello World! HÛDEJÓ!"; //vo_sub_text[i];
+ int len=strlen(text);
+ int j;
+ int xsize=-vo_font->charspace;
+ int x=0;
+
+ for(j=0;j<len;j++){
+ int w=vo_font->width[text[j]];
+ if(w>100) printf("gazvan: %d (%d=%c)\n",w,text[j],text[j]);
+ xsize+=w+vo_font->charspace;
+ }
+ //printf("text width = %d\n",xsize);
+
+ if(xsize>dxs) printf("Warning! SUB too wide!!! (%d>%d)\n",xsize,dxs);
+
+ x=dxs/2-xsize/2;
+
+ for(j=0;j<len;j++){
+ int c=text[j];
+ int font=vo_font->font[c];
+ if(x>=0 && x+vo_font->width[c]<dxs)
+ if(font>=0)
+ draw_alpha(x,y,
+ vo_font->width[c],
+ vo_font->pic_a[font]->h,
+ vo_font->pic_b[font]->bmp+vo_font->start[c],
+ vo_font->pic_a[font]->bmp+vo_font->start[c],
+ vo_font->pic_a[font]->w);
+ x+=vo_font->width[c]+vo_font->charspace;
+ }
+
+ y+=vo_font->height;
}
+#endif
+
}
+
+