//超清公式
#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版本)
最新推荐文章于 2025-03-10 15:36:24 发布