mirror of
https://github.com/webmproject/libwebp.git
synced 2025-07-13 06:24:27 +02:00
WebPPictureDistortion: support ARGB format for 'pic' when computing distortion.
using a *tmp_plane buffer to split a/r/g/b planes up appeared to be the easiest route, compared to copy-pasting the whole code and making it x_stride aware... Change-Id: I0898ef1df62bd3e1713b77187b31b5eeef3832fe
This commit is contained in:
@ -1110,16 +1110,19 @@ int main(int argc, const char *argv[]) {
|
||||
if (print_distortion >= 0) { // print distortion
|
||||
static const char* distortion_names[] = { "PSNR", "SSIM", "LSIM" };
|
||||
float values[5];
|
||||
// Comparison is performed in YUVA colorspace.
|
||||
if (original_picture.use_argb &&
|
||||
!WebPPictureARGBToYUVA(&original_picture, WEBP_YUV420A)) {
|
||||
fprintf(stderr, "Error while converting original picture to YUVA.\n");
|
||||
goto Error;
|
||||
}
|
||||
if (picture.use_argb &&
|
||||
!WebPPictureARGBToYUVA(&picture, WEBP_YUV420A)) {
|
||||
fprintf(stderr, "Error while converting compressed picture to YUVA.\n");
|
||||
goto Error;
|
||||
if (picture.use_argb != original_picture.use_argb) {
|
||||
// Somehow, the WebPEncode() call converted the original picture.
|
||||
// We need to make both match before calling WebPPictureDistortion().
|
||||
int ok = 0;
|
||||
if (picture.use_argb) {
|
||||
ok = WebPPictureYUVAToARGB(&original_picture);
|
||||
} else {
|
||||
ok = WebPPictureARGBToYUVA(&original_picture, WEBP_YUV420A);
|
||||
}
|
||||
if (!ok) {
|
||||
fprintf(stderr, "Error while converting original picture.\n");
|
||||
goto Error;
|
||||
}
|
||||
}
|
||||
if (!WebPPictureDistortion(&picture, &original_picture,
|
||||
print_distortion, values)) {
|
||||
@ -1127,9 +1130,14 @@ int main(int argc, const char *argv[]) {
|
||||
goto Error;
|
||||
}
|
||||
if (!short_output) {
|
||||
fprintf(stderr, "%s: Y:%.2f U:%.2f V:%.2f A:%.2f Total:%.2f\n",
|
||||
distortion_names[print_distortion],
|
||||
values[0], values[1], values[2], values[3], values[4]);
|
||||
fprintf(stderr, "%s: ", distortion_names[print_distortion]);
|
||||
if (picture.use_argb) {
|
||||
fprintf(stderr, "B:%.2f G:%.2f R:%.2f A:%.2f Total:%.2f\n",
|
||||
values[0], values[1], values[2], values[3], values[4]);
|
||||
} else {
|
||||
fprintf(stderr, "Y:%.2f U:%.2f V:%.2f A:%.2f Total:%.2f\n",
|
||||
values[0], values[1], values[2], values[3], values[4]);
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "%7d %.4f\n", picture.stats->coded_size, values[4]);
|
||||
}
|
||||
|
Reference in New Issue
Block a user