Module: Mesa
Branch: main
Commit: 72f52329cd7166bf46d1544e7d93705d3ff9a7dd
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=72f52329cd7166bf46d1544e7d93705d3ff9a7dd

Author: Dave Airlie <[email protected]>
Date:   Wed Jun 21 11:50:19 2023 +1000

vulkan/video: add a nal_unit lookup for hevc

This is needed to by drivers to get a nal unit type
for the picture type.

Reviewed-by: Hyunjun Ko <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25874>

---

 src/vulkan/runtime/vk_video.c | 51 +++++++++++++++++++++++++++++++++++++++++++
 src/vulkan/runtime/vk_video.h |  4 ++++
 2 files changed, 55 insertions(+)

diff --git a/src/vulkan/runtime/vk_video.c b/src/vulkan/runtime/vk_video.c
index dad98733e12..66a012e5076 100644
--- a/src/vulkan/runtime/vk_video.c
+++ b/src/vulkan/runtime/vk_video.c
@@ -1298,4 +1298,55 @@ enum H264NALUType
    /* 24...31 UNSPECIFIED */
 };
 
+enum HEVCNALUnitType {
+   HEVC_NAL_TRAIL_N        = 0,
+   HEVC_NAL_TRAIL_R        = 1,
+   HEVC_NAL_TSA_N          = 2,
+   HEVC_NAL_TSA_R          = 3,
+   HEVC_NAL_STSA_N         = 4,
+   HEVC_NAL_STSA_R         = 5,
+   HEVC_NAL_RADL_N         = 6,
+   HEVC_NAL_RADL_R         = 7,
+   HEVC_NAL_RASL_N         = 8,
+   HEVC_NAL_RASL_R         = 9,
+   HEVC_NAL_VCL_N10        = 10,
+   HEVC_NAL_VCL_R11        = 11,
+   HEVC_NAL_VCL_N12        = 12,
+   HEVC_NAL_VCL_R13        = 13,
+   HEVC_NAL_VCL_N14        = 14,
+   HEVC_NAL_VCL_R15        = 15,
+   HEVC_NAL_BLA_W_LP       = 16,
+   HEVC_NAL_BLA_W_RADL     = 17,
+   HEVC_NAL_BLA_N_LP       = 18,
+   HEVC_NAL_IDR_W_RADL     = 19,
+   HEVC_NAL_IDR_N_LP       = 20,
+   HEVC_NAL_CRA_NUT        = 21,
+   HEVC_NAL_VPS_NUT        = 32,
+   HEVC_NAL_SPS_NUT        = 33,
+   HEVC_NAL_PPS_NUT        = 34,
+};
+
+unsigned
+vk_video_get_h265_nal_unit(StdVideoH265PictureType pic_type, bool 
irap_pic_flag)
+{
+   switch (pic_type) {
+   case STD_VIDEO_H265_PICTURE_TYPE_IDR:
+      return HEVC_NAL_IDR_W_RADL;
+   case STD_VIDEO_H265_PICTURE_TYPE_I:
+      return HEVC_NAL_CRA_NUT;
+   case STD_VIDEO_H265_PICTURE_TYPE_P:
+      return HEVC_NAL_TRAIL_R;
+   case STD_VIDEO_H265_PICTURE_TYPE_B:
+      if (irap_pic_flag)
+         return HEVC_NAL_RASL_R;
+      else
+         return HEVC_NAL_TRAIL_R;
+      break;
+   default:
+      assert(0);
+      break;
+   }
+   return 0;
+}
+
 #endif
diff --git a/src/vulkan/runtime/vk_video.h b/src/vulkan/runtime/vk_video.h
index 3f961360e05..d0db739ec40 100644
--- a/src/vulkan/runtime/vk_video.h
+++ b/src/vulkan/runtime/vk_video.h
@@ -248,6 +248,10 @@ vk_video_find_h265_enc_std_sps(const struct 
vk_video_session_parameters *params,
 const StdVideoH265PictureParameterSet *
 vk_video_find_h265_enc_std_pps(const struct vk_video_session_parameters 
*params,
                                uint32_t id);
+
+unsigned
+vk_video_get_h265_nal_unit(StdVideoH265PictureType pic_type, bool 
irap_pic_flag);
+
 #endif
 
 #ifdef __cplusplus

Reply via email to