mirror of https://github.com/FreeRDP/FreeRDP
libfreerdp-primitives: add more YCbCr test coefficients
This commit is contained in:
parent
e21202ee61
commit
81454c1171
|
@ -2151,8 +2151,11 @@ static void test_fill_bitmap_blue_channel(BYTE* data, int width, int height, BYT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static float TEST_YCbCrToRGB_01[4] = { 1.403f, 0.344f, 0.714f, 1.770f };
|
#define TEST_FP_TYPE float
|
||||||
static float TEST_YCbCrToRGB_02[4] = { 1.402525f, 0.343730f, 0.714401f, 1.769905f };
|
|
||||||
|
static TEST_FP_TYPE TEST_YCbCrToRGB_01[4] = { 1.403f, 0.344f, 0.714f, 1.770f };
|
||||||
|
static TEST_FP_TYPE TEST_YCbCrToRGB_02[4] = { 1.402525f, 0.343730f, 0.714401f, 1.769905f };
|
||||||
|
static TEST_FP_TYPE TEST_YCbCrToRGB_03[4] = { 1.402524948120117L, 0.3437300026416779L, 0.7144010066986084L, 1.769904971122742L };
|
||||||
|
|
||||||
static INT16 TEST_YCbCr_01[3] = { +115, +1720, -2145 };
|
static INT16 TEST_YCbCr_01[3] = { +115, +1720, -2145 };
|
||||||
static BYTE TEST_RGB_01[3] = { 37, 161, 227 }; /* incorrect red */
|
static BYTE TEST_RGB_01[3] = { 37, 161, 227 }; /* incorrect red */
|
||||||
|
@ -2163,14 +2166,14 @@ static BYTE TEST_RGB_02[3] = { 21, 140, 221 }; /* incorrect green */
|
||||||
static INT16 TEST_YCbCr_03[3] = { -504, +1896, -2168 };
|
static INT16 TEST_YCbCr_03[3] = { -504, +1896, -2168 };
|
||||||
static BYTE TEST_RGB_03[3] = { 17, 140, 217 }; /* incorrect blue */
|
static BYTE TEST_RGB_03[3] = { 17, 140, 217 }; /* incorrect blue */
|
||||||
|
|
||||||
int test_YCbCr_fp(float coeffs[4], INT16 YCbCr[3], BYTE RGB[3])
|
int test_YCbCr_fp(TEST_FP_TYPE coeffs[4], INT16 YCbCr[3], BYTE RGB[3])
|
||||||
{
|
{
|
||||||
INT16 R, G, B;
|
INT16 R, G, B;
|
||||||
float Y, Cb, Cr;
|
TEST_FP_TYPE Y, Cb, Cr;
|
||||||
|
|
||||||
Y = (float) (YCbCr[0] + 4096);
|
Y = (TEST_FP_TYPE) (YCbCr[0] + 4096);
|
||||||
Cb = (float) (YCbCr[1]);
|
Cb = (TEST_FP_TYPE) (YCbCr[1]);
|
||||||
Cr = (float) (YCbCr[2]);
|
Cr = (TEST_FP_TYPE) (YCbCr[2]);
|
||||||
|
|
||||||
R = ((INT16) (((Cr * coeffs[0]) + Y + 16.0f)) >> 5);
|
R = ((INT16) (((Cr * coeffs[0]) + Y + 16.0f)) >> 5);
|
||||||
G = ((INT16) ((Y - (Cb * coeffs[1]) - (Cr * coeffs[2]) + 16.0f)) >> 5);
|
G = ((INT16) ((Y - (Cb * coeffs[1]) - (Cr * coeffs[2]) + 16.0f)) >> 5);
|
||||||
|
@ -2196,10 +2199,10 @@ int test_YCbCr_fp(float coeffs[4], INT16 YCbCr[3], BYTE RGB[3])
|
||||||
printf("G: A: %3d E: %3d %s\n", G, RGB[1], (G == RGB[1]) ? "" : "***");
|
printf("G: A: %3d E: %3d %s\n", G, RGB[1], (G == RGB[1]) ? "" : "***");
|
||||||
printf("B: A: %3d E: %3d %s\n", B, RGB[2], (B == RGB[2]) ? "" : "***");
|
printf("B: A: %3d E: %3d %s\n", B, RGB[2], (B == RGB[2]) ? "" : "***");
|
||||||
printf("Y: %+5d Cb: %+5d Cr: %+5d\n", YCbCr[0], YCbCr[1], YCbCr[2]);
|
printf("Y: %+5d Cb: %+5d Cr: %+5d\n", YCbCr[0], YCbCr[1], YCbCr[2]);
|
||||||
printf("[0]: %20.16f\n", coeffs[0]);
|
//printf("[0]: %20.20lf\n", coeffs[0]);
|
||||||
printf("[1]: %20.16f\n", coeffs[1]);
|
//printf("[1]: %20.20lf\n", coeffs[1]);
|
||||||
printf("[2]: %20.16f\n", coeffs[2]);
|
//printf("[2]: %20.20lf\n", coeffs[2]);
|
||||||
printf("[3]: %20.16f\n", coeffs[3]);
|
//printf("[3]: %20.20lf\n", coeffs[3]);
|
||||||
printf("--------------------------------\n");
|
printf("--------------------------------\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2221,6 +2224,13 @@ int test_YCbCr_pixels()
|
||||||
test_YCbCr_fp(TEST_YCbCrToRGB_02, TEST_YCbCr_03, TEST_RGB_03);
|
test_YCbCr_fp(TEST_YCbCrToRGB_02, TEST_YCbCr_03, TEST_RGB_03);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (0)
|
||||||
|
{
|
||||||
|
test_YCbCr_fp(TEST_YCbCrToRGB_03, TEST_YCbCr_01, TEST_RGB_01);
|
||||||
|
test_YCbCr_fp(TEST_YCbCrToRGB_03, TEST_YCbCr_02, TEST_RGB_02);
|
||||||
|
test_YCbCr_fp(TEST_YCbCrToRGB_03, TEST_YCbCr_03, TEST_RGB_03);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue