mirror of
https://github.com/mpv-player/mpv
synced 2024-12-21 22:30:22 +00:00
Support UTF8 in OSD text
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@18720 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
c95cda1aa8
commit
49192fddd6
33
libvo/sub.c
33
libvo/sub.c
@ -140,6 +140,35 @@ inline static void vo_draw_text_from_buffer(mp_osd_obj_t* obj,void (*draw_alpha)
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned utf8_get_char(char **str) {
|
||||
uint8_t *strp = (uint8_t *)*str;
|
||||
unsigned c = *strp++;
|
||||
unsigned mask = 0x80;
|
||||
int len = -1;
|
||||
while (c & mask) {
|
||||
mask >>= 1;
|
||||
len++;
|
||||
}
|
||||
if (len <= 0 || len > 4)
|
||||
goto no_utf8;
|
||||
c &= mask - 1;
|
||||
while ((*strp & 0xc0) == 0x80) {
|
||||
if (len-- <= 0)
|
||||
goto no_utf8;
|
||||
c = (c << 6) | (*strp++ & 0x3f);
|
||||
}
|
||||
if (len)
|
||||
goto no_utf8;
|
||||
*str = (char *)strp;
|
||||
return c;
|
||||
|
||||
no_utf8:
|
||||
strp = (uint8_t *)*str;
|
||||
c = *strp++;
|
||||
*str = (char *)strp;
|
||||
return c;
|
||||
}
|
||||
|
||||
inline static void vo_update_text_osd(mp_osd_obj_t* obj,int dxs,int dys){
|
||||
unsigned char *cp=vo_osd_text;
|
||||
int x=20;
|
||||
@ -150,7 +179,7 @@ inline static void vo_update_text_osd(mp_osd_obj_t* obj,int dxs,int dys){
|
||||
obj->bbox.y1=obj->y=10;
|
||||
|
||||
while (*cp){
|
||||
int c=*cp++;
|
||||
uint16_t c=utf8_get_char(&cp);
|
||||
render_one_glyph(vo_font, c);
|
||||
x+=vo_font->width[c]+vo_font->charspace;
|
||||
h=get_height(c,h);
|
||||
@ -165,7 +194,7 @@ inline static void vo_update_text_osd(mp_osd_obj_t* obj,int dxs,int dys){
|
||||
cp=vo_osd_text;
|
||||
x = obj->x;
|
||||
while (*cp){
|
||||
int c=*cp++;
|
||||
uint16_t c=utf8_get_char(&cp);
|
||||
if ((font=vo_font->font[c])>=0)
|
||||
draw_alpha_buf(obj,x,obj->y,
|
||||
vo_font->width[c],
|
||||
|
Loading…
Reference in New Issue
Block a user