mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
tiny_psnr: support 32-bit float samples
Signed-off-by: Mans Rullgard <mans@mansr.com>
This commit is contained in:
parent
f3eb008343
commit
9f1280def4
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user