//超清公式
#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
rgb转换到yuv420p nv12 yuv422p(cuda版本)
最新推荐文章于 2023-06-01 19:09:32 发布
这篇博客详细介绍了如何使用CUDA进行颜色空间转换,从RGB格式转换到YUV420P的NV12和YUV422P格式。内容涵盖CUDA编程基础,以及具体的转换算法和步骤,为图像处理和视频编码提供高效的解决方案。
摘要由CSDN通过智能技术生成