⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yuv2rgb.h

📁 实时监控
💻 H
字号:
#ifndef _YUY2RGB_H
#define _YUY2RGB_H

#ifndef byte
	typedef unsigned char byte;
#endif
	
byte clip(double x)
{
	if( x<0 )
		return 0;
	if( x>255 )
		return 255;
	return static_cast<byte>(x);
}
/*
	B = 1.164(Y - 16)                  + 2.018(U - 128)
	G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
	R = 1.164(Y - 16) + 1.596(V - 128)

 */

static void yuv2rgb(byte* yb, byte* ub, byte* vb, byte* rgb, 
					int w, int h, int y_stride, int uv_stride, int out_stride)
{
	double y, u, v;
	for( int i=0; i<h; i++ )
	{
		for( int j=0; j<w; j++ )
		{
			y = *yb;
			u = *ub;
			v = *vb;
			rgb[2] = clip(1.164*(y - 16)                   + 2.018*(u - 128));	// B
			rgb[1] = clip(1.164*(y - 16) - 0.813*(v - 128) - 0.391*(u - 128));	// G
			rgb[0] = clip(1.164*(y - 16) + 1.596*(v - 128));					// R
			yb += y_stride;
			if( j%2 == 1 )
			{
				ub += uv_stride;
				vb += uv_stride;
			}
			rgb += out_stride;
		}
	}
}

// YUY2: Y0 U0 Y1 V0...
//        8  8  8  8
// Y0 : YUY2
// U0 : YUY2 + 1
// Y1 : YUY2 + 2
// V0 : YUY2 + 3
static void yuy2_rgb24(byte* yuy2, int w, int h, byte* rgb)
{
	yuv2rgb(yuy2, yuy2+1, yuy2+3, rgb, w, h, 2, 4, 3);
//	yuv2rgb_24(yuy2, w, yuy2+1, yuy2+3, w/2, rgb, w, h, w*3 );
}

// UYVY: U0 Y0 V0 Y1...
//        8  8  8  8
// Y0 : UYVY + 1
// U0 : UYVY
// Y1 : UYVY + 3
// V0 : UYVY + 2
static void uyvy_rgb24(byte* uyvy, int w, int h, byte* rgb)
{
	yuv2rgb(uyvy+1, uyvy, uyvy+2, rgb, w, h, 2, 4, 3);
//	yuv2rgb_24(uyvy+1, 2, uyvy, uyvy+2, 4, rgb, w, h, 3 );
}

#endif	// _YUY2RGB_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -