TI技术专家,你好
我尝试着去更改视频采集驱动获得的raw data时,碰到了一个很奇怪的问题,希望能得到您的帮助。具体如下:
1. 设置前端采集参数为 1920*1080, RGB_888。
2.通过调用 FIVD2_dequeue(pObj->fvidHandleVipAll, &frameList, streamId, BIOS_NO_WAIT) 获得frameList
3.遍历framelist,修改每个frame的raw data:
for( frameId = 0; frameId < frameList.numFrames, frameId++ )
{
unsigned int i, j, k;
FVID2_Frame *pFrame = frameList.frames[frameId];
volatile char* buf = pFrame->addr[0][0];
#if 1 //code 1
for( i = 0; i < 1080; i++ )
{
for( j = 0; j < 1920 * 3; j += 3 )
{
k = i * 1920*3 + j;
buf[ k + 0 ] = 0x00;
buf[ k + 1 ] = 0x00;
buf[ k + 2 ] = 0xFF;
}
}
#else //code 2
for( i = 0; i < 1080 * 1920 * 3; i += 3 )
{
buf[ i + 0 ] = 0x00;
buf[ i + 1 ] = 0x00;
buf[ i + 2 ] = 0xFF;
}
#endif
....................
}
理论上,code 1 和code 2是一样的,都是对frame的raw data数据进行修改而获得红色画面
奇怪的是,code 1无法更改采集的raw data, 在监视器看到的还是真正的视频,但code 2却能修改raw data, 在监视器上能看到一幅纯红色的画面输出。
我的问题是,code 1和code 2为何有这么大的差别, 另外,VPSS的Capture_drv获得的Raw Data可以通过pFrame->addr进行直接操作吗?
谢谢!