mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-05-18 00:12:46 +00:00
Merge branch 'vulkan-color-mapping' into 'main'
vkformat: try UNORM format first and decouple them from colorimetry See merge request gstreamer/gstreamer!6797
This commit is contained in:
commit
37f40a741b
|
@ -438,15 +438,15 @@ const static struct {
|
|||
VkFormat vkfrmt;
|
||||
VkFormat vkfrmts[GST_VIDEO_MAX_PLANES];
|
||||
} vk_formats_map[] = {
|
||||
/* RGB transfer sRGB */
|
||||
{ GST_VIDEO_FORMAT_RGBA, VK_FORMAT_R8G8B8A8_SRGB, { VK_FORMAT_R8G8B8A8_UNORM, } },
|
||||
{ GST_VIDEO_FORMAT_RGBx, VK_FORMAT_R8G8B8A8_SRGB, { VK_FORMAT_R8G8B8A8_UNORM, } },
|
||||
{ GST_VIDEO_FORMAT_BGRA, VK_FORMAT_B8G8R8A8_SRGB, { VK_FORMAT_B8G8R8A8_UNORM, } },
|
||||
{ GST_VIDEO_FORMAT_BGRx, VK_FORMAT_B8G8R8A8_SRGB, { VK_FORMAT_B8G8R8A8_UNORM, } },
|
||||
{ GST_VIDEO_FORMAT_ARGB, VK_FORMAT_UNDEFINED, { VK_FORMAT_R8G8B8A8_UNORM, } },
|
||||
{ GST_VIDEO_FORMAT_xRGB, VK_FORMAT_UNDEFINED, { VK_FORMAT_R8G8B8A8_UNORM, } },
|
||||
{ GST_VIDEO_FORMAT_ABGR, VK_FORMAT_UNDEFINED, { VK_FORMAT_R8G8B8A8_UNORM, } },
|
||||
{ GST_VIDEO_FORMAT_xBGR, VK_FORMAT_UNDEFINED, { VK_FORMAT_R8G8B8A8_UNORM, } },
|
||||
/* RGB unsigned normalized format sRGB nonlinear encoding */
|
||||
{ GST_VIDEO_FORMAT_RGBA, VK_FORMAT_R8G8B8A8_UNORM, { VK_FORMAT_R8G8B8A8_SRGB, } },
|
||||
{ GST_VIDEO_FORMAT_RGBx, VK_FORMAT_R8G8B8A8_UNORM, { VK_FORMAT_R8G8B8A8_SRGB, } },
|
||||
{ GST_VIDEO_FORMAT_BGRA, VK_FORMAT_B8G8R8A8_UNORM, { VK_FORMAT_B8G8R8A8_SRGB, } },
|
||||
{ GST_VIDEO_FORMAT_BGRx, VK_FORMAT_B8G8R8A8_UNORM, { VK_FORMAT_B8G8R8A8_SRGB, } },
|
||||
{ GST_VIDEO_FORMAT_ARGB, VK_FORMAT_R8G8B8A8_UNORM, { VK_FORMAT_UNDEFINED, } },
|
||||
{ GST_VIDEO_FORMAT_xRGB, VK_FORMAT_R8G8B8A8_UNORM, { VK_FORMAT_UNDEFINED, } },
|
||||
{ GST_VIDEO_FORMAT_ABGR, VK_FORMAT_R8G8B8A8_UNORM, { VK_FORMAT_UNDEFINED, } },
|
||||
{ GST_VIDEO_FORMAT_xBGR, VK_FORMAT_R8G8B8A8_UNORM, { VK_FORMAT_UNDEFINED, } },
|
||||
{ GST_VIDEO_FORMAT_RGB, VK_FORMAT_R8G8B8_UNORM, { VK_FORMAT_UNDEFINED, } },
|
||||
{ GST_VIDEO_FORMAT_BGR, VK_FORMAT_B8G8R8_UNORM, { VK_FORMAT_UNDEFINED, } },
|
||||
{ GST_VIDEO_FORMAT_RGB16, VK_FORMAT_R5G6B5_UNORM_PACK16, { VK_FORMAT_UNDEFINED, } },
|
||||
|
@ -494,12 +494,7 @@ gst_vulkan_format_from_video_info (GstVideoInfo * v_info, guint plane)
|
|||
continue;
|
||||
|
||||
if (GST_VIDEO_INFO_IS_RGB (v_info)) {
|
||||
if (GST_VIDEO_INFO_COLORIMETRY (v_info).transfer ==
|
||||
GST_VIDEO_TRANSFER_SRGB) {
|
||||
return vk_formats_map[i].vkfrmt;
|
||||
} else {
|
||||
return vk_formats_map[i].vkfrmts[0];
|
||||
}
|
||||
return vk_formats_map[i].vkfrmt;
|
||||
} else if (GST_VIDEO_INFO_IS_YUV (v_info) &&
|
||||
GST_VIDEO_INFO_N_PLANES (v_info) > plane) {
|
||||
return vk_formats_map[i].vkfrmts[plane];
|
||||
|
@ -655,33 +650,26 @@ gst_vulkan_format_from_video_info_2 (GstVulkanPhysicalDevice * physical_device,
|
|||
}
|
||||
|
||||
if (GST_VIDEO_INFO_IS_RGB (info)) {
|
||||
if ((GST_VIDEO_INFO_COLORIMETRY (info).transfer ==
|
||||
GST_VIDEO_TRANSFER_SRGB
|
||||
|| GST_VIDEO_INFO_COLORIMETRY (info).transfer ==
|
||||
GST_VIDEO_TRANSFER_UNKNOWN)) {
|
||||
usage = _get_usage (feats_primary);
|
||||
if ((requested_usage & usage) == requested_usage) {
|
||||
if (fmts)
|
||||
fmts[0] = vk_formats_map[i].vkfrmt;
|
||||
if (n_imgs)
|
||||
*n_imgs = 1;
|
||||
if (usage_ret)
|
||||
*usage_ret = usage;
|
||||
return TRUE;
|
||||
}
|
||||
usage = _get_usage (feats_primary);
|
||||
if ((requested_usage & usage) == requested_usage) {
|
||||
if (fmts)
|
||||
fmts[0] = vk_formats_map[i].vkfrmt;
|
||||
if (n_imgs)
|
||||
*n_imgs = 1;
|
||||
if (usage_ret)
|
||||
*usage_ret = usage;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (GST_VIDEO_INFO_COLORIMETRY (info).transfer != GST_VIDEO_TRANSFER_SRGB) {
|
||||
usage = _get_usage (feats_secondary);
|
||||
if ((requested_usage & usage) == requested_usage) {
|
||||
if (fmts)
|
||||
fmts[0] = vk_formats_map[i].vkfrmts[0];
|
||||
if (n_imgs)
|
||||
*n_imgs = 1;
|
||||
if (usage_ret)
|
||||
*usage_ret = usage;
|
||||
return TRUE;
|
||||
}
|
||||
usage = _get_usage (feats_secondary);
|
||||
if ((requested_usage & usage) == requested_usage) {
|
||||
if (fmts)
|
||||
fmts[0] = vk_formats_map[i].vkfrmts[0];
|
||||
if (n_imgs)
|
||||
*n_imgs = 1;
|
||||
if (usage_ret)
|
||||
*usage_ret = usage;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
} else {
|
||||
|
|
|
@ -77,7 +77,7 @@ GST_START_TEST (test_format_from_video_info_2)
|
|||
fail_unless (gst_vulkan_format_from_video_info_2 (phy_dev, &vinfo,
|
||||
VK_IMAGE_TILING_LINEAR, TRUE, 0, vk_fmts, &n_imgs, &supported_usage));
|
||||
|
||||
fail_unless (n_imgs == 1 && vk_fmts[0] == VK_FORMAT_R8G8B8A8_SRGB);
|
||||
fail_unless (n_imgs == 1 && vk_fmts[0] == VK_FORMAT_R8G8B8A8_UNORM);
|
||||
|
||||
fail_unless (gst_video_info_set_format (&vinfo, GST_VIDEO_FORMAT_RGBA, 620,
|
||||
480));
|
||||
|
|
Loading…
Reference in a new issue