r1019: Fix crash in Ogg file handling.
[cinelerra/simeon] / mpeg2enc / stats.c
1 /* stats.c, coding statistics                                               */
2
3 /* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
4
5 /*
6  * Disclaimer of Warranty
7  *
8  * These software programs are available to the user without any license fee or
9  * royalty on an "as is" basis.  The MPEG Software Simulation Group disclaims
10  * any and all warranties, whether express, implied, or statuary, including any
11  * implied warranties or merchantability or of fitness for a particular
12  * purpose.  In no event shall the copyright-holder be liable for any
13  * incidental, punitive, or consequential damages of any kind whatsoever
14  * arising from the use of these programs.
15  *
16  * This disclaimer of warranty extends to the user of these programs and user's
17  * customers, employees, agents, transferees, successors, and assigns.
18  *
19  * The MPEG Software Simulation Group does not represent or warrant that the
20  * programs furnished hereunder are free of infringement of any third-party
21  * patents.
22  *
23  * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
24  * are subject to royalty fees to patent holders.  Many of these patents are
25  * general enough such that they are unavoidable regardless of implementation
26  * design.
27  *
28  */
29
30 #include <stdio.h>
31 #include <math.h>
32 #include "config.h"
33 #include "global.h"
34
35 /* private prototypes */
36 static void calcSNR1 _ANSI_ARGS_((unsigned char *org, unsigned char *rec,
37   int lx, int w, int h, double *pv, double *pe));
38
39
40 void calcSNR(org,rec)
41 unsigned char *org[3];
42 unsigned char *rec[3];
43 {
44 }
45
46 static void calcSNR1(org,rec,lx,w,h,pv,pe)
47 unsigned char *org;
48 unsigned char *rec;
49 int lx,w,h;
50 double *pv,*pe;
51 {
52   int i, j;
53   double v1, s1, s2, e2;
54
55   s1 = s2 = e2 = 0.0;
56
57   for (j=0; j<h; j++)
58   {
59     for (i=0; i<w; i++)
60     {
61       v1 = org[i];
62       s1+= v1;
63       s2+= v1*v1;
64       v1-= rec[i];
65       e2+= v1*v1;
66     }
67     org += lx;
68     rec += lx;
69   }
70
71   s1 /= w*h;
72   s2 /= w*h;
73   e2 /= w*h;
74
75   /* prevent division by zero in calcSNR() */
76   if(e2==0.0)
77     e2 = 0.00001;
78
79   *pv = s2 - s1*s1; /* variance */
80   *pe = e2;         /* MSE */
81 }
82
83 void stats()
84 {
85 }