GENERIC(unsigned, border_style)
GENERIC(int, hspacing)
GENERIC(int, scale)
- GENERIC(unsigned, hash)
STRING(text)
END(DrawingHashKey)
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) {
}
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;
}
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
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 */
// 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;
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);