#define DEFAULT_RGB 3
#define DEFAULT_GRAY 4
#define DEFAULT_UNKNOWN 5
+#define DEFAULT_YUV_UHD 6
static const ColorimetryInfo colorimetry[] = {
MAKE_COLORIMETRY (BT601, _16_235, BT601, BT709, SMPTE170M),
MAKE_COLORIMETRY (SRGB, _0_255, RGB, SRGB, BT709),
MAKE_COLORIMETRY (NONAME, _0_255, BT601, UNKNOWN, UNKNOWN),
MAKE_COLORIMETRY (NONAME, _UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN),
+ MAKE_COLORIMETRY (BT2020, _16_235, BT2020, BT2020_12, BT2020),
};
static const ColorimetryInfo *
{GST_VIDEO_COLOR_PRIMARIES_SMPTE240M, WP_D65, 0.63, 0.34, 0.31, 0.595, 0.155,
0.07},
{GST_VIDEO_COLOR_PRIMARIES_FILM, WP_C, 0.681, 0.319, 0.243, 0.692, 0.145,
- 0.049}
+ 0.049},
+ {GST_VIDEO_COLOR_PRIMARIES_BT2020, WP_D65, 0.708, 0.292, 0.170, 0.797, 0.131,
+ 0.046}
};
/**
const GstVideoColorPrimariesInfo *
gst_video_color_primaries_get_info (GstVideoColorPrimaries primaries)
{
- g_return_val_if_fail (primaries < G_N_ELEMENTS (color_primaries), NULL);
+ g_return_val_if_fail (primaries <
+ (GstVideoColorPrimaries) G_N_ELEMENTS (color_primaries), NULL);
return &color_primaries[primaries];
}
*Kr = 0.212;
*Kb = 0.087;
break;
+ case GST_VIDEO_COLOR_MATRIX_BT2020:
+ *Kr = 0.2627;
+ *Kb = 0.0593;
+ break;
}
GST_DEBUG ("matrix: %d, Kr %f, Kb %f", matrix, *Kr, *Kb);
else
res = 1.0 + log10 (val) / 2.5;
break;
+ case GST_VIDEO_TRANSFER_BT2020_12:
+ if (val < 0.0181)
+ res = 4.5 * val;
+ else
+ res = 1.0993 * pow (val, 0.45) - 0.0993;
+ break;
}
return res;
}
else
res = pow (10.0, 2.5 * (val - 1.0));
break;
+ case GST_VIDEO_TRANSFER_BT2020_12:
+ if (val < 0.08145)
+ res = val / 4.5;
+ else
+ res = pow ((val + 0.0993) / 1.0993, 1.0 / 0.45);
+ break;
}
return res;
}
* @GST_VIDEO_COLOR_MATRIX_BT709: ITU-R BT.709 color matrix
* @GST_VIDEO_COLOR_MATRIX_BT601: ITU-R BT.601 color matrix
* @GST_VIDEO_COLOR_MATRIX_SMPTE240M: SMPTE 240M color matrix
+ * @GST_VIDEO_COLOR_MATRIX_BT2020: ITU-R BT.2020 color matrix. Since: 1.6.
*
* The color matrix is used to convert between Y'PbPr and
* non-linear RGB (R'G'B')
GST_VIDEO_COLOR_MATRIX_FCC,
GST_VIDEO_COLOR_MATRIX_BT709,
GST_VIDEO_COLOR_MATRIX_BT601,
- GST_VIDEO_COLOR_MATRIX_SMPTE240M
+ GST_VIDEO_COLOR_MATRIX_SMPTE240M,
+ GST_VIDEO_COLOR_MATRIX_BT2020
} GstVideoColorMatrix;
gboolean gst_video_color_matrix_get_Kr_Kb (GstVideoColorMatrix matrix, gdouble * Kr, gdouble * Kb);
* 100:1 range
* @GST_VIDEO_TRANSFER_LOG316: Logarithmic transfer characteristic
* 316.22777:1 range
+ * @GST_VIDEO_TRANSFER_BT2020_12: Gamma 2.2 curve with a linear segment in the lower
+ * range. Used for BT.2020 with 12 bits per
+ * component. Since: 1.6.
*
* The video transfer function defines the formula for converting between
* non-linear RGB (R'G'B') and linear RGB
GST_VIDEO_TRANSFER_SRGB,
GST_VIDEO_TRANSFER_GAMMA28,
GST_VIDEO_TRANSFER_LOG100,
- GST_VIDEO_TRANSFER_LOG316
+ GST_VIDEO_TRANSFER_LOG316,
+ GST_VIDEO_TRANSFER_BT2020_12
} GstVideoTransferFunction;
gdouble gst_video_color_transfer_encode (GstVideoTransferFunction func, gdouble val);
* @GST_VIDEO_COLOR_PRIMARIES_SMPTE170M: SMPTE170M primaries
* @GST_VIDEO_COLOR_PRIMARIES_SMPTE240M: SMPTE240M primaries
* @GST_VIDEO_COLOR_PRIMARIES_FILM: Generic film
+ * @GST_VIDEO_COLOR_PRIMARIES_BT2020: BT2020 primaries. Since: 1.6.
*
* The color primaries define the how to transform linear RGB values to and from
* the CIE XYZ colorspace.
GST_VIDEO_COLOR_PRIMARIES_BT470BG,
GST_VIDEO_COLOR_PRIMARIES_SMPTE170M,
GST_VIDEO_COLOR_PRIMARIES_SMPTE240M,
- GST_VIDEO_COLOR_PRIMARIES_FILM
+ GST_VIDEO_COLOR_PRIMARIES_FILM,
+ GST_VIDEO_COLOR_PRIMARIES_BT2020
} GstVideoColorPrimaries;
/**
#define GST_VIDEO_COLORIMETRY_BT709 "bt709"
#define GST_VIDEO_COLORIMETRY_SMPTE240M "smpte240m"
#define GST_VIDEO_COLORIMETRY_SRGB "sRGB"
+#define GST_VIDEO_COLORIMETRY_BT2020 "bt2020"
gboolean gst_video_colorimetry_matches (GstVideoColorimetry *cinfo, const gchar *color);
gboolean gst_video_colorimetry_from_string (GstVideoColorimetry *cinfo, const gchar *color);
#define DEFAULT_RGB 2
#define DEFAULT_GRAY 3
#define DEFAULT_UNKNOWN 4
+#define DEFAULT_YUV_UHD 5
static const GstVideoColorimetry default_color[] = {
MAKE_COLORIMETRY (_16_235, BT601, BT709, SMPTE170M),
MAKE_COLORIMETRY (_0_255, RGB, SRGB, BT709),
MAKE_COLORIMETRY (_0_255, BT601, UNKNOWN, UNKNOWN),
MAKE_COLORIMETRY (_UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN),
+ MAKE_COLORIMETRY (_16_235, BT2020, BT2020_12, BT2020),
};
static void
const GstVideoFormatInfo *finfo = info->finfo;
if (GST_VIDEO_FORMAT_INFO_IS_YUV (finfo)) {
- if (info->height > 576) {
+ if (info->height >= 2160) {
+ info->chroma_site = GST_VIDEO_CHROMA_SITE_H_COSITED;
+ info->colorimetry = default_color[DEFAULT_YUV_UHD];
+ } else if (info->height > 576) {
info->chroma_site = GST_VIDEO_CHROMA_SITE_H_COSITED;
info->colorimetry = default_color[DEFAULT_YUV_HD];
} else {