This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

求助!在8168SDK4.0里面,提取U,V分量扩展成Y,U,V三通道进行算法运算出错!



你好,

        问题描述很简洁,请耐心看完,感谢。

        在8168SDK4.0里面通过DSP进行算法处理,原来的是针对RGB格式的算法,在VS上通过cv::COLOR_BGR2YUV这个参数转换成YUV,算法运行正常。

        所以我的思路是在DSP里面,通过把YUV420SP格式帧转换成Y,U,V三通道给算法。通过开辟两个内存,分别存储U,V分量。从pFrame->addr[0][1]这个地址开始,提取U,V分量,扩展成YUV444三通道。

        但是出错,并没有完全提取出U,V分量。原本应该打印循环(宽*高)/4=57600次,实际打印56706 之后,程序就挂了。

下面是我提取扩展U,V分量的代码,程序运行到这里我自己没检查出错误。

        请教8168的SDK4.0包里面,算法部分确定是YUV420吗?下面的代码有没有问题?

for(uvr=0; uvr<VIBE_HEIGHT; uvr+=2)
{
for(uvl=0; uvl<VIBE_WIDTH; uvl+=2)
{

z++;

u_buf[uvr*VIBE_WIDTH+uvl] = *((unsigned char*)(pFrame->addr[0][1]) +uvr/2*VIBE_WIDTH+uvl);
u_buf[uvr*VIBE_WIDTH+uvl+1] = *((unsigned char*)(pFrame->addr[0][1]) +uvr/2*VIBE_WIDTH+uvl);
u_buf[(uvr+1)*VIBE_WIDTH+uvl] = *((unsigned char*)(pFrame->addr[0][1]) +uvr/2*VIBE_WIDTH+uvl);
u_buf[(uvr+1)*VIBE_WIDTH+uvl+1] = *((unsigned char*)(pFrame->addr[0][1]) +uvr/2*VIBE_WIDTH+uvl);

v_buf[uvr*VIBE_WIDTH+uvl] = *((unsigned char*)(pFrame->addr[0][1]) +uvr/2*VIBE_WIDTH+uvl+1);
v_buf[uvr*VIBE_WIDTH+uvl+1] = *((unsigned char*)(pFrame->addr[0][1]) +uvr/2*VIBE_WIDTH+uvl+1);
v_buf[(uvr+1)*VIBE_WIDTH+uvl] = *((unsigned char*)(pFrame->addr[0][1]) +uvr/2*VIBE_WIDTH+uvl+1);
v_buf[(uvr+1)*VIBE_WIDTH+uvl+1] = *((unsigned char*)(pFrame->addr[0][1]) +uvr/2*VIBE_WIDTH+uvl+1);

Vps_printf("UVfenliang---cnt%d\n",z);
}
}

       感谢!在线等,求解惑