diff options
author | Calvin Walton <calvin.walton@kepstin.ca> | 2018-02-01 13:28:25 -0500 |
---|---|---|
committer | Rostislav Pehlivanov <atomnuker@gmail.com> | 2018-02-02 15:36:21 +0000 |
commit | 108958e43df075967217d4c81cb4cea5164b2b5f (patch) | |
tree | 8dbef42be591efbf5f6041d01bdba525fee366c6 | |
parent | 4be6307cbf819eeaac850b3f0e7e088b147107d3 (diff) | |
download | ffmpeg-108958e43df075967217d4c81cb4cea5164b2b5f.tar.gz |
librsvgdec: Fix frame clearing code
The existing code attempts to clear the frame by painting in OVER
mode with transparent black - which is a no-op. As a result if you
have many input frames (e.g. you're using a sequence of svg files),
you'll start to see new frames drawn over old frames as memory gets
re-used.
Switch the code to paint using the CLEAR compositing operator,
which fills every channel with 0 values (setting a source colour
is not required).
-rw-r--r-- | libavcodec/librsvgdec.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/libavcodec/librsvgdec.c b/libavcodec/librsvgdec.c index e57070f8e4..6697785026 100644 --- a/libavcodec/librsvgdec.c +++ b/libavcodec/librsvgdec.c @@ -82,8 +82,10 @@ static int librsvg_decode_frame(AVCodecContext *avctx, void *data, int *got_fram crender = cairo_create(image); - cairo_set_source_rgba(crender, 0.0, 0.0, 0.0, 1.0f); - cairo_paint_with_alpha(crender, 0.0f); + cairo_save(crender); + cairo_set_operator(crender, CAIRO_OPERATOR_CLEAR); + cairo_paint(crender); + cairo_restore(crender); cairo_scale(crender, dimensions.width / (double)unscaled_dimensions.width, dimensions.height / (double)unscaled_dimensions.height); |