int nv12rote270(unsigned char * src, unsigned char * dst, int srcW, int srcH)
{
int wide = srcW;
int high = srcH;
unsigned char * srcUV = src + wide * high;
unsigned char * destUV = dst + wide * high;
int i, j;
for (int i = 0; i < high; i++)
{
for (int j = 0; j < wide; j++)
{
dst[(wide - j - 1) * high + i] = src[i * wide + j];
destUV[(((wide - j - 1) / 2) * (high / 2) + (i/ 2)) * 2 + 0] = srcUV[((i / 2) * (wide / 2) + (j / 2)) * 2 + 0];
destUV[(((wide - j - 1) / 2) * (high / 2) + (i/ 2)) * 2 + 1] = srcUV[((i / 2) * (wide / 2) + (j / 2)) * 2 + 1];
}
}
return 0;
}
int nv12rote180(unsigned char * src, unsigned char * dst, int srcW, int srcH)
{
int wide = srcW;
int high = srcH;
unsigned char * srcUV = src + wide * high;
unsigned char * destUV = dst + wide * high;
int i, j;
for (int i = 0; i < high; i++)
{
for (int j = 0; j < wide; j++)
{
dst[(high - 1 - i) * wide + wide - 1 - j] = src[i * wide + j];
destUV[((( high - 1 - i) / 2) * (wide / 2) + ((wide - 1 - j) / 2)) * 2 + 0] = srcUV[((i / 2) * (wide / 2) + (j / 2)) * 2 + 0];
destUV[((( high - 1 - i) / 2) * (wide / 2) + ((wide - 1 - j) / 2)) * 2 + 1] = srcUV[((i / 2) * (wide / 2) + (j / 2)) * 2 + 1];
}
}
return 0;
}
int nv12rote90(unsigned char * src, unsigned char * dst, int srcW, int srcH)
{
int wide = srcW;
int high = srcH;
unsigned char * srcUV = src + wide * high;
unsigned char * destUV = dst + wide * high;
int i , j ;
for(i = 0 ;i < high; i ++)
{
for (j = 0; j < wide; j ++)
{
dst[ high * j + (high -1 - i)]=src[i * wide + j];
destUV[((j / 2) * (high / 2) + ((high -1-i)/ 2)) * 2 + 0]=srcUV[((i / 2) * (wide / 2) + (j / 2)) * 2 + 0];
destUV[((j / 2) * (high / 2) + ((high -1-i)/ 2)) * 2 + 1]=srcUV[((i / 2) * (wide / 2) + (j / 2)) * 2 + 1];
}
}
return 0;
}
{
int wide = srcW;
int high = srcH;
unsigned char * srcUV = src + wide * high;
unsigned char * destUV = dst + wide * high;
int i, j;
for (int i = 0; i < high; i++)
{
for (int j = 0; j < wide; j++)
{
dst[(wide - j - 1) * high + i] = src[i * wide + j];
destUV[(((wide - j - 1) / 2) * (high / 2) + (i/ 2)) * 2 + 0] = srcUV[((i / 2) * (wide / 2) + (j / 2)) * 2 + 0];
destUV[(((wide - j - 1) / 2) * (high / 2) + (i/ 2)) * 2 + 1] = srcUV[((i / 2) * (wide / 2) + (j / 2)) * 2 + 1];
}
}
return 0;
}
int nv12rote180(unsigned char * src, unsigned char * dst, int srcW, int srcH)
{
int wide = srcW;
int high = srcH;
unsigned char * srcUV = src + wide * high;
unsigned char * destUV = dst + wide * high;
int i, j;
for (int i = 0; i < high; i++)
{
for (int j = 0; j < wide; j++)
{
dst[(high - 1 - i) * wide + wide - 1 - j] = src[i * wide + j];
destUV[((( high - 1 - i) / 2) * (wide / 2) + ((wide - 1 - j) / 2)) * 2 + 0] = srcUV[((i / 2) * (wide / 2) + (j / 2)) * 2 + 0];
destUV[((( high - 1 - i) / 2) * (wide / 2) + ((wide - 1 - j) / 2)) * 2 + 1] = srcUV[((i / 2) * (wide / 2) + (j / 2)) * 2 + 1];
}
}
return 0;
}
int nv12rote90(unsigned char * src, unsigned char * dst, int srcW, int srcH)
{
int wide = srcW;
int high = srcH;
unsigned char * srcUV = src + wide * high;
unsigned char * destUV = dst + wide * high;
int i , j ;
for(i = 0 ;i < high; i ++)
{
for (j = 0; j < wide; j ++)
{
dst[ high * j + (high -1 - i)]=src[i * wide + j];
destUV[((j / 2) * (high / 2) + ((high -1-i)/ 2)) * 2 + 0]=srcUV[((i / 2) * (wide / 2) + (j / 2)) * 2 + 0];
destUV[((j / 2) * (high / 2) + ((high -1-i)/ 2)) * 2 + 1]=srcUV[((i / 2) * (wide / 2) + (j / 2)) * 2 + 1];
}
}
return 0;
}