summaryrefslogtreecommitdiff
path: root/image
diff options
context:
space:
mode:
Diffstat (limited to 'image')
-rw-r--r--image/bitmap.h1
-rw-r--r--image/gif.c4
-rw-r--r--image/gifread.c4
-rw-r--r--image/jpeg.c1
-rw-r--r--image/mng.c4
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);
}
}