Files
mxl-multiviewer/V210ComputeDecoder.hpp
T
2026-05-18 00:03:06 +03:00

79 lines
1.9 KiB
C++

#pragma once
#include <vulkan/vulkan.h>
#include <cstdint>
#include <vector>
struct V210ComputeFeed
{
VkBuffer v210Buffer = VK_NULL_HANDLE;
VkDeviceMemory v210BufferMemory = VK_NULL_HANDLE;
void* v210MappedData = nullptr;
VkImage image = VK_NULL_HANDLE;
VkDeviceMemory imageMemory = VK_NULL_HANDLE;
VkImageView imageView = VK_NULL_HANDLE;
VkSampler sampler = VK_NULL_HANDLE;
VkDescriptorSet descriptorSet = VK_NULL_HANDLE;
uint32_t srcWidth = 0;
uint32_t srcHeight = 0;
uint32_t srcStride = 0;
};
class V210ComputeDecoder
{
public:
void init(
VkDevice device,
uint32_t feedCount,
uint32_t dstWidth,
uint32_t dstHeight);
void destroy();
void createFeedResources(
VkPhysicalDevice physicalDevice,
VkCommandPool commandPool,
VkQueue graphicsQueue,
uint32_t feedIndex,
uint32_t srcWidth,
uint32_t srcHeight,
uint32_t srcStride,
uint32_t dstWidth,
uint32_t dstHeight,
V210ComputeFeed& feed);
void destroyFeedResources(V210ComputeFeed& feed);
void updateDescriptorSet(
uint32_t feedIndex,
const V210ComputeFeed& feed);
void recordDecode(
VkCommandBuffer cmdBuf,
uint32_t feedIndex,
uint32_t srcWidth,
uint32_t srcHeight,
uint32_t srcStride,
uint32_t dstWidth,
uint32_t dstHeight) const;
void recordOutputReadyForSampling(
VkCommandBuffer cmdBuf,
const V210ComputeFeed& feed) const;
private:
VkDevice m_device = VK_NULL_HANDLE;
VkDescriptorSetLayout m_descriptorSetLayout = VK_NULL_HANDLE;
VkPipelineLayout m_pipelineLayout = VK_NULL_HANDLE;
VkPipeline m_pipeline = VK_NULL_HANDLE;
VkDescriptorPool m_descriptorPool = VK_NULL_HANDLE;
uint32_t m_dstWidth = 0;
uint32_t m_dstHeight = 0;
std::vector<VkDescriptorSet> m_descSets;
};