FFmpeg
|
#include "refstruct.h"
#include "vulkan_video.h"
#include "vulkan_decode.h"
#include "config_components.h"
#include "libavutil/avassert.h"
#include "libavutil/mem.h"
#include "libavutil/vulkan_loader.h"
Go to the source code of this file.
Functions | |
static const FFVulkanDecodeDescriptor * | get_codecdesc (enum AVCodecID codec_id) |
static const VkVideoProfileInfoKHR * | get_video_profile (FFVulkanDecodeShared *ctx, enum AVCodecID codec_id) |
int | ff_vk_update_thread_context (AVCodecContext *dst, const AVCodecContext *src) |
Synchronize the contexts between 2 threads. More... | |
int | ff_vk_params_invalidate (AVCodecContext *avctx, int t, const uint8_t *b, uint32_t s) |
Removes current session parameters to recreate them. More... | |
static AVFrame * | vk_get_dpb_pool (FFVulkanDecodeShared *ctx) |
int | ff_vk_decode_prepare_frame (FFVulkanDecodeContext *dec, AVFrame *pic, FFVulkanDecodePicture *vkpic, int is_current, int alloc_dpb) |
Prepare a frame, creates the image view, and sets up the dpb fields. More... | |
int | ff_vk_decode_add_slice (AVCodecContext *avctx, FFVulkanDecodePicture *vp, const uint8_t *data, size_t size, int add_startcode, uint32_t *nb_slices, const uint32_t **offsets) |
Add slice data to frame. More... | |
void | ff_vk_decode_flush (AVCodecContext *avctx) |
Flush decoder. More... | |
int | ff_vk_decode_frame (AVCodecContext *avctx, AVFrame *pic, FFVulkanDecodePicture *vp, AVFrame *rpic[], FFVulkanDecodePicture *rvkp[]) |
Decode a frame. More... | |
void | ff_vk_decode_free_frame (AVHWDeviceContext *dev_ctx, FFVulkanDecodePicture *vp) |
Free a frame and its state. More... | |
static void | free_common (FFRefStructOpaque unused, void *obj) |
static int | vulkan_decode_bootstrap (AVCodecContext *avctx, AVBufferRef *frames_ref) |
static VkResult | vulkan_setup_profile (AVCodecContext *avctx, FFVulkanDecodeProfileData *prof, AVVulkanDeviceContext *hwctx, FFVulkanFunctions *vk, const FFVulkanDecodeDescriptor *vk_desc, VkVideoDecodeH264CapabilitiesKHR *h264_caps, VkVideoDecodeH265CapabilitiesKHR *h265_caps, VkVideoDecodeAV1CapabilitiesKHR *av1_caps, VkVideoCapabilitiesKHR *caps, VkVideoDecodeCapabilitiesKHR *dec_caps, int cur_profile) |
static int | vulkan_decode_get_profile (AVCodecContext *avctx, AVBufferRef *frames_ref, enum AVPixelFormat *pix_fmt, VkFormat *vk_fmt, FFVulkanDecodeProfileData *prof, int *dpb_dedicate) |
static void | free_profile_data (AVHWFramesContext *hwfc) |
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 avctx. More... | |
static void | vk_decode_free_params (void *opaque, uint8_t *data) |
int | ff_vk_decode_create_params (AVBufferRef **par_ref, void *logctx, FFVulkanDecodeShared *ctx, const VkVideoSessionParametersCreateInfoKHR *session_params_create) |
Create VkVideoSessionParametersKHR wrapped in an AVBufferRef. More... | |
int | ff_vk_decode_uninit (AVCodecContext *avctx) |
Free decoder. More... | |
int | ff_vk_decode_init (AVCodecContext *avctx) |
Initialize decoder. More... | |
Variables | |
static const FFVulkanDecodeDescriptor * | dec_descs [] |
|
static |
Definition at line 49 of file vulkan_decode.c.
Referenced by ff_vk_decode_init(), and vulkan_decode_get_profile().
|
static |
Definition at line 58 of file vulkan_decode.c.
Referenced by ff_vk_decode_init(), and ff_vk_update_thread_context().
int ff_vk_update_thread_context | ( | AVCodecContext * | dst, |
const AVCodecContext * | src | ||
) |
Synchronize the contexts between 2 threads.
Definition at line 80 of file vulkan_decode.c.
int ff_vk_params_invalidate | ( | AVCodecContext * | avctx, |
int | t, | ||
const uint8_t * | b, | ||
uint32_t | s | ||
) |
Removes current session parameters to recreate them.
Definition at line 120 of file vulkan_decode.c.
|
static |
Definition at line 127 of file vulkan_decode.c.
Referenced by ff_vk_decode_init(), and ff_vk_decode_prepare_frame().
int ff_vk_decode_prepare_frame | ( | FFVulkanDecodeContext * | dec, |
AVFrame * | pic, | ||
FFVulkanDecodePicture * | vkpic, | ||
int | is_current, | ||
int | alloc_dpb | ||
) |
Prepare a frame, creates the image view, and sets up the dpb fields.
Definition at line 141 of file vulkan_decode.c.
Referenced by vk_av1_fill_pict(), vk_h264_fill_pict(), and vk_hevc_fill_pict().
int ff_vk_decode_add_slice | ( | AVCodecContext * | avctx, |
FFVulkanDecodePicture * | vp, | ||
const uint8_t * | data, | ||
size_t | size, | ||
int | add_startcode, | ||
uint32_t * | nb_slices, | ||
const uint32_t ** | offsets | ||
) |
Add slice data to frame.
Definition at line 205 of file vulkan_decode.c.
Referenced by vk_av1_decode_slice(), vk_h264_decode_slice(), and vk_hevc_decode_slice().
void ff_vk_decode_flush | ( | AVCodecContext * | avctx | ) |
int ff_vk_decode_frame | ( | AVCodecContext * | avctx, |
AVFrame * | pic, | ||
FFVulkanDecodePicture * | vp, | ||
AVFrame * | rpic[], | ||
FFVulkanDecodePicture * | rvkp[] | ||
) |
Decode a frame.
Definition at line 312 of file vulkan_decode.c.
Referenced by vk_av1_end_frame(), vk_h264_end_frame(), and vk_hevc_end_frame().
void ff_vk_decode_free_frame | ( | AVHWDeviceContext * | dev_ctx, |
FFVulkanDecodePicture * | vp | ||
) |
Free a frame and its state.
Definition at line 543 of file vulkan_decode.c.
Referenced by vk_av1_free_frame_priv(), vk_h264_free_frame_priv(), and vk_hevc_free_frame_priv().
|
static |
Definition at line 574 of file vulkan_decode.c.
Referenced by vulkan_decode_bootstrap().
|
static |
Definition at line 596 of file vulkan_decode.c.
Referenced by ff_vk_frame_params().
|
static |
Definition at line 634 of file vulkan_decode.c.
Referenced by vulkan_decode_get_profile().
|
static |
Definition at line 709 of file vulkan_decode.c.
Referenced by ff_vk_frame_params().
|
static |
Definition at line 969 of file vulkan_decode.c.
Referenced by ff_vk_frame_params().
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 avctx.
NOTE: if avctx->internal->hwaccel_priv_data exists, will partially initialize the context.
Definition at line 974 of file vulkan_decode.c.
|
static |
Definition at line 1027 of file vulkan_decode.c.
Referenced by ff_vk_decode_create_params().
int ff_vk_decode_create_params | ( | AVBufferRef ** | par_ref, |
void * | logctx, | ||
FFVulkanDecodeShared * | ctx, | ||
const VkVideoSessionParametersCreateInfoKHR * | session_params_create | ||
) |
Create VkVideoSessionParametersKHR wrapped in an AVBufferRef.
Definition at line 1037 of file vulkan_decode.c.
Referenced by vk_av1_create_params(), vk_h264_create_params(), and vk_hevc_create_params().
int ff_vk_decode_uninit | ( | AVCodecContext * | avctx | ) |
int ff_vk_decode_init | ( | AVCodecContext * | avctx | ) |
Initialize decoder.
Definition at line 1081 of file vulkan_decode.c.
|
static |