|
|
@ -24,6 +24,8 @@ |
|
|
|
#include <inttypes.h> |
|
|
|
#include <inttypes.h> |
|
|
|
#include <assert.h> |
|
|
|
#include <assert.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "libavutil/intfloat.h" |
|
|
|
|
|
|
|
|
|
|
|
#define FFMIN(a, b) ((a) > (b) ? (b) : (a)) |
|
|
|
#define FFMIN(a, b) ((a) > (b) ? (b) : (a)) |
|
|
|
#define F 100 |
|
|
|
#define F 100 |
|
|
|
#define SIZE 2048 |
|
|
|
#define SIZE 2048 |
|
|
@ -88,6 +90,23 @@ static uint64_t int_sqrt(uint64_t a) |
|
|
|
return ret; |
|
|
|
return ret; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int16_t get_s16l(uint8_t *p) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
union { |
|
|
|
|
|
|
|
uint16_t u; |
|
|
|
|
|
|
|
int16_t s; |
|
|
|
|
|
|
|
} v; |
|
|
|
|
|
|
|
v.u = p[0] | p[1] << 8; |
|
|
|
|
|
|
|
return v.s; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static float get_f32l(uint8_t *p) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
union av_intfloat32 v; |
|
|
|
|
|
|
|
v.i = p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24; |
|
|
|
|
|
|
|
return v.f; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int main(int argc, char *argv[]) |
|
|
|
int main(int argc, char *argv[]) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int i, j; |
|
|
|
int i, j; |
|
|
@ -96,8 +115,8 @@ int main(int argc, char *argv[]) |
|
|
|
FILE *f[2]; |
|
|
|
FILE *f[2]; |
|
|
|
uint8_t buf[2][SIZE]; |
|
|
|
uint8_t buf[2][SIZE]; |
|
|
|
uint64_t psnr; |
|
|
|
uint64_t psnr; |
|
|
|
int len = argc < 4 ? 1 : atoi(argv[3]); |
|
|
|
int len = 1; |
|
|
|
int64_t max = (1 << (8 * len)) - 1; |
|
|
|
int64_t max; |
|
|
|
int shift = argc < 5 ? 0 : atoi(argv[4]); |
|
|
|
int shift = argc < 5 ? 0 : atoi(argv[4]); |
|
|
|
int skip_bytes = argc < 6 ? 0 : atoi(argv[5]); |
|
|
|
int skip_bytes = argc < 6 ? 0 : atoi(argv[5]); |
|
|
|
int size0 = 0; |
|
|
|
int size0 = 0; |
|
|
@ -110,6 +129,25 @@ int main(int argc, char *argv[]) |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (argc > 3) { |
|
|
|
|
|
|
|
if (!strcmp(argv[3], "u8")) { |
|
|
|
|
|
|
|
len = 1; |
|
|
|
|
|
|
|
} else if (!strcmp(argv[3], "s16")) { |
|
|
|
|
|
|
|
len = 2; |
|
|
|
|
|
|
|
} else if (!strcmp(argv[3], "f32")) { |
|
|
|
|
|
|
|
len = 4; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
char *end; |
|
|
|
|
|
|
|
len = strtol(argv[3], &end, 0); |
|
|
|
|
|
|
|
if (*end || len > 2) { |
|
|
|
|
|
|
|
fprintf(stderr, "Unsupported sample format: %s\n", argv[3]); |
|
|
|
|
|
|
|
return 1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
max = (1 << (8 * len)) - 1; |
|
|
|
|
|
|
|
|
|
|
|
f[0] = fopen(argv[1], "rb"); |
|
|
|
f[0] = fopen(argv[1], "rb"); |
|
|
|
f[1] = fopen(argv[2], "rb"); |
|
|
|
f[1] = fopen(argv[2], "rb"); |
|
|
|
if (!f[0] || !f[1]) { |
|
|
|
if (!f[0] || !f[1]) { |
|
|
@ -145,13 +183,19 @@ int main(int argc, char *argv[]) |
|
|
|
int s0 = fread(buf[0], 1, SIZE, f[0]); |
|
|
|
int s0 = fread(buf[0], 1, SIZE, f[0]); |
|
|
|
int s1 = fread(buf[1], 1, SIZE, f[1]); |
|
|
|
int s1 = fread(buf[1], 1, SIZE, f[1]); |
|
|
|
|
|
|
|
|
|
|
|
for (j = 0; j < FFMIN(s0, s1); j++) { |
|
|
|
for (j = 0; j < FFMIN(s0, s1); j += len) { |
|
|
|
int64_t a = buf[0][j]; |
|
|
|
int64_t a = buf[0][j]; |
|
|
|
int64_t b = buf[1][j]; |
|
|
|
int64_t b = buf[1][j]; |
|
|
|
int dist; |
|
|
|
int dist; |
|
|
|
if (len == 2) { |
|
|
|
if (len == 2) { |
|
|
|
a = (int16_t)(a | (buf[0][++j] << 8)); |
|
|
|
a = get_s16l(buf[0] + j); |
|
|
|
b = (int16_t)(b | (buf[1][ j] << 8)); |
|
|
|
b = get_s16l(buf[1] + j); |
|
|
|
|
|
|
|
} else if (len == 4) { |
|
|
|
|
|
|
|
a = get_f32l(buf[0] + j) * (1 << 24); |
|
|
|
|
|
|
|
b = get_f32l(buf[1] + j) * (1 << 24); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
a = buf[0][j]; |
|
|
|
|
|
|
|
b = buf[1][j]; |
|
|
|
} |
|
|
|
} |
|
|
|
sse += (a - b) * (a - b); |
|
|
|
sse += (a - b) * (a - b); |
|
|
|
dist = abs(a - b); |
|
|
|
dist = abs(a - b); |
|
|
|