//输入:帧索引,CTU像素坐标
//输出:CTU的传播因子
float computeCtuchuanboyinzi(int curframeindex, int ctux, int ctuy)
{
computerBSzuobiao(ctux, ctuy);//计算16个基本处理单元的坐标
//printCTUBSzuobiao(ctux,ctuy);//输出基本处理单元坐标当前CTU
float sum = 0;
if (curframeindex >= 1)//从第二帧开始需要用到上1帧的Dioi,从第二帧开始计算传播因子,第一帧是I帧不用计算。
{
for (int i = 0; i < 16; i++)
{
int lianlu;//记录传播链属于第几条链路
int dioi; //记录dioi;
float expectdistion;//记录期望失真
float bschuanboyinzi;//记录传播因子
//printf("Basicunitcur[i].x, Basicunitcur[i].y=(%d,%d)", Basicunitcur[i].x, Basicunitcur[i].y);
lianlu = getlianluofcurBSincurframe(curframeindex, Basicunitcur[i].x / 16, Basicunitcur[i].y / 16);//得到基本处理单元的时域传播链
//printf("lianlu=%d\n", lianlu);
//travelCurBstemporalchain(lianlu, curframeindex, Basicunitcur[i].x, Basicunitcur[i].y, Chainlength);
int lastbsdis = 0;
lastbsdis = getlastbsdis(lianlu, curframeindex-1, chain[lianlu][curframeindex-1]);
//printflastbsdis(lianlu, curframeindex,lastbsdis);
short buf[16][16];
int omcp = 0;
omcp=getomcp16_16(1,0,0,2,0,0);
printf("omcp=%d\n", omcp);
//printf("lastdis=%.d\n", lastbsdis);
dioi = getdioi(lianlu, lastbsdis,
16*biaohaotozuobiao[chain[lianlu][curframeindex - 1]].blockx,
16*biaohaotozuobiao[chain[lianlu][curframeindex - 1]].blocky,
16*biaohaotozuobiao[chain[lianlu][curframeindex]].blockx,
16*biaohaotozuobiao[chain[lianlu][curframeindex]].blocky,
curframeindex);//得到当前基本处理单元的失真
//printf("dioi=%d",dioi);
//expectdistion = computerBsexpectdistion(lianlu, curframeindex, dioi);//计算当前基本处理单元的期望失真和
//bschuanboyinzi = expectdistion/dioi;//计算得到基本处理单元的传播因子
//sum += bschuanboyinzi;
}
return sum / 16;
}
}