diff options
Diffstat (limited to 'image')
-rw-r--r-- | image/bitmap.h | 1 | ||||
-rw-r--r-- | image/gif.c | 4 | ||||
-rw-r--r-- | image/gifread.c | 4 | ||||
-rw-r--r-- | image/jpeg.c | 1 | ||||
-rw-r--r-- | image/mng.c | 4 |
5 files changed, 10 insertions, 4 deletions
diff --git a/image/bitmap.h b/image/bitmap.h index 1e68761b3..8c33b8100 100644 --- a/image/bitmap.h +++ b/image/bitmap.h @@ -33,5 +33,6 @@ char *bitmap_get_buffer(struct bitmap *bitmap); size_t bitmap_get_rowstride(struct bitmap *bitmap); void bitmap_destroy(struct bitmap *bitmap); bool bitmap_save(struct bitmap *bitmap, const char *path); +void bitmap_modified(struct bitmap *bitmap); #endif diff --git a/image/gif.c b/image/gif.c index ca77e2b36..4b7fd27ba 100644 --- a/image/gif.c +++ b/image/gif.c @@ -106,6 +106,8 @@ bool nsgif_convert(struct content *c, int iwidth, int iheight) { a plot we get some sensible data */ gif_decode_frame(c->data.gif.gif, 0); + if (c->data.gif.gif->frame_image) + bitmap_modified(c->data.gif.gif->frame_image); /* Schedule the animation if we have one */ @@ -158,10 +160,8 @@ void nsgif_get_frame(struct content *c) { previous_frame = 0; else previous_frame = c->data.gif.gif->decoded_frame + 1; - for (frame = previous_frame; frame <= current_frame; frame++) gif_decode_frame(c->data.gif.gif, frame); - } diff --git a/image/gifread.c b/image/gifread.c index 80ea97d24..4e38fc989 100644 --- a/image/gifread.c +++ b/image/gifread.c @@ -802,6 +802,7 @@ gif_decode_frame_exit: gif->frames[frame].virgin = false; } bitmap_set_opaque(gif->frame_image, gif->frames[frame].opaque); + bitmap_modified(gif->frame_image); /* Restore the buffer position */ @@ -828,7 +829,8 @@ static unsigned int gif_interlaced_line(int height, int y) { void gif_finalise(struct gif_animation *gif) { /* Release all our memory blocks */ - free(gif->frame_image); + if (gif->frame_image) + bitmap_destroy(gif->frame_image); gif->frame_image = NULL; free(gif->frames); gif->frames = NULL; diff --git a/image/jpeg.c b/image/jpeg.c index 0482aa912..672571f2c 100644 --- a/image/jpeg.c +++ b/image/jpeg.c @@ -126,6 +126,7 @@ bool nsjpeg_convert(struct content *c, int w, int h) } #endif } while (cinfo.output_scanline != cinfo.output_height); + bitmap_modified(bitmap); jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); diff --git a/image/mng.c b/image/mng.c index fadd6a3af..1c987fa4d 100644 --- a/image/mng.c +++ b/image/mng.c @@ -293,13 +293,13 @@ bool nsmng_convert(struct content *c, int width, int height) { LOG(("Unable to start display (%i)", status)); return nsmng_broadcast_error(c); } + bitmap_modified(c->bitmap); /* Optimise the plotting of JNG/PNGs */ c->data.mng.opaque_test_pending = (c->type == CONTENT_PNG) || (c->type == CONTENT_JNG); if (c->data.mng.opaque_test_pending) bitmap_set_opaque(c->bitmap, false); - return true; } @@ -467,6 +467,8 @@ void nsmng_animate(void *p) { c->data.mng.waiting = false; mng_display_resume(c->data.mng.handle); c->data.mng.opaque_test_pending = true; + if (c->bitmap) + bitmap_modified(c->bitmap); } } |