mirror of https://github.com/mpv-player/mpv
Proper support for flashing chars in teletext pages.
Patch from Otvos Attila oattila at chello dot hu git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24312 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
b53264188b
commit
b61657c12c
|
@ -270,7 +270,7 @@ static void tt_draw_alpha_buf(mp_osd_obj_t* obj, int x0,int y0, int w,int h, uns
|
||||||
}
|
}
|
||||||
inline static void vo_update_text_teletext(mp_osd_obj_t *obj, int dxs, int dys)
|
inline static void vo_update_text_teletext(mp_osd_obj_t *obj, int dxs, int dys)
|
||||||
{
|
{
|
||||||
int h=0,w=0,i,j,font;
|
int h=0,w=0,i,j,font,flashon;
|
||||||
int wm,hm;
|
int wm,hm;
|
||||||
int color;
|
int color;
|
||||||
int x,y,x0,y0;
|
int x,y,x0,y0;
|
||||||
|
@ -290,6 +290,7 @@ inline static void vo_update_text_teletext(mp_osd_obj_t *obj, int dxs, int dys)
|
||||||
obj->flags&=~OSDFLAG_VISIBLE;
|
obj->flags&=~OSDFLAG_VISIBLE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
flashon=(GetTimer()/1000000)%2;
|
||||||
switch(vo_osd_teletext_half){
|
switch(vo_osd_teletext_half){
|
||||||
case TT_ZOOM_TOP_HALF:
|
case TT_ZOOM_TOP_HALF:
|
||||||
start_row=0;
|
start_row=0;
|
||||||
|
@ -404,10 +405,11 @@ inline static void vo_update_text_teletext(mp_osd_obj_t *obj, int dxs, int dys)
|
||||||
x=x0;
|
x=x0;
|
||||||
for(j=0;j<cols;j++){
|
for(j=0;j<cols;j++){
|
||||||
tc=tdp[(i+start_row)*VBI_COLUMNS+j];
|
tc=tdp[(i+start_row)*VBI_COLUMNS+j];
|
||||||
if(!tc.gfx){
|
if(!tc.gfx || (tc.flh && !flashon)){
|
||||||
/* Rendering one text character */
|
/* Rendering one text character */
|
||||||
draw_alpha_buf(obj,x,y,wm,hm,buf[tc.bg],buf[8],wm);
|
draw_alpha_buf(obj,x,y,wm,hm,buf[tc.bg],buf[8],wm);
|
||||||
if(tc.unicode!=0x20 && tc.unicode!=0x00 && !tc.ctl &&
|
if(tc.unicode!=0x20 && tc.unicode!=0x00 && !tc.ctl &&
|
||||||
|
(!tc.flh || flashon) &&
|
||||||
(font=vo_font->font[tc.unicode])>=0 && y+hm<dys){
|
(font=vo_font->font[tc.unicode])>=0 && y+hm<dys){
|
||||||
tt_draw_alpha_buf(obj,x,y,vo_font->width[tc.unicode],vo_font->height,
|
tt_draw_alpha_buf(obj,x,y,vo_font->width[tc.unicode],vo_font->height,
|
||||||
vo_font->pic_b[font]->bmp+vo_font->start[tc.unicode]-vo_font->charspace*vo_font->pic_a[font]->w,
|
vo_font->pic_b[font]->bmp+vo_font->start[tc.unicode]-vo_font->charspace*vo_font->pic_a[font]->w,
|
||||||
|
|
|
@ -276,6 +276,7 @@ typedef struct tt_char_s{
|
||||||
unsigned char fg; ///< foreground color
|
unsigned char fg; ///< foreground color
|
||||||
unsigned char bg; ///< background color
|
unsigned char bg; ///< background color
|
||||||
unsigned char gfx; ///< 0-no gfx, 1-solid gfx, 2-separated gfx
|
unsigned char gfx; ///< 0-no gfx, 1-solid gfx, 2-separated gfx
|
||||||
|
unsigned char flh; ///< 0-no flash, 1-flash
|
||||||
unsigned char ctl; ///< control character
|
unsigned char ctl; ///< control character
|
||||||
unsigned char lng; ///< lang: 0-secondary language,1-primary language
|
unsigned char lng; ///< lang: 0-secondary language,1-primary language
|
||||||
unsigned char raw; ///< raw character (as received from device)
|
unsigned char raw; ///< raw character (as received from device)
|
||||||
|
|
|
@ -690,6 +690,7 @@ static void decode_page(tt_char* p,unsigned char* raw,int primary_lang,int secon
|
||||||
int separated=0;
|
int separated=0;
|
||||||
int conceal=0;
|
int conceal=0;
|
||||||
int hold=0;
|
int hold=0;
|
||||||
|
int flash=0;
|
||||||
tt_char tt_held=tt_space;
|
tt_char tt_held=tt_space;
|
||||||
for(col=0;col<VBI_COLUMNS;col++){
|
for(col=0;col<VBI_COLUMNS;col++){
|
||||||
int i=row*VBI_COLUMNS+col;
|
int i=row*VBI_COLUMNS+col;
|
||||||
|
@ -704,10 +705,12 @@ static void decode_page(tt_char* p,unsigned char* raw,int primary_lang,int secon
|
||||||
p[i].ctl=(c&0x60)==0?1:0;
|
p[i].ctl=(c&0x60)==0?1:0;
|
||||||
p[i].fg=fg_color;
|
p[i].fg=fg_color;
|
||||||
p[i].bg=bg_color;
|
p[i].bg=bg_color;
|
||||||
|
p[i].flh=flash;
|
||||||
|
|
||||||
if ((c&0x60)==0){ //control chars
|
if ((c&0x60)==0){ //control chars
|
||||||
if(c>=0x08 && c<=0x09){//Flash/Steady
|
if(c>=0x08 && c<=0x09){//Flash/Steady
|
||||||
FFSWAP(int,bg_color,fg_color);
|
flash=c==0x08;
|
||||||
|
p[i].flh=flash;
|
||||||
if(c==0x09){
|
if(c==0x09){
|
||||||
p[i].fg=fg_color;
|
p[i].fg=fg_color;
|
||||||
p[i].bg=bg_color;
|
p[i].bg=bg_color;
|
||||||
|
|
Loading…
Reference in New Issue