69,371
社区成员
发帖
与我相关
我的任务
分享
*uvcomp = yuyv[pixelpos+1]; // U
uvcomp++;
*uvcomp = yuyv[pixelpos+3]; // V
uvcomp++;
其实它没有下面的代码快:
*uvcomp = yuyv[pixelpos+1]; // U
*(uvcomp + 1) = yuyv[pixelpos+3]; // V
uvcomp += 2;
这样可以减少指令依赖。
不过,这些优化都是细枝末节了。
for(i = 0 ; i < VIDEO_HEIGHT; i++)
{
char* yuyv_tmp=yuyv+(i * VIDEO_WIDTH << 1);
if((i & 0x1)==0)
{
for(j = 0; j < VIDEO_WIDTH; j+=2)
{
*ycomp = yuyv_tmp[0];// Y
ycomp++;
*uvcomp = yuyv_tmp[1]; // U
uvcomp++;
*ycomp = yuyv_tmp[2];// Y
ycomp++;
*uvcomp = yuyv_tmp[3]; // V
uvcomp++;
yuyv_tmp+=4;
}
}
else
{
for(j = 0; j < VIDEO_WIDTH; j+=2)
{
*ycomp = yuyv_tmp[0];// Y
ycomp++;
*ycomp = yuyv_tmp[2];// Y
ycomp++;
yuyv_tmp+=4;
}
}
}
随便写的。如果想再优化可以试试把循环再展开,以及用指针代替循环变量。