#include #include #include 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", ¤tframe); 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", ¤tframe); } } }