gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/vulkan
Víctor Manuel Jáquez Leal e913b4870a vkformat: try UNORM format first and decouple them from colorimetry
From the spec (chapter 34, v1.3.283):

````
UNORM: the components are unsigned normalized values in the range [0, 1]

SRGB: the R, G and B components are unsigned normalized value that represent
      values using sRGB nonlinear encoding, while the A component (if one
      exists) is a regular unsigned normalized value
```

The difference is the storage encoding, the first one is aimed for image
transfers, while the second is for shaders, mostly in the swapchain stage in the
pipeline, and it's done automatically if needed [1].

As far as I have checked, other frameworks (FFmpeg, GTK+), when import or export
images from/to Vulkan, use exclusively UNORM formats, while SRGB formats are
ignored.

My conclusion is that Vulkan formats are related on how bits are stored in
memory rather their transfer functions (colorimetry).

This patch does two interrelated changes:

1. It swaps certain color format maps to try first, in both
gst_vulkan_format_from_video_info() and gst_vulkan_format_from_video_info_2(),
the UNORM formats, when comparing its usage, and later check for SRGB.

2. It removes the code that check for colorimetry in
gst_vulkan_format_from_video_info_2(), since it not storage related.

1. https://community.khronos.org/t/noob-difference-between-unorm-and-srgb/106132/7

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6797>
2024-05-23 17:41:30 +00:00
..
android vulkan: Add/fix various annotations 2022-10-18 13:51:17 +03:00
cocoa macos: Remove old NSApp workaround related code 2023-05-11 20:30:19 +02:00
ios gl/vulkan: Fix static linking on macOS 2022-10-24 00:48:08 +00:00
wayland gst-launch: accept option to set program name 2024-01-12 17:11:11 +00:00
win32 vulkan: gl: change symbols to static 2023-03-23 00:56:04 +00:00
xcb vkwindow_xcb: Make the visible private field a guint 2023-10-23 10:43:52 +05:30
gstvkapi.h
gstvkbarrier.h vulkan: add a timeline semaphore per image 2023-10-26 07:26:22 +00:00
gstvkbuffermemory.c vkmemory: unref queue in barriers 2023-10-26 07:26:22 +00:00
gstvkbuffermemory.h vkbuffermemory: add gst_vulkan_buffer_memory_alloc_with_buffer_info() 2023-05-19 04:26:29 +00:00
gstvkbufferpool.c vkbufferpool: correct usage flags type 2024-04-03 09:36:44 +00:00
gstvkbufferpool.h vkbufferpool: correct usage flags type 2024-04-03 09:36:44 +00:00
gstvkcommandbuffer.c
gstvkcommandbuffer.h vulkan: add some missing GAutoPtr definitions 2022-06-14 03:34:05 +00:00
gstvkcommandpool-private.h
gstvkcommandpool.c vulkan: Remove unnecessary null checks 2022-11-01 15:19:51 +01:00
gstvkcommandpool.h
gstvkconfig.h.meson vkencoder: add gstvkencoder helper object 2024-05-03 19:40:16 +00:00
gstvkdebug-private.h
gstvkdebug.c vkdebug: add video queue flags strings 2023-05-19 04:26:28 +00:00
gstvkdebug.h vulkan/swapper: add some debug logging for surface size and present modes 2021-10-21 11:32:04 +00:00
gstvkdecoder-private.c vkdecoder: change dstmask in decoder frame barrier 2024-05-02 18:07:25 +00:00
gstvkdecoder-private.h vulkan: replace gst_vulkan_queue_create_decoder() with gst_vulkan_decoder_new_from_queue() 2024-04-26 16:24:22 +00:00
gstvkdescriptorcache.c vulkan: Add missing array length and (out) annotation to parameters 2022-11-01 15:19:51 +01:00
gstvkdescriptorcache.h
gstvkdescriptorpool.c vulkan: Remove unnecessary null checks 2022-11-01 15:19:51 +01:00
gstvkdescriptorpool.h vulkan: add some missing GAutoPtr definitions 2022-06-14 03:34:05 +00:00
gstvkdescriptorset.c vulkan: Add missing array length and (out) annotation to parameters 2022-11-01 15:19:51 +01:00
gstvkdescriptorset.h vulkan: add some missing GAutoPtr definitions 2022-06-14 03:34:05 +00:00
gstvkdevice.c vkencoder: add gstvkencoder helper object 2024-05-03 19:40:16 +00:00
gstvkdevice.h vkdevice: select queue with expected flags 2023-11-21 13:51:21 +00:00
gstvkdisplay.c vulkan: Add missing (nullable) annotation to Returns 2022-11-01 15:19:51 +01:00
gstvkdisplay.h
gstvkencoder-private.c vkencoder: add gstvkencoder helper object 2024-05-03 19:40:16 +00:00
gstvkencoder-private.h vkencoder: add gstvkencoder helper object 2024-05-03 19:40:16 +00:00
gstvkerror.c Fix various warnings from gobject-introspection 2022-10-25 09:45:25 +03:00
gstvkerror.h gstvulkan: Expose gst_vulkan_result_to_string 2022-02-05 16:33:04 +00:00
gstvkfence.c vulkan: silence gobject-instrospection warnings 2023-03-22 14:19:13 +00:00
gstvkfence.h vulkan: add some missing GAutoPtr definitions 2022-06-14 03:34:05 +00:00
gstvkformat.c vkformat: try UNORM format first and decouple them from colorimetry 2024-05-23 17:41:30 +00:00
gstvkformat.h vkformat: also check configured usage flags 2023-09-08 16:09:33 +00:00
gstvkfullscreenquad.c vulkan: number of memories in buffer rather than number of planes 2023-05-19 04:26:29 +00:00
gstvkfullscreenquad.h vkfullscreenquad: add support for disabling clearing 2022-06-14 03:34:05 +00:00
gstvkhandle.c
gstvkhandle.h vkdecoder: add gstvkdecoder helper object 2023-11-20 13:32:20 +00:00
gstvkhandlepool.c
gstvkhandlepool.h
gstvkimagebufferpool.c vkencoder: add gstvkencoder helper object 2024-05-03 19:40:16 +00:00
gstvkimagebufferpool.h vkencoder: add gstvkencoder helper object 2024-05-03 19:40:16 +00:00
gstvkimagememory.c vkimagebufferpool: allow specifying initial image layout 2024-01-13 05:54:00 +00:00
gstvkimagememory.h vkimagebufferpool: allow specifying initial image layout 2024-01-13 05:54:00 +00:00
gstvkimageview.c vulkan: Mark gst_vulkan_image_view_new create_info as constant pointer 2022-11-01 15:19:51 +01:00
gstvkimageview.h vulkan: Mark gst_vulkan_image_view_new create_info as constant pointer 2022-11-01 15:19:51 +01:00
gstvkinstance.c vulkan: Use new GLib APIs as suggested by comments 2023-04-06 00:26:13 +00:00
gstvkinstance.h
gstvkmemory.c vkmemory: invalidate non-coherent memory when mapping for read 2024-03-11 01:55:44 +00:00
gstvkmemory.h vkmemory: don't map memory more than once 2024-01-16 17:44:48 +01:00
gstvkoperation.c vkencoder: add gstvkencoder helper object 2024-05-03 19:40:16 +00:00
gstvkoperation.h vkencoder: add gstvkencoder helper object 2024-05-03 19:40:16 +00:00
gstvkphysicaldevice-private.h vkphysicaldevice: add gst_vulkan_physical_device_get_features() 2023-05-19 04:26:28 +00:00
gstvkphysicaldevice.c vulkan/physical-device: don't assume that queue_family_ops is filled 2023-10-25 16:38:06 +11:00
gstvkphysicaldevice.h vkphysicaldevice: fetch queue family query result support 2023-05-26 10:08:27 +02:00
gstvkqueue.c vulkan: replace gst_vulkan_queue_create_decoder() with gst_vulkan_decoder_new_from_queue() 2024-04-26 16:24:22 +00:00
gstvkqueue.h vulkan: replace gst_vulkan_queue_create_decoder() with gst_vulkan_decoder_new_from_queue() 2024-04-26 16:24:22 +00:00
gstvkswapper.c vkswapper: choose color space according with format 2024-04-24 13:53:18 +00:00
gstvkswapper.h
gstvktrash.c vulkan: sink references at instantiation 2024-04-03 08:48:25 +00:00
gstvktrash.h
gstvkutils.c vkutils: add gst_vulkan_get_or_create_image_view_with_info() 2023-05-19 04:26:29 +00:00
gstvkutils.h vkdevice: select queue with expected flags 2023-11-21 13:51:21 +00:00
gstvkvideo-private.c tests: add vulkan H.265 encode 2024-05-03 19:40:17 +00:00
gstvkvideo-private.h tests: add vulkan H.265 encode 2024-05-03 19:40:17 +00:00
gstvkvideofilter.c vulkan: early return if gst_buffer_pool_set_config() fails 2024-01-30 11:58:04 +00:00
gstvkvideofilter.h vulkan: add some missing GAutoPtr definitions 2022-06-14 03:34:05 +00:00
gstvkvideoutils.c tests: add vulkan H.265 encode 2024-05-03 19:40:17 +00:00
gstvkvideoutils.h tests: add vulkan H.265 encode 2024-05-03 19:40:17 +00:00
gstvkwindow.c vulkan: Add missing array length and (out) annotation to parameters 2022-11-01 15:19:51 +01:00
gstvkwindow.h
meson.build vkencoder: add gstvkencoder helper object 2024-05-03 19:40:16 +00:00
vulkan-prelude.h
vulkan.h vkoperation: synchronization helper object 2023-10-26 07:26:22 +00:00
vulkan_fwd.h vkencoder: add gstvkencoder helper object 2024-05-03 19:40:16 +00:00
vulkan_mkenum.py