1. /*
  2.     Project  : H.264 encoder test    
  3.     Module   : PSNR functions
  4.  
  5.     Author   : Marko 'Fador' Viitanen
  6.  
  7.     Date     : 29/6/2009
  8.     Modified : 29/6/2009
  9.  
  10. */
  11.  
  12. #include <math.h>
  13. #include "common.h"
  14.  
  15. #define MAX (255*255)
  16.  
  17. //Calculates image PSNR value
  18. double imagePSNR(uint8 *frame1, uint8 *frame2, uint32 x, uint32 y)
  19. {  
  20.     double MSE=0.0;
  21.     double MSEtemp=0.0;
  22.     double psnr=0.0;
  23.     uint32 index;
  24.  
  25.     //Calculate MSE
  26.     for(index=0;index<x*y;index++)
  27.     {
  28.         MSEtemp=abs(frame1[index]-frame2[index]);
  29.         MSE+=MSEtemp*MSEtemp;
  30.     }
  31.     MSE/=x*y;
  32.  
  33.     //Avoid division by zero
  34.     if(MSE==0) return 99.0;
  35.  
  36.     //The PSNR
  37.     psnr=10*log10(MAX/MSE);
  38.  
  39.     //Thats it.
  40.     return psnr;
  41. }
  42.  
  43. //Sum of Absolute Difference for block
  44. uint32 SAD(uint8 *block,uint8* block2, uint32 x, uint32 y)
  45. {
  46.     uint32 i;
  47.     uint32 sum=0;
  48.     for(i=0;i<x*y;i+=4)
  49.     {
  50.         sum+=abs(block[i]-block2[i]);
  51.         sum+=abs(block[i+1]-block2[i+1]);
  52.         sum+=abs(block[i+2]-block2[i+2]);
  53.         sum+=abs(block[i+3]-block2[i+3]);
  54.     }
  55.  
  56.     return sum;    
  57. }
  58.