rendered paste bodystatic inline void yuv420toARGB(vector unsigned char *Y,vector unsigned char *U, vector unsigned char *V,vector unsigned char *ARGB, int width,int maxwidth)
{
vector unsigned char *ARGBp;
vector float Yf0,Yf1,Yf2,Yf3,Yf4,Yf5,Yf6,Yf7;
vector float Uf0,Uf1,Uf2,Uf3;
vector float Vf0,Vf1,Vf2,Vf3;
vector float R0,G0,B0;
for (int i =0;i < width/16;i++)
{
Yf0=unpackhh(Y[i]);//line 1
Yf1=unpacklh(Y[i]);
Yf2=unpackhl(Y[i]);
Yf3=unpackll(Y[i]);
Yf4=unpackhh(Y[i+width/16]);//line 2
Yf5=unpacklh(Y[i+width/16]);
Yf6=unpackhl(Y[i+width/16]);
Yf7=unpackll(Y[i+width/16]);
int j=i/2;
if ( i&1 == 1) {
Uf0= unpackd89(U[j]);
Uf1=unpackd1011(U[j]);
Uf2=unpackd1213(U[j]);
Uf3=unpackd1415(U[j]);
Vf0= unpackd89(V[j]);
Vf1=unpackd1011(V[j]);
Vf2=unpackd1213(V[j]);
Vf3=unpackd1415(V[j]);
} else {
Uf0=unpackd01(U[j]);
Uf1=unpackd23(U[j]);
Uf2=unpackd45(U[j]);
Uf3=unpackd67(U[j]);
Vf0=unpackd01(V[j]);
Vf1=unpackd23(V[j]);
Vf2=unpackd45(V[j]);
Vf3=unpackd67(V[j]);
}
YUV2RGB(Yf0,Uf0,Vf0,&R0,&G0,&B0);// Line 1
ARGB[i*4]=packfARGB(R0,G0,B0);
YUV2RGB(Yf1,Uf1,Vf1,&R0,&G0,&B0);
ARGB[i*4+1]=packfARGB(R0,G0,B0);
YUV2RGB(Yf2,Uf2,Vf2,&R0,&G0,&B0);
ARGB[i*4+2]=packfARGB(R0,G0,B0);
YUV2RGB(Yf3,Uf3,Vf3,&R0,&G0,&B0);
ARGB[i*4+3]=packfARGB(R0,G0,B0);
YUV2RGB(Yf4,Uf0,Vf0,&R0,&G0,&B0); // Line 2
ARGB[i*4+maxwidth/4]=packfARGB(R0,G0,B0);
YUV2RGB(Yf5,Uf1,Vf1,&R0,&G0,&B0);
ARGB[i*4+1+maxwidth/4]=packfARGB(R0,G0,B0);
YUV2RGB(Yf6,Uf2,Vf2,&R0,&G0,&B0);
ARGB[i*4+2+maxwidth/4]=packfARGB(R0,G0,B0);
YUV2RGB(Yf7,Uf3,Vf3,&R0,&G0,&B0);
ARGB[i*4+3+maxwidth/4]=packfARGB(R0,G0,B0);
}
}