FFmpeg
Macros | Functions | Variables
ops_optimizer.c File Reference
#include "libavutil/avassert.h"
#include <libavutil/bswap.h>
#include "libavutil/rational.h"
#include "ops.h"
#include "ops_internal.h"

Go to the source code of this file.

Macros

#define RET(x)
 Copyright (C) 2025 Niklas Haas. More...
 

Functions

static bool op_type_is_independent (SwsOpType op)
 
static unsigned merge_comp_flags (unsigned a, unsigned b)
 
void ff_sws_op_list_update_comps (SwsOpList *ops)
 Infer + propagate known information about components. More...
 
static int exact_log2 (const int x)
 
static int exact_log2_q (const AVRational x)
 
static bool extract_scalar (const SwsLinearOp *c, SwsComps prev, SwsComps next, SwsConst *out_scale)
 If a linear operation can be reduced to a scalar multiplication, returns the corresponding scaling factor, or 0 otherwise. More...
 
static bool extract_constant_rows (SwsLinearOp *c, SwsComps prev, SwsConst *out_clear)
 
static bool extract_swizzle (SwsLinearOp *op, SwsComps prev, SwsSwizzleOp *out_swiz)
 
int ff_sws_op_list_optimize (SwsOpList *ops)
 Fuse compatible and eliminate redundant operations, as well as replacing some operations with more efficient alternatives. More...
 
int ff_sws_solve_shuffle (const SwsOpList *const ops, uint8_t shuffle[], int size, uint8_t clear_val, int *read_bytes, int *write_bytes)
 "Solve" an op list into a fixed shuffle mask, with an optional ability to also directly clear the output value (for e.g. More...
 

Variables

static const unsigned flags_identity = SWS_COMP_ZERO | SWS_COMP_EXACT
 

Macro Definition Documentation

◆ RET

#define RET (   x)
Value:
do { \
if ((ret = (x)) < 0) \
return ret; \
} while (0)

Copyright (C) 2025 Niklas Haas.

This file is part of FFmpeg.

FFmpeg is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

FFmpeg is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with FFmpeg; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

Definition at line 28 of file ops_optimizer.c.

Function Documentation

◆ op_type_is_independent()

static bool op_type_is_independent ( SwsOpType  op)
static

Definition at line 36 of file ops_optimizer.c.

Referenced by ff_sws_op_list_optimize().

◆ merge_comp_flags()

static unsigned merge_comp_flags ( unsigned  a,
unsigned  b 
)
static

Definition at line 67 of file ops_optimizer.c.

Referenced by ff_sws_op_list_update_comps().

◆ ff_sws_op_list_update_comps()

void ff_sws_op_list_update_comps ( SwsOpList ops)

Infer + propagate known information about components.

Called automatically when needed by the optimizer and compiler.

Definition at line 75 of file ops_optimizer.c.

Referenced by ff_sws_op_list_optimize().

◆ exact_log2()

static int exact_log2 ( const int  x)
static

Definition at line 305 of file ops_optimizer.c.

Referenced by exact_log2_q().

◆ exact_log2_q()

static int exact_log2_q ( const AVRational  x)
static

Definition at line 314 of file ops_optimizer.c.

Referenced by ff_sws_op_list_optimize().

◆ extract_scalar()

static bool extract_scalar ( const SwsLinearOp c,
SwsComps  prev,
SwsComps  next,
SwsConst out_scale 
)
static

If a linear operation can be reduced to a scalar multiplication, returns the corresponding scaling factor, or 0 otherwise.

Definition at line 328 of file ops_optimizer.c.

Referenced by ff_sws_op_list_optimize().

◆ extract_constant_rows()

static bool extract_constant_rows ( SwsLinearOp c,
SwsComps  prev,
SwsConst out_clear 
)
static

Definition at line 352 of file ops_optimizer.c.

Referenced by ff_sws_op_list_optimize().

◆ extract_swizzle()

static bool extract_swizzle ( SwsLinearOp op,
SwsComps  prev,
SwsSwizzleOp out_swiz 
)
static

Definition at line 380 of file ops_optimizer.c.

Referenced by ff_sws_op_list_optimize().

◆ ff_sws_op_list_optimize()

int ff_sws_op_list_optimize ( SwsOpList ops)

Fuse compatible and eliminate redundant operations, as well as replacing some operations with more efficient alternatives.

Definition at line 412 of file ops_optimizer.c.

◆ ff_sws_solve_shuffle()

int ff_sws_solve_shuffle ( const SwsOpList ops,
uint8_t  shuffle[],
int  size,
uint8_t  clear_val,
int *  read_bytes,
int *  write_bytes 
)

"Solve" an op list into a fixed shuffle mask, with an optional ability to also directly clear the output value (for e.g.

rgb24 -> rgb0). This can accept any operation chain that only consists of the following operations:

  • SWS_OP_READ (non-planar, non-fractional)
  • SWS_OP_SWIZZLE
  • SWS_OP_SWAP_BYTES
  • SWS_OP_CLEAR to zero (when clear_val is specified)
  • SWS_OP_CONVERT (integer expand)
  • SWS_OP_WRITE (non-planar, non-fractional)

Basically, any operation that purely consists of moving around and reordering bytes within a single plane, can be turned into a shuffle mask.

Parameters
opsThe operation list to decompose.
shuffleThe output shuffle mask.
sizeThe size (in bytes) of the output shuffle mask.
clear_valIf nonzero, this index will be used to clear the output.
read_bytesReturns the number of bytes read per shuffle iteration.
write_bytesReturns the number of bytes written per shuffle iteration.
Returns
The number of pixels processed per iteration, or a negative error code; in particular AVERROR(ENOTSUP) for unsupported operations.

Definition at line 774 of file ops_optimizer.c.

Referenced by solve_shuffle().

Variable Documentation

◆ flags_identity

const unsigned flags_identity = SWS_COMP_ZERO | SWS_COMP_EXACT
static

Definition at line 66 of file ops_optimizer.c.

Referenced by ff_sws_op_list_update_comps().

ret
ret
Definition: filter_design.txt:187