RGB转YUV420代码示例

来源:互联网 发布:php和java哪个好学 编辑:程序博客网 时间:2024/05/07 21:03
for(int i = 0; i < h; ++i)for (int j = 0; j < w; ++j){Y = (unsigned char)((66 * (*r) + 129 * (*g) +  25 * (*b) + 128) >> 8) + 16; *(y_buffer + i * w + j) = Y;if ((i % 2 == 0) && (j % 2 == 0)){U = (unsigned char)((-38 * (*r) -  74 * (*g) + 112 * (*b) + 128) >> 8) + 128;*(u_buffer + (i/2) * uv_w + j/2) = U;V = (unsigned char)((112 * (*r) -  94 * (*g) -  18 * (*b) + 128) >> 8) + 128; *(v_buffer + (i/2) * uv_w + j/2) = V;}}


#define RGB2YUV_SHIFT 15  //ffmpeg rgb2yuv#define BY ( (int) (0.114 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5))  #define BV (-(int) (0.081 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5))  #define BU ( (int) (0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5))  #define GY ( (int) (0.587 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5))  #define GV (-(int) (0.419 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5))  #define GU (-(int) (0.331 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5))  #define RY ( (int) (0.299 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5))  #define RV ( (int) (0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5))  #define RU (-(int) (0.169 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5))y = (int)((RY * r + GY * g + BY * b + ( 33 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);u = (int)((RU * r + GU * g + BU * b + (257 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);v = (int)((RV * r + GV * g + BV * b + (257 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);


0 0