FFmpeg
Data Structures | Functions
ops_dispatch.c File Reference
#include "libavutil/avassert.h"
#include "libavutil/cpu.h"
#include "libavutil/mathematics.h"
#include "libavutil/mem.h"
#include "libavutil/mem_internal.h"
#include "libavutil/refstruct.h"
#include "ops.h"
#include "ops_internal.h"
#include "ops_dispatch.h"

Go to the source code of this file.

Data Structures

struct  SwsOpPass
 Copyright (C) 2025 Niklas Haas. More...
 

Functions

static int compile_backend (SwsContext *ctx, const SwsOpBackend *backend, const SwsOpList *ops, SwsCompiledOp *out)
 
int ff_sws_ops_compile (SwsContext *ctx, const SwsOpBackend *backend, const SwsOpList *ops, SwsCompiledOp *out)
 Attempt to compile a list of operations using a specific backend, or the best available backend if backend is NULL. More...
 
void ff_sws_compiled_op_unref (SwsCompiledOp *comp)
 
static void op_pass_free (void *ptr)
 
static void get_row_data (const SwsOpPass *p, const int y_dst, const uint8_t *in[4], uint8_t *out[4])
 
static size_t pixel_bytes (size_t pixels, int pixel_bits, enum AVRounding rounding)
 
static size_t safe_bytes_pad (int linesize, int plane_pad)
 
static size_t safe_blocks_offset (size_t num_blocks, unsigned block_size, ptrdiff_t safe_offset, const int32_t *offset_bytes)
 
static int op_pass_setup (const SwsFrame *out, const SwsFrame *in, const SwsPass *pass)
 
static void copy_lines (uint8_t *dst, const size_t dst_stride, const uint8_t *src, const size_t src_stride, const int h, const size_t bytes)
 
static void op_pass_run (const SwsFrame *out, const SwsFrame *in, const int y, const int h, const SwsPass *pass)
 
static int rw_planes (const SwsOp *op)
 
static int rw_pixel_bits (const SwsOp *op)
 
static void align_pass (SwsPass *pass, int block_size, int over_rw, int pixel_bits)
 
static int compile (SwsGraph *graph, const SwsOpBackend *backend, const SwsOpList *ops, SwsPass *input, SwsPass **output)
 
int ff_sws_compile_pass (SwsGraph *graph, const SwsOpBackend *backend, SwsOpList **pops, int flags, SwsPass *input, SwsPass **output)
 Resolves an operation list to a graph pass. More...
 

Function Documentation

◆ compile_backend()

static int compile_backend ( SwsContext ctx,
const SwsOpBackend backend,
const SwsOpList ops,
SwsCompiledOp out 
)
static

Definition at line 57 of file ops_dispatch.c.

Referenced by ff_sws_ops_compile().

◆ ff_sws_ops_compile()

int ff_sws_ops_compile ( SwsContext ctx,
const SwsOpBackend backend,
const SwsOpList ops,
SwsCompiledOp out 
)

Attempt to compile a list of operations using a specific backend, or the best available backend if backend is NULL.

Returns 0 on success, or a negative error code on failure.

Definition at line 93 of file ops_dispatch.c.

Referenced by check_ops(), and compile().

◆ ff_sws_compiled_op_unref()

void ff_sws_compiled_op_unref ( SwsCompiledOp comp)

Definition at line 113 of file ops_dispatch.c.

Referenced by check_ops(), and op_pass_free().

◆ op_pass_free()

static void op_pass_free ( void *  ptr)
static

Definition at line 121 of file ops_dispatch.c.

Referenced by compile().

◆ get_row_data()

static void get_row_data ( const SwsOpPass p,
const int  y_dst,
const uint8_t *  in[4],
uint8_t *  out[4] 
)
inlinestatic

Definition at line 135 of file ops_dispatch.c.

Referenced by op_pass_run().

◆ pixel_bytes()

static size_t pixel_bytes ( size_t  pixels,
int  pixel_bits,
enum AVRounding  rounding 
)
inlinestatic

Definition at line 146 of file ops_dispatch.c.

Referenced by op_pass_setup().

◆ safe_bytes_pad()

static size_t safe_bytes_pad ( int  linesize,
int  plane_pad 
)
static

Definition at line 163 of file ops_dispatch.c.

Referenced by op_pass_setup().

◆ safe_blocks_offset()

static size_t safe_blocks_offset ( size_t  num_blocks,
unsigned  block_size,
ptrdiff_t  safe_offset,
const int32_t offset_bytes 
)
static

Definition at line 170 of file ops_dispatch.c.

Referenced by op_pass_setup().

◆ op_pass_setup()

static int op_pass_setup ( const SwsFrame out,
const SwsFrame in,
const SwsPass pass 
)
static

Definition at line 180 of file ops_dispatch.c.

Referenced by compile().

◆ copy_lines()

static void copy_lines ( uint8_t *  dst,
const size_t  dst_stride,
const uint8_t *  src,
const size_t  src_stride,
const int  h,
const size_t  bytes 
)
static

Definition at line 346 of file ops_dispatch.c.

Referenced by op_pass_run().

◆ op_pass_run()

static void op_pass_run ( const SwsFrame out,
const SwsFrame in,
const int  y,
const int  h,
const SwsPass pass 
)
static

To ensure safety, we need to consider the following:

  1. We can overread the input, unless this is the last line of an unpadded buffer. All defined operations can handle arbitrary pixel input, so overread of arbitrary data is fine. For flipped images, this condition is actually inverted to where the first line is the one at the end of the buffer.
  2. We can overwrite the output, as long as we don't write more than the amount of pixels that fit into one linesize. So we always need to memcpy the last column on the output side if unpadded.

Definition at line 357 of file ops_dispatch.c.

Referenced by compile().

◆ rw_planes()

static int rw_planes ( const SwsOp op)
static

Definition at line 455 of file ops_dispatch.c.

Referenced by compile().

◆ rw_pixel_bits()

static int rw_pixel_bits ( const SwsOp op)
static

Definition at line 460 of file ops_dispatch.c.

Referenced by compile().

◆ align_pass()

static void align_pass ( SwsPass pass,
int  block_size,
int  over_rw,
int  pixel_bits 
)
static

Definition at line 469 of file ops_dispatch.c.

Referenced by compile().

◆ compile()

static int compile ( SwsGraph graph,
const SwsOpBackend backend,
const SwsOpList ops,
SwsPass input,
SwsPass **  output 
)
static

Definition at line 482 of file ops_dispatch.c.

Referenced by ff_sws_compile_pass().

◆ ff_sws_compile_pass()

int ff_sws_compile_pass ( SwsGraph graph,
const SwsOpBackend backend,
SwsOpList **  ops,
int  flags,
SwsPass input,
SwsPass **  output 
)

Resolves an operation list to a graph pass.

The first and last operations must be a read/write respectively.

Parameters
backendForce the use of a specific backend (Optional)
opsOperations to compile. Ownership passes to this function, and will be set to NULL, even on failure.
flagsSet of SwsOpCompileFlags
inputThe input for the compiled passes. (Optional)
outputThe resulting final output pass will be stored here. If NULL, no output passes are created, and any compiled functions are instead immediately freed.

Definition at line 594 of file ops_dispatch.c.

Referenced by print_passes().