犯这么低级傻帽的错误。。。。
在三层for循环嵌套的时候记得各层的变量定义不能笼统的在for循环开始的时候就全部定义。这样的结果就是内层的for循环结果不会随着形参的改变而刷新。最后的到的结果会是所有结果的累加。
double TotalGpp_ofslice = 0;
for (uiEncCUOrder_Our = uiStartCUAddr / rpcPic->getNumPartInCU();
uiEncCUOrder_Our < (uiBoundingCUAddr + (rpcPic->getNumPartInCU() - 1)) / rpcPic->getNumPartInCU();
uiCUAddr = rpcPic->getPicSym()->getCUOrderMap(++uiEncCUOrder_Our))
{
TComDataCU*& pcCU = rpcPic->getCU(uiCUAddr);
TEncRCSeq* encRCSeq;
double AvgGpp_ofLCU = 0;
double TotalGpp = 0;
UInt stride = rpcPic->getPicYuvOrg()->getStride();
Pel* pOrg = rpcPic->getPicYuvOrg()->getLumaAddr(uiCUAddr);
printf("\n now is coding the %d LCU\n", uiEncCUOrder_Our);
for (UInt y = 0; y < 64; y++)
{
double Totalline_Gpp = 0;
for (UInt x = 0; x < 64; x++)
{
double Gppidx = 0;
Gppidx = (abs((pOrg[x] - pOrg[x + 1])) + abs((pOrg[x] - (pOrg + stride)[x])));
//cout << Gppidx << endl;
Totalline_Gpp += Gppidx;//获得一整行的Gpp
//cout << Totalline_Gpp << endl;
}
TotalGpp += Totalline_Gpp;//输出一个LCU的梯度
//cout << TotalGpp << endl;
pOrg += stride;
}
//cout << TotalGpp << endl;//整个LCU的Gpp
AvgGpp_ofLCU = TotalGpp/(64*64);//整个的LCU的Gpp
cout << AvgGpp_ofLCU << endl;
TotalGpp_ofslice += AvgGpp_ofLCU;
}
cout << TotalGpp_ofslice << endl;//循环完之后得到的是整个slice的Gpp