📄 stat.cpp
字号:
#include "HEnc.h"
#include <math.h>
double computeSNRY(H263VencStatus *encoder)
{
double dRtn;
int i, j, k;
int lx = encoder->mv_outside_frame ? encoder->pels + 32 : encoder->pels;
int iTotal = encoder->pels * encoder->lines;
unsigned char *p1 = encoder->frame_buf[encoder->zero_index].pLum;
unsigned char *p2 = encoder->frameToEncode.pLum;
// Attention!! The size of the following 2 variables depends on compiler
__int64 iDiff;
__int64 iSquare;
if (encoder->PTYPE == B_IMG)
{
p1 = encoder->BPicture[0].pLum;
p2 = encoder->BPicture[encoder->B_count].pLum;
lx = encoder->pels;
}
iSquare = 0;
for (j = 0, k = 0; j < encoder->lines; j++, k+=lx)
{
for (i = 0; i < encoder->pels; i++)
{
iDiff = *p2++ - p1[k+i];
iSquare += iDiff * iDiff;
}
}
dRtn = (double)iSquare/(double)iTotal;
if(dRtn != 0)
{
dRtn = (double)(255 * 255)/dRtn;
dRtn = 10 * (double)log10(dRtn);
}
else
dRtn = (float)99.99;
encoder->frmsnr.snrY = dRtn;
return dRtn;
}
double computeSNRCB(H263VencStatus *encoder)
{
double dRtn;
int i, j, k;
int iTotal = encoder->lines * encoder->pels / 4;
int lx = encoder->mv_outside_frame ? encoder->pels/2 + 16 : encoder->pels/2;
unsigned char *p1 = encoder->frame_buf[encoder->zero_index].pCb;
unsigned char *p2 = encoder->frameToEncode.pCb;
// Attention!! The size of the following 2 variables depends on compiler
__int64 iDiff;
__int64 iSquare;
if (encoder->PTYPE == B_IMG)
{
p1 = encoder->BPicture[0].pCb;
p2 = encoder->BPicture[encoder->B_count].pCb;
lx = encoder->pels/2;
}
iSquare = 0;
for(j = 0, k = 0; j < encoder->lines/2; j++, k += lx)
{
for (i = 0; i < encoder->pels/2; i ++)
{
iDiff = *p2++ - p1[k+i];
iSquare+=iDiff * iDiff;
}
}
dRtn = (double)iSquare/(double)iTotal;
if(dRtn != 0)
{
dRtn = (double)(255 * 255)/dRtn;
dRtn = 10 * (double)log10(dRtn);
}
else
dRtn = (float)99.99;
encoder->frmsnr.snrCB = dRtn;
return dRtn;
}
double computeSNRCR(H263VencStatus *encoder)
{
double dRtn;
int i, j, k;
int iTotal = encoder->lines * encoder->pels / 4;
int lx = encoder->mv_outside_frame ? encoder->pels/2 + 16 : encoder->pels/2;
unsigned char *p1 = encoder->frame_buf[encoder->zero_index].pCr;
unsigned char *p2 = encoder->frameToEncode.pCr;
// Attention!! The size of the following 2 variables depends on compiler
__int64 iDiff;
__int64 iSquare;
if (encoder->PTYPE == B_IMG)
{
p1 = encoder->BPicture[0].pCr;
p2 = encoder->BPicture[encoder->B_count].pCr;
lx = encoder->pels / 2;
}
iSquare = 0;
for(j = 0, k = 0; j < encoder->lines/2; j++, k += lx)
{
for (i = 0; i < encoder->pels/2; i ++)
{
iDiff = *p2++ - p1[k+i];
iSquare+=iDiff * iDiff;
}
}
dRtn = (double)iSquare/(double)iTotal;
if(dRtn != 0)
{
dRtn = (double)(255 * 255)/dRtn;
dRtn = 10 * (double)log10(dRtn);
}
else
dRtn = (float)99.99;
encoder->frmsnr.snrCR = dRtn;
return dRtn;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -