mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2026-10-28 15:19:38 +03:00
Add the Vulkan optical-flow machinery on top of the filter skeleton: * a grayscale-extraction compute shader * the VK_NV_optical_flow session and its persistent input/flow images * the cross-queue (compute -> optical flow -> compute) submission with binary-semaphore ordering * an interpolation compute shader dispatched per output frame which blends each new frame instead of repeating the nearest source frame Notable characteristics: * At this stage we are doing a simple proportional blend that doesn't actually look at the optical flow information. That will happen in the next commit * The optical flow is stored in a weird nvidia specific fixed point image format. Yay? * Optical flow is calculated based purely on Luma. For YUV format, this is trivially obtained, but for RGB input, we should put some effort into getting accurate Luma. But we only need relative Luma differences, so we don't have to use the exactly correct colourspace conversion; I've just hard-coded BT.709 * We're doing host-synchronisation for initial simplicity, but this will get replaced in subsequent changes * The accepted format set is deliberately narrow to begin with: planar and semi-planar YUV, gray, and packed RGB whose sampled channels are already in component order. Subsequent changes will expand the support set. * We rely on VK_KHR_maintenance9 to enable implicit ownership transfers for images between the compute and optical flow queue families.
26 lines
1.5 KiB
Makefile
26 lines
1.5 KiB
Makefile
clean::
|
|
$(RM) $(CLEANSUFFIXES:%=libavfilter/vulkan/%)
|
|
|
|
OBJS-$(CONFIG_AVGBLUR_VULKAN_FILTER) += vulkan/avgblur.comp.spv.o
|
|
OBJS-$(CONFIG_BLACKDETECT_VULKAN_FILTER) += vulkan/blackdetect.comp.spv.o
|
|
OBJS-$(CONFIG_BLEND_VULKAN_FILTER) += vulkan/blend.comp.spv.o
|
|
OBJS-$(CONFIG_BWDIF_VULKAN_FILTER) += vulkan/bwdif.comp.spv.o
|
|
OBJS-$(CONFIG_CHROMABER_VULKAN_FILTER) += vulkan/chromaber.comp.spv.o
|
|
OBJS-$(CONFIG_COLOR_VULKAN_FILTER) += vulkan/color.comp.spv.o
|
|
OBJS-$(CONFIG_GBLUR_VULKAN_FILTER) += vulkan/gblur.comp.spv.o
|
|
OBJS-$(CONFIG_SCALE_VULKAN_FILTER) += vulkan/scale.comp.spv.o \
|
|
vulkan/debayer.comp.spv.o
|
|
OBJS-$(CONFIG_SCDET_VULKAN_FILTER) += vulkan/scdet.comp.spv.o
|
|
OBJS-$(CONFIG_OVERLAY_VULKAN_FILTER) += vulkan/overlay.comp.spv.o
|
|
OBJS-$(CONFIG_FLIP_VULKAN_FILTER) += vulkan/flip.comp.spv.o
|
|
OBJS-$(CONFIG_FRUC_VULKAN_FILTER) += vulkan/fruc_grayscale.comp.spv.o \
|
|
vulkan/fruc_interpolate.comp.spv.o
|
|
OBJS-$(CONFIG_TRANSPOSE_VULKAN_FILTER) += vulkan/transpose.comp.spv.o
|
|
OBJS-$(CONFIG_V360_VULKAN_FILTER) += vulkan/v360.comp.spv.o
|
|
OBJS-$(CONFIG_INTERLACE_VULKAN_FILTER) += vulkan/interlace.comp.spv.o
|
|
OBJS-$(CONFIG_XFADE_VULKAN_FILTER) += vulkan/xfade.comp.spv.o
|
|
OBJS-$(CONFIG_NLMEANS_VULKAN_FILTER) += vulkan/nlmeans_horizontal.comp.spv.o \
|
|
vulkan/nlmeans_vertical.comp.spv.o \
|
|
vulkan/nlmeans_weights.comp.spv.o \
|
|
vulkan/nlmeans_denoise.comp.spv.o
|