hwcontext_vulkan: add functions for video decoding
This commit is contained in:
@@ -370,6 +370,12 @@ static const VulkanOptExtension optional_device_exts[] = {
|
|||||||
{ VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_WIN32_MEMORY },
|
{ VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_WIN32_MEMORY },
|
||||||
{ VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_WIN32_SEM },
|
{ VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_WIN32_SEM },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Video encoding/decoding */
|
||||||
|
{ VK_KHR_VIDEO_QUEUE_EXTENSION_NAME, FF_VK_EXT_VIDEO_QUEUE },
|
||||||
|
{ VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME, FF_VK_EXT_VIDEO_DECODE_QUEUE },
|
||||||
|
{ VK_KHR_VIDEO_DECODE_H264_EXTENSION_NAME, FF_VK_EXT_VIDEO_DECODE_H264 },
|
||||||
|
{ VK_KHR_VIDEO_DECODE_H265_EXTENSION_NAME, FF_VK_EXT_VIDEO_DECODE_H265 },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Converts return values to strings */
|
/* Converts return values to strings */
|
||||||
|
|||||||
@@ -85,9 +85,11 @@ const char *ff_vk_ret2str(VkResult res)
|
|||||||
CASE(VK_ERROR_INCOMPATIBLE_DISPLAY_KHR);
|
CASE(VK_ERROR_INCOMPATIBLE_DISPLAY_KHR);
|
||||||
CASE(VK_ERROR_VALIDATION_FAILED_EXT);
|
CASE(VK_ERROR_VALIDATION_FAILED_EXT);
|
||||||
CASE(VK_ERROR_INVALID_SHADER_NV);
|
CASE(VK_ERROR_INVALID_SHADER_NV);
|
||||||
CASE(VK_ERROR_OUT_OF_POOL_MEMORY);
|
CASE(VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR);
|
||||||
CASE(VK_ERROR_INVALID_EXTERNAL_HANDLE);
|
CASE(VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR);
|
||||||
CASE(VK_ERROR_NOT_PERMITTED_EXT);
|
CASE(VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR);
|
||||||
|
CASE(VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR);
|
||||||
|
CASE(VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR);
|
||||||
default: return "Unknown error";
|
default: return "Unknown error";
|
||||||
}
|
}
|
||||||
#undef CASE
|
#undef CASE
|
||||||
|
|||||||
@@ -39,6 +39,10 @@ typedef enum FFVulkanExtensions {
|
|||||||
#endif
|
#endif
|
||||||
FF_VK_EXT_DESCRIPTOR_BUFFER = 1ULL << 8, /* VK_EXT_descriptor_buffer */
|
FF_VK_EXT_DESCRIPTOR_BUFFER = 1ULL << 8, /* VK_EXT_descriptor_buffer */
|
||||||
FF_VK_EXT_DEVICE_DRM = 1ULL << 9, /* VK_EXT_physical_device_drm */
|
FF_VK_EXT_DEVICE_DRM = 1ULL << 9, /* VK_EXT_physical_device_drm */
|
||||||
|
FF_VK_EXT_VIDEO_QUEUE = 1ULL << 10, /* VK_KHR_video_queue */
|
||||||
|
FF_VK_EXT_VIDEO_DECODE_QUEUE = 1ULL << 11, /* VK_KHR_video_decode_queue */
|
||||||
|
FF_VK_EXT_VIDEO_DECODE_H264 = 1ULL << 12, /* VK_EXT_video_decode_h264 */
|
||||||
|
FF_VK_EXT_VIDEO_DECODE_H265 = 1ULL << 13, /* VK_EXT_video_decode_h265 */
|
||||||
|
|
||||||
FF_VK_EXT_NO_FLAG = 1ULL << 31,
|
FF_VK_EXT_NO_FLAG = 1ULL << 31,
|
||||||
} FFVulkanExtensions;
|
} FFVulkanExtensions;
|
||||||
@@ -60,6 +64,8 @@ typedef enum FFVulkanExtensions {
|
|||||||
MACRO(1, 0, FF_VK_EXT_NO_FLAG, CreateDevice) \
|
MACRO(1, 0, FF_VK_EXT_NO_FLAG, CreateDevice) \
|
||||||
MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceFeatures2) \
|
MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceFeatures2) \
|
||||||
MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceProperties) \
|
MACRO(1, 0, FF_VK_EXT_NO_FLAG, GetPhysicalDeviceProperties) \
|
||||||
|
MACRO(1, 0, FF_VK_EXT_VIDEO_QUEUE, GetPhysicalDeviceVideoCapabilitiesKHR) \
|
||||||
|
MACRO(1, 0, FF_VK_EXT_VIDEO_QUEUE, GetPhysicalDeviceVideoFormatPropertiesKHR) \
|
||||||
MACRO(1, 0, FF_VK_EXT_NO_FLAG, DeviceWaitIdle) \
|
MACRO(1, 0, FF_VK_EXT_NO_FLAG, DeviceWaitIdle) \
|
||||||
MACRO(1, 0, FF_VK_EXT_NO_FLAG, DestroyDevice) \
|
MACRO(1, 0, FF_VK_EXT_NO_FLAG, DestroyDevice) \
|
||||||
\
|
\
|
||||||
@@ -159,6 +165,20 @@ typedef enum FFVulkanExtensions {
|
|||||||
/* sync2 */ \
|
/* sync2 */ \
|
||||||
MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdPipelineBarrier2) \
|
MACRO(1, 1, FF_VK_EXT_NO_FLAG, CmdPipelineBarrier2) \
|
||||||
\
|
\
|
||||||
|
/* Video queue */ \
|
||||||
|
MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CreateVideoSessionKHR) \
|
||||||
|
MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CreateVideoSessionParametersKHR) \
|
||||||
|
MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, GetVideoSessionMemoryRequirementsKHR) \
|
||||||
|
MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, BindVideoSessionMemoryKHR) \
|
||||||
|
MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CmdBeginVideoCodingKHR) \
|
||||||
|
MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CmdControlVideoCodingKHR) \
|
||||||
|
MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, CmdEndVideoCodingKHR) \
|
||||||
|
MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, DestroyVideoSessionParametersKHR) \
|
||||||
|
MACRO(1, 1, FF_VK_EXT_VIDEO_QUEUE, DestroyVideoSessionKHR) \
|
||||||
|
\
|
||||||
|
/* Video decoding */ \
|
||||||
|
MACRO(1, 1, FF_VK_EXT_VIDEO_DECODE_QUEUE, CmdDecodeVideoKHR) \
|
||||||
|
\
|
||||||
/* Pipeline */ \
|
/* Pipeline */ \
|
||||||
MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreatePipelineLayout) \
|
MACRO(1, 1, FF_VK_EXT_NO_FLAG, CreatePipelineLayout) \
|
||||||
MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyPipelineLayout) \
|
MACRO(1, 1, FF_VK_EXT_NO_FLAG, DestroyPipelineLayout) \
|
||||||
|
|||||||
@@ -50,6 +50,10 @@ static inline uint64_t ff_vk_extensions_to_mask(const char * const *extensions,
|
|||||||
{ VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_WIN32_SEM },
|
{ VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_WIN32_SEM },
|
||||||
#endif
|
#endif
|
||||||
{ VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME, FF_VK_EXT_DESCRIPTOR_BUFFER, },
|
{ VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME, FF_VK_EXT_DESCRIPTOR_BUFFER, },
|
||||||
|
{ VK_KHR_VIDEO_QUEUE_EXTENSION_NAME, FF_VK_EXT_VIDEO_QUEUE },
|
||||||
|
{ VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME, FF_VK_EXT_VIDEO_DECODE_QUEUE },
|
||||||
|
{ VK_KHR_VIDEO_DECODE_H264_EXTENSION_NAME, FF_VK_EXT_VIDEO_DECODE_H264 },
|
||||||
|
{ VK_KHR_VIDEO_DECODE_H265_EXTENSION_NAME, FF_VK_EXT_VIDEO_DECODE_H265 },
|
||||||
};
|
};
|
||||||
|
|
||||||
FFVulkanExtensions mask = 0x0;
|
FFVulkanExtensions mask = 0x0;
|
||||||
|
|||||||
Reference in New Issue
Block a user