这几天不忙,写了个逆时针旋转YUV420P的算法,本以为也就是20分钟的事,结果越着急越出错,竟然把旋转V分量的地址变量,手误写成U分量的了,害得我调试了2个多小时,才发现的这个都想扇自己大嘴巴的低级失误。
算法如下:
void rotate90YUV420P(char *d_c, const char *s_c, int width, int height)
{
int i,j,k,p,q;
char *dest = d_c, *src = s_c;
// rotate Y
for (j = 0; j < width; j++)
{
for (i = 1; i <= height; i++)
{
*dest++ = *(src + i*width - j);
}
}
// rotate U
char *src_u = src + width*height;
for (p = 0; p < width/2; p++)
{
for (k = 1; k <= height/2; k++)
{
*dest++ = *(src_u + k*width/2 - p);
}
}
// rotate V
char *src_v = src + width*height*5/4;
for (p = 0; p < width/2; p++)
{
for (k = 1; k <= height/2; k++)
{
*dest++ = *(src_v + k*width/2 - p);
}
}
}