diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-01-19 01:19:38 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-01-19 01:19:38 +0100 |
commit | c130428ab5a17911d0bfa11f804ec05e6f7a53e6 (patch) | |
tree | f306849a3482395433a246d50ec3b3a57c908c5a /tests/tiny_psnr.c | |
parent | 6fd4b8a6ef13bd2d47521ed6894d25de45610291 (diff) | |
parent | 0184bbe2d1e9a77ebe04e61f84a967662b79d387 (diff) | |
download | ffmpeg-c130428ab5a17911d0bfa11f804ec05e6f7a53e6.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
avprobe, cmdutils: K&R formatting cosmetics
tests: K&R formatting cosmetics for test programs
lavf: free packets for muxers implementing interleave_packet().
lavf: fix and extend av_interleaved_write_frame() doxy.
mov: Remove dead stores for spherical coordinates for channel position.
error_resilience: K&R formatting cosmetics
RELEASE_NOTES: mention hiding private symbols in shared builds.
RELEASE_NOTES: mention some notable API changes in 0.8
Conflicts:
cmdutils.h
doc/RELEASE_NOTES
ffprobe.c
libavcodec/error_resilience.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'tests/tiny_psnr.c')
-rw-r--r-- | tests/tiny_psnr.c | 177 |
1 files changed, 90 insertions, 87 deletions
diff --git a/tests/tiny_psnr.c b/tests/tiny_psnr.c index 512d47bb8e..964b6ba75d 100644 --- a/tests/tiny_psnr.c +++ b/tests/tiny_psnr.c @@ -24,32 +24,32 @@ #include <inttypes.h> #include <assert.h> -#define FFMIN(a,b) ((a) > (b) ? (b) : (a)) +#define FFMIN(a, b) ((a) > (b) ? (b) : (a)) #define F 100 #define SIZE 2048 -uint64_t exp16_table[21]={ - 65537, - 65538, - 65540, - 65544, - 65552, - 65568, - 65600, - 65664, - 65793, - 66050, - 66568, - 67616, - 69763, - 74262, - 84150, - 108051, - 178145, - 484249, - 3578144, - 195360063, - 582360139072LL, +uint64_t exp16_table[21] = { + 65537, + 65538, + 65540, + 65544, + 65552, + 65568, + 65600, + 65664, + 65793, + 66050, + 66568, + 67616, + 69763, + 74262, + 84150, + 108051, + 178145, + 484249, + 3578144, + 195360063, + 582360139072LL, }; #if 0 @@ -68,63 +68,66 @@ static unsigned int exp16(unsigned int a){ #endif // 16.16 fixpoint log() -static int64_t log16(uint64_t a){ +static int64_t log16(uint64_t a) +{ int i; - int out=0; - - if(a < 1<<16) - return -log16((1LL<<32) / a); - a<<=16; - - for(i=20;i>=0;i--){ - int64_t b= exp16_table[i]; - if(a<(b<<16)) continue; - out |= 1<<i; - a = ((a/b)<<16) + (((a%b)<<16) + b/2)/b; + int out = 0; + + if (a < 1 << 16) + return -log16((1LL << 32) / a); + a <<= 16; + + for (i = 20; i >= 0; i--) { + int64_t b = exp16_table[i]; + if (a < (b << 16)) + continue; + out |= 1 << i; + a = ((a / b) << 16) + (((a % b) << 16) + b / 2) / b; } return out; } static uint64_t int_sqrt(uint64_t a) { - uint64_t ret=0; + uint64_t ret = 0; + uint64_t ret_sq = 0; int s; - uint64_t ret_sq=0; - for(s=31; s>=0; s--){ - uint64_t b= ret_sq + (1ULL<<(s*2)) + (ret<<s)*2; - if(b<=a){ - ret_sq=b; - ret+= 1ULL<<s; + for (s = 31; s >= 0; s--) { + uint64_t b = ret_sq + (1ULL << (s * 2)) + (ret << s) * 2; + if (b <= a) { + ret_sq = b; + ret += 1ULL << s; } } return ret; } -int main(int argc,char* argv[]){ +int main(int argc, char *argv[]) +{ int i, j; - uint64_t sse=0; + uint64_t sse = 0; uint64_t dev; FILE *f[2]; uint8_t buf[2][SIZE]; uint64_t psnr; - int len= argc<4 ? 1 : atoi(argv[3]); - int64_t max= (1<<(8*len))-1; - int shift= argc<5 ? 0 : atoi(argv[4]); - int skip_bytes = argc<6 ? 0 : atoi(argv[5]); - int size0=0; - int size1=0; - int maxdist = 0; - - if(argc<3){ + int len = argc < 4 ? 1 : atoi(argv[3]); + int64_t max = (1 << (8 * len)) - 1; + int shift = argc < 5 ? 0 : atoi(argv[4]); + int skip_bytes = argc < 6 ? 0 : atoi(argv[5]); + int size0 = 0; + int size1 = 0; + int maxdist = 0; + + if (argc < 3) { printf("tiny_psnr <file1> <file2> [<elem size> [<shift> [<skip bytes>]]]\n"); printf("WAV headers are skipped automatically.\n"); return 1; } - f[0]= fopen(argv[1], "rb"); - f[1]= fopen(argv[2], "rb"); - if(!f[0] || !f[1]){ + 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; } @@ -133,12 +136,12 @@ int main(int argc,char* argv[]){ 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 (!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; + 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; @@ -148,47 +151,47 @@ int main(int argc,char* argv[]){ } } - fseek(f[shift<0], abs(shift), SEEK_CUR); + fseek(f[shift < 0], abs(shift), SEEK_CUR); - fseek(f[0],skip_bytes,SEEK_CUR); - fseek(f[1],skip_bytes,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 (;;) { + 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]; + 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)); + 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; + sse += (a - b) * (a - b); + dist = abs(a - b); + if (dist > maxdist) + maxdist = dist; } size0 += s0; size1 += s1; - if(s0+s1<=0) + if (s0 + s1 <= 0) break; } - i= FFMIN(size0,size1)/len; - if(!i) i=1; - dev= int_sqrt( ((sse/i)*F*F) + (((sse%i)*F*F) + i/2)/i ); - if(sse) - psnr= ((2*log16(max<<16) + log16(i) - log16(sse))*284619LL*F + (1LL<<31)) / (1LL<<32); + i = FFMIN(size0, size1) / len; + if (!i) + i = 1; + dev = int_sqrt(((sse / i) * F * F) + (((sse % i) * F * F) + i / 2) / i); + if (sse) + psnr = ((2 * log16(max << 16) + log16(i) - log16(sse)) * + 284619LL * F + (1LL << 31)) / (1LL << 32); else - psnr= 1000*F-1; //floating point free infinity :) + psnr = 1000 * F - 1; // floating point free infinity :) printf("stddev:%5d.%02d PSNR:%3d.%02d MAXDIFF:%5d bytes:%9d/%9d\n", - (int)(dev/F), (int)(dev%F), - (int)(psnr/F), (int)(psnr%F), - maxdist, - size0, size1); + (int)(dev / F), (int)(dev % F), + (int)(psnr / F), (int)(psnr % F), + maxdist, size0, size1); return 0; } - - |