Introduce a generic WebPGetImageReader(type) function

Also introduce an always-failing 'reader' for unknown formats.
So we don't have to check reader==NULL, code is more regular.

-> We can get read of specific ReadPNG(), ReadJPEG(), ... declaration and use.

Change-Id: I290759705420878f00c7223c726d4ad404afd9c4
This commit is contained in:
Pascal Massimino 2016-10-08 18:57:13 +00:00 committed by James Zern
parent 4eb5df28d1
commit ce8733209d
3 changed files with 26 additions and 7 deletions

View File

@ -107,7 +107,7 @@ static int ReadPicture(const char* const filename, WebPPicture* const pic,
if (pic->width == 0 || pic->height == 0) { if (pic->width == 0 || pic->height == 0) {
WebPImageReader reader = WebPGuessImageReader(data, data_size); WebPImageReader reader = WebPGuessImageReader(data, data_size);
ok = (reader != NULL) && reader(data, data_size, pic, keep_alpha, metadata); ok = reader(data, data_size, pic, keep_alpha, metadata);
} else { } else {
// If image size is specified, infer it as YUV format. // If image size is specified, infer it as YUV format.
ok = ReadYUV(data, data_size, pic); ok = ReadYUV(data, data_size, pic);

View File

@ -34,13 +34,28 @@ WebPInputFileFormat WebPGuessImageType(const uint8_t* const data,
return format; return format;
} }
WebPImageReader WebPGuessImageReader(const uint8_t* const data, static int FailReader(const uint8_t* const data, size_t data_size,
size_t data_size) { struct WebPPicture* const pic,
switch (WebPGuessImageType(data, data_size)) { int keep_alpha, struct Metadata* const metadata) {
(void)data;
(void)data_size;
(void)pic;
(void)keep_alpha;
(void)metadata;
return 0;
}
WebPImageReader WebPGetImageReader(WebPInputFileFormat format) {
switch (format) {
case WEBP_PNG_FORMAT: return ReadPNG; case WEBP_PNG_FORMAT: return ReadPNG;
case WEBP_JPEG_FORMAT: return ReadJPEG; case WEBP_JPEG_FORMAT: return ReadJPEG;
case WEBP_TIFF_FORMAT: return ReadTIFF; case WEBP_TIFF_FORMAT: return ReadTIFF;
case WEBP_WEBP_FORMAT: return ReadWebP; case WEBP_WEBP_FORMAT: return ReadWebP;
default: return NULL; default: return FailReader;
} }
} }
WebPImageReader WebPGuessImageReader(const uint8_t* const data,
size_t data_size) {
return WebPGetImageReader(WebPGuessImageType(data, data_size));
}

View File

@ -49,8 +49,12 @@ typedef int (*WebPImageReader)(const uint8_t* const data, size_t data_size,
struct WebPPicture* const pic, struct WebPPicture* const pic,
int keep_alpha, struct Metadata* const metadata); int keep_alpha, struct Metadata* const metadata);
// Return the reader associated to a given file format.
WebPImageReader WebPGetImageReader(WebPInputFileFormat format);
// This function is similar to WebPGuessImageType(), but returns a // This function is similar to WebPGuessImageType(), but returns a
// suitable reader function. Or NULL if the image can't be guessed. // suitable reader function. The returned reader is never NULL, but
// unknown formats will return an always-failing valid reader.
WebPImageReader WebPGuessImageReader(const uint8_t* const data, WebPImageReader WebPGuessImageReader(const uint8_t* const data,
size_t data_size); size_t data_size);