diff options
author | Juanjo <pulento@users.sourceforge.net> | 2002-02-26 22:14:27 +0000 |
---|---|---|
committer | Juanjo <pulento@users.sourceforge.net> | 2002-02-26 22:14:27 +0000 |
commit | 43f1708f8bb400790b226993ab1e6c3d12564d3b (patch) | |
tree | cb98d6f57b9964653dfc407897d0081429d572f2 /libavcodec/dsputil.c | |
parent | 2b9ab1d54a35f7d689b2396cfc59f9dbdcae391f (diff) | |
download | ffmpeg-43f1708f8bb400790b226993ab1e6c3d12564d3b.tar.gz |
- Added PSNR feature to libavcodec and ffmpeg. By now just Y PSNR until I'm
sure it works ok. Also it's slow, so use it only when you _really_ need to
measure quality.
- Fix libavcodec Makefile to enable profiling.
Originally committed as revision 314 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/dsputil.c')
-rw-r--r-- | libavcodec/dsputil.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c index 701cb9969a..09c4c231fe 100644 --- a/libavcodec/dsputil.c +++ b/libavcodec/dsputil.c @@ -18,6 +18,7 @@ */ #include <stdlib.h> #include <stdio.h> +#include <math.h> #include "avcodec.h" #include "dsputil.h" #include "simple_idct.h" @@ -576,3 +577,37 @@ void dsputil_init(void) build_zigzag_end(); } + +void get_psnr(UINT8 *orig_image[3], UINT8 *coded_image[3], + int orig_linesize[3], int coded_linesize, + AVCodecContext *avctx) +{ + int quad, diff, x, y; + UINT8 *orig, *coded; + UINT32 *sq = squareTbl + 256; + + quad = 0; + diff = 0; + + /* Luminance */ + orig = orig_image[0]; + coded = coded_image[0]; + + for (y=0;y<avctx->height;y++) { + for (x=0;x<avctx->width;x++) { + diff = *(orig + x) - *(coded + x); + quad += sq[diff]; + } + orig += orig_linesize[0]; + coded += coded_linesize; + } + + avctx->psnr_y = (float) quad / (float) (avctx->width * avctx->height); + + if (avctx->psnr_y) { + avctx->psnr_y = (float) (255 * 255) / avctx->psnr_y; + avctx->psnr_y = 10 * (float) log10 (avctx->psnr_y); + } else + avctx->psnr_y = 99.99; +} + |