remove unneeded animated-webp hacks
now that imlib2 (v1.7.5) is able to load the first frame of an animated-webp file, we no longer need the `is_webp` check to bypass imlib2. ref: https://phab.enlightenment.org/T8964
This commit is contained in:
parent
7a94a5ecc6
commit
eccd7de532
@ -76,6 +76,7 @@ The following dependencies are optional.
|
|||||||
* libexif : Used for auto-orientation and exif thumbnails.
|
* libexif : Used for auto-orientation and exif thumbnails.
|
||||||
Disable via `HAVE_LIBEXIF=0`
|
Disable via `HAVE_LIBEXIF=0`
|
||||||
* libwebp : Used for animated webp playback.
|
* libwebp : Used for animated webp playback.
|
||||||
|
(NOTE: animated webp also requires Imlib2 v1.7.5 or above)
|
||||||
Disabled via `HAVE_LIBWEBP=0`.
|
Disabled via `HAVE_LIBWEBP=0`.
|
||||||
|
|
||||||
Please make sure to install the corresponding development packages in case that
|
Please make sure to install the corresponding development packages in case that
|
||||||
|
46
image.c
46
image.c
@ -298,28 +298,7 @@ static bool img_load_gif(img_t *img, const fileinfo_t *file)
|
|||||||
|
|
||||||
|
|
||||||
#if HAVE_LIBWEBP
|
#if HAVE_LIBWEBP
|
||||||
static bool is_webp(const char *path)
|
static bool img_load_webp(img_t *img, const fileinfo_t *file)
|
||||||
{
|
|
||||||
/* The size (in bytes) of the largest amount of data required to verify a WebP image. */
|
|
||||||
enum { max = 30 };
|
|
||||||
const unsigned char fmt[max];
|
|
||||||
bool ret = false;
|
|
||||||
FILE *f;
|
|
||||||
|
|
||||||
if ((f = fopen(path, "rb")) != NULL) {
|
|
||||||
if (fread((unsigned char *) fmt, 1, max, f) == max)
|
|
||||||
ret = WebPGetInfo(fmt, max, NULL, NULL);
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* fframe img
|
|
||||||
* NULL NULL = do nothing
|
|
||||||
* x NULL = load the first frame as an Imlib_Image
|
|
||||||
* NULL x = load all frames into img->multi.
|
|
||||||
*/
|
|
||||||
static bool img_load_webp(const fileinfo_t *file, Imlib_Image *fframe, img_t *img)
|
|
||||||
{
|
{
|
||||||
FILE *webp_file;
|
FILE *webp_file;
|
||||||
WebPData data;
|
WebPData data;
|
||||||
@ -335,10 +314,8 @@ static bool img_load_webp(const fileinfo_t *file, Imlib_Image *fframe, img_t *im
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned int delay;
|
unsigned int delay;
|
||||||
bool err = false;
|
bool err = false;
|
||||||
data.bytes = NULL;
|
|
||||||
|
|
||||||
if ((err = fframe == NULL && img == NULL))
|
data.bytes = NULL;
|
||||||
goto fail;
|
|
||||||
|
|
||||||
if ((err = (webp_file = fopen(file->path, "rb")) == NULL)) {
|
if ((err = (webp_file = fopen(file->path, "rb")) == NULL)) {
|
||||||
error(0, 0, "%s: Error opening webp image", file->name);
|
error(0, 0, "%s: Error opening webp image", file->name);
|
||||||
@ -368,16 +345,6 @@ static bool img_load_webp(const fileinfo_t *file, Imlib_Image *fframe, img_t *im
|
|||||||
}
|
}
|
||||||
demux = WebPAnimDecoderGetDemuxer(dec);
|
demux = WebPAnimDecoderGetDemuxer(dec);
|
||||||
|
|
||||||
if (img == NULL) { /* Only get the first frame and put it into fframe. */
|
|
||||||
if ((err = !WebPAnimDecoderGetNext(dec, &buf, &ts))) {
|
|
||||||
error(0, 0, "%s: Error loading first frame", file->name);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
*fframe = imlib_create_image_using_copied_data(
|
|
||||||
info.canvas_width, info.canvas_height, (DATA32*)buf);
|
|
||||||
imlib_context_set_image(*fframe);
|
|
||||||
imlib_image_set_has_alpha(WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS) & ALPHA_FLAG);
|
|
||||||
} else {
|
|
||||||
/* Get global information for the image */
|
/* Get global information for the image */
|
||||||
flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS);
|
flags = WebPDemuxGetI(demux, WEBP_FF_FORMAT_FLAGS);
|
||||||
img->w = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH);
|
img->w = WebPDemuxGetI(demux, WEBP_FF_CANVAS_WIDTH);
|
||||||
@ -421,8 +388,6 @@ static bool img_load_webp(const fileinfo_t *file, Imlib_Image *fframe, img_t *im
|
|||||||
img->multi.cnt = 0;
|
img->multi.cnt = 0;
|
||||||
}
|
}
|
||||||
imlib_context_set_image(img->im);
|
imlib_context_set_image(img->im);
|
||||||
}
|
|
||||||
imlib_image_set_format("webp");
|
|
||||||
fail:
|
fail:
|
||||||
if (dec != NULL)
|
if (dec != NULL)
|
||||||
WebPAnimDecoderDelete(dec);
|
WebPAnimDecoderDelete(dec);
|
||||||
@ -439,11 +404,6 @@ Imlib_Image img_open(const fileinfo_t *file)
|
|||||||
if (access(file->path, R_OK) == 0 &&
|
if (access(file->path, R_OK) == 0 &&
|
||||||
stat(file->path, &st) == 0 && S_ISREG(st.st_mode))
|
stat(file->path, &st) == 0 && S_ISREG(st.st_mode))
|
||||||
{
|
{
|
||||||
#if HAVE_LIBWEBP
|
|
||||||
if (is_webp(file->path))
|
|
||||||
img_load_webp(file, &im, NULL);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
im = imlib_load_image(file->path);
|
im = imlib_load_image(file->path);
|
||||||
if (im != NULL) {
|
if (im != NULL) {
|
||||||
imlib_context_set_image(im);
|
imlib_context_set_image(im);
|
||||||
@ -478,7 +438,7 @@ bool img_load(img_t *img, const fileinfo_t *file)
|
|||||||
#endif
|
#endif
|
||||||
#if HAVE_LIBWEBP
|
#if HAVE_LIBWEBP
|
||||||
if (STREQ(fmt, "webp"))
|
if (STREQ(fmt, "webp"))
|
||||||
img_load_webp(file, NULL, img);
|
img_load_webp(img, file);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
img->w = imlib_image_get_width();
|
img->w = imlib_image_get_width();
|
||||||
|
Loading…
Reference in New Issue
Block a user