#include <stdio.h>
#include <stdlib.h>
#include <math.h>

main(int argc, char *argv[])
{
   FILE *tsfile, *origfile, *basefile;
   FILE *snrbasefile, *snrenhfile;
   unsigned char originalY[25344], originalU[6336], originalV[6336]; 
   unsigned char baseY[25344], baseU[6336], baseV[6336]; 
   int i, j, currentframe;
   int sumY, sumU, sumV;
   float snrbase;
   
   if (argc != 4) {
      fprintf(stderr, "Usage: %s [Orig. Seq.] [Rec. Seq] [PSNR file]\n", argv[0]);
      exit(1);
   }

   tsfile = fopen("timestamp", "r");
   origfile = fopen(argv[1], "r");
   basefile = fopen(argv[2], "r");
   snrbasefile = fopen(argv[3], "w");
   
   fscanf(tsfile,"%d", &currentframe);
   for (i=0; i<300; i++) {
      fread(originalY, sizeof(unsigned char), 25344, origfile);
      fread(originalU, sizeof(unsigned char), 6336, origfile);
      fread(originalV, sizeof(unsigned char), 6336, origfile);
      if (currentframe == i) {
         fread(baseY, sizeof(unsigned char), 25344, basefile);
         fread(baseU, sizeof(unsigned char), 6336, basefile);
         fread(baseV, sizeof(unsigned char), 6336, basefile);

         sumY= sumU = sumV = 0;
         for (j=0; j<25344; j++) 
           sumY += (originalY[j]-baseY[j])*(originalY[j]-baseY[j]);
       
         for (j=0; j<6336; j++) {
           sumU += (originalU[j]-baseU[j])*(originalU[j]-baseU[j]);
           sumV += (originalV[j]-baseV[j])*(originalV[j]-baseV[j]);
         }
         snrbase = (sumY+sumU+sumV)/38016.0;
         snrbase = 255.0*255.0/snrbase;
         snrbase = 10.0*log10(snrbase);

         fprintf(snrbasefile, "%f\n", snrbase);

      fscanf(tsfile,"%d", &currentframe);
    }

  }
}

