diff options
author | atlka <atlka@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-10-15 06:14:55 +0000 |
---|---|---|
committer | atlka <atlka@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-10-15 06:14:55 +0000 |
commit | bfeb215e95204d4afa2b895631d6e6e28e80d30d (patch) | |
tree | 29bc1ac87b0b17fe751da43cee718737ef501275 /libvo/sub.c | |
parent | e503beaf7ceb84bc0b102ee8d722adcd8b6ba2d8 (diff) | |
download | mpv-bfeb215e95204d4afa2b895631d6e6e28e80d30d.tar.bz2 mpv-bfeb215e95204d4afa2b895631d6e6e28e80d30d.tar.xz |
optimizations and corrections
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@2205 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo/sub.c')
-rw-r--r-- | libvo/sub.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/libvo/sub.c b/libvo/sub.c index dc8f31dea7..6e2acea08b 100644 --- a/libvo/sub.c +++ b/libvo/sub.c @@ -94,10 +94,10 @@ inline static void vo_draw_text_progbar(int dxs,int dys,void (*draw_alpha)(int x s=vo_font->pic_b[font]->bmp+vo_font->start[c]; sa=vo_font->pic_a[font]->bmp+vo_font->start[c]; st=vo_font->pic_a[font]->w; - for (i=mark;i--;){ + if ((i=mark)) do { draw_alpha(x,y,w,h,s,sa,st); x+=charw; - } + } while(--i); } c=OSD_PB_1; @@ -107,10 +107,10 @@ inline static void vo_draw_text_progbar(int dxs,int dys,void (*draw_alpha)(int x s =vo_font->pic_b[font]->bmp+vo_font->start[c]; sa=vo_font->pic_a[font]->bmp+vo_font->start[c]; st=vo_font->pic_a[font]->w; - for (i=elems-mark;i--;){ + if ((i=elems-mark)) do { draw_alpha(x,y,w,h,s,sa,st); x+=charw; - } + } while(--i); } c=OSD_PB_END; @@ -164,7 +164,8 @@ inline static void vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,in lastStripPosition=-1; l=vo_sub->lines; - while (l--){ + while (l) { + l--; t=vo_sub->text[i++]; len=strlen(t)-1; @@ -183,19 +184,19 @@ inline static void vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,in c = (c<<8) + t[++j]; } if (k==MAX_UCS){ - l=0 ; len=j; // cut here + len=j; // end here } - utbl[k++]=c; + if (!c) c++; // avoid UCS 0 if (c==' '){ lastk=k; lastStripPosition=j; lastxsize=xsize; - } - else if ((font=vo_font->font[c])>=0){ + } else if ((font=vo_font->font[c])>=0){ if (vo_font->pic_a[font]->h > h){ h=vo_font->pic_a[font]->h; } } + utbl[k++]=c; xsize+=vo_font->width[c]+vo_font->charspace; if (dxs<xsize){ if (lastStripPosition>0){ @@ -210,13 +211,14 @@ inline static void vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,in } else if (j<len) continue; if (h>memy){ // out of the screen so end parsing - memy -=lasth - vo_font->height; // correct the y position - l=0; break; + h -=lasth - vo_font->height; // correct the y position + l=0; + break; } utbl[k++]=0; xtbl[lines++]=(dxs-xsize)/2; if (lines==MAX_UCSLINES||k>MAX_UCS){ - l=0; j=len; // end parsing + l=0; len=j; // end parsing } else if(l || j<len){ // not the last line or not the last char lastStripPosition=-1; xsize=-vo_font->charspace; @@ -233,9 +235,9 @@ inline static void vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,in // printf("lines=%d y=%d\n",lines,y); - i=j=0; l=lines; - while (i<lines){ - x= xtbl[i++]; + i=j=0; + if ((l=lines)) for (;;) { + x=xtbl[i++]; while ((c=utbl[j++])){ if ((font=vo_font->font[c])>=0) draw_alpha(x,y, @@ -244,8 +246,10 @@ inline static void vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,in 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; + x+=vo_font->width[c]+vo_font->charspace; } + if (!--l) + return; y+=vo_font->height; } } |