你好,
问题描述很简洁,请耐心看完,感谢。
在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);
}
}
感谢!在线等,求解惑