#include "h264dec.h"
#include "h264_ps.h"
#include "vulkan_decode.h"
 
Go to the source code of this file.
 | 
| static int  | vk_h264_fill_pict (AVCodecContext *avctx, H264Picture **ref_src, VkVideoReferenceSlotInfoKHR *ref_slot, VkVideoPictureResourceInfoKHR *ref, VkVideoDecodeH264DpbSlotInfoKHR *vkh264_ref, StdVideoDecodeH264ReferenceInfo *h264_ref, H264Picture *pic, int is_current, int is_field, int picture_structure, int dpb_slot_index) | 
|   | 
| static StdVideoH264LevelIdc  | convert_to_vk_level_idc (int level_idc) | 
|   | 
| static void  | set_sps (const SPS *sps, StdVideoH264ScalingLists *vksps_scaling, StdVideoH264HrdParameters *vksps_vui_header, StdVideoH264SequenceParameterSetVui *vksps_vui, StdVideoH264SequenceParameterSet *vksps) | 
|   | 
| static void  | set_pps (const PPS *pps, const SPS *sps, StdVideoH264ScalingLists *vkpps_scaling, StdVideoH264PictureParameterSet *vkpps) | 
|   | 
| static int  | vk_h264_create_params (AVCodecContext *avctx, AVBufferRef **buf) | 
|   | 
| static int  | vk_h264_start_frame (AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size) | 
|   | 
| static int  | vk_h264_decode_slice (AVCodecContext *avctx, const uint8_t *data, uint32_t size) | 
|   | 
| static int  | vk_h264_end_frame (AVCodecContext *avctx) | 
|   | 
| static void  | vk_h264_free_frame_priv (FFRefStructOpaque _hwctx, void *data) | 
|   | 
◆ vk_h264_fill_pict()
  
  
      
        
          | static int vk_h264_fill_pict  | 
          ( | 
          AVCodecContext *  | 
          avctx,  | 
         
        
           | 
           | 
          H264Picture **  | 
          ref_src,  | 
         
        
           | 
           | 
          VkVideoReferenceSlotInfoKHR *  | 
          ref_slot,  | 
         
        
           | 
           | 
          VkVideoPictureResourceInfoKHR *  | 
          ref,  | 
         
        
           | 
           | 
          VkVideoDecodeH264DpbSlotInfoKHR *  | 
          vkh264_ref,  | 
         
        
           | 
           | 
          StdVideoDecodeH264ReferenceInfo *  | 
          h264_ref,  | 
         
        
           | 
           | 
          H264Picture *  | 
          pic,  | 
         
        
           | 
           | 
          int  | 
          is_current,  | 
         
        
           | 
           | 
          int  | 
          is_field,  | 
         
        
           | 
           | 
          int  | 
          picture_structure,  | 
         
        
           | 
           | 
          int  | 
          dpb_slot_index  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
static   | 
  
 
 
◆ convert_to_vk_level_idc()
  
  
      
        
          | static StdVideoH264LevelIdc convert_to_vk_level_idc  | 
          ( | 
          int  | 
          level_idc | ) | 
           | 
         
       
   | 
  
static   | 
  
 
 
◆ set_sps()
  
  
      
        
          | static void set_sps  | 
          ( | 
          const SPS *  | 
          sps,  | 
         
        
           | 
           | 
          StdVideoH264ScalingLists *  | 
          vksps_scaling,  | 
         
        
           | 
           | 
          StdVideoH264HrdParameters *  | 
          vksps_vui_header,  | 
         
        
           | 
           | 
          StdVideoH264SequenceParameterSetVui *  | 
          vksps_vui,  | 
         
        
           | 
           | 
          StdVideoH264SequenceParameterSet *  | 
          vksps  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
static   | 
  
 
 
◆ set_pps()
  
  
      
        
          | static void set_pps  | 
          ( | 
          const PPS *  | 
          pps,  | 
         
        
           | 
           | 
          const SPS *  | 
          sps,  | 
         
        
           | 
           | 
          StdVideoH264ScalingLists *  | 
          vkpps_scaling,  | 
         
        
           | 
           | 
          StdVideoH264PictureParameterSet *  | 
          vkpps  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
static   | 
  
 
 
◆ vk_h264_create_params()
◆ vk_h264_start_frame()
◆ vk_h264_decode_slice()
  
  
      
        
          | static int vk_h264_decode_slice  | 
          ( | 
          AVCodecContext *  | 
          avctx,  | 
         
        
           | 
           | 
          const uint8_t *  | 
          data,  | 
         
        
           | 
           | 
          uint32_t  | 
          size  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
static   | 
  
 
 
◆ vk_h264_end_frame()
◆ vk_h264_free_frame_priv()
◆ ff_vk_dec_h264_desc
Initial value:= {
    .decode_op        = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR,
    .ext_props = {
        .extensionName = VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_EXTENSION_NAME,
        .specVersion   = VK_STD_VULKAN_VIDEO_CODEC_H264_DECODE_SPEC_VERSION,
    },
}
 
Definition at line 24 of file vulkan_h264.c.
 
 
◆ h264_scaling_list8_order
  
  
      
        
          | const static int h264_scaling_list8_order[] = { 0, 3, 1, 4, 2, 5 } | 
         
       
   | 
  
static   | 
  
 
 
◆ ff_h264_vulkan_hwaccel
Initial value:= {
    .p.name                = "h264_vulkan",
}
 
Definition at line 552 of file vulkan_h264.c.
 
 
 
@ FF_VK_EXT_VIDEO_DECODE_H264
 
@ AV_PIX_FMT_VULKAN
Vulkan hardware images.
 
#define HWACCEL_CAP_THREAD_SAFE
 
static void vk_h264_free_frame_priv(FFRefStructOpaque _hwctx, void *data)
 
static int vk_h264_decode_slice(AVCodecContext *avctx, const uint8_t *data, uint32_t size)
 
#define HWACCEL_CAP_ASYNC_SAFE
Header providing the internals of AVHWAccel.
 
int ff_vk_decode_uninit(AVCodecContext *avctx)
Free decoder.
 
void(* flush)(AVBSFContext *ctx)
 
int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
Initialize hw_frames_ctx with the parameters needed to decode the stream using the parameters from av...
 
int(* init)(AVBSFContext *ctx)
 
static void uninit(AVBSFContext *ctx)
 
static int vk_h264_end_frame(AVCodecContext *avctx)
 
static int vk_h264_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
 
the pkt_dts and pkt_pts fields in AVFrame will work as usual Restrictions on codec whose streams don t reset across will not work because their bitstreams cannot be decoded in parallel *The contents of buffers must not be read before as well as code calling up to before the decode process starts Call have update_thread_context() run it in the next thread. Add AV_CODEC_CAP_FRAME_THREADS to the codec capabilities. There will be very little speed gain at this point but it should work. If there are inter-frame dependencies
 
void ff_vk_decode_flush(AVCodecContext *avctx)
Flush decoder.
 
int ff_vk_params_invalidate(AVCodecContext *avctx, int t, const uint8_t *b, uint32_t s)
Removes current session parameters to recreate them.
 
int ff_vk_update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
Synchronize the contexts between 2 threads.
 
int ff_vk_decode_init(AVCodecContext *avctx)
Initialize decoder.