45#define ENTRY(fname, ...) extern void fname(void);
53#define ENTRY(fname, ...) { .func = fname, .params = __VA_ARGS__ },
86 for (
int i = 0;
i < 4;
i++) {
87 for (
int j = 0; j < 5; j++) {
88 const int jj = (j == 0) ? 4 : (j - 1);
89 if (!(p->par.lin.zero &
SWS_MASK(
i, jj))) {
124 -7, -6, -5, -4, -3, -2, -1, 0,
125 -7, -6, -5, -4, -3, -2, -1, 0,
133 7, 6, 5, 4, 3, 2, 1, 0,
134 7, 6, 5, 4, 3, 2, 1, 0,
175 .block_size = block_size,
197 void ff_sws_process_0001_neon(
void);
198 void ff_sws_process_0011_neon(
void);
199 void ff_sws_process_0111_neon(
void);
200 void ff_sws_process_1111_neon(
void);
204 case 1: process_func = (
SwsOpFunc) ff_sws_process_0001_neon;
break;
205 case 2: process_func = (
SwsOpFunc) ff_sws_process_0011_neon;
break;
206 case 3: process_func = (
SwsOpFunc) ff_sws_process_0111_neon;
break;
207 case 4: process_func = (
SwsOpFunc) ff_sws_process_1111_neon;
break;
210 out->func = process_func;
static int aarch64_setup_dither(const SwsUOp *uop, SwsImplResult *res)
static int aarch64_setup(const SwsUOp *uop, const SwsAArch64OpImplParams *p, SwsImplResult *out)
static int aarch64_setup_linear(const SwsAArch64OpImplParams *p, const SwsUOp *uop, SwsImplResult *res)
static int aarch64_compile_uops(SwsContext *ctx, const SwsUOpList *uops, SwsCompiledOp *out)
static int aarch64_compile(SwsContext *ctx, const SwsOpList *ops, SwsCompiledOp *out)
static const struct @070174075374214234277303002223103136214276265127 ops_entries[]
SwsAArch64OpImplParams params
const SwsOpBackend backend_aarch64
static SwsFuncPtr aarch64_lookup(const SwsAArch64OpImplParams *p)
static AVFormatContext * ctx
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define flags(name, subs,...)
#define i(width, name, range_min, range_max)
@ SWS_BACKEND_AARCH64
Chained AArch64 NEON kernels.
int(* func)(AVBPrint *dst, const char *in, const char *arg)
static atomic_int cpu_flags
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
int ff_sws_op_chain_append(SwsOpChain *chain, SwsFuncPtr func, void(*free)(SwsOpPriv *), const SwsOpPriv *priv)
int ff_sws_setup_vec4(const SwsImplParams *params, SwsImplResult *out)
SwsOpChain * ff_sws_op_chain_alloc(void)
Copyright (C) 2025 Niklas Haas.
void ff_sws_op_chain_free_cb(void *ptr)
int ff_sws_setup_scalar(const SwsImplParams *params, SwsImplResult *out)
static void ff_sws_op_chain_free(SwsOpChain *chain)
static void ff_op_priv_unref(SwsOpPriv *priv)
void(* SwsFuncPtr)(void)
Per-kernel execution context.
static void ff_op_priv_free(SwsOpPriv *priv)
void(* SwsOpFunc)(const SwsOpExec *exec, const void *priv, int bx_start, int y_start, int bx_end, int y_end)
Process a given range of pixel blocks.
static int linear_num_vregs(const SwsAArch64OpImplParams *params)
#define offsetof_exec_out_bump
#define offsetof_exec_in
These values will be used by ops_asmgen to access fields inside of SwsOpExec and SwsOpImpl.
#define offsetof_exec_out
#define offsetof_exec_in_bump
#define offsetof_impl_priv
#define offsetof_impl_cont
static void convert_to_aarch64_impl(const SwsUOp *uop, int block_size, SwsAArch64OpImplParams *out)
NOTE: This file is #include'd directly by both the NEON backend and the sws_ops_aarch64 tool.
void * av_refstruct_ref(void *obj)
Create a new reference to an object managed via this API, i.e.
#define FF_ARRAY_ELEMS(a)
SwsAArch64OpImplParams describes the parameters for an SwsUOpType operation.
Main external API structure.
void(* free)(SwsOpPriv *priv)
Compiled "chain" of operations, which can be dispatched efficiently.
void(* free[SWS_MAX_OPS+1])(SwsOpPriv *)
Copyright (C) 2026 Niklas Haas.
Helper struct for representing a list of operations.
union SwsUOp::@242237116251216327057105100216205033300341206345 data
static void error(const char *err)
Private data for each kernel.
int ff_sws_ops_translate(SwsContext *ctx, const SwsOpList *ops, SwsUOpFlags flags, SwsUOpList *uops)
Translate a list of operations down to micro-ops, which can be further optimized and then directly ex...
SwsUOpList * ff_sws_uop_list_alloc(void)
void ff_sws_uop_list_free(SwsUOpList **p_ops)