/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include <math.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include "raw.h" /* Compare the difference between two raw files */ static inline double max(double a, double b) { return (a > b) ? a : b; } int main(int argc, char **argv) { size_t frame1, frame2; float *data1, *data2; size_t i, n, changed; double diff = 0; double maxdiff = 0; if (argc != 3) { fprintf(stderr, "usage: cmpraw 1.raw 2.raw\n"); exit(1); } data1 = read_raw(argv[1], &frame1); data2 = read_raw(argv[2], &frame2); if (frame1 != frame2) { fprintf(stderr, "mismatch size (%zu vs %zu)\n", frame1, frame2); exit(1); } n = frame1 * 2; changed = 0; for (i = 0; i < n; i++) { if (data1[i] != data2[i]) { changed++; diff += fabs(data1[i] - data2[i]); maxdiff = max(fabs(data1[i] - data2[i]), maxdiff); } } printf("avg diff = %g, max diff = %g, changed = %.3f%%\n", diff / n, maxdiff * 32768, changed*100.0f/n); free(data1); free(data2); return 0; }