FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
vf_scale_vulkan.c File Reference
#include "libavutil/random_seed.h"
#include "libavutil/opt.h"
#include "libavutil/vulkan_spirv.h"
#include "vulkan_filter.h"
#include "scale_eval.h"
#include "filters.h"
#include "colorspace.h"
#include "video.h"

Go to the source code of this file.

Data Structures

struct  ScaleVulkanContext
 

Macros

#define OFFSET(x)   offsetof(ScaleVulkanContext, x)
 
#define FLAGS   (AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM)
 

Enumerations

enum  ScalerFunc { F_BILINEAR = 0, F_NEAREST, F_NB }
 
enum  DebayerFunc { DB_BILINEAR = 0, DB_BILINEAR_HQ, DB_NB }
 

Functions

static int init_scale_shader (AVFilterContext *ctx, FFVulkanShader *shd, FFVulkanDescriptorSetBinding *desc, AVFrame *in)
 
static av_cold int init_filter (AVFilterContext *ctx, AVFrame *in)
 
static av_cold int init_debayer (AVFilterContext *ctx, AVFrame *in)
 
static int scale_vulkan_filter_frame (AVFilterLink *link, AVFrame *in)
 
static int scale_vulkan_config_output (AVFilterLink *outlink)
 
static void scale_vulkan_uninit (AVFilterContext *avctx)
 
 AVFILTER_DEFINE_CLASS (scale_vulkan)
 

Variables

const unsigned char ff_debayer_comp_spv_data []
 
const unsigned int ff_debayer_comp_spv_len
 
static const char scale_bilinear []
 
static const char rgb2yuv []
 
static const char write_nv12 []
 
static const char write_420 []
 
static const char write_444 []
 
static const AVOption scale_vulkan_options []
 
static const AVFilterPad scale_vulkan_inputs []
 
static const AVFilterPad scale_vulkan_outputs []
 
const FFFilter ff_vf_scale_vulkan
 

Macro Definition Documentation

◆ OFFSET

#define OFFSET (   x)    offsetof(ScaleVulkanContext, x)

Definition at line 479 of file vf_scale_vulkan.c.

◆ FLAGS

Definition at line 480 of file vf_scale_vulkan.c.

Enumeration Type Documentation

◆ ScalerFunc

enum ScalerFunc
Enumerator
F_BILINEAR 
F_NEAREST 
F_NB 

Definition at line 33 of file vf_scale_vulkan.c.

◆ DebayerFunc

Enumerator
DB_BILINEAR 
DB_BILINEAR_HQ 
DB_NB 

Definition at line 40 of file vf_scale_vulkan.c.

Function Documentation

◆ init_scale_shader()

static int init_scale_shader ( AVFilterContext ctx,
FFVulkanShader shd,
FFVulkanDescriptorSetBinding desc,
AVFrame in 
)
static

Definition at line 126 of file vf_scale_vulkan.c.

Referenced by init_filter().

◆ init_filter()

static av_cold int init_filter ( AVFilterContext ctx,
AVFrame in 
)
static

Definition at line 199 of file vf_scale_vulkan.c.

Referenced by scale_vulkan_filter_frame().

◆ init_debayer()

static av_cold int init_debayer ( AVFilterContext ctx,
AVFrame in 
)
static

Definition at line 296 of file vf_scale_vulkan.c.

Referenced by scale_vulkan_filter_frame().

◆ scale_vulkan_filter_frame()

static int scale_vulkan_filter_frame ( AVFilterLink link,
AVFrame in 
)
static

Definition at line 342 of file vf_scale_vulkan.c.

◆ scale_vulkan_config_output()

static int scale_vulkan_config_output ( AVFilterLink outlink)
static

Definition at line 401 of file vf_scale_vulkan.c.

◆ scale_vulkan_uninit()

static void scale_vulkan_uninit ( AVFilterContext avctx)
static

Definition at line 461 of file vf_scale_vulkan.c.

◆ AVFILTER_DEFINE_CLASS()

AVFILTER_DEFINE_CLASS ( scale_vulkan  )

Variable Documentation

◆ ff_debayer_comp_spv_data

const unsigned char ff_debayer_comp_spv_data[]

Referenced by init_debayer().

◆ ff_debayer_comp_spv_len

const unsigned int ff_debayer_comp_spv_len

Referenced by init_debayer().

◆ scale_bilinear

const char scale_bilinear[]
static
Initial value:
= {
C(0, vec4 scale_bilinear(int idx, ivec2 pos, vec2 crop_range, vec2 crop_off))
C(0, { )
C(1, vec2 npos = (vec2(pos) + 0.5f) / imageSize(output_img[idx]); )
C(1, npos *= crop_range; )
C(1, npos += crop_off; )
C(1, return texture(input_img[idx], npos); )
C(0, } )
}

Definition at line 74 of file vf_scale_vulkan.c.

Referenced by init_scale_shader().

◆ rgb2yuv

const char rgb2yuv[]
static
Initial value:
= {
C(0, vec4 rgb2yuv(vec4 src, int fullrange) )
C(0, { )
C(1, src *= yuv_matrix; )
C(1, if (fullrange == 1) { )
C(2, src += vec4(0.0, 0.5, 0.5, 0.0); )
C(1, } else { )
C(2, src *= vec4(219.0 / 255.0, 224.0 / 255.0, 224.0 / 255.0, 1.0); )
C(2, src += vec4(16.0 / 255.0, 128.0 / 255.0, 128.0 / 255.0, 0.0); )
C(1, } )
C(1, return src; )
C(0, } )
}

Definition at line 84 of file vf_scale_vulkan.c.

Referenced by bayer_to_yv12_wrapper(), bgr24ToUV_c(), bgr24ToUV_half_c(), check_input_planar_rgb_to_a(), check_input_planar_rgb_to_uv(), check_input_planar_rgb_to_y(), check_rgb24toyv12(), check_rgb_to_y(), check_rgba_to_a(), create_filtergraph(), ff_fill_rgb2yuv_table(), ff_rgb24toyv12_c(), ff_update_palette(), gbr24pToUV_half_c(), init_filter(), init_scale_shader(), p01x_wrapper(), planar_rgb_to_uv(), planar_rgb_to_uv_lasx(), planar_rgb_to_y(), planar_rgb_to_y_lasx(), planar_rgbf16_to_uv(), planar_rgbf16_to_y(), planar_rgbf32_to_uv(), planar_rgbf32_to_y(), rgb16_32ToUV_c_template(), rgb16_32ToUV_half_c_template(), rgb16_32ToY_c_template(), rgb24ToUV_c(), rgb24ToUV_half_c(), rgb24ToY_c(), rgb24toyv12(), rgb48ToUV_c_template(), rgb48ToUV_half_c_template(), rgb48ToY_c_template(), rgb64ToUV_c_template(), rgb64ToUV_half_c_template(), rgb64ToY_c_template(), rgbaf16ToUV_endian(), rgbaf16ToUV_half_endian(), rgbaf16ToY_endian(), rgbf16ToUV_endian(), rgbf16ToUV_half_endian(), rgbf16ToY_endian(), rgbf32_to_uv_c(), rgbf32_to_y_c(), tonemap_opencl_init(), yv12_copy(), and yv12_interpolate().

◆ write_nv12

const char write_nv12[]
static
Initial value:
= {
C(0, void write_nv12(vec4 src, ivec2 pos) )
C(0, { )
C(1, imageStore(output_img[0], pos, vec4(src.r, 0.0, 0.0, 0.0)); )
C(1, pos /= ivec2(2); )
C(1, imageStore(output_img[1], pos, vec4(src.g, src.b, 0.0, 0.0)); )
C(0, } )
}

Definition at line 98 of file vf_scale_vulkan.c.

Referenced by init_scale_shader().

◆ write_420

const char write_420[]
static
Initial value:
= {
C(0, void write_420(vec4 src, ivec2 pos) )
C(0, { )
C(1, imageStore(output_img[0], pos, vec4(src.r, 0.0, 0.0, 0.0)); )
C(1, pos /= ivec2(2); )
C(1, imageStore(output_img[1], pos, vec4(src.g, 0.0, 0.0, 0.0)); )
C(1, imageStore(output_img[2], pos, vec4(src.b, 0.0, 0.0, 0.0)); )
C(0, } )
}

Definition at line 107 of file vf_scale_vulkan.c.

Referenced by init_scale_shader().

◆ write_444

const char write_444[]
static
Initial value:
= {
C(0, void write_444(vec4 src, ivec2 pos) )
C(0, { )
C(1, imageStore(output_img[0], pos, vec4(src.r, 0.0, 0.0, 0.0)); )
C(1, imageStore(output_img[1], pos, vec4(src.g, 0.0, 0.0, 0.0)); )
C(1, imageStore(output_img[2], pos, vec4(src.b, 0.0, 0.0, 0.0)); )
C(0, } )
}

