static inline void line_yuv2rgb_2(const uint8_t *src_lines[], int src_strides[], int16_t *dst_lines[], int src_w, int dst_stride ){ int i; int16_t *line2[3]={dst_lines[0]+dst_stride,dst_lines[1]+dst_stride,dst_lines[2]+dst_stride}; const uint8_t *y1,*y2,*u,*v; int16_t *r1,*b1,*g1,*r2,*b2,*g2; y1=src_lines[0]; y2=src_lines[0]+src_strides[0]; u= src_lines[1]; v= src_lines[2]; for(i=0;i<src_w;i+=4){ yuv2rgb_4x2(y1, y2, u, v, dst_lines[0]+i, dst_lines[1]+i, dst_lines[2]+i, line2[0]+i, line2[1]+i, line2[2]+i); y1+=4; y2+=4; u+=2; v+=2; } }
void img_ycrcb420p_to_bgra(uint8_t* src[],unsigned short w,unsigned short h, uint32_t dest[]) { unsigned int offset_y=0; unsigned int offset_dest=0; unsigned int offset_cbcr=0; int row; int i; int col_crcb=0; int col_y; int16_t r1[4], g1[4], b1[4], r2[4], g2[4], b2[4]; if (premult_initd == FALSE) { init_premults(); } for (row=0;row<h;row+=2) { offset_y=row*w; offset_cbcr=offset_y>>2; for (col_y=0;col_y<w;col_y+=4) { yuv2rgb_4x2(src[0]+offset_y+col_y ,src[0]+offset_y+w+col_y ,(src[1]+offset_cbcr+col_crcb) ,(src[2]+offset_cbcr+col_crcb) ,r1 ,g1 ,b1 ,r2 ,g2 ,b2); for (i =0;i<4;i++) { *(uint8_t*)(dest+offset_dest+i) = b1[i]; *((uint8_t*)(dest+offset_dest+i)+1) = g1[i]; *((uint8_t*)(dest+offset_dest+i)+2) = r1[i]; *((uint8_t*)(dest+offset_dest+i)+3) = 255; *(uint8_t*)(dest+w+offset_dest+i) = b2[i]; *((uint8_t*)(dest+w+offset_dest+i)+1) = g2[i]; *((uint8_t*)(dest+w+offset_dest+i)+2) = r2[i]; *((uint8_t*)(dest+w+offset_dest+i)+3) = 255; } col_crcb+=2; offset_dest=offset_y+col_y; } } }