TI中文支持网
TI专业的中文技术问题搜集分享网站

求助!在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); } }

       感谢!在线等,求解惑

weili cai:

有人帮忙讲解一下吗各位大佬?TI的各位大大们?

Chris Meng:

回复 weili cai:

你好,

不建议打印这么频繁,你能每行输出一个打印看看么?

weili cai:

回复 Chris Meng:

确实打印太频繁造成的,放在循环外面之后,可以打印够循环次数了,不知道为什么打印会影响这么大。

感谢!

还有,请问在哪儿看图像格式是YUV420SP的?

赞(0)
未经允许不得转载:TI中文支持网 » 求助!在8168SDK4.0里面,提取U,V分量扩展成Y,U,V三通道进行算法运算出错!
分享到: 更多 (0)