diff options
Diffstat (limited to 'libass')
-rw-r--r-- | libass/ass_render.c | 6 | ||||
-rw-r--r-- | libass/ass_render.h | 1 |
2 files changed, 7 insertions, 0 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index f8b7987..b11c681 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -2204,12 +2204,14 @@ static void check_cache_limits(ASS_Renderer *priv, CacheStore *cache) ass_cache_empty(cache->composite_cache, 0); ass_free_images(priv->prev_images_root); priv->prev_images_root = 0; + priv->cache_cleared = 1; } if (ass_cache_empty(cache->outline_cache, cache->glyph_max)) { ass_cache_empty(cache->bitmap_cache, 0); ass_cache_empty(cache->composite_cache, 0); ass_free_images(priv->prev_images_root); priv->prev_images_root = 0; + priv->cache_cleared = 1; } } @@ -2475,6 +2477,9 @@ static int ass_detect_change(ASS_Renderer *priv) ASS_Image *img, *img2; int diff; + if (priv->cache_cleared) + return 2; + img = priv->prev_images_root; img2 = priv->images_root; diff = 0; @@ -2571,6 +2576,7 @@ ASS_Image *ass_render_frame(ASS_Renderer *priv, ASS_Track *track, // free the previous image list ass_free_images(priv->prev_images_root); priv->prev_images_root = 0; + priv->cache_cleared = 0; return priv->images_root; } diff --git a/libass/ass_render.h b/libass/ass_render.h index d0d9aa3..45d19bb 100644 --- a/libass/ass_render.h +++ b/libass/ass_render.h @@ -253,6 +253,7 @@ struct ass_renderer { ASS_Image *images_root; // rendering result is stored here ASS_Image *prev_images_root; + int cache_cleared; EventImages *eimg; // temporary buffer for sorting rendered events int eimg_size; // allocated buffer size |