[MPlayer-cvslog] r37896 - in trunk/gui/skin: font.c font.h

ib subversion at mplayerhq.hu
Wed Sep 7 14:23:07 EEST 2016


Author: ib
Date: Wed Sep  7 14:23:07 2016
New Revision: 37896

Log:
Dramatically speed up fntRead().

Don't scan all existing bit8_chr slots for a free one when adding
a new bit8_chr, but use a counter in order to directly access the
next free slot.

This speeds up scanning the font description file by approx. 97%.

Modified:
   trunk/gui/skin/font.c
   trunk/gui/skin/font.h

Modified: trunk/gui/skin/font.c
==============================================================================
--- trunk/gui/skin/font.c	Wed Sep  7 14:11:29 2016	(r37895)
+++ trunk/gui/skin/font.c	Wed Sep  7 14:23:07 2016	(r37896)
@@ -232,23 +232,15 @@ int fntRead(char *path, char *fname)
                 cutStr(item, item, '"', 1);
 
             if (item[0] & 0x80) {
-                for (i = 0;; i++) {
-                    if (i == Fonts[id]->extra_chrs) {
+                    if (Fonts[id]->bit8_count % EXTRA_CHRS == 0) {
                         if (!fntAllocChr(Fonts[id], EXTRA_CHRS) ||
                             !fntAllocBit8Chr(Fonts[id], EXTRA_CHRS))
-                            break;
-                    }
-
-                    if (!(Fonts[id]->bit8_chr + i * UTF8LENGTH)[0]) {
-                        strncpy(Fonts[id]->bit8_chr + i * UTF8LENGTH, item, UTF8LENGTH);
-                        break;
+                            continue;
                     }
-                }
 
-                if (i == Fonts[id]->extra_chrs)
-                    continue;
+                strncpy(Fonts[id]->bit8_chr + Fonts[id]->bit8_count * UTF8LENGTH, item, UTF8LENGTH);
 
-                i += ASCII_CHRS;
+                i = Fonts[id]->bit8_count++ + ASCII_CHRS;
             } else
                 i = item[0];
 
@@ -334,7 +326,7 @@ static int fntGetCharIndex(int id, unsig
             *str    += direction;
         }
 
-        for (i = 0; (i < Fonts[id]->extra_chrs) && (Fonts[id]->bit8_chr + i * UTF8LENGTH)[0]; i++) {
+        for (i = 0; i < Fonts[id]->bit8_count; i++) {
             if (strncmp(Fonts[id]->bit8_chr + i * UTF8LENGTH, uchar, UTF8LENGTH) == 0)
                 return i + ASCII_CHRS;
 

Modified: trunk/gui/skin/font.h
==============================================================================
--- trunk/gui/skin/font.h	Wed Sep  7 14:11:29 2016	(r37895)
+++ trunk/gui/skin/font.h	Wed Sep  7 14:23:07 2016	(r37896)
@@ -34,6 +34,7 @@ typedef struct {
     fntChar *Chr;
     int extra_chrs;
     unsigned char *bit8_chr;
+    int bit8_count;
     guiImage Bitmap;
     char name[MAX_FONT_NAME];
 } bmpFont;


More information about the MPlayer-cvslog mailing list