Definition at line 117 of file vf_scale_vulkan.c.

Referenced by init_scale_shader().

◆ scale_vulkan_options

const AVOption scale_vulkan_options[]
static
Initial value:
= {
{ "w", "Output video width", OFFSET(w_expr), AV_OPT_TYPE_STRING, {.str = "iw"}, .flags = FLAGS },
{ "h", "Output video height", OFFSET(h_expr), AV_OPT_TYPE_STRING, {.str = "ih"}, .flags = FLAGS },
{ "scaler", "Scaler function", OFFSET(scaler), AV_OPT_TYPE_INT, {.i64 = F_BILINEAR}, 0, F_NB, .flags = FLAGS, .unit = "scaler" },
{ "bilinear", "Bilinear interpolation (fastest)", 0, AV_OPT_TYPE_CONST, {.i64 = F_BILINEAR}, 0, 0, .flags = FLAGS, .unit = "scaler" },
{ "nearest", "Nearest (useful for pixel art)", 0, AV_OPT_TYPE_CONST, {.i64 = F_NEAREST}, 0, 0, .flags = FLAGS, .unit = "scaler" },
{ "debayer", "Debayer algorithm to use", OFFSET(debayer), AV_OPT_TYPE_INT, {.i64 = DB_BILINEAR_HQ}, 0, DB_NB, .flags = FLAGS, .unit = "debayer" },
{ "bilinear", "Bilinear debayering (fastest)", 0, AV_OPT_TYPE_CONST, {.i64 = DB_BILINEAR}, 0, 0, .flags = FLAGS, .unit = "debayer" },
{ "bilinear_hq", "Bilinear debayering (high quality)", 0, AV_OPT_TYPE_CONST, {.i64 = DB_BILINEAR_HQ}, 0, 0, .flags = FLAGS, .unit = "debayer" },
{ "format", "Output video format (software format of hardware frames)", OFFSET(out_format_string), AV_OPT_TYPE_STRING, .flags = FLAGS },
{ "out_range", "Output colour range (from 0 to 2) (default 0)", OFFSET(out_range), AV_OPT_TYPE_INT, {.i64 = AVCOL_RANGE_UNSPECIFIED}, AVCOL_RANGE_UNSPECIFIED, AVCOL_RANGE_JPEG, .flags = FLAGS, .unit = "range" },
{ "full", "Full range", 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_RANGE_JPEG }, 0, 0, FLAGS, .unit = "range" },
{ "limited", "Limited range", 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_RANGE_MPEG }, 0, 0, FLAGS, .unit = "range" },
{ "jpeg", "Full range", 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_RANGE_JPEG }, 0, 0, FLAGS, .unit = "range" },
{ "mpeg", "Limited range", 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_RANGE_MPEG }, 0, 0, FLAGS, .unit = "range" },
{ "tv", "Limited range", 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_RANGE_MPEG }, 0, 0, FLAGS, .unit = "range" },
{ "pc", "Full range", 0, AV_OPT_TYPE_CONST, { .i64 = AVCOL_RANGE_JPEG }, 0, 0, FLAGS, .unit = "range" },
{ NULL },
}

Definition at line 481 of file vf_scale_vulkan.c.

◆ scale_vulkan_inputs

const AVFilterPad scale_vulkan_inputs[]
static
Initial value:
= {
{
.name = "default",
.filter_frame = &scale_vulkan_filter_frame,
.config_props = &ff_vk_filter_config_input,
},
}

Definition at line 503 of file vf_scale_vulkan.c.

◆ scale_vulkan_outputs

const AVFilterPad scale_vulkan_outputs[]
static
Initial value:
= {
{
.name = "default",
.config_props = &scale_vulkan_config_output,
},
}

Definition at line 512 of file vf_scale_vulkan.c.

◆ ff_vf_scale_vulkan

const FFFilter ff_vf_scale_vulkan
Initial value:
= {
.p.name = "scale_vulkan",
.p.description = NULL_IF_CONFIG_SMALL("Scale Vulkan frames"),
.p.priv_class = &scale_vulkan_class,
.priv_size = sizeof(ScaleVulkanContext),
.flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE,
}

Definition at line 520 of file vf_scale_vulkan.c.

