10 #if RGB_FORMAT == RGB_FORMAT_RGB565 12 #define PACK_PIXEL(rgb_ptr) \ 13 *(Uint16 *)rgb_ptr = \ 14 ((((Uint16)clampU8(y_tmp+r_tmp)) << 8 ) & 0xF800) | \ 15 ((((Uint16)clampU8(y_tmp+g_tmp)) << 3) & 0x07E0) | \ 16 (((Uint16)clampU8(y_tmp+b_tmp)) >> 3); \ 19 #elif RGB_FORMAT == RGB_FORMAT_RGB24 21 #define PACK_PIXEL(rgb_ptr) \ 22 rgb_ptr[0] = clampU8(y_tmp+r_tmp); \ 23 rgb_ptr[1] = clampU8(y_tmp+g_tmp); \ 24 rgb_ptr[2] = clampU8(y_tmp+b_tmp); \ 27 #elif RGB_FORMAT == RGB_FORMAT_RGBA 29 #define PACK_PIXEL(rgb_ptr) \ 30 *(Uint32 *)rgb_ptr = \ 31 (((Uint32)clampU8(y_tmp+r_tmp)) << 24) | \ 32 (((Uint32)clampU8(y_tmp+g_tmp)) << 16) | \ 33 (((Uint32)clampU8(y_tmp+b_tmp)) << 8) | \ 37 #elif RGB_FORMAT == RGB_FORMAT_BGRA 39 #define PACK_PIXEL(rgb_ptr) \ 40 *(Uint32 *)rgb_ptr = \ 41 (((Uint32)clampU8(y_tmp+b_tmp)) << 24) | \ 42 (((Uint32)clampU8(y_tmp+g_tmp)) << 16) | \ 43 (((Uint32)clampU8(y_tmp+r_tmp)) << 8) | \ 47 #elif RGB_FORMAT == RGB_FORMAT_ARGB 49 #define PACK_PIXEL(rgb_ptr) \ 50 *(Uint32 *)rgb_ptr = \ 52 (((Uint32)clampU8(y_tmp+r_tmp)) << 16) | \ 53 (((Uint32)clampU8(y_tmp+g_tmp)) << 8) | \ 54 (((Uint32)clampU8(y_tmp+b_tmp)) << 0); \ 57 #elif RGB_FORMAT == RGB_FORMAT_ABGR 59 #define PACK_PIXEL(rgb_ptr) \ 60 *(Uint32 *)rgb_ptr = \ 62 (((Uint32)clampU8(y_tmp+b_tmp)) << 16) | \ 63 (((Uint32)clampU8(y_tmp+g_tmp)) << 8) | \ 64 (((Uint32)clampU8(y_tmp+r_tmp)) << 0); \ 68 #error PACK_PIXEL unimplemented 79 #if YUV_FORMAT == YUV_FORMAT_420 80 const int y_pixel_stride = 1;
81 const int uv_pixel_stride = 1;
82 const int uv_x_sample_interval = 2;
83 const int uv_y_sample_interval = 2;
84 #elif YUV_FORMAT == YUV_FORMAT_422 85 const int y_pixel_stride = 2;
86 const int uv_pixel_stride = 4;
87 const int uv_x_sample_interval = 2;
88 const int uv_y_sample_interval = 1;
89 #elif YUV_FORMAT == YUV_FORMAT_NV12 90 const int y_pixel_stride = 1;
91 const int uv_pixel_stride = 2;
92 const int uv_x_sample_interval = 2;
93 const int uv_y_sample_interval = 2;
97 for(y=0; y<(height-(uv_y_sample_interval-1)); y+=uv_y_sample_interval)
99 const uint8_t *y_ptr1=Y+y*Y_stride,
100 *y_ptr2=Y+(y+1)*Y_stride,
101 *u_ptr=U+(y/uv_y_sample_interval)*UV_stride,
102 *v_ptr=V+(y/uv_y_sample_interval)*UV_stride;
104 uint8_t *rgb_ptr1=RGB+y*RGB_stride,
105 *rgb_ptr2=RGB+(y+1)*RGB_stride;
107 for(x=0; x<(width-(uv_x_sample_interval-1)); x+=uv_x_sample_interval)
111 int32_t u_tmp = ((*u_ptr)-128);
112 int32_t v_tmp = ((*v_ptr)-128);
126 if (uv_y_sample_interval > 1) {
134 y_ptr1+=2*y_pixel_stride;
135 y_ptr2+=2*y_pixel_stride;
136 u_ptr+=2*uv_pixel_stride/uv_x_sample_interval;
137 v_ptr+=2*uv_pixel_stride/uv_x_sample_interval;
141 if (uv_x_sample_interval == 2 && x == (width-1))
145 int32_t u_tmp = ((*u_ptr)-128);
146 int32_t v_tmp = ((*v_ptr)-128);
157 if (uv_y_sample_interval > 1) {
165 if (uv_y_sample_interval == 2 && y == (height-1))
167 const uint8_t *y_ptr1=Y+y*Y_stride,
168 *u_ptr=U+(y/uv_y_sample_interval)*UV_stride,
169 *v_ptr=V+(y/uv_y_sample_interval)*UV_stride;
171 uint8_t *rgb_ptr1=RGB+y*RGB_stride;
173 for(x=0; x<(width-(uv_x_sample_interval-1)); x+=uv_x_sample_interval)
177 int32_t u_tmp = ((*u_ptr)-128);
178 int32_t v_tmp = ((*v_ptr)-128);
192 y_ptr1+=2*y_pixel_stride;
193 u_ptr+=2*uv_pixel_stride/uv_x_sample_interval;
194 v_ptr+=2*uv_pixel_stride/uv_x_sample_interval;
198 if (uv_x_sample_interval == 2 && x == (width-1))
202 int32_t u_tmp = ((*u_ptr)-128);
203 int32_t v_tmp = ((*v_ptr)-128);
217 #undef STD_FUNCTION_NAME
GLint GLint GLint GLint GLint x
GLint GLint GLsizei width
void STD_FUNCTION_NAME(uint32_t width, uint32_t height, const uint8_t *Y, const uint8_t *U, const uint8_t *V, uint32_t Y_stride, uint32_t UV_stride, uint8_t *RGB, uint32_t RGB_stride, YCbCrType yuv_type)
static const YUV2RGBParam YUV2RGB[3]
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei GLsizei height
#define PACK_PIXEL(rgb_ptr)