FFmpeg
ops.h
Go to the documentation of this file.
1 /**
2  * Copyright (C) 2025 Niklas Haas
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #ifndef SWSCALE_OPS_H
22 #define SWSCALE_OPS_H
23 
24 #include <assert.h>
25 #include <stdbool.h>
26 #include <stdalign.h>
27 
28 #include "libavutil/bprint.h"
29 
30 #include "graph.h"
31 #include "filters.h"
32 #include "uops.h"
33 
34 typedef enum SwsOpType {
36 
37  /* Defined for all types; but implemented for integers only */
38  SWS_OP_READ, /* gather raw pixels from planes */
39  SWS_OP_WRITE, /* write raw pixels to planes */
40  SWS_OP_SWAP_BYTES, /* swap byte order (for differing endianness) */
41  SWS_OP_SWIZZLE, /* rearrange channel order, or duplicate channels */
42 
43  /* Bit manipulation operations. Defined for integers only. */
44  SWS_OP_UNPACK, /* split tightly packed data into components */
45  SWS_OP_PACK, /* compress components into tightly packed data */
46  SWS_OP_LSHIFT, /* logical left shift of raw pixel values */
47  SWS_OP_RSHIFT, /* right shift of raw pixel values */
48 
49  /* Generic arithmetic. Defined and implemented for all types */
50  SWS_OP_CLEAR, /* clear pixel values */
51  SWS_OP_CONVERT, /* convert (cast) between formats */
52  SWS_OP_MIN, /* numeric minimum */
53  SWS_OP_MAX, /* numeric maximum */
54  SWS_OP_SCALE, /* multiplication by scalar */
55 
56  /* Floating-point only arithmetic operations. */
57  SWS_OP_LINEAR, /* generalized linear affine transform */
58  SWS_OP_DITHER, /* add dithering noise */
59 
60  /* Filtering operations. Always output floating point. */
61  SWS_OP_FILTER_H, /* horizontal filtering */
62  SWS_OP_FILTER_V, /* vertical filtering */
63 
65 } SwsOpType;
66 
67 const char *ff_sws_op_type_name(SwsOpType op);
68 
69 /* Compute SwsCompMask from values with denominator != 0 */
71 
72 typedef enum SwsCompFlags {
73  SWS_COMP_GARBAGE = 1 << 0, /* contents are undefined / garbage data */
74  SWS_COMP_EXACT = 1 << 1, /* value is an exact integer */
75  SWS_COMP_ZERO = 1 << 2, /* known to be a constant zero */
76  SWS_COMP_SWAPPED = 1 << 3, /* byte order is swapped */
77 } SwsCompFlags;
78 
79 typedef struct SwsComps {
80  SwsCompFlags flags[4]; /* knowledge about (output) component contents */
81 
82  /* Keeps track of the known possible value range, or {0, 0} for undefined
83  * or (unknown range) floating point inputs */
84  AVRational min[4], max[4];
85 } SwsComps;
86 
87 typedef enum SwsReadWriteMode {
88  /**
89  * Note: 1-component reads are either SWS_RW_PLANAR or SWS_RW_PACKED,
90  * depending on the underlying interpretation. If multiple components are
91  * packed into one element (e.g. rgb10a2 -> u16), they are marked as
92  * SWS_RW_PACKED. Otherwise (e.g. gray16le), they are SWS_RW_PLANAR.
93  *
94  * This is a purely semantic/informative difference; the underlying code
95  * treats 1-components reads/writes the same regardless of mode.
96  */
97  SWS_RW_PLANAR, /* one plane per component */
98  SWS_RW_PACKED, /* all components on a single plane */
100 
101 typedef struct SwsReadWriteOp {
102  /**
103  * Examples:
104  * rgba = 4x u8 packed
105  * yuv444p = 3x u8
106  * rgb565 = 1x u16 <- use SWS_OP_UNPACK to unpack
107  * monow = 1x u8 (frac 3)
108  * rgb4 = 1x u8 (frac 1)
109  */
110  SwsReadWriteMode mode; /* how data is laid out in memory */
111  uint8_t elems; /* number of elements (of type `op.type`) to read/write */
112  uint8_t frac; /* fractional pixel step factor (log2) */
113 
114  /**
115  * Filter kernel to apply to each plane while sampling. Currently, only
116  * one shared filter kernel is supported for all planes. (Optional)
117  *
118  * Note: As with SWS_OP_FILTER_*, if a filter kernel is in use, the read
119  * operation will always output floating point values.
120  */
121  struct {
122  SwsOpType op; /* some value of SWS_OP_FILTER_* */
123  SwsFilterWeights *kernel; /* (refstruct) */
124  SwsPixelType type; /* pixel type to store result as */
125  } filter;
127 
128 typedef struct SwsPackOp {
129  /**
130  * Packed bits are assumed to be LSB-aligned within the underlying
131  * integer type; i.e. (msb) 0 ... X Y Z W (lsb).
132  */
133  uint8_t pattern[4]; /* bit depth pattern, from MSB to LSB */
134 } SwsPackOp;
135 
136 typedef struct SwsSwizzleOp {
137  /**
138  * Input component for each output component:
139  * Out[x] := In[swizzle.in[x]]
140  */
141  union {
142  uint32_t mask;
143  uint8_t in[4];
144  struct { uint8_t x, y, z, w; };
145  };
146 } SwsSwizzleOp;
147 
148 #define SWS_SWIZZLE(X,Y,Z,W) ((SwsSwizzleOp) { .in = {X, Y, Z, W} })
150 
151 typedef struct SwsShiftOp {
152  uint8_t amount; /* number of bits to shift */
153 } SwsShiftOp;
154 
155 typedef struct SwsClearOp {
156  SwsCompMask mask; /* mask of components to clear */
157  AVRational value[4]; /* value to set */
158 } SwsClearOp;
159 
160 typedef struct SwsConvertOp {
161  SwsPixelType to; /* type of pixel to convert to */
162  bool expand; /* if true, integers are expanded to the full range */
163 } SwsConvertOp;
164 
165 typedef struct SwsClampOp {
166  AVRational limit[4]; /* per-component min/max value */
167 } SwsClampOp;
168 
169 typedef struct SwsScaleOp {
170  AVRational factor; /* scalar multiplication factor */
171 } SwsScaleOp;
172 
173 typedef struct SwsDitherOp {
174  AVRational *matrix; /* tightly packed dither matrix (refstruct) */
175  AVRational min, max; /* minimum/maximum value in `matrix` */
176  int size_log2; /* size (in bits) of the dither matrix */
177  int8_t y_offset[4]; /* row offset for each component, or -1 for ignored */
178 } SwsDitherOp;
179 
180 typedef struct SwsLinearOp {
181  /**
182  * Generalized 5x5 affine transformation:
183  * [ Out.x ] = [ A B C D E ]
184  * [ Out.y ] = [ F G H I J ] * [ x y z w 1 ]
185  * [ Out.z ] = [ K L M N O ]
186  * [ Out.w ] = [ P Q R S T ]
187  *
188  * The mask keeps track of which components differ from an identity matrix.
189  * There may be more efficient implementations of particular subsets, for
190  * example the common subset of {A, E, G, J, M, O} can be implemented with
191  * just three fused multiply-add operations.
192  */
193  AVRational m[4][5];
194  uint32_t mask; /* m[i][j] <-> 1 << (5 * i + j) */
195 } SwsLinearOp;
196 
197 #define SWS_MASK(I, J) (1 << (5 * (I) + (J)))
198 #define SWS_MASK_OFF(I) SWS_MASK(I, 4)
199 #define SWS_MASK_ROW(I) (0x1F << (5 * (I)))
200 #define SWS_MASK_COL(J) (0x8421 << J)
201 
202 enum {
203  SWS_MASK_ALL = (1 << 20) - 1,
206 
207  SWS_MASK_DIAG3 = SWS_MASK(0, 0) | SWS_MASK(1, 1) | SWS_MASK(2, 2),
209  SWS_MASK_MAT3 = SWS_MASK(0, 0) | SWS_MASK(0, 1) | SWS_MASK(0, 2) |
210  SWS_MASK(1, 0) | SWS_MASK(1, 1) | SWS_MASK(1, 2) |
211  SWS_MASK(2, 0) | SWS_MASK(2, 1) | SWS_MASK(2, 2),
212 
216 };
217 
218 /* Helper function to compute the correct mask */
220 
221 typedef struct SwsFilterOp {
222  SwsFilterWeights *kernel; /* filter kernel (refstruct) */
223  SwsPixelType type; /* pixel type to store result as */
224 } SwsFilterOp;
225 
226 typedef struct SwsOp {
227  SwsOpType op; /* operation to perform */
228  SwsPixelType type; /* pixel type to operate on */
229  union {
241  };
242 
243  /**
244  * Metadata about the operation's input/output components. Discarded
245  * and regenerated automatically by `ff_sws_op_list_update_comps()`.
246  *
247  * Note that backends may rely on the presence and accuracy of this
248  * metadata for all operations, during ff_sws_ops_compile().
249  */
251 } SwsOp;
252 
253 #define SWS_OP_NEEDED(op, idx) (!((op)->comps.flags[idx] & SWS_COMP_GARBAGE))
254 
255 /* Compute SwsCompMask from a mask of needed components */
257 
258 /**
259  * Return the number of planes involved in a read/write operation.
260  */
261 int ff_sws_rw_op_planes(const SwsOp *op);
262 
263 /**
264  * Describe an operation in human-readable form.
265  */
266 void ff_sws_op_desc(AVBPrint *bp, const SwsOp *op);
267 
268 /**
269  * Frees any allocations associated with an SwsOp and sets it to {0}.
270  */
271 void ff_sws_op_uninit(SwsOp *op);
272 
273 /**
274  * Apply an operation to an AVRational. No-op for read/write operations.
275  */
276 void ff_sws_apply_op_q(const SwsOp *op, AVRational x[4]);
277 
278 /**
279  * Helper struct for representing a list of operations.
280  */
281 typedef struct SwsOpList {
283  int num_ops;
284 
285  /* Metadata associated with this operation list */
287 
288  /* Input/output plane indices */
289  uint8_t plane_src[4], plane_dst[4];
290 
291  /**
292  * Source component metadata associated with pixel values from each
293  * corresponding component (in plane/memory order, i.e. not affected by
294  * `plane_src`). Lets the optimizer know additional information about
295  * the value range and/or pixel data to expect.
296  *
297  * The default value of {0} is safe to pass in the case that no additional
298  * information is known.
299  */
301 } SwsOpList;
302 
304 void ff_sws_op_list_free(SwsOpList **ops);
305 
306 /**
307  * Returns a duplicate of `ops`, or NULL on OOM.
308  */
310 
311 /**
312  * Returns the input operation for a given op list, or NULL if there is none
313  * (e.g. for a pure CLEAR-only operation list).
314  *
315  * This will always be an op of type SWS_OP_READ.
316  */
317 const SwsOp *ff_sws_op_list_input(const SwsOpList *ops);
318 
319 /**
320  * Returns the output operation for a given op list, or NULL if there is none.
321  *
322  * This will always be an op of type SWS_OP_WRITE.
323  */
324 const SwsOp *ff_sws_op_list_output(const SwsOpList *ops);
325 
326 /**
327  * Returns whether an op list represents a true no-op operation, i.e. may be
328  * eliminated entirely from an execution graph.
329  */
330 bool ff_sws_op_list_is_noop(const SwsOpList *ops);
331 
332 /**
333  * Returns the size of the largest pixel type used in `ops`.
334  */
335 int ff_sws_op_list_max_size(const SwsOpList *ops);
336 
337 /**
338  * These will take over ownership of `op` and set it to {0}, even on failure.
339  */
342 
343 void ff_sws_op_list_remove_at(SwsOpList *ops, int index, int count);
344 
345 /**
346  * Print out the contents of an operation list.
347  */
348 void ff_sws_op_list_print(void *log_ctx, int log_level, int log_level_extra,
349  const SwsOpList *ops);
350 
351 /**
352  * Infer + propagate known information about components. Called automatically
353  * when needed by the optimizer and compiler.
354  */
356 
357 /**
358  * Fuse compatible and eliminate redundant operations, as well as replacing
359  * some operations with more efficient alternatives.
360  */
362 
364  /* Automatically optimize the operations when compiling */
366 };
367 
368 /**
369  * Helper function to enumerate over all possible (optimized) operation lists,
370  * under the current set of options in `ctx`, and run the given callback on
371  * each list.
372  *
373  * @param src_fmt If set (not AV_PIX_FMT_NONE), constrain the source format
374  * @param dst_fmt If set (not AV_PIX_FMT_NONE), constrain the destination format
375  * @return 0 on success, the return value if cb() < 0, or a negative error code
376  *
377  * @note `ops` belongs to ff_sws_enum_op_lists(), but may be mutated by `cb`.
378  */
379 int ff_sws_enum_op_lists(SwsContext *ctx, void *opaque,
380  enum AVPixelFormat src_fmt, enum AVPixelFormat dst_fmt,
381  int (*cb)(SwsContext *ctx, void *opaque, SwsOpList *ops));
382 
383 #endif
SWS_OP_READ
@ SWS_OP_READ
Definition: ops.h:38
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
ff_sws_op_list_input
const SwsOp * ff_sws_op_list_input(const SwsOpList *ops)
Returns the input operation for a given op list, or NULL if there is none (e.g.
Definition: ops.c:688
SWS_OP_SWIZZLE
@ SWS_OP_SWIZZLE
Definition: ops.h:41
SwsClearOp::value
AVRational value[4]
Definition: ops.h:157
SWS_OP_LSHIFT
@ SWS_OP_LSHIFT
Definition: ops.h:46
SWS_OP_UNPACK
@ SWS_OP_UNPACK
Definition: ops.h:44
SwsClearOp
Definition: ops.h:155
SWS_RW_PLANAR
@ SWS_RW_PLANAR
Note: 1-component reads are either SWS_RW_PLANAR or SWS_RW_PACKED, depending on the underlying interp...
Definition: ops.h:97
SWS_MASK_OFF4
@ SWS_MASK_OFF4
Definition: ops.h:214
SwsSwizzleOp::mask
uint32_t mask
Definition: ops.h:142
cb
static double cb(void *priv, double x, double y)
Definition: vf_geq.c:247
SwsOpList::comps_src
SwsComps comps_src
Source component metadata associated with pixel values from each corresponding component (in plane/me...
Definition: ops.h:300
SWS_COMP_ZERO
@ SWS_COMP_ZERO
Definition: ops.h:75
SWS_OP_CLEAR
@ SWS_OP_CLEAR
Definition: ops.h:50
SwsOp::swizzle
SwsSwizzleOp swizzle
Definition: ops.h:233
SwsLinearOp::m
AVRational m[4][5]
Generalized 5x5 affine transformation: [ Out.x ] = [ A B C D E ] [ Out.y ] = [ F G H I J ] * [ x y z ...
Definition: ops.h:193
SwsSwizzleOp::z
uint8_t z
Definition: ops.h:144
SwsOp::convert
SwsConvertOp convert
Definition: ops.h:236
mask
int mask
Definition: mediacodecdec_common.c:154
SwsOp::rw
SwsReadWriteOp rw
Definition: ops.h:231
SWS_OP_DITHER
@ SWS_OP_DITHER
Definition: ops.h:58
SwsFilterWeights
Represents a computed filter kernel.
Definition: filters.h:64
SwsFilterOp
Definition: ops.h:221
ff_sws_op_list_max_size
int ff_sws_op_list_max_size(const SwsOpList *ops)
Returns the size of the largest pixel type used in ops.
Definition: ops.c:765
SwsClampOp::limit
AVRational limit[4]
Definition: ops.h:166
SWS_OP_TYPE_NB
@ SWS_OP_TYPE_NB
Definition: ops.h:64
SWS_MASK_ALL
@ SWS_MASK_ALL
Definition: ops.h:203
SwsComps::max
AVRational max[4]
Definition: ops.h:84
SwsOpList::plane_dst
uint8_t plane_dst[4]
Definition: ops.h:289
SwsSwizzleOp::w
uint8_t w
Definition: ops.h:144
SwsClearOp::mask
SwsCompMask mask
Definition: ops.h:156
SwsOpList::num_ops
int num_ops
Definition: ops.h:283
SwsCompFlags
SwsCompFlags
Definition: ops.h:72
SwsDitherOp
Definition: ops.h:173
ff_sws_op_uninit
void ff_sws_op_uninit(SwsOp *op)
Frees any allocations associated with an SwsOp and sets it to {0}.
ff_sws_op_list_alloc
SwsOpList * ff_sws_op_list_alloc(void)
Definition: ops.c:624
SwsReadWriteOp
Definition: ops.h:101
SwsSwizzleOp
Definition: ops.h:136
SWS_MASK_DIAG4
@ SWS_MASK_DIAG4
Definition: ops.h:213
SwsLinearOp::mask
uint32_t mask
Definition: ops.h:194
SwsOp::op
SwsOpType op
Definition: ops.h:227
SWS_RW_PACKED
@ SWS_RW_PACKED
Definition: ops.h:98
SwsOpCompileFlags
SwsOpCompileFlags
Definition: ops.h:363
SWS_OP_SCALE
@ SWS_OP_SCALE
Definition: ops.h:54
SwsOp::clear
SwsClearOp clear
Definition: ops.h:235
ff_sws_op_list_append
int ff_sws_op_list_append(SwsOpList *ops, SwsOp *op)
These will take over ownership of op and set it to {0}, even on failure.
Definition: ops.c:731
SwsScaleOp::factor
AVRational factor
Definition: ops.h:170
SWS_MASK_MAT3
@ SWS_MASK_MAT3
Definition: ops.h:209
SwsFilterOp::kernel
SwsFilterWeights * kernel
Definition: ops.h:222
ff_sws_op_list_insert_at
int ff_sws_op_list_insert_at(SwsOpList *ops, int index, SwsOp *op)
Definition: ops.c:717
SwsComps::min
AVRational min[4]
Definition: ops.h:84
op
static int op(uint8_t **dst, const uint8_t *dst_end, GetByteContext *gb, int pixel, int count, int *x, int width, int linesize)
Perform decode operation.
Definition: anm.c:76
SwsDitherOp::max
AVRational max
Definition: ops.h:175
SWS_OP_MIN
@ SWS_OP_MIN
Definition: ops.h:52
ctx
static AVFormatContext * ctx
Definition: movenc.c:49
SwsCompMask
uint8_t SwsCompMask
Bit-mask of components.
Definition: uops.h:61
SWS_OP_LINEAR
@ SWS_OP_LINEAR
Definition: ops.h:57
SWS_OP_FILTER_H
@ SWS_OP_FILTER_H
Definition: ops.h:61
ff_sws_op_desc
void ff_sws_op_desc(AVBPrint *bp, const SwsOp *op)
Describe an operation in human-readable form.
Definition: ops.c:876
SWS_OP_PACK
@ SWS_OP_PACK
Definition: ops.h:45
ff_sws_rw_op_planes
int ff_sws_rw_op_planes(const SwsOp *op)
Return the number of planes involved in a read/write operation.
Definition: ops.c:169
SwsOp::dither
SwsDitherOp dither
Definition: ops.h:239
SwsReadWriteOp::kernel
SwsFilterWeights * kernel
Definition: ops.h:123
ff_sws_comp_mask_q4
SwsCompMask ff_sws_comp_mask_q4(const AVRational q[4])
Definition: ops.c:137
filters.h
ff_sws_op_list_duplicate
SwsOpList * ff_sws_op_list_duplicate(const SwsOpList *ops)
Returns a duplicate of ops, or NULL on OOM.
Definition: ops.c:651
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
SwsReadWriteOp::frac
uint8_t frac
Definition: ops.h:112
ff_sws_op_list_is_noop
bool ff_sws_op_list_is_noop(const SwsOpList *ops)
Returns whether an op list represents a true no-op operation, i.e.
Definition: ops.c:736
SWS_COMP_GARBAGE
@ SWS_COMP_GARBAGE
Definition: ops.h:73
SwsConvertOp::to
SwsPixelType to
Definition: ops.h:161
SWS_OP_FILTER_V
@ SWS_OP_FILTER_V
Definition: ops.h:62
ff_sws_op_list_print
void ff_sws_op_list_print(void *log_ctx, int log_level, int log_level_extra, const SwsOpList *ops)
Print out the contents of an operation list.
Definition: ops.c:983
SwsOp::clamp
SwsClampOp clamp
Definition: ops.h:237
SwsOpType
SwsOpType
Copyright (C) 2025 Niklas Haas.
Definition: ops.h:34
SWS_MASK_OFF3
@ SWS_MASK_OFF3
Definition: ops.h:208
SWS_MASK
#define SWS_MASK(I, J)
Definition: ops.h:197
SwsPixelType
SwsPixelType
Definition: uops.h:38
index
int index
Definition: gxfenc.c:90
SwsConvertOp::expand
bool expand
Definition: ops.h:162
SWS_MASK_LUMA
@ SWS_MASK_LUMA
Definition: ops.h:204
SwsPackOp::pattern
uint8_t pattern[4]
Packed bits are assumed to be LSB-aligned within the underlying integer type; i.e.
Definition: ops.h:133
ff_sws_op_list_free
void ff_sws_op_list_free(SwsOpList **ops)
Definition: ops.c:637
SwsDitherOp::size_log2
int size_log2
Definition: ops.h:176
SwsClampOp
Definition: ops.h:165
SwsOp::type
SwsPixelType type
Definition: ops.h:228
SwsDitherOp::matrix
AVRational * matrix
Definition: ops.h:174
SWS_MASK_ALPHA
@ SWS_MASK_ALPHA
Definition: ops.h:205
SwsShiftOp
Definition: ops.h:151
SWS_OP_RSHIFT
@ SWS_OP_RSHIFT
Definition: ops.h:47
SwsOp::lin
SwsLinearOp lin
Definition: ops.h:230
SwsOpList::src
SwsFormat src
Definition: ops.h:286
SWS_OP_INVALID
@ SWS_OP_INVALID
Definition: ops.h:35
SwsFormat
Definition: format.h:77
SwsShiftOp::amount
uint8_t amount
Definition: ops.h:152
SWS_MASK_DIAG3
@ SWS_MASK_DIAG3
Definition: ops.h:207
SWS_OP_WRITE
@ SWS_OP_WRITE
Definition: ops.h:39
ff_sws_op_list_output
const SwsOp * ff_sws_op_list_output(const SwsOpList *ops)
Returns the output operation for a given op list, or NULL if there is none.
Definition: ops.c:697
SwsOp::comps
SwsComps comps
Metadata about the operation's input/output components.
Definition: ops.h:250
SwsScaleOp
Definition: ops.h:169
SWS_OP_FLAG_OPTIMIZE
@ SWS_OP_FLAG_OPTIMIZE
Definition: ops.h:365
SwsLinearOp
Definition: ops.h:180
ff_sws_op_list_update_comps
void ff_sws_op_list_update_comps(SwsOpList *ops)
Infer + propagate known information about components.
Definition: ops.c:353
SwsReadWriteOp::op
SwsOpType op
Definition: ops.h:122
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 ef...
Definition: ops_optimizer.c:350
bprint.h
SwsOp::filter
SwsFilterOp filter
Definition: ops.h:240
SwsOpList::ops
SwsOp * ops
Definition: ops.h:282
SwsPackOp
Definition: ops.h:128
SwsFilterOp::type
SwsPixelType type
Definition: ops.h:223
SwsReadWriteOp::type
SwsPixelType type
Definition: ops.h:124
graph.h
SwsReadWriteMode
SwsReadWriteMode
Definition: ops.h:87
SwsOp
Definition: ops.h:226
ff_sws_apply_op_q
void ff_sws_apply_op_q(const SwsOp *op, AVRational x[4])
Apply an operation to an AVRational.
Definition: ops.c:192
SwsComps::flags
SwsCompFlags flags[4]
Definition: ops.h:80
SwsOpList::dst
SwsFormat dst
Definition: ops.h:286
SWS_OP_MAX
@ SWS_OP_MAX
Definition: ops.h:53
SwsReadWriteOp::filter
struct SwsReadWriteOp::@571 filter
Filter kernel to apply to each plane while sampling.
ff_sws_comp_mask_swizzle
SwsCompMask ff_sws_comp_mask_swizzle(SwsCompMask mask, SwsSwizzleOp swiz)
Definition: ops.c:147
SwsComps
Definition: ops.h:79
ff_sws_op_type_name
const char * ff_sws_op_type_name(SwsOpType op)
Definition: ops.c:109
SWS_MASK_OFF
#define SWS_MASK_OFF(I)
Definition: ops.h:198
SWS_COMP_SWAPPED
@ SWS_COMP_SWAPPED
Definition: ops.h:76
SwsSwizzleOp::y
uint8_t y
Definition: ops.h:144
SWS_OP_SWAP_BYTES
@ SWS_OP_SWAP_BYTES
Definition: ops.h:40
SwsDitherOp::min
AVRational min
Definition: ops.h:175
SwsOp::shift
SwsShiftOp shift
Definition: ops.h:234
SwsSwizzleOp::x
uint8_t x
Definition: ops.h:144
SWS_COMP_EXACT
@ SWS_COMP_EXACT
Definition: ops.h:74
ff_sws_enum_op_lists
int ff_sws_enum_op_lists(SwsContext *ctx, void *opaque, enum AVPixelFormat src_fmt, enum AVPixelFormat dst_fmt, int(*cb)(SwsContext *ctx, void *opaque, SwsOpList *ops))
Helper function to enumerate over all possible (optimized) operation lists, under the current set of ...
Definition: ops.c:1081
SwsReadWriteOp::elems
uint8_t elems
Definition: ops.h:111
SWS_MASK_MAT4
@ SWS_MASK_MAT4
Definition: ops.h:215
SwsDitherOp::y_offset
int8_t y_offset[4]
Definition: ops.h:177
uops.h
SwsSwizzleOp::in
uint8_t in[4]
Definition: ops.h:143
SWS_OP_CONVERT
@ SWS_OP_CONVERT
Definition: ops.h:51
ff_sws_op_list_remove_at
void ff_sws_op_list_remove_at(SwsOpList *ops, int index, int count)
Definition: ops.c:706
SwsOp::scale
SwsScaleOp scale
Definition: ops.h:238
SwsConvertOp
Definition: ops.h:160
SwsReadWriteOp::mode
SwsReadWriteMode mode
Examples: rgba = 4x u8 packed yuv444p = 3x u8 rgb565 = 1x u16 <- use SWS_OP_UNPACK to unpack monow = ...
Definition: ops.h:110
SwsOpList::plane_src
uint8_t plane_src[4]
Definition: ops.h:289
SwsOpList
Helper struct for representing a list of operations.
Definition: ops.h:281
SwsOp::pack
SwsPackOp pack
Definition: ops.h:232
SwsContext
Main external API structure.
Definition: swscale.h:229
ff_sws_linear_mask
uint32_t ff_sws_linear_mask(SwsLinearOp)
Definition: ops.c:776
ff_sws_comp_mask_needed
SwsCompMask ff_sws_comp_mask_needed(const SwsOp *op)
Definition: ops.c:159