-
- f[0]= fopen(argv[1], "r");
- f[1]= fopen(argv[2], "r");
-
- for(i=0;;){
- if( fread(buf[0], SIZE, 1, f[0]) != 1) break;
- if( fread(buf[1], SIZE, 1, f[1]) != 1) break;
-
- for(j=0; j<SIZE; i++,j++){
- const int a= buf[0][j];
- const int b= buf[1][j];
- sse += (a-b) * (a-b);
+
+ f[0] = fopen(argv[1], "rb");
+ f[1] = fopen(argv[2], "rb");
+ if (!f[0] || !f[1]) {
+ fprintf(stderr, "Could not open input files.\n");
+ return 1;
+ }
+
+ for (i = 0; i < 2; i++) {
+ uint8_t *p = buf[i];
+ if (fread(p, 1, 12, f[i]) != 12)
+ return 1;
+ if (!memcmp(p, "RIFF", 4) &&
+ !memcmp(p + 8, "WAVE", 4)) {
+ if (fread(p, 1, 8, f[i]) != 8)
+ return 1;
+ while (memcmp(p, "data", 4)) {
+ int s = p[4] | p[5] << 8 | p[6] << 16 | p[7] << 24;
+ fseek(f[i], s, SEEK_CUR);
+ if (fread(p, 1, 8, f[i]) != 8)
+ return 1;
+ }
+ } else {
+ fseek(f[i], -12, SEEK_CUR);
+ }
+ }
+
+ fseek(f[shift < 0], abs(shift), SEEK_CUR);
+
+ fseek(f[0], skip_bytes, SEEK_CUR);
+ fseek(f[1], skip_bytes, SEEK_CUR);
+
+ for (;;) {
+ int s0 = fread(buf[0], 1, SIZE, f[0]);
+ int s1 = fread(buf[1], 1, SIZE, f[1]);
+
+ for (j = 0; j < FFMIN(s0, s1); j++) {
+ int64_t a = buf[0][j];
+ int64_t b = buf[1][j];
+ int dist;
+ if (len == 2) {
+ a = (int16_t)(a | (buf[0][++j] << 8));
+ b = (int16_t)(b | (buf[1][ j] << 8));
+ }
+ sse += (a - b) * (a - b);
+ dist = abs(a - b);
+ if (dist > maxdist)
+ maxdist = dist;