]> granicus.if.org Git - libass/commitdiff
drawing: remove unnecessary fields from ASS_Drawing struct
authorDr.Smile <vabnick@gmail.com>
Tue, 19 Sep 2017 21:55:58 +0000 (00:55 +0300)
committerDr.Smile <vabnick@gmail.com>
Sun, 19 May 2019 17:18:51 +0000 (20:18 +0300)
libass/ass_cache_template.h
libass/ass_drawing.c
libass/ass_drawing.h
libass/ass_render.c

index ba9303faf2a5ab1c0513b48218d32630d643a606..2cb2df4b2539dfcf4bf579cda608bfb753dceffa 100644 (file)
@@ -114,7 +114,6 @@ START(drawing, drawing_hash_key)
     GENERIC(unsigned, border_style)
     GENERIC(int, hspacing)
     GENERIC(int, scale)
-    GENERIC(unsigned, hash)
     STRING(text)
 END(DrawingHashKey)
 
index 59184699b0167e736498e16159ac70228ec64128..01547d8636440f22017efe92b9e0e3199e235dd7 100644 (file)
@@ -264,30 +264,18 @@ void ass_drawing_set_text(ASS_Drawing *drawing, char *str, size_t len)
     drawing->text = strndup(str, len);
 }
 
-/*
- * \brief Create a hashcode for the drawing
- * XXX: To avoid collisions a better hash algorithm might be useful.
- */
-void ass_drawing_hash(ASS_Drawing *drawing)
-{
-    if (!drawing->text)
-        return;
-    drawing->hash = fnv_32a_str(drawing->text, FNV1_32A_INIT);
-}
-
 /*
  * \brief Convert token list to outline.  Calls the line and curve evaluators.
  */
 ASS_Outline *ass_drawing_parse(ASS_Drawing *drawing, bool raw_mode)
 {
     bool started = false;
-    ASS_DrawingToken *token;
     ASS_Vector pen = {0, 0};
 
-    drawing->tokens = drawing_tokenize(drawing->text);
+    ASS_DrawingToken *tokens = drawing_tokenize(drawing->text);
     drawing_prepare(drawing);
 
-    token = drawing->tokens;
+    ASS_DrawingToken *token = tokens;
     while (token) {
         // Draw something according to current command
         switch (token->type) {
@@ -356,10 +344,10 @@ ASS_Outline *ass_drawing_parse(ASS_Drawing *drawing, bool raw_mode)
     }
 
     drawing_finish(drawing, raw_mode);
-    drawing_free_tokens(drawing->tokens);
+    drawing_free_tokens(tokens);
     return &drawing->outline;
 
 error:
-    drawing_free_tokens(drawing->tokens);
+    drawing_free_tokens(tokens);
     return NULL;
 }
index 95e361f242e4b70646ec9ca4adcd5f4e518f74a7..5fef7e0fe62643e0c0b984e8370652df23d78b76 100644 (file)
@@ -51,11 +51,9 @@ typedef struct {
     int desc;            // descender
     ASS_Outline outline; // target outline
     ASS_Vector advance;  // advance (from cbox)
-    int hash;            // hash value (for caching)
 
     // private
     ASS_Library *library;
-    ASS_DrawingToken *tokens;    // tokenized drawing
     double point_scale_x;
     double point_scale_y;
     ASS_Rect cbox;   // bounding box, or let's say... VSFilter's idea of it
@@ -64,7 +62,6 @@ typedef struct {
 ASS_Drawing *ass_drawing_new(ASS_Library *lib);
 void ass_drawing_free(ASS_Drawing *drawing);
 void ass_drawing_set_text(ASS_Drawing *drawing, char *str, size_t n);
-void ass_drawing_hash(ASS_Drawing *drawing);
 ASS_Outline *ass_drawing_parse(ASS_Drawing *drawing, bool raw_mode);
 
 #endif /* LIBASS_DRAWING_H */
index 4ac57980e0c9804361bc15ed2ddf5c15060f35ca..1f9bc813bc465aadca6fbd3f2fe931f57af079c6 100644 (file)
@@ -975,7 +975,6 @@ fill_glyph_hash(ASS_Renderer *priv, OutlineHashKey *outline_key,
         // so for normal borders, maximize cache utility by ignoring it
         key->hspacing =
             info->border_style == 3 ? double_to_d16(info->hspacing) : 0;
-        key->hash = info->drawing->hash;
         key->text = info->drawing->text;
         key->pbo = info->drawing->pbo;
         key->scale = info->drawing->scale;
@@ -1032,7 +1031,6 @@ get_outline_glyph(ASS_Renderer *priv, GlyphInfo *info)
 
         if (info->drawing) {
             ASS_Drawing *drawing = info->drawing;
-            ass_drawing_hash(drawing);
             if(!ass_drawing_parse(drawing, false) ||
                     !outline_copy(&val->outline, &drawing->outline)) {
                 ass_cache_commit(val, 1);