rgb转换到yuv420p nv12 yuv422p(cuda版本)

这篇博客详细介绍了如何使用CUDA进行颜色空间转换,从RGB格式转换到YUV420P的NV12和YUV422P格式。内容涵盖CUDA编程基础,以及具体的转换算法和步骤,为图像处理和视频编码提供高效的解决方案。
摘要由CSDN通过智能技术生成
//超清公式
#define RGB2Y(R, G, B)  ( 16  + 0.183f * (R) + 0.614f * (G) + 0.062f * (B) )
#define RGB2U(R, G, B)  ( 128 - 0.101f * (R) - 0.339f * (G) + 0.439f * (B) )
#define RGB2V(R, G, B)  ( 128 + 0.439f * (R) - 0.399f * (G) - 0.040f * (B) )

#define YUV2R(Y, U, V) ( 1.164f *((Y) - 16) + 1.792f * ((V) - 128) )
#define YUV2G(Y, U, V) ( 1.164f *((Y) - 16) - 0.213f *((U) - 128) - 0.534f *((V) - 128) )
#define YUV2B(Y, U, V) ( 1.164f *((Y) - 16) + 2.114f *((U) - 128))

#define CLIPVALUE(x, minValue, maxValue) ((x) < (minValue) ? (minValue) : ((x) > (maxValue) ? (maxValue) : (x)))

__global__ static void __RgbToYuv420p(const unsigned char* dpRgbData, size_t rgbPitch, unsigned char* dpYuv420pData, size_t yuv420Pitch, int width, int height)
{
   
	int index = blockIdx.x * blockDim.x + threadIdx.x;
	int w = index % yuv420Pitch;
	int h = index / yuv420Pitch;

	if (w >= width || h >= height)
		return;

	unsigned char* dp_y_data = dpYuv420pData;
	unsigned char* dp_u_data = dp_y_data + height * yuv420Pitch;
	unsigned char* dp_v_data = dp_u_data + height * yuv420Pitch / 4;

	unsigned char r = dpRgbData[h * rgbPitch + w * 3 + 0];
	unsigned char g = dpRgbData[h * rgbPitch + w * 3 + 1];
	unsigned char b = dpRgbData[h * rgbPitch 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值