DB_NB
@ DB_NB
Definition: vf_scale_vulkan.c:44
FILTER_INPUTS
#define FILTER_INPUTS(array)
Definition: filters.h:263
OFFSET
#define OFFSET(x)
Definition: vf_scale_vulkan.c:479
ff_vk_filter_init
int ff_vk_filter_init(AVFilterContext *avctx)
General lavfi IO functions.
Definition: vulkan_filter.c:233
AVCOL_RANGE_JPEG
@ AVCOL_RANGE_JPEG
Full range content.
Definition: pixfmt.h:777
scale_vulkan_outputs
static const AVFilterPad scale_vulkan_outputs[]
Definition: vf_scale_vulkan.c:512
b
#define b
Definition: input.c:42
DB_BILINEAR_HQ
@ DB_BILINEAR_HQ
Definition: vf_scale_vulkan.c:42
rgb2yuv
static const char rgb2yuv[]
Definition: vf_scale_vulkan.c:84
write_nv12
static const char write_nv12[]
Definition: vf_scale_vulkan.c:98
write_420
static const char write_420[]
Definition: vf_scale_vulkan.c:107
AV_PIX_FMT_VULKAN
@ AV_PIX_FMT_VULKAN
Vulkan hardware images.
Definition: pixfmt.h:379
C
s EdgeDetect Foobar g libavfilter vf_edgedetect c libavfilter vf_foobar c edit libavfilter and add an entry for foobar following the pattern of the other filters edit libavfilter allfilters and add an entry for foobar following the pattern of the other filters configure make j< whatever > ffmpeg ffmpeg i you should get a foobar png with Lena edge detected That s your new playground is ready Some little details about what s going which in turn will define variables for the build system and the C
Definition: writing_filters.txt:58
F_NEAREST
@ F_NEAREST
Definition: vf_scale_vulkan.c:35
F_BILINEAR
@ F_BILINEAR
Definition: vf_scale_vulkan.c:34
g
const char * g
Definition: vf_curves.c:128
scale_vulkan_filter_frame
static int scale_vulkan_filter_frame(AVFilterLink *link, AVFrame *in)
Definition: vf_scale_vulkan.c:342
FILTER_OUTPUTS
#define FILTER_OUTPUTS(array)
Definition: filters.h:264
NULL
#define NULL
Definition: coverity.c:32
scale_vulkan_uninit
static void scale_vulkan_uninit(AVFilterContext *avctx)
Definition: vf_scale_vulkan.c:461
F_NB
@ F_NB
Definition: vf_scale_vulkan.c:37
FLAGS
#define FLAGS
Definition: vf_scale_vulkan.c:480
AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_UNSPECIFIED
Definition: pixfmt.h:743
FF_FILTER_FLAG_HWFRAME_AWARE
#define FF_FILTER_FLAG_HWFRAME_AWARE
The filter is aware of hardware frames, and any hardware frame context should not be automatically pr...
Definition: filters.h:207
f
f
Definition: af_crystalizer.c:122
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:550
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:94
AVFILTER_FLAG_HWDEVICE
#define AVFILTER_FLAG_HWDEVICE
The filter can create hardware frames using AVFilterContext.hw_device_ctx.
Definition: avfilter.h:188
uninit
static void uninit(AVBSFContext *ctx)
Definition: pcm_rechunk.c:68
scale_bilinear
static const char scale_bilinear[]
Definition: vf_scale_vulkan.c:74
write_444
static const char write_444[]
Definition: vf_scale_vulkan.c:117
scale_vulkan_inputs
static const AVFilterPad scale_vulkan_inputs[]
Definition: vf_scale_vulkan.c:503
AVCOL_RANGE_MPEG
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
Definition: pixfmt.h:760
pos
unsigned int pos
Definition: spdifenc.c:414
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition: opt.h:259
ScaleVulkanContext
Definition: vf_scale_vulkan.c:47
ff_vk_filter_config_input
int ff_vk_filter_config_input(AVFilterLink *inlink)
Definition: vulkan_filter.c:176
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:200
scale_vulkan_config_output
static int scale_vulkan_config_output(AVFilterLink *outlink)
Definition: vf_scale_vulkan.c:401
DB_BILINEAR
@ DB_BILINEAR
Definition: vf_scale_vulkan.c:41
AV_OPT_TYPE_STRING
@ AV_OPT_TYPE_STRING
Underlying C type is a uint8_t* that is either NULL or points to a C string allocated with the av_mal...
Definition: opt.h:276
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
Definition: opt.h:299
FILTER_SINGLE_PIXFMT
#define FILTER_SINGLE_PIXFMT(pix_fmt_)
Definition: filters.h:253
src
#define src
Definition: vp8dsp.c:248