diff options
author | Dr.Smile <vabnick@gmail.com> | 2020-12-13 17:23:26 +0300 |
---|---|---|
committer | Dr.Smile <vabnick@gmail.com> | 2021-02-22 18:44:54 +0300 |
commit | 82b225b3d6653091d028b39d561d185ed76a7be5 (patch) | |
tree | 7a41f473b4b5242919e3a3d8414fa17373132f8a /libass/ass_cache.c | |
parent | 05cde3b5b686e41f96e6b5b1a731617f220aedda (diff) | |
download | libass-82b225b3d6653091d028b39d561d185ed76a7be5.tar.bz2 libass-82b225b3d6653091d028b39d561d185ed76a7be5.tar.xz |
parsing: use string references for font family and drawing text
That eliminates most uses of strdup() in the rendering process.
Diffstat (limited to 'libass/ass_cache.c')
-rw-r--r-- | libass/ass_cache.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/libass/ass_cache.c b/libass/ass_cache.c index d0dd6fb..70c0113 100644 --- a/libass/ass_cache.c +++ b/libass/ass_cache.c @@ -40,12 +40,13 @@ // font cache static bool font_key_move(void *dst, void *src) { - ASS_FontDesc *k = src; - if (dst) - memcpy(dst, src, sizeof(ASS_FontDesc)); - else - free(k->family); - return true; + if (!dst) + return true; + + ASS_FontDesc *d = dst, *s = dst; + memcpy(dst, src, sizeof(ASS_FontDesc)); + d->family.str = ass_copy_string(s->family); + return d->family.str; } static void font_destruct(void *key, void *value) @@ -207,8 +208,8 @@ static bool outline_key_move(void *dst, void *src) } memcpy(dst, src, sizeof(OutlineHashKey)); if (s->type == OUTLINE_DRAWING) { - d->u.drawing.text = strdup(s->u.drawing.text); - return d->u.drawing.text; + d->u.drawing.text.str = ass_copy_string(s->u.drawing.text); + return d->u.drawing.text.str; } if (s->type == OUTLINE_BORDER) ass_cache_inc_ref(s->u.border.outline); @@ -226,7 +227,7 @@ static void outline_destruct(void *key, void *value) ass_cache_dec_ref(k->u.glyph.font); break; case OUTLINE_DRAWING: - free(k->u.drawing.text); + free((char *) k->u.drawing.text.str); break; case OUTLINE_BORDER: ass_cache_dec_ref(k->u.border.outline); |