static 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); } }