你好,
问题描述很简洁,请耐心看完,感谢。
在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); } }
感谢!在线等,求解惑
weili cai:
有人帮忙讲解一下吗各位大佬?TI的各位大大们?
Chris Meng:
回复 weili cai:
你好,
不建议打印这么频繁,你能每行输出一个打印看看么?
weili cai:
回复 Chris Meng:
确实打印太频繁造成的,放在循环外面之后,可以打印够循环次数了,不知道为什么打印会影响这么大。
感谢!
还有,请问在哪儿看图像格式是YUV420SP的?