testyuv: added GetColorspaceForYUVConversionMode()
This commit is contained in:
@@ -116,11 +116,6 @@ static int run_automated_tests(int pattern_size, int extra_pitch)
|
|||||||
SDL_PIXELFORMAT_UYVY,
|
SDL_PIXELFORMAT_UYVY,
|
||||||
SDL_PIXELFORMAT_YVYU
|
SDL_PIXELFORMAT_YVYU
|
||||||
};
|
};
|
||||||
const SDL_Colorspace colorspaces[] = {
|
|
||||||
SDL_COLORSPACE_JPEG,
|
|
||||||
SDL_COLORSPACE_BT601_LIMITED,
|
|
||||||
SDL_COLORSPACE_BT709_LIMITED
|
|
||||||
};
|
|
||||||
int i, j;
|
int i, j;
|
||||||
SDL_Surface *pattern = generate_test_pattern(pattern_size);
|
SDL_Surface *pattern = generate_test_pattern(pattern_size);
|
||||||
const int yuv_len = MAX_YUV_SURFACE_SIZE(pattern->w, pattern->h, extra_pitch);
|
const int yuv_len = MAX_YUV_SURFACE_SIZE(pattern->w, pattern->h, extra_pitch);
|
||||||
@@ -137,8 +132,7 @@ static int run_automated_tests(int pattern_size, int extra_pitch)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mode = GetYUVConversionModeForResolution(pattern->w, pattern->h);
|
mode = GetYUVConversionModeForResolution(pattern->w, pattern->h);
|
||||||
SDL_assert(mode < SDL_arraysize(colorspaces));
|
colorspace = GetColorspaceForYUVConversionMode(mode);
|
||||||
colorspace = colorspaces[mode];
|
|
||||||
|
|
||||||
/* Verify conversion from YUV formats */
|
/* Verify conversion from YUV formats */
|
||||||
for (i = 0; i < SDL_arraysize(formats); ++i) {
|
for (i = 0; i < SDL_arraysize(formats); ++i) {
|
||||||
@@ -395,36 +389,18 @@ int main(int argc, char **argv)
|
|||||||
switch (yuv_mode) {
|
switch (yuv_mode) {
|
||||||
case YUV_CONVERSION_JPEG:
|
case YUV_CONVERSION_JPEG:
|
||||||
yuv_mode_name = "JPEG";
|
yuv_mode_name = "JPEG";
|
||||||
colorspace = SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
|
|
||||||
SDL_COLOR_RANGE_FULL,
|
|
||||||
SDL_COLOR_PRIMARIES_BT709,
|
|
||||||
SDL_TRANSFER_CHARACTERISTICS_BT601,
|
|
||||||
SDL_MATRIX_COEFFICIENTS_BT601,
|
|
||||||
SDL_CHROMA_LOCATION_CENTER);
|
|
||||||
break;
|
break;
|
||||||
case YUV_CONVERSION_BT601:
|
case YUV_CONVERSION_BT601:
|
||||||
yuv_mode_name = "BT.601";
|
yuv_mode_name = "BT.601";
|
||||||
colorspace = SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
|
|
||||||
SDL_COLOR_RANGE_LIMITED,
|
|
||||||
SDL_COLOR_PRIMARIES_BT709,
|
|
||||||
SDL_TRANSFER_CHARACTERISTICS_BT601,
|
|
||||||
SDL_MATRIX_COEFFICIENTS_BT601,
|
|
||||||
SDL_CHROMA_LOCATION_CENTER);
|
|
||||||
break;
|
break;
|
||||||
case YUV_CONVERSION_BT709:
|
case YUV_CONVERSION_BT709:
|
||||||
yuv_mode_name = "BT.709";
|
yuv_mode_name = "BT.709";
|
||||||
colorspace = SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
|
|
||||||
SDL_COLOR_RANGE_LIMITED,
|
|
||||||
SDL_COLOR_PRIMARIES_BT709,
|
|
||||||
SDL_TRANSFER_CHARACTERISTICS_BT709,
|
|
||||||
SDL_MATRIX_COEFFICIENTS_BT709,
|
|
||||||
SDL_CHROMA_LOCATION_CENTER);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
yuv_mode_name = "UNKNOWN";
|
yuv_mode_name = "UNKNOWN";
|
||||||
colorspace = SDL_COLORSPACE_UNKNOWN;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
colorspace = GetColorspaceForYUVConversionMode(yuv_mode);
|
||||||
|
|
||||||
raw_yuv = SDL_calloc(1, MAX_YUV_SURFACE_SIZE(original->w, original->h, 0));
|
raw_yuv = SDL_calloc(1, MAX_YUV_SURFACE_SIZE(original->w, original->h, 0));
|
||||||
ConvertRGBtoYUV(yuv_format, original->pixels, original->pitch, raw_yuv, original->w, original->h, yuv_mode, 0, 100);
|
ConvertRGBtoYUV(yuv_format, original->pixels, original->pitch, raw_yuv, original->w, original->h, yuv_mode, 0, 100);
|
||||||
|
|||||||
@@ -41,6 +41,42 @@ YUV_CONVERSION_MODE GetYUVConversionModeForResolution(int width, int height)
|
|||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_Colorspace GetColorspaceForYUVConversionMode(YUV_CONVERSION_MODE mode)
|
||||||
|
{
|
||||||
|
SDL_Colorspace colorspace;
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case YUV_CONVERSION_JPEG:
|
||||||
|
colorspace = SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
|
||||||
|
SDL_COLOR_RANGE_FULL,
|
||||||
|
SDL_COLOR_PRIMARIES_BT709,
|
||||||
|
SDL_TRANSFER_CHARACTERISTICS_BT601,
|
||||||
|
SDL_MATRIX_COEFFICIENTS_BT601,
|
||||||
|
SDL_CHROMA_LOCATION_CENTER);
|
||||||
|
break;
|
||||||
|
case YUV_CONVERSION_BT601:
|
||||||
|
colorspace = SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
|
||||||
|
SDL_COLOR_RANGE_LIMITED,
|
||||||
|
SDL_COLOR_PRIMARIES_BT709,
|
||||||
|
SDL_TRANSFER_CHARACTERISTICS_BT601,
|
||||||
|
SDL_MATRIX_COEFFICIENTS_BT601,
|
||||||
|
SDL_CHROMA_LOCATION_CENTER);
|
||||||
|
break;
|
||||||
|
case YUV_CONVERSION_BT709:
|
||||||
|
colorspace = SDL_DEFINE_COLORSPACE(SDL_COLOR_TYPE_YCBCR,
|
||||||
|
SDL_COLOR_RANGE_LIMITED,
|
||||||
|
SDL_COLOR_PRIMARIES_BT709,
|
||||||
|
SDL_TRANSFER_CHARACTERISTICS_BT709,
|
||||||
|
SDL_MATRIX_COEFFICIENTS_BT709,
|
||||||
|
SDL_CHROMA_LOCATION_CENTER);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
colorspace = SDL_COLORSPACE_UNKNOWN;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return colorspace;
|
||||||
|
}
|
||||||
|
|
||||||
static float clip3(float x, float y, float z)
|
static float clip3(float x, float y, float z)
|
||||||
{
|
{
|
||||||
return (z < x) ? x : ((z > y) ? y : z);
|
return (z < x) ? x : ((z > y) ? y : z);
|
||||||
|
|||||||
@@ -22,5 +22,6 @@ typedef enum
|
|||||||
|
|
||||||
extern void SetYUVConversionMode(YUV_CONVERSION_MODE mode);
|
extern void SetYUVConversionMode(YUV_CONVERSION_MODE mode);
|
||||||
extern YUV_CONVERSION_MODE GetYUVConversionModeForResolution(int width, int height);
|
extern YUV_CONVERSION_MODE GetYUVConversionModeForResolution(int width, int height);
|
||||||
|
extern SDL_Colorspace GetColorspaceForYUVConversionMode(YUV_CONVERSION_MODE mode);
|
||||||
extern SDL_bool ConvertRGBtoYUV(Uint32 format, Uint8 *src, int pitch, Uint8 *out, int w, int h, YUV_CONVERSION_MODE mode, int monochrome, int luminance);
|
extern SDL_bool ConvertRGBtoYUV(Uint32 format, Uint8 *src, int pitch, Uint8 *out, int w, int h, YUV_CONVERSION_MODE mode, int monochrome, int luminance);
|
||||||
extern int CalculateYUVPitch(Uint32 format, int width);
|
extern int CalculateYUVPitch(Uint32 format, int width);
|
||||||
|
|||||||
Reference in New Issue
Block a user