From fbdcfca085f65c402c9c660d6d5d097f357f43a1 Mon Sep 17 00:00:00 2001 From: Christian Soffke Date: Tue, 14 Dec 2021 19:36:25 +0100 Subject: [PATCH] ImageViewer: Improve smoothness of animated gif playback Don't disable grayscale overlay, don't show "resize" messages between frames and and don't clear display unless actually necessary Change-Id: I9f501d8280ce0c8f26f4345088d805d1b84cf143 --- apps/plugins/imageviewer/gif/gif.c | 2 +- apps/plugins/imageviewer/imageviewer.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/plugins/imageviewer/gif/gif.c b/apps/plugins/imageviewer/gif/gif.c index 31fd11d9a6..32c87c88d9 100644 --- a/apps/plugins/imageviewer/gif/gif.c +++ b/apps/plugins/imageviewer/gif/gif.c @@ -210,7 +210,7 @@ static int get_image(struct image_info *info, int frame, int ds) /* assign image buffer */ if (ds > 1) { - if (!iv->running_slideshow) + if (!iv->running_slideshow && (info->frames_count == 1)) { rb->lcd_putsf(0, 3, "resizing %d*%d", info->width, info->height); rb->lcd_update(); diff --git a/apps/plugins/imageviewer/imageviewer.c b/apps/plugins/imageviewer/imageviewer.c index a2b3bb680a..0dd140d1ab 100644 --- a/apps/plugins/imageviewer/imageviewer.c +++ b/apps/plugins/imageviewer/imageviewer.c @@ -915,7 +915,8 @@ static int load_and_show(char* filename, struct image_info *info) rb->lcd_update(); } - mylcd_ub_clear_display(); + if (frame == 0) + mylcd_ub_clear_display(); imgdec->draw_image_rect(info, 0, 0, info->width-info->x, info->height-info->y); mylcd_ub_update(); @@ -956,6 +957,7 @@ static int load_and_show(char* filename, struct image_info *info) get_view(info, &cx, &cy); cx /= zoom; /* prepare the position in the new image */ cy /= zoom; + mylcd_ub_clear_display(); } else continue; @@ -969,12 +971,14 @@ static int load_and_show(char* filename, struct image_info *info) } #ifdef USEGSLIB - grey_show(false); /* switch off overlay */ + if (info->frames_count <= 1) + grey_show(false); /* switch off overlay */ #endif rb->lcd_clear_display(); } while (status > PLUGIN_OTHER); #ifdef USEGSLIB + grey_show(false); /* switch off overlay */ rb->lcd_update(); #endif return status;