14f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com/* 2b0c97975894a5eebebf9d93147cdd941a3accb63fbarchard@google.com * Copyright 2012 The LibYuv Project Authors. All rights reserved. 34f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com * 44f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com * Use of this source code is governed by a BSD-style license 54f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com * that can be found in the LICENSE file in the root of the source 64f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com * tree. An additional intellectual property rights grant can be found 7cde587092fef0dbed2c35602f30b79e7b892e766fbarchard@google.com * in the file PATENTS. All contributing project authors may 84f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com * be found in the AUTHORS file in the root of the source tree. 94f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com */ 104f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com 114f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com#include <stdio.h> 124f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com#include <stdlib.h> 134f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com#include <string.h> 144f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com#include <time.h> 154f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com 164f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com#include "libyuv/basic_types.h" 174f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com#include "libyuv/compare.h" 184f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com#include "libyuv/version.h" 194f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com 204f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.comint main(int argc, char** argv) { 214f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com if (argc < 1) { 22051cef4a0a5190007311dcabe390f9989fcca3c7fbarchard@google.com printf("libyuv compare v%d\n", LIBYUV_VERSION); 234f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com printf("compare file1.yuv file2.yuv\n"); 244f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com return -1; 254f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com } 264f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com char* name1 = argv[1]; 274f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com char* name2 = (argc > 2) ? argv[2] : NULL; 284f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com FILE* fin1 = fopen(name1, "rb"); 294f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com FILE* fin2 = name2 ? fopen(name2, "rb") : NULL; 304f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com 314f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com const int kBlockSize = 32768; 324f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com uint8 buf1[kBlockSize]; 334f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com uint8 buf2[kBlockSize]; 344f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com uint32 hash1 = 5381; 354f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com uint32 hash2 = 5381; 364f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com uint64 sum_square_err = 0; 374f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com uint64 size_min = 0; 384f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com int amt1 = 0; 394f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com int amt2 = 0; 404f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com do { 4174114559321a0e548834483263458bf45aa5e8e3fbarchard@google.com amt1 = static_cast<int>(fread(buf1, 1, kBlockSize, fin1)); 424f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com if (amt1 > 0) hash1 = libyuv::HashDjb2(buf1, amt1, hash1); 434f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com if (fin2) { 4474114559321a0e548834483263458bf45aa5e8e3fbarchard@google.com amt2 = static_cast<int>(fread(buf2, 1, kBlockSize, fin2)); 454f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com if (amt2 > 0) hash2 = libyuv::HashDjb2(buf2, amt2, hash2); 464f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com int amt_min = (amt1 < amt2) ? amt1 : amt2; 474f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com size_min += amt_min; 484f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com sum_square_err += libyuv::ComputeSumSquareError(buf1, buf2, amt_min); 494f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com } 504f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com } while (amt1 > 0 || amt2 > 0); 514f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com 524f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com printf("hash1 %x", hash1); 534f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com if (fin2) { 54051cef4a0a5190007311dcabe390f9989fcca3c7fbarchard@google.com printf(", hash2 %x", hash2); 554f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com double mse = static_cast<double>(sum_square_err) / 564f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com static_cast<double>(size_min); 574f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com printf(", mse %.2f", mse); 584f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com double psnr = libyuv::SumSquareErrorToPsnr(sum_square_err, size_min); 594f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com printf(", psnr %.2f\n", psnr); 604f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com fclose(fin2); 614f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com } 624f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com fclose(fin1); 634f10e97ff23457bc32b169fec7ad21072e6d9c89fbarchard@google.com} 64