3#include <QtGui/qtguiglobal.h>
5#if defined(QGC_HAS_GST_VULKAN_GPU_PATH) && QT_CONFIG(vulkan)
8#include <QtMultimedia/QVideoFrameFormat>
9#include <private/qvideotexturehelper_p.h>
11#include <vulkan/vulkan.h>
20 bool valid() const noexcept {
return _textures[0] !=
nullptr; }
23 void wrapImage(QRhi* rhi, QSize size, QVideoFrameFormat::PixelFormat pixelFormat, VkImage image,
int layout)
26 const auto* desc = QVideoTextureHelper::textureDescription(pixelFormat);
30 _textures[0].reset(rhi->newTexture(
31 desc->rhiTextureFormat(0, rhi, QVideoTextureHelper::TextureDescription::FallbackPolicy::Disable), size, 1,
33 if (_textures[0] && !_textures[0]->createFrom({
reinterpret_cast<quint64
>(image), layout})) {
40class GstVulkanOwnedFrameTextures final :
public GstVulkanFrameTexturesBase
43 GstVulkanOwnedFrameTextures(QRhi* rhi, QSize size, QVideoFrameFormat::PixelFormat pixelFormat, VkImage image)
45 wrapImage(rhi, size, pixelFormat, image, VK_IMAGE_LAYOUT_UNDEFINED);
48 ~GstVulkanOwnedFrameTextures()
override { releaseVulkan(); }
50 void onFrameEndInvoked()
override
59 void adoptVulkanResources(VkDevice dev, VkImage image, VkDeviceMemory memory, PFN_vkDestroyImage destroyImage,
60 PFN_vkFreeMemory freeMemory)
noexcept
65 _destroyImage = destroyImage;
66 _freeMemory = freeMemory;
74 if (_image != VK_NULL_HANDLE && _destroyImage) {
75 _destroyImage(_dev, _image,
nullptr);
77 if (_memory != VK_NULL_HANDLE && _freeMemory) {
78 _freeMemory(_dev, _memory,
nullptr);
80 _image = VK_NULL_HANDLE;
81 _memory = VK_NULL_HANDLE;
84 VkDevice _dev = VK_NULL_HANDLE;
85 VkImage _image = VK_NULL_HANDLE;
86 VkDeviceMemory _memory = VK_NULL_HANDLE;
87 PFN_vkDestroyImage _destroyImage =
nullptr;
88 PFN_vkFreeMemory _freeMemory =
nullptr;
93class GstVulkanBorrowedFrameTextures final :
public GstVulkanFrameTexturesBase
96 GstVulkanBorrowedFrameTextures(QRhi* rhi, QSize size, QVideoFrameFormat::PixelFormat pixelFormat, VkImage image,
99 wrapImage(rhi, size, pixelFormat, image, layout);
HwVideoBufferPath
Identifies which GPU path was chosen; used by the adapter to increment the right counter.
Common base for per-platform FrameTextures : QVideoFrameTextures from *VideoBuffer::mapTextures().
void onFrameEndInvoked() override