Additional colorspace clarification
Note that SDL_MATRIX_COEFFICIENTS_BT470BG is functionally equivalent to SDL_MATRIX_COEFFICIENTS_BT601
This commit is contained in:
@@ -590,6 +590,7 @@ size_t GetYCbCRtoRGBConversionMatrix(SDL_Colorspace colorspace, int w, int h, in
|
||||
const int YUV_SD_THRESHOLD = 576;
|
||||
|
||||
switch (SDL_COLORSPACEMATRIX(colorspace)) {
|
||||
case SDL_MATRIX_COEFFICIENTS_BT470BG:
|
||||
case SDL_MATRIX_COEFFICIENTS_BT601:
|
||||
return GetBT601ConversionMatrix(colorspace);
|
||||
|
||||
|
||||
@@ -2505,6 +2505,7 @@ static int VULKAN_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
|
||||
/* Create samplerYcbcrConversion which will be used on the VkImageView and VkSampler */
|
||||
samplerYcbcrConversionCreateInfo.format = textureFormat;
|
||||
switch (SDL_COLORSPACEMATRIX(texture->colorspace)) {
|
||||
case SDL_MATRIX_COEFFICIENTS_BT470BG:
|
||||
case SDL_MATRIX_COEFFICIENTS_BT601:
|
||||
samplerYcbcrConversionCreateInfo.ycbcrModel = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR;
|
||||
break;
|
||||
|
||||
@@ -877,6 +877,7 @@ const float *SDL_GetYCbCRtoRGBConversionMatrix(SDL_Colorspace colorspace, int w,
|
||||
|
||||
switch (SDL_COLORSPACEMATRIX(colorspace)) {
|
||||
case SDL_MATRIX_COEFFICIENTS_BT601:
|
||||
case SDL_MATRIX_COEFFICIENTS_BT470BG:
|
||||
return SDL_GetBT601ConversionMatrix(colorspace);
|
||||
|
||||
case SDL_MATRIX_COEFFICIENTS_BT709:
|
||||
|
||||
@@ -161,25 +161,25 @@ int SDL_CalculateYUVSize(Uint32 format, int w, int h, size_t *size, size_t *pitc
|
||||
|
||||
static int GetYUVConversionType(SDL_Colorspace colorspace, YCbCrType *yuv_type)
|
||||
{
|
||||
if (SDL_ISCOLORSPACE_YUV_BT601(colorspace)) {
|
||||
if (SDL_ISCOLORSPACE_MATRIX_BT601(colorspace)) {
|
||||
if (SDL_ISCOLORSPACE_LIMITED_RANGE(colorspace)) {
|
||||
*yuv_type = YCBCR_601;
|
||||
*yuv_type = YCBCR_601_LIMITED;
|
||||
} else {
|
||||
*yuv_type = YCBCR_JPEG;
|
||||
*yuv_type = YCBCR_601_FULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (SDL_ISCOLORSPACE_YUV_BT709(colorspace)) {
|
||||
if (SDL_ISCOLORSPACE_MATRIX_BT709(colorspace)) {
|
||||
if (SDL_ISCOLORSPACE_LIMITED_RANGE(colorspace)) {
|
||||
*yuv_type = YCBCR_709;
|
||||
*yuv_type = YCBCR_709_LIMITED;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (SDL_ISCOLORSPACE_YUV_BT2020(colorspace)) {
|
||||
if (SDL_ISCOLORSPACE_MATRIX_BT2020_NCL(colorspace)) {
|
||||
if (SDL_ISCOLORSPACE_FULL_RANGE(colorspace)) {
|
||||
*yuv_type = YCBCR_2020;
|
||||
*yuv_type = YCBCR_2020_NCL_FULL;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -593,7 +593,7 @@ int SDL_ConvertPixels_YUV_to_RGB(int width, int height,
|
||||
const Uint8 *v = NULL;
|
||||
Uint32 y_stride = 0;
|
||||
Uint32 uv_stride = 0;
|
||||
YCbCrType yuv_type = YCBCR_601;
|
||||
YCbCrType yuv_type = YCBCR_601_LIMITED;
|
||||
|
||||
if (GetYUVPlanes(width, height, src_format, src, src_pitch, &y, &u, &v, &y_stride, &uv_stride) < 0) {
|
||||
return -1;
|
||||
@@ -1121,7 +1121,7 @@ int SDL_ConvertPixels_RGB_to_YUV(int width, int height,
|
||||
Uint32 src_format, SDL_Colorspace src_colorspace, SDL_PropertiesID src_properties, const void *src, int src_pitch,
|
||||
Uint32 dst_format, SDL_Colorspace dst_colorspace, SDL_PropertiesID dst_properties, void *dst, int dst_pitch)
|
||||
{
|
||||
YCbCrType yuv_type = YCBCR_601;
|
||||
YCbCrType yuv_type = YCBCR_601_LIMITED;
|
||||
|
||||
if (GetYUVConversionType(dst_colorspace, &yuv_type) < 0) {
|
||||
return -1;
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
|
||||
typedef enum
|
||||
{
|
||||
YCBCR_JPEG,
|
||||
YCBCR_601,
|
||||
YCBCR_709,
|
||||
YCBCR_2020
|
||||
YCBCR_601_FULL,
|
||||
YCBCR_601_LIMITED,
|
||||
YCBCR_709_LIMITED,
|
||||
YCBCR_2020_NCL_FULL,
|
||||
} YCbCrType;
|
||||
|
||||
#endif /* YUV_RGB_COMMON_H_ */
|
||||
|
||||
Reference in New Issue
Block a user