d3d11window: Use SDR colorspace whenever possible
PQ uses completely different light level scale and it should not be used for SDR bt2020. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2581>
This commit is contained in:
parent
ac26860a80
commit
f3f905b491
@ -516,11 +516,13 @@ gst_d3d11_find_swap_chain_color_space (GstVideoInfo * info,
|
|||||||
const GstDxgiColorSpace *colorspace = NULL;
|
const GstDxgiColorSpace *colorspace = NULL;
|
||||||
gint best_score = G_MAXINT;
|
gint best_score = G_MAXINT;
|
||||||
guint i;
|
guint i;
|
||||||
|
UINT can_support = 0;
|
||||||
|
HRESULT hr;
|
||||||
|
GST_DXGI_COLOR_SPACE_TYPE cur_type;
|
||||||
/* list of tested display color spaces */
|
/* list of tested display color spaces */
|
||||||
static GST_DXGI_COLOR_SPACE_TYPE whitelist[] = {
|
static GST_DXGI_COLOR_SPACE_TYPE whitelist[] = {
|
||||||
GST_DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709,
|
GST_DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709,
|
||||||
GST_DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709,
|
GST_DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709,
|
||||||
GST_DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
g_return_val_if_fail (info != NULL, FALSE);
|
g_return_val_if_fail (info != NULL, FALSE);
|
||||||
@ -531,12 +533,26 @@ gst_d3d11_find_swap_chain_color_space (GstVideoInfo * info,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Select PQ color space only if input is also PQ */
|
||||||
|
if (info->colorimetry.primaries == GST_VIDEO_COLOR_PRIMARIES_BT2020 &&
|
||||||
|
info->colorimetry.transfer == GST_VIDEO_TRANSFER_SMPTE2084) {
|
||||||
|
guint pq = GST_DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020;
|
||||||
|
hr = swapchain->CheckColorSpaceSupport ((DXGI_COLOR_SPACE_TYPE) pq,
|
||||||
|
&can_support);
|
||||||
|
if (SUCCEEDED (hr) && can_support) {
|
||||||
|
for (i = 0; i < G_N_ELEMENTS (rgb_colorspace_map); i++) {
|
||||||
|
if (rgb_colorspace_map[i].dxgi_color_space_type == pq)
|
||||||
|
return &rgb_colorspace_map[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < G_N_ELEMENTS (rgb_colorspace_map); i++) {
|
for (i = 0; i < G_N_ELEMENTS (rgb_colorspace_map); i++) {
|
||||||
UINT can_support = 0;
|
can_support = 0;
|
||||||
HRESULT hr;
|
|
||||||
gint score;
|
gint score;
|
||||||
gboolean valid = FALSE;
|
gboolean valid = FALSE;
|
||||||
GST_DXGI_COLOR_SPACE_TYPE cur_type =
|
|
||||||
|
cur_type =
|
||||||
(GST_DXGI_COLOR_SPACE_TYPE) rgb_colorspace_map[i].dxgi_color_space_type;
|
(GST_DXGI_COLOR_SPACE_TYPE) rgb_colorspace_map[i].dxgi_color_space_type;
|
||||||
|
|
||||||
for (guint j = 0; j < G_N_ELEMENTS (whitelist); j++) {
|
for (guint j = 0; j < G_N_ELEMENTS (whitelist); j++) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user