vkvideoutils: add gst_vulkan_video_profile_is_valid()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4850>
This commit is contained in:
Víctor Manuel Jáquez Leal 2023-05-24 10:03:30 +02:00 committed by GStreamer Marge Bot
parent f896e2a347
commit 13d78652b7
2 changed files with 47 additions and 1 deletions

View file

@ -323,3 +323,45 @@ gst_vulkan_video_profile_from_caps (GstVulkanVideoProfile * profile,
#endif #endif
return TRUE; return TRUE;
} }
/**
* gst_vulkan_video_profile_is_valid: (skip)
* @profile: the output profile
* @codec: VkVideoCodecOperationFlagBitsKHR described by @profile
*
* Returns: %TRUE if @profile is correct and matches with @codec
*
* Since: 1.24
*/
gboolean
gst_vulkan_video_profile_is_valid (GstVulkanVideoProfile * profile, guint codec)
{
#if GST_VULKAN_HAVE_VIDEO_EXTENSIONS
int i;
VkVideoCodecOperationFlagBitsKHR op = codec;
VkStructureType stype = VK_STRUCTURE_TYPE_MAX_ENUM;
if (op == VK_VIDEO_CODEC_OPERATION_NONE_KHR)
return FALSE;
if (profile->profile.videoCodecOperation != op)
return FALSE;
for (i = 0; i < G_N_ELEMENTS (video_codecs_map); i++) {
if (op == video_codecs_map[i].codec) {
stype = video_codecs_map[i].stype;
break;
}
}
if (stype == VK_STRUCTURE_TYPE_MAX_ENUM)
return FALSE;
if (profile->codec.base.sType != stype)
return FALSE;
return TRUE;
#endif
return FALSE;
}

View file

@ -21,7 +21,7 @@
#pragma once #pragma once
#include <gst/gst.h> #include <gst/gst.h>
#include <gst/vulkan/vulkan.h> #include <gst/vulkan/gstvkapi.h>
G_BEGIN_DECLS G_BEGIN_DECLS
@ -39,6 +39,7 @@ struct _GstVulkanVideoProfile
VkVideoProfileInfoKHR profile; VkVideoProfileInfoKHR profile;
VkVideoDecodeUsageInfoKHR usage; VkVideoDecodeUsageInfoKHR usage;
union { union {
VkBaseInStructure base;
VkVideoDecodeH264ProfileInfoKHR h264; VkVideoDecodeH264ProfileInfoKHR h264;
VkVideoDecodeH265ProfileInfoKHR h265; VkVideoDecodeH265ProfileInfoKHR h265;
} codec; } codec;
@ -51,5 +52,8 @@ GstCaps * gst_vulkan_video_profile_to_caps (const GstVulkan
GST_VULKAN_API GST_VULKAN_API
gboolean gst_vulkan_video_profile_from_caps (GstVulkanVideoProfile * profile, gboolean gst_vulkan_video_profile_from_caps (GstVulkanVideoProfile * profile,
GstCaps * caps); GstCaps * caps);
GST_VULKAN_API
gboolean gst_vulkan_video_profile_is_valid (GstVulkanVideoProfile * profile,
guint codec);
G_END_DECLS G_END_DECLS