28#define RGB_LINECACHE 2
65 .queue_flags = VK_QUEUE_COMPUTE_BIT,
125 for (
int i = 0;
i <
f->quant_table_count;
i++)
126 max_contexts =
FFMAX(
f->context_count[
i], max_contexts);
152 VK_WHOLE_SIZE, buffer_ref,
153 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
154 VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
160 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
162 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
178 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
179 NULL, 2*(2*
f->slice_count*
sizeof(uint32_t)),
180 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
181 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
186 if (
f->version >=4 &&
f->micro_version >= 9 &&
190 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
191 NULL, 65536*4*
f->slice_count*
sizeof(uint32_t),
192 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
193 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
198 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
199 NULL, 65536*4*
f->slice_count*
sizeof(uint32_t),
200 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
232 if (slices_buf && slices_buf->
host_ref) {
285 VkImageMemoryBarrier2 img_bar[37];
287 VkBufferMemoryBarrier2 buf_bar[8];
297 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
298 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
314 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
315 VK_PIPELINE_STAGE_2_CLEAR_BIT));
325 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT);
337 vkf->
layout[
i] = VK_IMAGE_LAYOUT_UNDEFINED;
338 vkf->
access[
i] = VK_ACCESS_2_NONE;
346 VK_FORMAT_UNDEFINED);
350 0, 2*
f->slice_count*
sizeof(uint32_t),
351 VK_FORMAT_UNDEFINED);
355 2*
f->slice_count*
sizeof(uint32_t),
357 VK_FORMAT_UNDEFINED);
362 fltmap_buf ? fltmap_buf : slice_feedback,
365 VK_FORMAT_UNDEFINED);
370 .slice_data = slices_buf->
address,
372 .img_size[0] =
f->picture.f->width,
373 .img_size[1] =
f->picture.f->height,
378 .micro_version =
f->micro_version,
379 .remap_allowed = !!fltmap_buf,
382 for (
int i = 0;
i <
f->quant_table_count;
i++) {
385 f->quant_tables[
i][4][127];
391 memcpy(pd.
fmt_lut, (
int [4]) { 2, 1, 0, 3 }, 4*
sizeof(
int));
396 VK_SHADER_STAGE_COMPUTE_BIT,
399 vk->CmdDispatch(exec->
buf,
f->num_h_slices,
f->num_v_slices, 1);
403 for (
int i = 0;
i < 4;
i++) {
404 vkf->
layout[
i] = VK_IMAGE_LAYOUT_UNDEFINED;
405 vkf->
access[
i] = VK_ACCESS_2_NONE;
409 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
410 VK_PIPELINE_STAGE_2_CLEAR_BIT,
411 VK_ACCESS_2_TRANSFER_WRITE_BIT,
412 VK_IMAGE_LAYOUT_GENERAL,
413 VK_QUEUE_FAMILY_IGNORED);
415 vk->CmdPipelineBarrier2(exec->
buf, &(VkDependencyInfo) {
416 .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
417 .pImageMemoryBarriers = img_bar,
418 .imageMemoryBarrierCount = nb_img_bar,
419 .pBufferMemoryBarriers = buf_bar,
420 .bufferMemoryBarrierCount = nb_buf_bar,
427 int n_dec_planes =
f->bayer ? 4 : color_planes;
428 for (
int i = 0;
i < n_dec_planes;
i++)
429 vk->CmdClearColorImage(exec->
buf, vkf->
img[
i], VK_IMAGE_LAYOUT_GENERAL,
430 &((VkClearColorValue) { 0 }),
431 1, &((VkImageSubresourceRange) {
432 .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
440 COMPUTE_SHADER_BIT, SHADER_STORAGE_READ_BIT,
441 SHADER_STORAGE_WRITE_BIT,
442 COMPUTE_SHADER_BIT, SHADER_STORAGE_READ_BIT, NONE_KHR,
448 COMPUTE_SHADER_BIT, SHADER_STORAGE_READ_BIT,
449 SHADER_STORAGE_WRITE_BIT,
450 COMPUTE_SHADER_BIT, SHADER_STORAGE_WRITE_BIT, NONE_KHR,
453 vk->CmdPipelineBarrier2(exec->
buf, &(VkDependencyInfo) {
454 .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
455 .pImageMemoryBarriers = img_bar,
456 .imageMemoryBarrierCount = nb_img_bar,
457 .pBufferMemoryBarriers = buf_bar,
458 .bufferMemoryBarrierCount = nb_buf_bar,
468 VK_FORMAT_UNDEFINED);
474 VK_FORMAT_UNDEFINED);
478 VK_SHADER_STAGE_COMPUTE_BIT,
481 vk->CmdDispatch(exec->
buf,
f->num_h_slices,
f->num_v_slices,
486 COMPUTE_SHADER_BIT, SHADER_STORAGE_WRITE_BIT, NONE_KHR,
487 COMPUTE_SHADER_BIT, SHADER_STORAGE_READ_BIT,
488 SHADER_STORAGE_WRITE_BIT,
493 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
494 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
495 VK_ACCESS_SHADER_WRITE_BIT |
496 (!is_rgb ? VK_ACCESS_SHADER_READ_BIT : 0),
497 VK_IMAGE_LAYOUT_GENERAL,
498 VK_QUEUE_FAMILY_IGNORED);
501 VK_PIPELINE_STAGE_2_CLEAR_BIT,
502 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
503 VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,
504 VK_IMAGE_LAYOUT_GENERAL,
505 VK_QUEUE_FAMILY_IGNORED);
507 vk->CmdPipelineBarrier2(exec->
buf, &(VkDependencyInfo) {
508 .sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
509 .pImageMemoryBarriers = img_bar,
510 .imageMemoryBarrierCount = nb_img_bar,
511 .pBufferMemoryBarriers = buf_bar,
512 .bufferMemoryBarrierCount = nb_buf_bar,
522 VK_FORMAT_UNDEFINED);
526 0, 2*
f->slice_count*
sizeof(uint32_t),
527 VK_FORMAT_UNDEFINED);
531 2*
f->slice_count*
sizeof(uint32_t),
533 VK_FORMAT_UNDEFINED);
539 VK_FORMAT_UNDEFINED);
542 VkImageView *decode_dst_view = is_rgb ? rct_image_views : output_views;
544 decode_dst, decode_dst_view,
546 VK_IMAGE_LAYOUT_GENERAL,
550 f->picture.f, output_views,
552 VK_IMAGE_LAYOUT_GENERAL,
560 VK_FORMAT_UNDEFINED);
564 VK_SHADER_STAGE_COMPUTE_BIT,
567 vk->CmdDispatch(exec->
buf,
f->num_h_slices,
f->num_v_slices, 1);
585 VkSpecializationInfo *sl)
590 (uint32_t []) { 1, 1, 1 }, 0);
593 VK_SHADER_STAGE_COMPUTE_BIT);
597 .type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
598 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
601 .type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
602 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
609 .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
610 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
613 .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
614 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
617 .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
618 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
621 .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
622 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
639 VkSpecializationInfo *sl,
int ac)
642 int wg_dim =
FFMIN(
s->props.properties.limits.maxComputeWorkGroupSize[0], 1024);
645 (uint32_t []) { wg_dim, 1, 1 }, 0);
648 VK_SHADER_STAGE_COMPUTE_BIT);
652 .type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
653 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
660 .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
661 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
664 .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
665 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
689 VkSpecializationInfo *sl,
int ac,
int rgb,
696 (uint32_t []) { wg_x, 1, 1 }, 0);
699 VK_SHADER_STAGE_COMPUTE_BIT);
703 .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
704 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
707 .type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
708 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
715 .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
716 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
719 .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
720 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
723 .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
724 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
727 .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
728 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
731 .type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
732 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
736 .type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
737 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
741 .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
742 .stages = VK_SHADER_STAGE_COMPUTE_BIT,
754 5 +
rgb + (is_float && !bayer),
766 }
else if (is_float) {
816 frames_ctx->
width =
s->frames->width;
819 vk_frames = frames_ctx->
hwctx;
820 vk_frames->
tiling = VK_IMAGE_TILING_OPTIMAL;
821 vk_frames->
img_flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
822 vk_frames->
usage = VK_IMAGE_USAGE_STORAGE_BIT |
823 VK_IMAGE_USAGE_TRANSFER_DST_BIT;
828 "Unable to initialize frame pool with format %s: %s\n",
870 if (
f->num_h_slices *
f->num_v_slices < 16)
872 "decoding may be very slow\n",
f->num_h_slices *
f->num_v_slices);
917 dctx, hwfc, sl,
f->ac, is_rgb,
f->bayer));
926 256*
sizeof(uint32_t), 512*
sizeof(uint8_t),
927 VK_FORMAT_UNDEFINED));
931 0, 256*
sizeof(uint32_t),
932 VK_FORMAT_UNDEFINED));
938 256*
sizeof(uint32_t), 512*
sizeof(uint8_t),
939 VK_FORMAT_UNDEFINED));
943 256*
sizeof(uint32_t) + 512*
sizeof(uint8_t),
945 VK_FORMAT_UNDEFINED));
963 .sType = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,
964 .pSemaphores = &vp->
sem,
979 if (!(slice_feedback->
flags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)) {
980 VkMappedMemoryRange invalidate_data = {
981 .sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
982 .memory = slice_feedback->
mem,
984 .size = 2*fp->
slice_num*
sizeof(uint32_t),
987 1, &invalidate_data);
990 int slice_error_cnt = 0;
991 int crc_mismatch_cnt = 0;
992 uint32_t max_overread = 0;
994 uint32_t crc_res = 0;
996 crc_res =
AV_RN32(ssp + 2*
i*
sizeof(uint32_t) + 0);
997 uint32_t overread =
AV_RN32(ssp + 2*
i*
sizeof(uint32_t) + 4);
998 max_overread =
FFMAX(overread, max_overread);
999 slice_error_cnt += !!overread;
1000 crc_mismatch_cnt += !!crc_res;
1002 if (slice_error_cnt || crc_mismatch_cnt)
1004 "%i CRCs mismatched\n",
1005 slice_error_cnt, max_overread, crc_mismatch_cnt);
1013 .p.name =
"ffv1_vulkan",
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
static AVFormatContext * ctx
#define flags(name, subs,...)
#define i(width, name, range_min, range_max)
#define AV_EF_CRCCHECK
Verify checksums embedded in the bitstream (could be of either encoded or decoded data,...
int(* init)(AVBSFContext *ctx)
FF Video Codec 1 (a lossless codec)
int ff_ffv1_vk_init_consts(FFVulkanContext *s, FFVkBuffer *vkb, FFV1Context *f)
void ff_ffv1_vk_set_common_sl(AVCodecContext *avctx, FFV1Context *f, VkSpecializationInfo *sl, enum AVPixelFormat sw_format)
#define AV_NUM_DATA_POINTERS
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define HWACCEL_CAP_ASYNC_SAFE
Header providing the internals of AVHWAccel.
#define HWACCEL_CAP_THREAD_SAFE
const struct FFHWAccel ff_ffv1_vulkan_hwaccel
int av_hwframe_ctx_init(AVBufferRef *ref)
Finalize the context before use.
AVBufferRef * av_hwframe_ctx_alloc(AVBufferRef *device_ref_in)
Allocate an AVHWFramesContext tied to a given device context.
int av_hwframe_get_buffer(AVBufferRef *hwframe_ref, AVFrame *frame, int flags)
Allocate a new frame attached to the given AVHWFramesContext.
static av_cold void uninit(AVBitStreamFilterContext *ctx)
void ff_vk_set_perm(enum AVPixelFormat pix_fmt, int lut[4], int inv)
Since storage images may not be swizzled, we have to do this in the shader itself.
void ff_vk_shader_update_img_array(FFVulkanContext *s, FFVkExecContext *e, FFVulkanShader *shd, AVFrame *f, VkImageView *views, int set, int binding, VkImageLayout layout, VkSampler sampler)
Update a descriptor in a buffer with an image array.
int ff_vk_shader_load(FFVulkanShader *shd, VkPipelineStageFlags stage, VkSpecializationInfo *spec, uint32_t wg_size[3], uint32_t required_subgroup_size)
Initialize a shader object.
void ff_vk_shader_add_descriptor_set(FFVulkanContext *s, FFVulkanShader *shd, const FFVulkanDescriptorSetBinding *desc, int nb, int singular)
Add descriptor to a shader.
int ff_vk_shader_add_push_const(FFVulkanShader *shd, int offset, int size, VkShaderStageFlagBits stage)
Add/update push constants for execution.
void ff_vk_free_buf(FFVulkanContext *s, FFVkBuffer *buf)
void ff_vk_frame_barrier(FFVulkanContext *s, FFVkExecContext *e, AVFrame *pic, VkImageMemoryBarrier2 *bar, int *nb_bar, VkPipelineStageFlags2 src_stage, VkPipelineStageFlags2 dst_stage, VkAccessFlagBits2 new_access, VkImageLayout new_layout, uint32_t new_qf)
int ff_vk_exec_start(FFVulkanContext *s, FFVkExecContext *e)
Start/submit/wait an execution.
int ff_vk_create_imageviews(FFVulkanContext *s, FFVkExecContext *e, VkImageView views[AV_NUM_DATA_POINTERS], AVFrame *f, enum FFVkShaderRepFormat rep_fmt)
Create an imageview and add it as a dependency to an execution.
void ff_vk_shader_free(FFVulkanContext *s, FFVulkanShader *shd)
Free a shader.
int ff_vk_shader_register_exec(FFVulkanContext *s, FFVkExecPool *pool, FFVulkanShader *shd)
Register a shader with an exec pool.
FFVkExecContext * ff_vk_exec_get(FFVulkanContext *s, FFVkExecPool *pool)
Retrieve an execution pool.
int ff_vk_exec_submit(FFVulkanContext *s, FFVkExecContext *e)
void ff_vk_exec_bind_shader(FFVulkanContext *s, FFVkExecContext *e, const FFVulkanShader *shd)
Bind a shader.
void ff_vk_exec_move_dep_refstruct(FFVulkanContext *s, FFVkExecContext *e, void *obj)
int ff_vk_shader_update_desc_buffer(FFVulkanContext *s, FFVkExecContext *e, FFVulkanShader *shd, int set, int bind, int elem, FFVkBuffer *buf, VkDeviceSize offset, VkDeviceSize len, VkFormat fmt)
Update a descriptor in a buffer with a buffer.
int ff_vk_host_map_buffer(FFVulkanContext *s, FFVkBuffer **dst, uint8_t *src_data, VkDeviceSize size, const AVBufferRef *src_buf, VkBufferUsageFlags usage)
Maps a system RAM buffer into a Vulkan buffer.
void ff_vk_exec_add_dep_refstruct(FFVulkanContext *s, FFVkExecContext *e, void *obj)
Execution dependency management.
int ff_vk_get_pooled_buffer(FFVulkanContext *ctx, AVRefStructPool **buf_pool, FFVkBuffer **buf, VkBufferUsageFlags usage, void *create_pNext, size_t size, VkMemoryPropertyFlagBits mem_props)
Initialize a pool and create AVBufferRefs containing FFVkBuffer.
int ff_vk_exec_mirror_sem_value(FFVulkanContext *s, FFVkExecContext *e, VkSemaphore *dst, uint64_t *dst_val, AVFrame *f)
void ff_vk_exec_discard(FFVulkanContext *s, FFVkExecContext *e)
int ff_vk_shader_link(FFVulkanContext *s, FFVulkanShader *shd, const char *spirv, size_t spirv_len, const char *entrypoint)
Link a shader into an executable.
int ff_vk_exec_add_dep_frame(FFVulkanContext *s, FFVkExecContext *e, AVFrame *f, VkPipelineStageFlagBits2 wait_stage, VkPipelineStageFlagBits2 signal_stage)
void ff_vk_shader_update_push_const(FFVulkanContext *s, FFVkExecContext *e, FFVulkanShader *shd, VkShaderStageFlagBits stage, int offset, size_t size, void *src)
Update push constant in a shader.
void ff_vk_exec_add_dep_wait_sem(FFVulkanContext *s, FFVkExecContext *e, VkSemaphore sem, uint64_t val, VkPipelineStageFlagBits2 stage)
Memory handling functions.
int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AV_PIX_FMT_FLAG_FLOAT
The pixel format contains IEEE-754 floating point values.
#define AV_PIX_FMT_GBRAP16
#define AV_PIX_FMT_GBRAP32
#define AV_PIX_FMT_GBRP10
#define AV_PIX_FMT_GBRP12
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_VULKAN
Vulkan hardware images.
@ AV_PIX_FMT_YA8
8 bits gray, 8 bits alpha
#define AV_PIX_FMT_GBRP14
void av_refstruct_unref(void *objp)
Decrement the reference count of the underlying object and automatically free the object if there are...
void * av_refstruct_ref(void *obj)
Create a new reference to an object managed via this API, i.e.
static void av_refstruct_pool_uninit(AVRefStructPool **poolp)
Mark the pool as being available for freeing.
A reference to a data buffer.
uint8_t * data
The data buffer.
main external API structure.
enum AVPixelFormat sw_pix_fmt
Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx.
AVBufferRef * hw_frames_ctx
A reference to the AVHWFramesContext describing the input (for encoding) or output (decoding) frames.
struct AVCodecInternal * internal
Private context used for internal data.
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
void * hwaccel_priv_data
hwaccel-specific private data
This structure describes decoded (raw) audio or video data.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
This struct aggregates all the (hardware/vendor-specific) "high-level" state, i.e.
void * hwctx
The format-specific data, allocated and freed by libavutil along with this context.
This struct describes a set or pool of "hardware" frames (i.e.
enum AVPixelFormat format
The pixel format identifying the underlying HW surface type.
void * hwctx
The format-specific data, allocated and freed automatically along with this context.
enum AVPixelFormat sw_format
The pixel format identifying the actual data layout of the hardware frames.
int width
The allocated dimensions of the frames in this pool.
uint64_t flags
Combination of AV_PIX_FMT_FLAG_... flags.
uint8_t nb_components
The number of components each pixel has, (1-4)
AVRefStructPool is an API for a thread-safe pool of objects managed via the RefStruct API.
VkImageLayout layout[AV_NUM_DATA_POINTERS]
VkAccessFlagBits2 access[AV_NUM_DATA_POINTERS]
Updated after every barrier.
VkImage img[AV_NUM_DATA_POINTERS]
Vulkan images to which the memory is bound to.
Main Vulkan context, allocated as AVHWDeviceContext.hwctx.
VkDevice act_dev
Active device.
Allocated as AVHWFramesContext.hwctx, used to set pool-specific options.
VkImageTiling tiling
Controls the tiling of allocated frames.
VkImageCreateFlags img_flags
Flags to set during image creation.
VkImageUsageFlagBits usage
Defines extra usage of output frames.
VkMemoryPropertyFlagBits flags
FFVulkanDecodeShared * shared_ctx
PFN_vkInvalidateMappedMemoryRanges invalidate_memory_ranges
uint16_t context_count[8]
uint32_t extend_lookup[8]
AVRefStructPool * slice_fltmap_pool
AVRefStructPool * slice_feedback_pool
AVBufferRef * intermediate_frames_ref
AVRefStructPool * slice_state_pool
uint32_t slice_state_size
uint32_t plane_state_size
FFVkBuffer * slice_fltmap_buf
PFN_vkWaitSemaphores wait_semaphores
FFVkBuffer * slice_feedback_buf
RefStruct is an API for creating reference-counted objects with minimal overhead.
#define ff_vk_buf_barrier(dst, vkb, s_stage, s_access, s_access2, d_stage, d_access, d_access2, offs, bsz)
#define SPEC_LIST_ADD(name, idx, val_bits, val)
#define SPEC_LIST_CREATE(name, max_length, max_size)
static int ff_vk_count_images(AVVkFrame *f)
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_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_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.
void ff_vk_decode_free_frame(AVHWDeviceContext *dev_ctx, FFVulkanDecodePicture *vp)
Free a frame and its state.
int ff_vk_decode_uninit(AVCodecContext *avctx)
Free decoder.
static int vk_ffv1_end_frame(AVCodecContext *avctx)
const unsigned int ff_ffv1_dec_rgb_golomb_comp_spv_len
static int vk_ffv1_start_frame(AVCodecContext *avctx, const AVBufferRef *buffer_ref, av_unused const uint8_t *buffer, av_unused uint32_t size)
static int vk_decode_ffv1_init(AVCodecContext *avctx)
const unsigned char ff_ffv1_dec_setup_comp_spv_data[]
const unsigned int ff_ffv1_dec_bayer_golomb_comp_spv_len
const unsigned char ff_ffv1_dec_comp_spv_data[]
const unsigned char ff_ffv1_dec_golomb_comp_spv_data[]
const unsigned int ff_ffv1_dec_comp_spv_len
static void vk_ffv1_free_frame_priv(AVRefStructOpaque _hwctx, void *data)
const unsigned int ff_ffv1_dec_rgb_float_comp_spv_len
const unsigned int ff_ffv1_dec_reset_golomb_comp_spv_len
const unsigned char ff_ffv1_dec_bayer_golomb_comp_spv_data[]
static int vk_ffv1_decode_slice(AVCodecContext *avctx, const uint8_t *data, uint32_t size)
const unsigned int ff_ffv1_dec_bayer_comp_spv_len
const FFVulkanDecodeDescriptor ff_vk_dec_ffv1_desc
const unsigned int ff_ffv1_dec_reset_comp_spv_len
const unsigned int ff_ffv1_dec_setup_comp_spv_len
const unsigned char ff_ffv1_dec_reset_comp_spv_data[]
static void vk_decode_ffv1_uninit(FFVulkanDecodeShared *ctx)
const unsigned int ff_ffv1_dec_golomb_comp_spv_len
static int init_reset_shader(FFV1Context *f, FFVulkanContext *s, FFVkExecPool *pool, FFVulkanShader *shd, VkSpecializationInfo *sl, int ac)
const unsigned char ff_ffv1_dec_bayer_comp_spv_data[]
const unsigned char ff_ffv1_dec_reset_golomb_comp_spv_data[]
const unsigned int ff_ffv1_dec_rgb_float_golomb_comp_spv_len
static int init_decode_shader(FFV1Context *f, FFVulkanContext *s, FFVkExecPool *pool, FFVulkanShader *shd, AVHWFramesContext *dec_frames_ctx, AVHWFramesContext *out_frames_ctx, VkSpecializationInfo *sl, int ac, int rgb, int bayer)
const unsigned char ff_ffv1_dec_rgb_comp_spv_data[]
const unsigned char ff_ffv1_dec_rgb_float_comp_spv_data[]
const unsigned char ff_ffv1_dec_rgb_float_golomb_comp_spv_data[]
static int init_indirect(AVCodecContext *avctx, FFVulkanContext *s, AVBufferRef **dst, enum AVPixelFormat sw_format)
const unsigned int ff_ffv1_dec_rgb_comp_spv_len
const unsigned char ff_ffv1_dec_rgb_golomb_comp_spv_data[]
static int init_setup_shader(FFV1Context *f, FFVulkanContext *s, FFVkExecPool *pool, FFVulkanShader *shd, VkSpecializationInfo *sl)
#define FF_VK_EXT_EXTERNAL_HOST_MEMORY