FFmpeg
Loading...
Searching...
No Matches
vulkan_h264.c File Reference
#include "libavutil/mem.h"
#include "h264dec.h"
#include "h264_ps.h"
#include "vulkan_decode.h"

Go to the source code of this file.

Data Structures

struct  H264VulkanDecodePicture
 
struct  VulkanH264Params
 

Functions

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, VkVideoSessionParametersKHR **buf)
 
static int vk_h264_start_frame (AVCodecContext *avctx, av_unused const AVBufferRef *buffer_ref, 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 (AVRefStructOpaque _hwctx, void *data)
 

Variables

const FFVulkanDecodeDescriptor ff_vk_dec_h264_desc
 
static const int h264_scaling_list8_order [] = { 0, 3, 1, 4, 2, 5 }
 
const FFHWAccel ff_h264_vulkan_hwaccel
 

Function Documentation

◆ 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

Definition at line 56 of file vulkan_h264.c.

Referenced by vk_h264_start_frame().

◆ convert_to_vk_level_idc()

static StdVideoH264LevelIdc convert_to_vk_level_idc ( int level_idc)
static

Definition at line 119 of file vulkan_h264.c.

Referenced by set_sps().

◆ set_sps()

static void set_sps ( const SPS * sps,
StdVideoH264ScalingLists * vksps_scaling,
StdVideoH264HrdParameters * vksps_vui_header,
StdVideoH264SequenceParameterSetVui * vksps_vui,
StdVideoH264SequenceParameterSet * vksps )
static

Definition at line 145 of file vulkan_h264.c.

Referenced by vk_h264_create_params(), and vk_h264_end_frame().

◆ set_pps()

static void set_pps ( const PPS * pps,
const SPS * sps,
StdVideoH264ScalingLists * vkpps_scaling,
StdVideoH264PictureParameterSet * vkpps )
static

Definition at line 253 of file vulkan_h264.c.

Referenced by vk_h264_create_params(), and vk_h264_end_frame().

◆ vk_h264_create_params()

static int vk_h264_create_params ( AVCodecContext * avctx,
VkVideoSessionParametersKHR ** buf )
static

Definition at line 308 of file vulkan_h264.c.

Referenced by vk_h264_end_frame().

◆ vk_h264_start_frame()

static int vk_h264_start_frame ( AVCodecContext * avctx,
av_unused const AVBufferRef * buffer_ref,
av_unused const uint8_t * buffer,
av_unused uint32_t size )
static

Definition at line 372 of file vulkan_h264.c.

◆ vk_h264_decode_slice()

static int vk_h264_decode_slice ( AVCodecContext * avctx,
const uint8_t * data,
uint32_t size )
static

Definition at line 487 of file vulkan_h264.c.

◆ vk_h264_end_frame()

static int vk_h264_end_frame ( AVCodecContext * avctx)
static

Definition at line 512 of file vulkan_h264.c.

◆ vk_h264_free_frame_priv()

static void vk_h264_free_frame_priv ( AVRefStructOpaque _hwctx,
void * data )
static

Definition at line 576 of file vulkan_h264.c.

Variable Documentation

◆ ff_vk_dec_h264_desc

const FFVulkanDecodeDescriptor ff_vk_dec_h264_desc
Initial value:
= {
.codec_id = AV_CODEC_ID_H264,
.decode_extension = FF_VK_EXT_VIDEO_DECODE_H264,
.queue_flags = VK_QUEUE_VIDEO_DECODE_BIT_KHR,
.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,
},
}
@ AV_CODEC_ID_H264
Definition codec_id.h:77
#define FF_VK_EXT_VIDEO_DECODE_H264

Definition at line 26 of file vulkan_h264.c.

◆ h264_scaling_list8_order

const int h264_scaling_list8_order[] = { 0, 3, 1, 4, 2, 5 }
static

Definition at line 54 of file vulkan_h264.c.

Referenced by set_pps(), and set_sps().

◆ ff_h264_vulkan_hwaccel

const FFHWAccel ff_h264_vulkan_hwaccel
Initial value:
= {
.p.name = "h264_vulkan",
.p.type = AVMEDIA_TYPE_VIDEO,
.p.pix_fmt = AV_PIX_FMT_VULKAN,
.start_frame = &vk_h264_start_frame,
.decode_slice = &vk_h264_decode_slice,
.end_frame = &vk_h264_end_frame,
.free_frame_priv = &vk_h264_free_frame_priv,
.frame_priv_data_size = sizeof(H264VulkanDecodePicture),
.update_thread_context = &ff_vk_update_thread_context,
.decode_params = &ff_vk_params_invalidate,
.frame_params = &ff_vk_frame_params,
.priv_data_size = sizeof(FFVulkanDecodeContext),
.caps_internal = HWACCEL_CAP_ASYNC_SAFE,
}
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
#define HWACCEL_CAP_ASYNC_SAFE
Header providing the internals of AVHWAccel.
static av_cold void uninit(AVBitStreamFilterContext *ctx)
@ AV_PIX_FMT_VULKAN
Vulkan hardware images.
Definition pixfmt.h:379
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.
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_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 ff_vk_decode_uninit(AVCodecContext *avctx)
Free decoder.
static void vk_h264_free_frame_priv(AVRefStructOpaque _hwctx, void *data)
static int vk_h264_start_frame(AVCodecContext *avctx, av_unused const AVBufferRef *buffer_ref, av_unused const uint8_t *buffer, av_unused uint32_t size)
static int vk_h264_end_frame(AVCodecContext *avctx)
static int vk_h264_decode_slice(AVCodecContext *avctx, const uint8_t *data, uint32_t size)

Definition at line 585 of file vulkan_h264.c.