FFmpeg
swscale_internal.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2001-2011 Michael Niedermayer <michaelni@gmx.at>
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_SWSCALE_INTERNAL_H
22 #define SWSCALE_SWSCALE_INTERNAL_H
23 
24 #include <stdatomic.h>
25 #include <assert.h>
26 
27 #include "config.h"
28 #include "swscale.h"
29 #include "graph.h"
30 
31 #include "libavfilter/framepool.h"
32 #include "libavutil/avassert.h"
33 #include "libavutil/common.h"
34 #include "libavutil/frame.h"
35 #include "libavutil/intreadwrite.h"
36 #include "libavutil/log.h"
37 #include "libavutil/mem_internal.h"
38 #include "libavutil/pixfmt.h"
39 #include "libavutil/pixdesc.h"
40 #include "libavutil/slicethread.h"
41 #include "libavutil/half2float.h"
42 
43 #if HAVE_ALTIVEC
44 #define SWSINTERNAL_ADDITIONAL_ASM_SIZE (7*16 + 2*8 + /* alignment */ 16)
45 #endif
46 #ifndef SWSINTERNAL_ADDITIONAL_ASM_SIZE
47 #define SWSINTERNAL_ADDITIONAL_ASM_SIZE 0
48 #endif
49 
50 #define STR(s) AV_TOSTRING(s) // AV_STRINGIFY is too long
51 
52 #define YUVRGB_TABLE_HEADROOM 512
53 #define YUVRGB_TABLE_LUMA_HEADROOM 512
54 
55 #define MAX_FILTER_SIZE SWS_MAX_FILTER_SIZE
56 
57 #define SWS_MAX_THREADS 8192 /* sanity clamp */
58 
59 #if HAVE_BIGENDIAN
60 #define ALT32_CORR (-1)
61 #else
62 #define ALT32_CORR 1
63 #endif
64 
65 #if ARCH_X86_64
66 # define APCK_PTR2 8
67 # define APCK_COEF 16
68 # define APCK_SIZE 24
69 #else
70 # define APCK_PTR2 4
71 # define APCK_COEF 8
72 # define APCK_SIZE 16
73 #endif
74 
75 #define RETCODE_USE_CASCADE -12345
76 
77 typedef struct SwsInternal SwsInternal;
78 
79 static inline SwsInternal *sws_internal(const SwsContext *sws)
80 {
81  return (SwsInternal *) sws;
82 }
83 
85 
86 typedef struct Range {
87  unsigned int start;
88  unsigned int len;
89 } Range;
90 
91 typedef struct RangeList {
93  unsigned int nb_ranges;
95 } RangeList;
96 
97 int ff_range_add(RangeList *r, unsigned int start, unsigned int len);
98 
99 typedef int (*SwsFunc)(SwsInternal *c, const uint8_t *const src[],
100  const int srcStride[], int srcSliceY, int srcSliceH,
101  uint8_t *const dst[], const int dstStride[]);
102 
103 typedef void (*SwsColorFunc)(const SwsInternal *c, uint8_t *dst, int dst_stride,
104  const uint8_t *src, int src_stride, int w, int h);
105 
106 typedef struct SwsLuts {
107  uint16_t *in;
108  uint16_t *out;
109 } SwsLuts;
110 
111 typedef struct SwsColorXform {
113  int16_t mat[3][3];
114 } SwsColorXform;
115 
116 /**
117  * Write one line of horizontally scaled data to planar output
118  * without any additional vertical scaling (or point-scaling).
119  *
120  * @param src scaled source data, 15 bits for 8-10-bit output,
121  * 19 bits for 16-bit output (in int32_t)
122  * @param dest pointer to the output plane. For >8-bit
123  * output, this is in uint16_t
124  * @param dstW width of destination in pixels
125  * @param dither ordered dither array of type int16_t and size 8
126  * @param offset Dither offset
127  */
128 typedef void (*yuv2planar1_fn)(const int16_t *src, uint8_t *dest, int dstW,
129  const uint8_t *dither, int offset);
130 
131 /**
132  * Write one line of horizontally scaled data to planar output
133  * with multi-point vertical scaling between input pixels.
134  *
135  * @param filter vertical luma/alpha scaling coefficients, 12 bits [0,4096]
136  * @param src scaled luma (Y) or alpha (A) source data, 15 bits for
137  * 8-10-bit output, 19 bits for 16-bit output (in int32_t)
138  * @param filterSize number of vertical input lines to scale
139  * @param dest pointer to output plane. For >8-bit
140  * output, this is in uint16_t
141  * @param dstW width of destination pixels
142  * @param offset Dither offset
143  */
144 typedef void (*yuv2planarX_fn)(const int16_t *filter, int filterSize,
145  const int16_t **src, uint8_t *dest, int dstW,
146  const uint8_t *dither, int offset);
147 
148 /**
149  * Write one line of horizontally scaled chroma to interleaved output
150  * with multi-point vertical scaling between input pixels.
151  *
152  * @param dstFormat destination pixel format
153  * @param chrDither ordered dither array of type uint8_t and size 8
154  * @param chrFilter vertical chroma scaling coefficients, 12 bits [0,4096]
155  * @param chrUSrc scaled chroma (U) source data, 15 bits for 8-10-bit
156  * output, 19 bits for 16-bit output (in int32_t)
157  * @param chrVSrc scaled chroma (V) source data, 15 bits for 8-10-bit
158  * output, 19 bits for 16-bit output (in int32_t)
159  * @param chrFilterSize number of vertical chroma input lines to scale
160  * @param dest pointer to the output plane. For >8-bit
161  * output, this is in uint16_t
162  * @param dstW width of chroma planes
163  */
164 typedef void (*yuv2interleavedX_fn)(enum AVPixelFormat dstFormat,
165  const uint8_t *chrDither,
166  const int16_t *chrFilter,
167  int chrFilterSize,
168  const int16_t **chrUSrc,
169  const int16_t **chrVSrc,
170  uint8_t *dest, int dstW);
171 
172 /**
173  * Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB
174  * output without any additional vertical scaling (or point-scaling). Note
175  * that this function may do chroma scaling, see the "uvalpha" argument.
176  *
177  * @param c SWS scaling context
178  * @param lumSrc scaled luma (Y) source data, 15 bits for 8-10-bit output,
179  * 19 bits for 16-bit output (in int32_t)
180  * @param chrUSrc scaled chroma (U) source data, 15 bits for 8-10-bit output,
181  * 19 bits for 16-bit output (in int32_t)
182  * @param chrVSrc scaled chroma (V) source data, 15 bits for 8-10-bit output,
183  * 19 bits for 16-bit output (in int32_t)
184  * @param alpSrc scaled alpha (A) source data, 15 bits for 8-10-bit output,
185  * 19 bits for 16-bit output (in int32_t)
186  * @param dest pointer to the output plane. For 16-bit output, this is
187  * uint16_t
188  * @param dstW width of lumSrc and alpSrc in pixels, number of pixels
189  * to write into dest[]
190  * @param uvalpha chroma scaling coefficient for the second line of chroma
191  * pixels, either 2048 or 0. If 0, one chroma input is used
192  * for 2 output pixels (or if the SWS_FULL_CHR_H_INT flag
193  * is set, it generates 1 output pixel). If 2048, two chroma
194  * input pixels should be averaged for 2 output pixels (this
195  * only happens if SWS_FULL_CHR_H_INT is not set)
196  * @param y vertical line number for this output. This does not need
197  * to be used to calculate the offset in the destination,
198  * but can be used to generate comfort noise using dithering
199  * for some output formats.
200  */
201 typedef void (*yuv2packed1_fn)(SwsInternal *c, const int16_t *lumSrc,
202  const int16_t *chrUSrc[2],
203  const int16_t *chrVSrc[2],
204  const int16_t *alpSrc, uint8_t *dest,
205  int dstW, int uvalpha, int y);
206 /**
207  * Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB
208  * output by doing bilinear scaling between two input lines.
209  *
210  * @param c SWS scaling context
211  * @param lumSrc scaled luma (Y) source data, 15 bits for 8-10-bit output,
212  * 19 bits for 16-bit output (in int32_t)
213  * @param chrUSrc scaled chroma (U) source data, 15 bits for 8-10-bit output,
214  * 19 bits for 16-bit output (in int32_t)
215  * @param chrVSrc scaled chroma (V) source data, 15 bits for 8-10-bit output,
216  * 19 bits for 16-bit output (in int32_t)
217  * @param alpSrc scaled alpha (A) source data, 15 bits for 8-10-bit output,
218  * 19 bits for 16-bit output (in int32_t)
219  * @param dest pointer to the output plane. For 16-bit output, this is
220  * uint16_t
221  * @param dstW width of lumSrc and alpSrc in pixels, number of pixels
222  * to write into dest[]
223  * @param yalpha luma/alpha scaling coefficients for the second input line.
224  * The first line's coefficients can be calculated by using
225  * 4096 - yalpha
226  * @param uvalpha chroma scaling coefficient for the second input line. The
227  * first line's coefficients can be calculated by using
228  * 4096 - uvalpha
229  * @param y vertical line number for this output. This does not need
230  * to be used to calculate the offset in the destination,
231  * but can be used to generate comfort noise using dithering
232  * for some output formats.
233  */
234 typedef void (*yuv2packed2_fn)(SwsInternal *c, const int16_t *lumSrc[2],
235  const int16_t *chrUSrc[2],
236  const int16_t *chrVSrc[2],
237  const int16_t *alpSrc[2],
238  uint8_t *dest,
239  int dstW, int yalpha, int uvalpha, int y);
240 /**
241  * Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB
242  * output by doing multi-point vertical scaling between input pixels.
243  *
244  * @param c SWS scaling context
245  * @param lumFilter vertical luma/alpha scaling coefficients, 12 bits [0,4096]
246  * @param lumSrc scaled luma (Y) source data, 15 bits for 8-10-bit output,
247  * 19 bits for 16-bit output (in int32_t)
248  * @param lumFilterSize number of vertical luma/alpha input lines to scale
249  * @param chrFilter vertical chroma scaling coefficients, 12 bits [0,4096]
250  * @param chrUSrc scaled chroma (U) source data, 15 bits for 8-10-bit output,
251  * 19 bits for 16-bit output (in int32_t)
252  * @param chrVSrc scaled chroma (V) source data, 15 bits for 8-10-bit output,
253  * 19 bits for 16-bit output (in int32_t)
254  * @param chrFilterSize number of vertical chroma input lines to scale
255  * @param alpSrc scaled alpha (A) source data, 15 bits for 8-10-bit output,
256  * 19 bits for 16-bit output (in int32_t)
257  * @param dest pointer to the output plane. For 16-bit output, this is
258  * uint16_t
259  * @param dstW width of lumSrc and alpSrc in pixels, number of pixels
260  * to write into dest[]
261  * @param y vertical line number for this output. This does not need
262  * to be used to calculate the offset in the destination,
263  * but can be used to generate comfort noise using dithering
264  * or some output formats.
265  */
266 typedef void (*yuv2packedX_fn)(SwsInternal *c, const int16_t *lumFilter,
267  const int16_t **lumSrc, int lumFilterSize,
268  const int16_t *chrFilter,
269  const int16_t **chrUSrc,
270  const int16_t **chrVSrc, int chrFilterSize,
271  const int16_t **alpSrc, uint8_t *dest,
272  int dstW, int y);
273 
274 /**
275  * Write one line of horizontally scaled Y/U/V/A to YUV/RGB
276  * output by doing multi-point vertical scaling between input pixels.
277  *
278  * @param c SWS scaling context
279  * @param lumFilter vertical luma/alpha scaling coefficients, 12 bits [0,4096]
280  * @param lumSrc scaled luma (Y) source data, 15 bits for 8-10-bit output,
281  * 19 bits for 16-bit output (in int32_t)
282  * @param lumFilterSize number of vertical luma/alpha input lines to scale
283  * @param chrFilter vertical chroma scaling coefficients, 12 bits [0,4096]
284  * @param chrUSrc scaled chroma (U) source data, 15 bits for 8-10-bit output,
285  * 19 bits for 16-bit output (in int32_t)
286  * @param chrVSrc scaled chroma (V) source data, 15 bits for 8-10-bit output,
287  * 19 bits for 16-bit output (in int32_t)
288  * @param chrFilterSize number of vertical chroma input lines to scale
289  * @param alpSrc scaled alpha (A) source data, 15 bits for 8-10-bit output,
290  * 19 bits for 16-bit output (in int32_t)
291  * @param dest pointer to the output planes. For 16-bit output, this is
292  * uint16_t
293  * @param dstW width of lumSrc and alpSrc in pixels, number of pixels
294  * to write into dest[]
295  * @param y vertical line number for this output. This does not need
296  * to be used to calculate the offset in the destination,
297  * but can be used to generate comfort noise using dithering
298  * or some output formats.
299  */
300 typedef void (*yuv2anyX_fn)(SwsInternal *c, const int16_t *lumFilter,
301  const int16_t **lumSrc, int lumFilterSize,
302  const int16_t *chrFilter,
303  const int16_t **chrUSrc,
304  const int16_t **chrVSrc, int chrFilterSize,
305  const int16_t **alpSrc, uint8_t **dest,
306  int dstW, int y);
307 
308 /**
309  * Unscaled conversion of luma/alpha plane to YV12 for horizontal scaler.
310  */
311 typedef void (*planar1_YV12_fn)(uint8_t *dst, const uint8_t *src, const uint8_t *src2,
312  const uint8_t *src3, int width, uint32_t *pal,
313  void *opaque);
314 
315 /**
316  * Unscaled conversion of chroma plane to YV12 for horizontal scaler.
317  */
318 typedef void (*planar2_YV12_fn)(uint8_t *dst, uint8_t *dst2, const uint8_t *src,
319  const uint8_t *src2, const uint8_t *src3,
320  int width, uint32_t *pal, void *opaque);
321 
322 /**
323  * Unscaled conversion of arbitrary planar data (e.g. RGBA) to YV12, through
324  * conversion using the given color matrix.
325  */
326 typedef void (*planarX_YV12_fn)(uint8_t *dst, const uint8_t *src[4], int width,
327  int32_t *rgb2yuv, void *opaque);
328 
329 typedef void (*planarX2_YV12_fn)(uint8_t *dst, uint8_t *dst2,
330  const uint8_t *src[4], int width,
331  int32_t *rgb2yuv, void *opaque);
332 
333 struct SwsSlice;
334 struct SwsFilterDescriptor;
335 
336 /* This struct should be aligned on at least a 32-byte boundary. */
337 struct SwsInternal {
338  /* Currently active user-facing options. Also contains AVClass */
340 
341  /* Parent context (for slice contexts) */
343 
347 
348  /* Scaling graph, reinitialized dynamically as needed. */
349  SwsGraph *graph[2]; /* top, bottom fields */
350 
351  // values passed to current sws_receive_slice() call
354 
355  /**
356  * Note that src, dst, srcStride, dstStride will be copied in the
357  * sws_scale() wrapper so they can be freely modified here.
358  */
360  int chrSrcW; ///< Width of source chroma planes.
361  int chrSrcH; ///< Height of source chroma planes.
362  int chrDstW; ///< Width of destination chroma planes.
363  int chrDstH; ///< Height of destination chroma planes.
366  int dstFormatBpp; ///< Number of bits per pixel of the destination pixel format.
367  int srcFormatBpp; ///< Number of bits per pixel of the source pixel format.
369  int chrSrcHSubSample; ///< Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in source image.
370  int chrSrcVSubSample; ///< Binary logarithm of vertical subsampling factor between luma/alpha and chroma planes in source image.
371  int chrDstHSubSample; ///< Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in destination image.
372  int chrDstVSubSample; ///< Binary logarithm of vertical subsampling factor between luma/alpha and chroma planes in destination image.
373  int vChrDrop; ///< Binary logarithm of extra vertical subsampling factor in source image chroma planes specified by user.
374  int sliceDir; ///< Direction that slices are fed to the scaler (1 = top-to-bottom, -1 = bottom-to-top).
375 
378 
380 
381  /* The cascaded_* fields allow splitting a scaler task into multiple
382  * sequential steps, this is for example used to limit the maximum
383  * downscaling factor that needs to be supported in one scaler.
384  */
387  uint8_t *cascaded_tmp[2][4];
389 
390  double gamma_value;
392  uint16_t *gamma;
393  uint16_t *inv_gamma;
394 
395  int numDesc;
396  int descIndex[2];
397  int numSlice;
398  struct SwsSlice *slice;
400 
401  uint32_t pal_yuv[256];
402  uint32_t pal_rgb[256];
403 
404  float uint2float_lut[256];
405 
406  /**
407  * @name Scaled horizontal lines ring buffer.
408  * The horizontal scaler keeps just enough scaled lines in a ring buffer
409  * so they may be passed to the vertical scaler. The pointers to the
410  * allocated buffers for each line are duplicated in sequence in the ring
411  * buffer to simplify indexing and avoid wrapping around between lines
412  * inside the vertical scaler code. The wrapping is done before the
413  * vertical scaler is called.
414  */
415  //@{
416  int lastInLumBuf; ///< Last scaled horizontal luma/alpha line from source in the ring buffer.
417  int lastInChrBuf; ///< Last scaled horizontal chroma line from source in the ring buffer.
418  //@}
419 
422 
423  /**
424  * @name Horizontal and vertical filters.
425  * To better understand the following fields, here is a pseudo-code of
426  * their usage in filtering a horizontal line:
427  * @code
428  * for (i = 0; i < width; i++) {
429  * dst[i] = 0;
430  * for (j = 0; j < filterSize; j++)
431  * dst[i] += src[ filterPos[i] + j ] * filter[ filterSize * i + j ];
432  * dst[i] >>= FRAC_BITS; // The actual implementation is fixed-point.
433  * }
434  * @endcode
435  */
436  //@{
437  int16_t *hLumFilter; ///< Array of horizontal filter coefficients for luma/alpha planes.
438  int16_t *hChrFilter; ///< Array of horizontal filter coefficients for chroma planes.
439  int16_t *vLumFilter; ///< Array of vertical filter coefficients for luma/alpha planes.
440  int16_t *vChrFilter; ///< Array of vertical filter coefficients for chroma planes.
441  int32_t *hLumFilterPos; ///< Array of horizontal filter starting positions for each dst[i] for luma/alpha planes.
442  int32_t *hChrFilterPos; ///< Array of horizontal filter starting positions for each dst[i] for chroma planes.
443  int32_t *vLumFilterPos; ///< Array of vertical filter starting positions for each dst[i] for luma/alpha planes.
444  int32_t *vChrFilterPos; ///< Array of vertical filter starting positions for each dst[i] for chroma planes.
445  int hLumFilterSize; ///< Horizontal filter size for luma/alpha pixels.
446  int hChrFilterSize; ///< Horizontal filter size for chroma pixels.
447  int vLumFilterSize; ///< Vertical filter size for luma/alpha pixels.
448  int vChrFilterSize; ///< Vertical filter size for chroma pixels.
449  //@}
450 
451  int lumMmxextFilterCodeSize; ///< Runtime-generated MMXEXT horizontal fast bilinear scaler code size for luma/alpha planes.
452  int chrMmxextFilterCodeSize; ///< Runtime-generated MMXEXT horizontal fast bilinear scaler code size for chroma planes.
453  uint8_t *lumMmxextFilterCode; ///< Runtime-generated MMXEXT horizontal fast bilinear scaler code for luma/alpha planes.
454  uint8_t *chrMmxextFilterCode; ///< Runtime-generated MMXEXT horizontal fast bilinear scaler code for chroma planes.
455 
458 
459  int dstY; ///< Last destination vertical line output from last slice.
460  void *yuvTable; // pointer to the yuv->rgb table start so it can be freed()
461  // alignment ensures the offset can be added in a single
462  // instruction on e.g. ARM
464  uint8_t *table_rV[256 + 2*YUVRGB_TABLE_HEADROOM];
465  uint8_t *table_gU[256 + 2*YUVRGB_TABLE_HEADROOM];
466  uint8_t *table_bU[256 + 2*YUVRGB_TABLE_HEADROOM];
467  DECLARE_ALIGNED(16, int32_t, input_rgb2yuv_table)[16+40*4]; // This table can contain both C and SIMD formatted values, the C vales are always at the XY_IDX points
468 #define RY_IDX 0
469 #define GY_IDX 1
470 #define BY_IDX 2
471 #define RU_IDX 3
472 #define GU_IDX 4
473 #define BU_IDX 5
474 #define RV_IDX 6
475 #define GV_IDX 7
476 #define BV_IDX 8
477 #define RGB2YUV_SHIFT 15
478 
479  int *dither_error[4];
480 
481  //Colorspace stuff
482  int contrast, brightness, saturation; // for sws_getColorspaceDetails
487  int srcXYZ;
488  int dstXYZ;
495 
496 #define RED_DITHER "0*8"
497 #define GREEN_DITHER "1*8"
498 #define BLUE_DITHER "2*8"
499 #define Y_COEFF "3*8"
500 #define VR_COEFF "4*8"
501 #define UB_COEFF "5*8"
502 #define VG_COEFF "6*8"
503 #define UG_COEFF "7*8"
504 #define Y_OFFSET "8*8"
505 #define U_OFFSET "9*8"
506 #define V_OFFSET "10*8"
507 #define LUM_MMX_FILTER_OFFSET "11*8"
508 #define CHR_MMX_FILTER_OFFSET "11*8+4*4*"AV_STRINGIFY(MAX_FILTER_SIZE)
509 #define DSTW_OFFSET "11*8+4*4*"AV_STRINGIFY(MAX_FILTER_SIZE)"*2"
510 #define ESP_OFFSET "11*8+4*4*"AV_STRINGIFY(MAX_FILTER_SIZE)"*2+8"
511 #define VROUNDER_OFFSET "11*8+4*4*"AV_STRINGIFY(MAX_FILTER_SIZE)"*2+16"
512 #define U_TEMP "11*8+4*4*"AV_STRINGIFY(MAX_FILTER_SIZE)"*2+24"
513 #define V_TEMP "11*8+4*4*"AV_STRINGIFY(MAX_FILTER_SIZE)"*2+32"
514 #define Y_TEMP "11*8+4*4*"AV_STRINGIFY(MAX_FILTER_SIZE)"*2+40"
515 #define ALP_MMX_FILTER_OFFSET "11*8+4*4*"AV_STRINGIFY(MAX_FILTER_SIZE)"*2+48"
516 #define UV_OFF_PX "11*8+4*4*"AV_STRINGIFY(MAX_FILTER_SIZE)"*3+48"
517 #define UV_OFF_BYTE "11*8+4*4*"AV_STRINGIFY(MAX_FILTER_SIZE)"*3+56"
518 #define DITHER16 "11*8+4*4*"AV_STRINGIFY(MAX_FILTER_SIZE)"*3+64"
519 #define DITHER32 "11*8+4*4*"AV_STRINGIFY(MAX_FILTER_SIZE)"*3+80"
520 #define DITHER32_INT (11*8+4*4*MAX_FILTER_SIZE*3+80) // value equal to above, used for checking that the struct hasn't been changed by mistake
521 
522  DECLARE_ALIGNED(8, uint64_t, redDither);
525 
526  DECLARE_ALIGNED(8, uint64_t, yCoeff);
527  DECLARE_ALIGNED(8, uint64_t, vrCoeff);
528  DECLARE_ALIGNED(8, uint64_t, ubCoeff);
529  DECLARE_ALIGNED(8, uint64_t, vgCoeff);
530  DECLARE_ALIGNED(8, uint64_t, ugCoeff);
531  DECLARE_ALIGNED(8, uint64_t, yOffset);
532  DECLARE_ALIGNED(8, uint64_t, uOffset);
533  DECLARE_ALIGNED(8, uint64_t, vOffset);
536  int dstW_mmx;
537  DECLARE_ALIGNED(8, uint64_t, esp);
538  DECLARE_ALIGNED(8, uint64_t, vRounder);
539  DECLARE_ALIGNED(8, uint64_t, u_temp);
540  DECLARE_ALIGNED(8, uint64_t, v_temp);
541  DECLARE_ALIGNED(8, uint64_t, y_temp);
543  // alignment of these values is not necessary, but merely here
544  // to maintain the same offset across x8632 and x86-64. Once we
545  // use proper offset macros in the asm, they can be removed.
546  DECLARE_ALIGNED(8, ptrdiff_t, uv_off); ///< offset (in pixels) between u and v planes
547  DECLARE_ALIGNED(8, ptrdiff_t, uv_offx2); ///< offset (in bytes) between u and v planes
548  DECLARE_ALIGNED(8, uint16_t, dither16)[8];
549  DECLARE_ALIGNED(8, uint32_t, dither32)[8];
550 
551  const uint8_t *chrDither8, *lumDither8;
552 
554 
555 /* pre defined color-spaces gamma */
556 #define XYZ_GAMMA (2.6)
557 #define RGB_GAMMA (2.2)
562 
563  /* function pointers for swscale() */
571 
572  /// Opaque data pointer passed to all input functions.
574 
578 
579  /**
580  * Functions to read planar input, such as planar RGB, and convert
581  * internally to Y/UV/A.
582  */
583  /** @{ */
587  /** @} */
588 
589  /**
590  * Scale one horizontal line of input data using a bilinear filter
591  * to produce one line of output data. Compared to SwsInternal->hScale(),
592  * please take note of the following caveats when using these:
593  * - Scaling is done using only 7 bits instead of 14-bit coefficients.
594  * - You can use no more than 5 input pixels to produce 4 output
595  * pixels. Therefore, this filter should not be used for downscaling
596  * by more than ~20% in width (because that equals more than 5/4th
597  * downscaling and thus more than 5 pixels input per 4 pixels output).
598  * - In general, bilinear filters create artifacts during downscaling
599  * (even when <20%), because one output pixel will span more than one
600  * input pixel, and thus some pixels will need edges of both neighbor
601  * pixels to interpolate the output pixel. Since you can use at most
602  * two input pixels per output pixel in bilinear scaling, this is
603  * impossible and thus downscaling by any size will create artifacts.
604  * To enable this type of scaling, set SWS_FAST_BILINEAR
605  * in SwsInternal->flags.
606  */
607  /** @{ */
609  int16_t *dst, int dstWidth,
610  const uint8_t *src, int srcW, int xInc);
612  int16_t *dst1, int16_t *dst2, int dstWidth,
613  const uint8_t *src1, const uint8_t *src2,
614  int srcW, int xInc);
615  /** @} */
616 
617  /**
618  * Scale one horizontal line of input data using a filter over the input
619  * lines, to produce one (differently sized) line of output data.
620  *
621  * @param dst pointer to destination buffer for horizontally scaled
622  * data. If the number of bits per component of one
623  * destination pixel (SwsInternal->dstBpc) is <= 10, data
624  * will be 15 bpc in 16 bits (int16_t) width. Else (i.e.
625  * SwsInternal->dstBpc == 16), data will be 19bpc in
626  * 32 bits (int32_t) width.
627  * @param dstW width of destination image
628  * @param src pointer to source data to be scaled. If the number of
629  * bits per component of a source pixel (SwsInternal->srcBpc)
630  * is 8, this is 8bpc in 8 bits (uint8_t) width. Else
631  * (i.e. SwsInternal->dstBpc > 8), this is native depth
632  * in 16 bits (uint16_t) width. In other words, for 9-bit
633  * YUV input, this is 9bpc, for 10-bit YUV input, this is
634  * 10bpc, and for 16-bit RGB or YUV, this is 16bpc.
635  * @param filter filter coefficients to be used per output pixel for
636  * scaling. This contains 14bpp filtering coefficients.
637  * Guaranteed to contain dstW * filterSize entries.
638  * @param filterPos position of the first input pixel to be used for
639  * each output pixel during scaling. Guaranteed to
640  * contain dstW entries.
641  * @param filterSize the number of input coefficients to be used (and
642  * thus the number of input pixels to be used) for
643  * creating a single output pixel. Is aligned to 4
644  * (and input coefficients thus padded with zeroes)
645  * to simplify creating SIMD code.
646  */
647  /** @{ */
648  void (*hyScale)(SwsInternal *c, int16_t *dst, int dstW,
649  const uint8_t *src, const int16_t *filter,
650  const int32_t *filterPos, int filterSize);
651  void (*hcScale)(SwsInternal *c, int16_t *dst, int dstW,
652  const uint8_t *src, const int16_t *filter,
653  const int32_t *filterPos, int filterSize);
654  /** @} */
655 
656  /**
657  * Color range conversion functions if needed.
658  * If SwsInternal->dstBpc is > 14:
659  * - int16_t *dst (data is 15 bpc)
660  * - uint16_t coeff
661  * - int32_t offset
662  * Otherwise (SwsInternal->dstBpc is <= 14):
663  * - int32_t *dst (data is 19 bpc)
664  * - uint32_t coeff
665  * - int64_t offset
666  */
667  /** @{ */
668  void (*lumConvertRange)(int16_t *dst, int width,
669  uint32_t coeff, int64_t offset);
670  void (*chrConvertRange)(int16_t *dst1, int16_t *dst2, int width,
671  uint32_t coeff, int64_t offset);
672  /** @} */
673 
678 
679  int needs_hcscale; ///< Set if there are chroma planes to be converted.
680 
681  // scratch buffer for converting packed rgb0 sources
682  // filled with a copy of the input frame + fully opaque alpha,
683  // then passed as input to further conversion
684  uint8_t *rgb0_scratch;
686 
687  // scratch buffer for converting XYZ sources
688  // filled with the input converted to rgb48
689  // then passed as input to further conversion
690  uint8_t *xyz_scratch;
691  unsigned int xyz_scratch_allocated;
692 
693  unsigned int dst_slice_align;
697 
699 
700  // Hardware specific private data
701  void *hw_priv; /* refstruct */
702 
704 
705  FFFramePool frame_pool; /* for sws_scale_frame() data allocations */
706 };
707 //FIXME check init (where 0)
708 
709 static_assert(offsetof(SwsInternal, redDither) + DITHER32_INT == offsetof(SwsInternal, dither32),
710  "dither32 must be at the same offset as redDither + DITHER32_INT");
711 
712 #if ARCH_X86_64
713 /* x86 yuv2gbrp uses the SwsInternal for yuv coefficients
714  if struct offsets change the asm needs to be updated too */
715 static_assert(offsetof(SwsInternal, yuv2rgb_y_offset) == 40348,
716  "yuv2rgb_y_offset must be updated in x86 asm");
717 #endif
718 
720 int ff_yuv2rgb_c_init_tables(SwsInternal *c, const int inv_table[4],
721  int fullRange, int brightness,
722  int contrast, int saturation);
723 void ff_yuv2rgb_init_tables_ppc(SwsInternal *c, const int inv_table[4],
724  int brightness, int contrast, int saturation);
725 
726 void ff_updateMMXDitherTables(SwsInternal *c, int dstY);
727 
728 void ff_update_palette(SwsInternal *c, const uint32_t *pal);
729 
735 
738 
740 
745 
747 {
749  av_assert0(desc);
750  return desc->comp[0].depth == 16;
751 }
752 
754 {
756  av_assert0(desc);
757  return desc->comp[0].depth == 32;
758 }
759 
761 {
763  av_assert0(desc);
764  return desc->comp[0].depth >= 9 && desc->comp[0].depth <= 14;
765 }
766 
768 {
770  av_assert0(desc);
771  return desc->flags & AV_PIX_FMT_FLAG_BE;
772 }
773 
775 {
777  av_assert0(desc);
778  return !(desc->flags & AV_PIX_FMT_FLAG_RGB) && desc->nb_components >= 2;
779 }
780 
782 {
784  av_assert0(desc);
785  return ((desc->flags & AV_PIX_FMT_FLAG_PLANAR) && isYUV(pix_fmt));
786 }
787 
788 /*
789  * Identity semi-planar YUV formats. Specifically, those are YUV formats
790  * where the second and third components (U & V) are on the same plane.
791  */
793 {
795  av_assert0(desc);
796  return (isPlanarYUV(pix_fmt) && desc->comp[1].plane == desc->comp[2].plane);
797 }
798 
800 {
802  av_assert0(desc);
803  return (desc->flags & AV_PIX_FMT_FLAG_RGB);
804 }
805 
807 {
809  av_assert0(desc);
810  return !(desc->flags & AV_PIX_FMT_FLAG_PAL) &&
811  !(desc->flags & AV_PIX_FMT_FLAG_HWACCEL) &&
812  desc->nb_components <= 2 &&
815 }
816 
818 {
819  return pix_fmt == AV_PIX_FMT_RGB48BE ||
837 }
838 
840 {
841  return pix_fmt == AV_PIX_FMT_BGR48BE ||
859 }
860 
862 {
864  av_assert0(desc);
865  return !!(desc->flags & AV_PIX_FMT_FLAG_BAYER);
866 }
867 
869 {
871  av_assert0(desc);
872  return desc->comp[1].depth == 8;
873 }
874 
876 {
878  av_assert0(desc);
879  return (desc->flags & AV_PIX_FMT_FLAG_RGB) ||
881 }
882 
884 {
886  av_assert0(desc);
887  return desc->flags & AV_PIX_FMT_FLAG_FLOAT;
888 }
889 
891 {
893  av_assert0(desc);
894  return (desc->flags & AV_PIX_FMT_FLAG_FLOAT) && desc->comp[0].depth == 16;
895 }
896 
898 {
900  av_assert0(desc);
901  if (pix_fmt == AV_PIX_FMT_PAL8)
902  return 1;
903  return desc->flags & AV_PIX_FMT_FLAG_ALPHA;
904 }
905 
907 {
909  av_assert0(desc);
910  return (desc->nb_components >= 2 && !(desc->flags & AV_PIX_FMT_FLAG_PLANAR)) ||
913 }
914 
916 {
918  av_assert0(desc);
919  return (desc->nb_components >= 2 && (desc->flags & AV_PIX_FMT_FLAG_PLANAR));
920 }
921 
923 {
925  av_assert0(desc);
927 }
928 
930 {
932  av_assert0(desc);
933  return ((desc->flags & (AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB)) ==
935 }
936 
938 {
939  switch (pix_fmt) {
940  case AV_PIX_FMT_PAL8:
942  case AV_PIX_FMT_BGR8:
943  case AV_PIX_FMT_GRAY8:
945  case AV_PIX_FMT_RGB8:
946  return 1;
947  default:
948  return 0;
949  }
950 }
951 
952 /*
953  * Identity formats where the data is in the high bits, and the low bits are shifted away.
954  */
956 {
957  int i;
959  av_assert0(desc);
961  return 0;
962  for (i = 0; i < desc->nb_components; i++) {
963  if (!desc->comp[i].shift)
964  return 0;
965  if ((desc->comp[i].shift + desc->comp[i].depth) & 0x7)
966  return 0;
967  }
968  return 1;
969 }
970 
971 /*
972  * Identity formats where the chroma planes are swapped (CrCb order).
973  */
975 {
977  av_assert0(desc);
978  if (!isYUV(pix_fmt))
979  return 0;
980  if ((desc->flags & AV_PIX_FMT_FLAG_ALPHA) && desc->nb_components < 4)
981  return 0;
982  if (desc->nb_components < 3)
983  return 0;
985  return desc->comp[1].offset > desc->comp[2].offset;
986  else
987  return desc->comp[1].plane > desc->comp[2].plane;
988 }
989 
990 extern const uint64_t ff_dither4[2];
991 extern const uint64_t ff_dither8[2];
992 
993 extern const uint8_t ff_dither_2x2_4[3][8];
994 extern const uint8_t ff_dither_2x2_8[3][8];
995 extern const uint8_t ff_dither_4x4_16[5][8];
996 extern const uint8_t ff_dither_8x8_32[9][8];
997 extern const uint8_t ff_dither_8x8_73[9][8];
998 extern const uint8_t ff_dither_8x8_128[9][8];
999 extern const uint8_t ff_dither_8x8_220[9][8];
1000 
1001 extern const int32_t ff_yuv2rgb_coeffs[11][4];
1002 
1003 extern const AVClass ff_sws_context_class;
1004 
1005 int ff_sws_init_single_context(SwsContext *sws, SwsFilter *srcFilter,
1006  SwsFilter *dstFilter);
1007 
1008 /**
1009  * Set c->convert_unscaled to an unscaled converter if one exists for the
1010  * specific source and destination formats, bit depths, flags, etc.
1011  */
1016 
1018 
1020  planar1_YV12_fn *lumToYV12,
1021  planar1_YV12_fn *alpToYV12,
1022  planar2_YV12_fn *chrToYV12,
1023  planarX_YV12_fn *readLumPlanar,
1024  planarX_YV12_fn *readAlpPlanar,
1025  planarX2_YV12_fn *readChrPlanar);
1027  yuv2planar1_fn *yuv2plane1,
1029  yuv2interleavedX_fn *yuv2nv12cX,
1030  yuv2packed1_fn *yuv2packed1,
1031  yuv2packed2_fn *yuv2packed2,
1032  yuv2packedX_fn *yuv2packedX,
1033  yuv2anyX_fn *yuv2anyX);
1041 
1044 
1045 void ff_hyscale_fast_c(SwsInternal *c, int16_t *dst, int dstWidth,
1046  const uint8_t *src, int srcW, int xInc);
1047 void ff_hcscale_fast_c(SwsInternal *c, int16_t *dst1, int16_t *dst2,
1048  int dstWidth, const uint8_t *src1,
1049  const uint8_t *src2, int srcW, int xInc);
1050 int ff_init_hscaler_mmxext(int dstW, int xInc, uint8_t *filterCode,
1051  int16_t *filter, int32_t *filterPos,
1052  int numSplits);
1053 void ff_hyscale_fast_mmxext(SwsInternal *c, int16_t *dst,
1054  int dstWidth, const uint8_t *src,
1055  int srcW, int xInc);
1056 void ff_hcscale_fast_mmxext(SwsInternal *c, int16_t *dst1, int16_t *dst2,
1057  int dstWidth, const uint8_t *src1,
1058  const uint8_t *src2, int srcW, int xInc);
1059 
1060 int ff_sws_alphablendaway(SwsInternal *c, const uint8_t *const src[],
1061  const int srcStride[], int srcSliceY, int srcSliceH,
1062  uint8_t *const dst[], const int dstStride[]);
1063 
1064 void ff_copyPlane(const uint8_t *src, int srcStride,
1065  int srcSliceY, int srcSliceH, int width,
1066  uint8_t *dst, int dstStride);
1067 
1068 static inline void fillPlane16(uint8_t *plane, int stride, int width, int height, int y,
1069  int alpha, int bits, const int big_endian)
1070 {
1071  uint8_t *ptr = plane + stride * y;
1072  int v = alpha ? 0xFFFF>>(16-bits) : (1<<(bits-1));
1073  if (big_endian != HAVE_BIGENDIAN)
1074  v = av_bswap16(v);
1075  for (int i = 0; i < height; i++) {
1076  for (int j = 0; j < width; j++)
1077  AV_WN16(ptr + 2 * j, v);
1078  ptr += stride;
1079  }
1080 }
1081 
1082 static inline void fillPlane32(uint8_t *plane, int stride, int width, int height, int y,
1083  int alpha, int bits, const int big_endian, int is_float)
1084 {
1085  uint8_t *ptr = plane + stride * y;
1086  uint32_t v;
1087  uint32_t onef32 = 0x3f800000;
1088  if (is_float)
1089  v = alpha ? onef32 : 0;
1090  else
1091  v = alpha ? 0xFFFFFFFF>>(32-bits) : (1<<(bits-1));
1092  if (big_endian != HAVE_BIGENDIAN)
1093  v = av_bswap32(v);
1094 
1095  for (int i = 0; i < height; i++) {
1096  for (int j = 0; j < width; j++)
1097  AV_WN32(ptr + 4 * j, v);
1098  ptr += stride;
1099  }
1100 }
1101 
1102 
1103 #define MAX_SLICE_PLANES 4
1104 
1105 /// Slice plane
1106 typedef struct SwsPlane
1107 {
1108  int available_lines; ///< max number of lines that can be hold by this plane
1109  int sliceY; ///< index of first line
1110  int sliceH; ///< number of lines
1111  uint8_t **line; ///< line buffer
1112  uint8_t **tmp; ///< Tmp line buffer used by mmx code
1113 } SwsPlane;
1114 
1115 /**
1116  * Struct which defines a slice of an image to be scaled or an output for
1117  * a scaled slice.
1118  * A slice can also be used as intermediate ring buffer for scaling steps.
1119  */
1120 typedef struct SwsSlice
1121 {
1122  int width; ///< Slice line width
1123  int h_chr_sub_sample; ///< horizontal chroma subsampling factor
1124  int v_chr_sub_sample; ///< vertical chroma subsampling factor
1125  int is_ring; ///< flag to identify if this slice is a ring buffer
1126  int should_free_lines; ///< flag to identify if there are dynamic allocated lines
1127  enum AVPixelFormat fmt; ///< planes pixel format
1128  SwsPlane plane[MAX_SLICE_PLANES]; ///< color planes
1129 } SwsSlice;
1130 
1131 /**
1132  * Struct which holds all necessary data for processing a slice.
1133  * A processing step can be a color conversion or horizontal/vertical scaling.
1134  */
1135 typedef struct SwsFilterDescriptor
1136 {
1137  SwsSlice *src; ///< Source slice
1138  SwsSlice *dst; ///< Output slice
1139 
1140  int alpha; ///< Flag for processing alpha channel
1141  void *instance; ///< Filter instance data
1142 
1143  /// Function for processing input slice sliceH lines starting from line sliceY
1144  int (*process)(SwsInternal *c, struct SwsFilterDescriptor *desc, int sliceY, int sliceH);
1146 
1147 // warp input lines in the form (src + width*i + j) to slice format (line[i][j])
1148 // relative=true means first line src[x][0] otherwise first line is src[x][lum/crh Y]
1149 int ff_init_slice_from_src(SwsSlice * s, uint8_t *const src[4], const int stride[4],
1150  int srcW, int lumY, int lumH, int chrY, int chrH, int relative);
1151 
1152 // Initialize scaler filter descriptor chain
1154 
1155 // Free all filter data
1157 
1158 /*
1159  function for applying ring buffer logic into slice s
1160  It checks if the slice can hold more @lum lines, if yes
1161  do nothing otherwise remove @lum least used lines.
1162  It applies the same procedure for @chr lines.
1163 */
1164 int ff_rotate_slice(SwsSlice *s, int lum, int chr);
1165 
1166 /// initializes gamma conversion descriptor
1168 
1169 /// initializes lum pixel format conversion descriptor
1171 
1172 /// initializes lum horizontal scaling descriptor
1173 int ff_init_desc_hscale(SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst, uint16_t *filter, int * filter_pos, int filter_size, int xInc);
1174 
1175 /// initializes chr pixel format conversion descriptor
1177 
1178 /// initializes chr horizontal scaling descriptor
1179 int ff_init_desc_chscale(SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst, uint16_t *filter, int * filter_pos, int filter_size, int xInc);
1180 
1182 
1183 /// initializes vertical scaling descriptors
1185 
1186 /// setup vertical scaler functions
1188  yuv2interleavedX_fn yuv2nv12cX, yuv2packed1_fn yuv2packed1, yuv2packed2_fn yuv2packed2,
1189  yuv2packedX_fn yuv2packedX, yuv2anyX_fn yuv2anyX, int use_mmx);
1190 
1191 int ff_sws_slice_worker(void *priv, int jobnr, int threadnr,
1192  int nb_jobs, int nb_threads);
1193 
1194 int ff_swscale(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
1195  int srcSliceY, int srcSliceH, uint8_t *const dst[],
1196  const int dstStride[], int dstSliceY, int dstSliceH);
1197 
1198 /**
1199  * Helper for dispatching a single function across multiple threads. This is
1200  * a wrapper around avpriv_slicethread_create2() + avpriv_slicethread_execute2(),
1201  * falling back to direct invocation if threading is not available.
1202  */
1203 int ff_sws_thread_exec(void *priv,
1204  int (*func)(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads),
1205  int nb_threads, int nb_jobs);
1206 
1207 //number of extra lines to process
1208 #define MAX_LINES_AHEAD 4
1209 
1210 //shuffle filter and filterPos for hyScale and hcScale filters in avx2
1211 int ff_shuffle_filter_coefficients(SwsInternal *c, int* filterPos, int filterSize, int16_t *filter, int dstW);
1212 #endif /* SWSCALE_SWSCALE_INTERNAL_H */
ff_hyscale_fast_mmxext
void ff_hyscale_fast_mmxext(SwsInternal *c, int16_t *dst, int dstWidth, const uint8_t *src, int srcW, int xInc)
Definition: hscale_fast_bilinear_simd.c:192
isBayer
static av_always_inline int isBayer(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:861
SwsInternal::needs_hcscale
int needs_hcscale
Set if there are chroma planes to be converted.
Definition: swscale_internal.h:679
SwsInternal::greenDither
uint64_t greenDither
Definition: swscale_internal.h:523
func
int(* func)(AVBPrint *dst, const char *in, const char *arg)
Definition: jacosubdec.c:66
SwsInternal::input_rgb2yuv_table
int32_t input_rgb2yuv_table[16+40 *4]
Definition: swscale_internal.h:467
yuv2planar1_fn
void(* yuv2planar1_fn)(const int16_t *src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
Write one line of horizontally scaled data to planar output without any additional vertical scaling (...
Definition: swscale_internal.h:128
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
SwsInternal::table_rV
uint8_t * table_rV[256+2 *YUVRGB_TABLE_HEADROOM]
Definition: swscale_internal.h:464
ff_dither_8x8_128
const uint8_t ff_dither_8x8_128[9][8]
Definition: swscale.c:42
AV_PIX_FMT_BGR48LE
@ AV_PIX_FMT_BGR48LE
packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as lit...
Definition: pixfmt.h:146
isPlanarRGB
static av_always_inline int isPlanarRGB(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:929
SwsPlane::sliceH
int sliceH
number of lines
Definition: swscale_internal.h:1110
SwsInternal::rgb0_scratch
uint8_t * rgb0_scratch
Definition: swscale_internal.h:684
SwsInternal::hLumFilterSize
int hLumFilterSize
Horizontal filter size for luma/alpha pixels.
Definition: swscale_internal.h:445
isRGB
static av_always_inline int isRGB(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:799
Half2FloatTables
Definition: half2float.h:27
isPacked
static av_always_inline int isPacked(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:906
SwsPlane::line
uint8_t ** line
line buffer
Definition: swscale_internal.h:1111
r
const char * r
Definition: vf_curves.c:127
SwsInternal::rgb0_scratch_allocated
unsigned int rgb0_scratch_allocated
Definition: swscale_internal.h:685
AV_PIX_FMT_BGRA64BE
@ AV_PIX_FMT_BGRA64BE
packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is st...
Definition: pixfmt.h:204
ff_dither_8x8_220
const uint8_t ff_dither_8x8_220[9][8]
Definition: output.c:85
ff_sws_init_output_funcs
void ff_sws_init_output_funcs(SwsInternal *c, yuv2planar1_fn *yuv2plane1, yuv2planarX_fn *yuv2planeX, yuv2interleavedX_fn *yuv2nv12cX, yuv2packed1_fn *yuv2packed1, yuv2packed2_fn *yuv2packed2, yuv2packedX_fn *yuv2packedX, yuv2anyX_fn *yuv2anyX)
Definition: output.c:3291
mem_internal.h
rgb2yuv
static void fn() rgb2yuv(uint8_t *_yuv[3], const ptrdiff_t yuv_stride[3], int16_t *rgb[3], ptrdiff_t s, int w, int h, const int16_t rgb2yuv_coeffs[3][3][8], const int16_t yuv_offset[8])
Definition: colorspacedsp_template.c:130
SwsInternal::lumConvertRange_coeff
uint32_t lumConvertRange_coeff
Definition: swscale_internal.h:674
SwsInternal::srcFormatBpp
int srcFormatBpp
Number of bits per pixel of the source pixel format.
Definition: swscale_internal.h:367
AV_PIX_FMT_BGR32
#define AV_PIX_FMT_BGR32
Definition: pixfmt.h:519
AV_PIX_FMT_RGB444LE
@ AV_PIX_FMT_RGB444LE
packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined
Definition: pixfmt.h:136
isPlanarYUV
static av_always_inline int isPlanarYUV(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:781
SwsInternal::cascaded_tmp
uint8_t * cascaded_tmp[2][4]
Definition: swscale_internal.h:387
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:3460
SwsInternal::desc
struct SwsFilterDescriptor * desc
Definition: swscale_internal.h:399
SwsInternal::formatConvBuffer
uint8_t * formatConvBuffer
Definition: swscale_internal.h:420
ff_yuv2rgb_init_tables_ppc
void ff_yuv2rgb_init_tables_ppc(SwsInternal *c, const int inv_table[4], int brightness, int contrast, int saturation)
Definition: yuv2rgb_altivec.c:638
src1
const pixel * src1
Definition: h264pred_template.c:420
SwsInternal::stride_unaligned_warned
atomic_int stride_unaligned_warned
Definition: swscale_internal.h:694
saturation
static IPT saturation(const CmsCtx *ctx, IPT ipt)
Definition: cms.c:559
ff_yuv2rgb_init_x86
SwsFunc ff_yuv2rgb_init_x86(SwsInternal *c)
Definition: yuv2rgb.c:241
av_cold
#define av_cold
Definition: attributes.h:119
int64_t
long long int64_t
Definition: coverity.c:34
RangeList::ranges_allocated
int ranges_allocated
Definition: swscale_internal.h:94
SwsInternal::lastInChrBuf
int lastInChrBuf
Last scaled horizontal chroma line from source in the ring buffer.
Definition: swscale_internal.h:417
AV_PIX_FMT_FLAG_FLOAT
#define AV_PIX_FMT_FLAG_FLOAT
The pixel format contains IEEE-754 floating point values.
Definition: pixdesc.h:158
SwsSlice::plane
SwsPlane plane[MAX_SLICE_PLANES]
color planes
Definition: swscale_internal.h:1128
SwsInternal::color_conversion_warned
int color_conversion_warned
Definition: swscale_internal.h:696
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:472
pixdesc.h
AV_PIX_FMT_RGBA64BE
@ AV_PIX_FMT_RGBA64BE
packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is st...
Definition: pixfmt.h:202
ff_sws_alphablendaway
int ff_sws_alphablendaway(SwsInternal *c, const uint8_t *const src[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[])
Definition: alphablend.c:23
isGray
static av_always_inline int isGray(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:806
ff_rotate_slice
int ff_rotate_slice(SwsSlice *s, int lum, int chr)
Definition: slice.c:120
ff_sws_init_range_convert_aarch64
av_cold void ff_sws_init_range_convert_aarch64(SwsInternal *c)
Definition: swscale.c:314
SwsFilterDescriptor
Struct which holds all necessary data for processing a slice.
Definition: swscale_internal.h:1135
yuv2planeX
static void FUNC() yuv2planeX(const int16_t *filter, int filterSize, const int16_t **src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
Definition: swscale_ppc_template.c:84
table
static const uint16_t table[]
Definition: prosumer.c:203
SwsInternal::lumToYV12
planar1_YV12_fn lumToYV12
Definition: swscale_internal.h:575
AV_PIX_FMT_MONOWHITE
@ AV_PIX_FMT_MONOWHITE
Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb.
Definition: pixfmt.h:82
atomic_int
intptr_t atomic_int
Definition: stdatomic.h:55
SwsInternal::vChrFilterPos
int32_t * vChrFilterPos
Array of vertical filter starting positions for each dst[i] for chroma planes.
Definition: swscale_internal.h:444
SwsInternal::vChrFilterSize
int vChrFilterSize
Vertical filter size for chroma pixels.
Definition: swscale_internal.h:448
SwsInternal::y_temp
uint64_t y_temp
Definition: swscale_internal.h:541
AV_PIX_FMT_RGB32_1
#define AV_PIX_FMT_RGB32_1
Definition: pixfmt.h:518
ff_sws_init_swscale_vsx
void ff_sws_init_swscale_vsx(SwsInternal *c)
Definition: swscale_vsx.c:2019
ff_yuv2rgb_init_aarch64
SwsFunc ff_yuv2rgb_init_aarch64(SwsInternal *c)
Definition: swscale_unscaled.c:215
SwsInternal::uint2float_lut
float uint2float_lut[256]
Definition: swscale_internal.h:404
SwsInternal::cascaded_tmpStride
int cascaded_tmpStride[2][4]
Definition: swscale_internal.h:386
AV_PIX_FMT_BGR24
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
Definition: pixfmt.h:76
SwsInternal::esp
uint64_t esp
Definition: swscale_internal.h:537
SwsInternal::h2f_tables
Half2FloatTables * h2f_tables
Definition: swscale_internal.h:698
SwsInternal::dstW_mmx
int dstW_mmx
Definition: swscale_internal.h:536
SwsInternal::dstBpc
int dstBpc
Definition: swscale_internal.h:368
SwsInternal::lumMmxFilter
int32_t lumMmxFilter[4 *MAX_FILTER_SIZE]
Definition: swscale_internal.h:534
SwsInternal::yuv2rgb_u2b_coeff
int yuv2rgb_u2b_coeff
Definition: swscale_internal.h:494
AVSliceThread
struct AVSliceThread AVSliceThread
Definition: slicethread.h:25
SwsInternal::srcXYZ
int srcXYZ
Definition: swscale_internal.h:487
SwsInternal::hcscale_fast
void(* hcscale_fast)(SwsInternal *c, int16_t *dst1, int16_t *dst2, int dstWidth, const uint8_t *src1, const uint8_t *src2, int srcW, int xInc)
Definition: swscale_internal.h:611
SwsInternal::table_gV
int table_gV[256+2 *YUVRGB_TABLE_HEADROOM]
Definition: swscale_internal.h:463
ff_sws_init_scale
void ff_sws_init_scale(SwsInternal *c)
Definition: swscale.c:697
AV_PIX_FMT_RGB555BE
@ AV_PIX_FMT_RGB555BE
packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined
Definition: pixfmt.h:114
SwsInternal::frame_dst
AVFrame * frame_dst
Definition: swscale_internal.h:377
SwsInternal::chrDstH
int chrDstH
Height of destination chroma planes.
Definition: swscale_internal.h:363
SwsInternal::dither32
uint32_t dither32[8]
Definition: swscale_internal.h:549
SwsSlice::fmt
enum AVPixelFormat fmt
planes pixel format
Definition: swscale_internal.h:1127
SwsFilterDescriptor::src
SwsSlice * src
Source slice.
Definition: swscale_internal.h:1137
ff_sws_thread_exec
int ff_sws_thread_exec(void *priv, int(*func)(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads), int nb_threads, int nb_jobs)
Helper for dispatching a single function across multiple threads.
Definition: utils.c:2444
ff_sws_init_single_context
int ff_sws_init_single_context(SwsContext *sws, SwsFilter *srcFilter, SwsFilter *dstFilter)
Definition: utils.c:1137
Range::start
unsigned int start
Definition: swscale_internal.h:87
av_always_inline
#define av_always_inline
Definition: attributes.h:76
SwsInternal::chrDstW
int chrDstW
Width of destination chroma planes.
Definition: swscale_internal.h:362
SwsInternal::chrMmxextFilterCode
uint8_t * chrMmxextFilterCode
Runtime-generated MMXEXT horizontal fast bilinear scaler code for chroma planes.
Definition: swscale_internal.h:454
SwsInternal::use_mmx_vfilter
int use_mmx_vfilter
Definition: swscale_internal.h:553
SwsInternal::hLumFilter
int16_t * hLumFilter
Array of horizontal filter coefficients for luma/alpha planes.
Definition: swscale_internal.h:437
is16BPS
static av_always_inline int is16BPS(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:746
SwsFilterDescriptor::instance
void * instance
Filter instance data.
Definition: swscale_internal.h:1141
ff_sws_init_input_funcs
void ff_sws_init_input_funcs(SwsInternal *c, planar1_YV12_fn *lumToYV12, planar1_YV12_fn *alpToYV12, planar2_YV12_fn *chrToYV12, planarX_YV12_fn *readLumPlanar, planarX_YV12_fn *readAlpPlanar, planarX2_YV12_fn *readChrPlanar)
SwsInternal::vRounder
uint64_t vRounder
Definition: swscale_internal.h:538
FFFramePool
Frame pool.
Definition: framepool.h:32
ff_sws_init_swscale_x86
void ff_sws_init_swscale_x86(SwsInternal *c)
Definition: swscale.c:485
SwsInternal::table_gU
uint8_t * table_gU[256+2 *YUVRGB_TABLE_HEADROOM]
Definition: swscale_internal.h:465
SwsInternal::inv_gamma
uint16_t * inv_gamma
Definition: swscale_internal.h:393
SwsInternal::slicethread
AVSliceThread * slicethread
Definition: swscale_internal.h:344
SwsInternal::input_opaque
void * input_opaque
Opaque data pointer passed to all input functions.
Definition: swscale_internal.h:573
AV_PIX_FMT_FLAG_HWACCEL
#define AV_PIX_FMT_FLAG_HWACCEL
Pixel format is an HW accelerated format.
Definition: pixdesc.h:128
SwsInternal::uOffset
uint64_t uOffset
Definition: swscale_internal.h:532
SwsInternal::readAlpPlanar
planarX_YV12_fn readAlpPlanar
Definition: swscale_internal.h:585
Range::len
unsigned int len
Definition: swscale_internal.h:88
ff_dither_2x2_8
const uint8_t ff_dither_2x2_8[3][8]
Definition: output.c:46
SwsInternal::frame_src
AVFrame * frame_src
Definition: swscale_internal.h:376
ff_sws_init_range_convert_loongarch
av_cold void ff_sws_init_range_convert_loongarch(SwsInternal *c)
Definition: swscale_init_loongarch.c:27
SwsInternal::yuv2rgb_v2g_coeff
int yuv2rgb_v2g_coeff
Definition: swscale_internal.h:492
ff_sws_init_xyzdsp_aarch64
av_cold void ff_sws_init_xyzdsp_aarch64(SwsInternal *c)
Definition: swscale.c:339
isNBPS
static av_always_inline int isNBPS(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:760
SwsFilterDescriptor::process
int(* process)(SwsInternal *c, struct SwsFilterDescriptor *desc, int sliceY, int sliceH)
Function for processing input slice sliceH lines starting from line sliceY.
Definition: swscale_internal.h:1144
SwsSlice::h_chr_sub_sample
int h_chr_sub_sample
horizontal chroma subsampling factor
Definition: swscale_internal.h:1123
SwsInternal::yuvTable
void * yuvTable
Definition: swscale_internal.h:460
SwsInternal::dstColorspaceTable
int dstColorspaceTable[4]
Definition: swscale_internal.h:484
ff_hyscale_fast_c
void ff_hyscale_fast_c(SwsInternal *c, int16_t *dst, int dstWidth, const uint8_t *src, int srcW, int xInc)
Definition: hscale_fast_bilinear.c:23
ff_dither4
const uint64_t ff_dither4[2]
Definition: swscale.c:33
ff_dither_8x8_73
const uint8_t ff_dither_8x8_73[9][8]
Definition: output.c:72
SwsInternal::opts
SwsContext opts
Definition: swscale_internal.h:339
SwsColorFunc
void(* SwsColorFunc)(const SwsInternal *c, uint8_t *dst, int dst_stride, const uint8_t *src, int src_stride, int w, int h)
Definition: swscale_internal.h:103
SwsBackend
SwsBackend
Definition: swscale.h:110
MAX_FILTER_SIZE
#define MAX_FILTER_SIZE
Definition: swscale_internal.h:55
AV_PIX_FMT_BGR8
@ AV_PIX_FMT_BGR8
packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
Definition: pixfmt.h:90
avassert.h
SwsInternal::xyz_scratch
uint8_t * xyz_scratch
Definition: swscale_internal.h:690
SwsInternal::is_legacy_init
int is_legacy_init
Definition: swscale_internal.h:703
SwsInternal::pal_rgb
uint32_t pal_rgb[256]
Definition: swscale_internal.h:402
SwsColorXform::gamma
SwsLuts gamma
Definition: swscale_internal.h:112
SwsInternal::src_ranges
RangeList src_ranges
Definition: swscale_internal.h:379
ff_shuffle_filter_coefficients
int ff_shuffle_filter_coefficients(SwsInternal *c, int *filterPos, int filterSize, int16_t *filter, int dstW)
Definition: utils.c:97
YUVRGB_TABLE_HEADROOM
#define YUVRGB_TABLE_HEADROOM
Definition: swscale_internal.h:52
yuv2packed2_fn
void(* yuv2packed2_fn)(SwsInternal *c, const int16_t *lumSrc[2], const int16_t *chrUSrc[2], const int16_t *chrVSrc[2], const int16_t *alpSrc[2], uint8_t *dest, int dstW, int yalpha, int uvalpha, int y)
Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB output by doing bilinear scalin...
Definition: swscale_internal.h:234
SwsInternal::brightness
int brightness
Definition: swscale_internal.h:482
SwsInternal::redDither
uint64_t redDither
Definition: swscale_internal.h:522
SwsInternal::nb_slice_ctx
int nb_slice_ctx
Definition: swscale_internal.h:346
intreadwrite.h
dither
static const uint16_t dither[8][8]
Definition: vf_gradfun.c:46
SwsInternal::slice_ctx
SwsContext ** slice_ctx
Definition: swscale_internal.h:345
SwsInternal::alpToYV12
planar1_YV12_fn alpToYV12
Definition: swscale_internal.h:576
ff_dither_8x8_32
const uint8_t ff_dither_8x8_32[9][8]
Definition: output.c:60
pix_fmt
static enum AVPixelFormat pix_fmt
Definition: demux_decode.c:41
SwsInternal::cascaded_context
SwsContext * cascaded_context[3]
Definition: swscale_internal.h:385
SwsSlice::width
int width
Slice line width.
Definition: swscale_internal.h:1122
SwsInternal::hw_priv
void * hw_priv
Definition: swscale_internal.h:701
SwsInternal::ugCoeff
uint64_t ugCoeff
Definition: swscale_internal.h:530
bits
uint8_t bits
Definition: vp3data.h:128
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:42
ff_yuv2rgb_c_init_tables
int ff_yuv2rgb_c_init_tables(SwsInternal *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation)
SwsPlane::tmp
uint8_t ** tmp
Tmp line buffer used by mmx code.
Definition: swscale_internal.h:1112
ff_get_unscaled_swscale
void ff_get_unscaled_swscale(SwsInternal *c)
Set c->convert_unscaled to an unscaled converter if one exists for the specific source and destinatio...
Definition: swscale_unscaled.c:2392
AV_PIX_FMT_FLAG_ALPHA
#define AV_PIX_FMT_FLAG_ALPHA
The pixel format has an alpha channel.
Definition: pixdesc.h:147
ctx
static AVFormatContext * ctx
Definition: movenc.c:49
SwsInternal::dither_error
int * dither_error[4]
Definition: swscale_internal.h:479
ff_sws_context_class
const AVClass ff_sws_context_class
Definition: options.c:124
AV_PIX_FMT_RGB4
@ AV_PIX_FMT_RGB4
packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in ...
Definition: pixfmt.h:94
SwsInternal::lumMmxextFilterCode
uint8_t * lumMmxextFilterCode
Runtime-generated MMXEXT horizontal fast bilinear scaler code for luma/alpha planes.
Definition: swscale_internal.h:453
ff_sws_init_swscale_aarch64
void ff_sws_init_swscale_aarch64(SwsInternal *c)
Definition: swscale.c:350
SwsInternal::contrast
int contrast
Definition: swscale_internal.h:482
AV_PIX_FMT_BGR32_1
#define AV_PIX_FMT_BGR32_1
Definition: pixfmt.h:520
SwsInternal::vLumFilterSize
int vLumFilterSize
Vertical filter size for luma/alpha pixels.
Definition: swscale_internal.h:447
ff_sws_init_swscale_loongarch
void ff_sws_init_swscale_loongarch(SwsInternal *c)
Definition: swscale_init_loongarch.c:62
SwsInternal::chrSrcH
int chrSrcH
Height of source chroma planes.
Definition: swscale_internal.h:361
ff_sws_init_range_convert
av_cold void ff_sws_init_range_convert(SwsInternal *c)
Definition: swscale.c:626
ff_init_hscaler_mmxext
int ff_init_hscaler_mmxext(int dstW, int xInc, uint8_t *filterCode, int16_t *filter, int32_t *filterPos, int numSplits)
Definition: hscale_fast_bilinear_simd.c:30
SwsInternal::chrConvertRange
void(* chrConvertRange)(int16_t *dst1, int16_t *dst2, int width, uint32_t coeff, int64_t offset)
Definition: swscale_internal.h:670
SwsInternal::yuv2anyX
yuv2anyX_fn yuv2anyX
Definition: swscale_internal.h:570
isSemiPlanarYUV
static av_always_inline int isSemiPlanarYUV(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:792
ff_hcscale_fast_mmxext
void ff_hcscale_fast_mmxext(SwsInternal *c, int16_t *dst1, int16_t *dst2, int dstWidth, const uint8_t *src1, const uint8_t *src2, int srcW, int xInc)
Definition: hscale_fast_bilinear_simd.c:282
SwsInternal::chrConvertRange_coeff
uint32_t chrConvertRange_coeff
Definition: swscale_internal.h:675
AV_PIX_FMT_RGB565LE
@ AV_PIX_FMT_RGB565LE
packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian
Definition: pixfmt.h:113
ff_yuv2rgb_init_ppc
SwsFunc ff_yuv2rgb_init_ppc(SwsInternal *c)
Definition: yuv2rgb_altivec.c:567
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
ff_init_slice_from_src
int ff_init_slice_from_src(SwsSlice *s, uint8_t *const src[4], const int stride[4], int srcW, int lumY, int lumH, int chrY, int chrH, int relative)
Definition: slice.c:148
SwsInternal::srcBpc
int srcBpc
Definition: swscale_internal.h:368
SwsInternal::dither16
uint16_t dither16[8]
Definition: swscale_internal.h:548
planarX_YV12_fn
void(* planarX_YV12_fn)(uint8_t *dst, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opaque)
Unscaled conversion of arbitrary planar data (e.g.
Definition: swscale_internal.h:326
isFloat16
static av_always_inline int isFloat16(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:890
SwsPlane::available_lines
int available_lines
max number of lines that can be hold by this plane
Definition: swscale_internal.h:1108
SwsInternal::uv_off
ptrdiff_t uv_off
offset (in pixels) between u and v planes
Definition: swscale_internal.h:546
AV_PIX_FMT_RGB48LE
@ AV_PIX_FMT_RGB48LE
packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as lit...
Definition: pixfmt.h:110
SwsInternal::hyScale
void(* hyScale)(SwsInternal *c, int16_t *dst, int dstW, const uint8_t *src, const int16_t *filter, const int32_t *filterPos, int filterSize)
Scale one horizontal line of input data using a filter over the input lines, to produce one (differen...
Definition: swscale_internal.h:648
SwsInternal::chrXInc
int chrXInc
Definition: swscale_internal.h:364
AV_PIX_FMT_MONOBLACK
@ AV_PIX_FMT_MONOBLACK
Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb.
Definition: pixfmt.h:83
RangeList
Definition: swscale_internal.h:91
SwsInternal::chrMmxextFilterCodeSize
int chrMmxextFilterCodeSize
Runtime-generated MMXEXT horizontal fast bilinear scaler code size for chroma planes.
Definition: swscale_internal.h:452
ff_sws_init_swscale_riscv
void ff_sws_init_swscale_riscv(SwsInternal *c)
Definition: swscale.c:74
AV_PIX_FMT_BGR565LE
@ AV_PIX_FMT_BGR565LE
packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian
Definition: pixfmt.h:118
AV_PIX_FMT_RGBA64LE
@ AV_PIX_FMT_RGBA64LE
packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is st...
Definition: pixfmt.h:203
SwsInternal::saturation
int saturation
Definition: swscale_internal.h:482
SwsPlane
Slice plane.
Definition: swscale_internal.h:1106
RangeList::nb_ranges
unsigned int nb_ranges
Definition: swscale_internal.h:93
ff_get_unscaled_swscale_ppc
void ff_get_unscaled_swscale_ppc(SwsInternal *c)
Definition: yuv2yuv_altivec.c:188
planarX2_YV12_fn
void(* planarX2_YV12_fn)(uint8_t *dst, uint8_t *dst2, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opaque)
Definition: swscale_internal.h:329
ff_init_desc_hscale
int ff_init_desc_hscale(SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst, uint16_t *filter, int *filter_pos, int filter_size, int xInc)
initializes lum horizontal scaling descriptor
Definition: hscale.c:146
SwsInternal::readLumPlanar
planarX_YV12_fn readLumPlanar
Functions to read planar input, such as planar RGB, and convert internally to Y/UV/A.
Definition: swscale_internal.h:584
SwsInternal::canMMXEXTBeUsed
int canMMXEXTBeUsed
Definition: swscale_internal.h:456
SwsInternal::lastInLumBuf
int lastInLumBuf
Last scaled horizontal luma/alpha line from source in the ring buffer.
Definition: swscale_internal.h:416
ff_sws_init_range_convert_x86
av_cold void ff_sws_init_range_convert_x86(SwsInternal *c)
Definition: swscale.c:469
SwsInternal::slice
struct SwsSlice * slice
Definition: swscale_internal.h:398
AV_PIX_FMT_RGB8
@ AV_PIX_FMT_RGB8
packed RGB 3:3:2, 8bpp, (msb)3R 3G 2B(lsb)
Definition: pixfmt.h:93
SwsInternal::chrMmxFilter
int32_t chrMmxFilter[4 *MAX_FILTER_SIZE]
Definition: swscale_internal.h:535
AV_PIX_FMT_BGR4
@ AV_PIX_FMT_BGR4
packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in ...
Definition: pixfmt.h:91
ff_yuv2rgb_init_loongarch
SwsFunc ff_yuv2rgb_init_loongarch(SwsInternal *c)
Definition: swscale_init_loongarch.c:110
SwsInternal::lumXInc
int lumXInc
Definition: swscale_internal.h:364
AV_PIX_FMT_GRAY8
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
Definition: pixfmt.h:81
AV_PIX_FMT_BGR555BE
@ AV_PIX_FMT_BGR555BE
packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined
Definition: pixfmt.h:119
planar2_YV12_fn
void(* planar2_YV12_fn)(uint8_t *dst, uint8_t *dst2, const uint8_t *src, const uint8_t *src2, const uint8_t *src3, int width, uint32_t *pal, void *opaque)
Unscaled conversion of chroma plane to YV12 for horizontal scaler.
Definition: swscale_internal.h:318
SwsInternal::dstXYZ
int dstXYZ
Definition: swscale_internal.h:488
ff_init_desc_no_chr
int ff_init_desc_no_chr(SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst)
Definition: hscale.c:284
Range
Definition: vf_colorbalance.c:37
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
SwsInternal::dstY
int dstY
Last destination vertical line output from last slice.
Definition: swscale_internal.h:459
SwsInternal::yuv2packed2
yuv2packed2_fn yuv2packed2
Definition: swscale_internal.h:568
AV_PIX_FMT_BGR4_BYTE
@ AV_PIX_FMT_BGR4_BYTE
packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb)
Definition: pixfmt.h:92
ff_range_add
int ff_range_add(RangeList *r, unsigned int start, unsigned int len)
Definition: utils.c:2384
isDataInHighBits
static av_always_inline int isDataInHighBits(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:955
ff_sws_init_xyzdsp
av_cold void ff_sws_init_xyzdsp(SwsInternal *c)
Definition: swscale.c:863
yuv2packedX_fn
void(* yuv2packedX_fn)(SwsInternal *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, const int16_t *chrFilter, const int16_t **chrUSrc, const int16_t **chrVSrc, int chrFilterSize, const int16_t **alpSrc, uint8_t *dest, int dstW, int y)
Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB output by doing multi-point ver...
Definition: swscale_internal.h:266
SwsInternal::needAlpha
int needAlpha
Definition: swscale_internal.h:421
ff_sws_slice_worker
int ff_sws_slice_worker(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads)
Definition: swscale.c:1645
relative
static IPT relative(const CmsCtx *ctx, IPT ipt)
Definition: cms.c:544
isBE
static av_always_inline int isBE(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:767
AV_PIX_FMT_RGB24
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
Definition: pixfmt.h:75
SwsInternal::parent
SwsContext * parent
Definition: swscale_internal.h:342
SwsInternal::xyz_scratch_allocated
unsigned int xyz_scratch_allocated
Definition: swscale_internal.h:691
SwsInternal::xyz12Torgb48
SwsColorFunc xyz12Torgb48
Definition: swscale_internal.h:558
height
#define height
Definition: dsp.h:89
SwsInternal::yuv2rgb_v2r_coeff
int yuv2rgb_v2r_coeff
Definition: swscale_internal.h:491
SwsFilterDescriptor::dst
SwsSlice * dst
Output slice.
Definition: swscale_internal.h:1138
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem_internal.h:104
ff_sws_enabled_backends
SwsBackend ff_sws_enabled_backends(const SwsContext *ctx)
Definition: utils.c:60
ff_sws_init_swscale_ppc
void ff_sws_init_swscale_ppc(SwsInternal *c)
Definition: swscale_altivec.c:233
AV_WN32
#define AV_WN32(p, v)
Definition: intreadwrite.h:372
SwsInternal::yCoeff
uint64_t yCoeff
Definition: swscale_internal.h:526
AV_PIX_FMT_FLAG_RGB
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
Definition: pixdesc.h:136
fillPlane16
static void fillPlane16(uint8_t *plane, int stride, int width, int height, int y, int alpha, int bits, const int big_endian)
Definition: swscale_internal.h:1068
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:87
usePal
static av_always_inline int usePal(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:937
filter
void(* filter)(uint8_t *src, ptrdiff_t stride, int qscale)
Definition: h263dsp.c:29
av_bswap32
#define av_bswap32
Definition: bswap.h:47
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
isAnyRGB
static av_always_inline int isAnyRGB(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:875
AV_PIX_FMT_RGB444BE
@ AV_PIX_FMT_RGB444BE
packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined
Definition: pixfmt.h:137
SwsInternal::yuv2rgb_y_coeff
int yuv2rgb_y_coeff
Definition: swscale_internal.h:490
SwsInternal::data_unaligned_warned
atomic_int data_unaligned_warned
Definition: swscale_internal.h:695
planar1_YV12_fn
void(* planar1_YV12_fn)(uint8_t *dst, const uint8_t *src, const uint8_t *src2, const uint8_t *src3, int width, uint32_t *pal, void *opaque)
Unscaled conversion of luma/alpha plane to YV12 for horizontal scaler.
Definition: swscale_internal.h:311
ff_init_desc_chscale
int ff_init_desc_chscale(SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst, uint16_t *filter, int *filter_pos, int filter_size, int xInc)
initializes chr horizontal scaling descriptor
Definition: hscale.c:253
isYUV
static av_always_inline int isYUV(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:774
AV_PIX_FMT_FLAG_BITSTREAM
#define AV_PIX_FMT_FLAG_BITSTREAM
All values of a component are bit-wise packed end to end.
Definition: pixdesc.h:124
ff_init_desc_cfmt_convert
int ff_init_desc_cfmt_convert(SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst, uint32_t *pal)
initializes chr pixel format conversion descriptor
Definition: hscale.c:238
ff_init_vscale
int ff_init_vscale(SwsInternal *c, SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst)
initializes vertical scaling descriptors
Definition: vscale.c:214
ff_swscale
int ff_swscale(SwsInternal *c, const uint8_t *const src[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[], int dstSliceY, int dstSliceH)
Definition: swscale.c:263
frame.h
AV_PIX_FMT_BGR444BE
@ AV_PIX_FMT_BGR444BE
packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined
Definition: pixfmt.h:139
SwsInternal::rgb48Toxyz12
SwsColorFunc rgb48Toxyz12
Definition: swscale_internal.h:559
SwsFilter
Definition: swscale.h:484
SwsLuts
Definition: swscale_internal.h:106
is32BPS
static av_always_inline int is32BPS(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:753
AV_PIX_FMT_RGB32
#define AV_PIX_FMT_RGB32
Definition: pixfmt.h:517
SwsInternal::hChrFilterSize
int hChrFilterSize
Horizontal filter size for chroma pixels.
Definition: swscale_internal.h:446
isBGRinInt
static av_always_inline int isBGRinInt(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:839
SwsInternal::sliceDir
int sliceDir
Direction that slices are fed to the scaler (1 = top-to-bottom, -1 = bottom-to-top).
Definition: swscale_internal.h:374
isSwappedChroma
static av_always_inline int isSwappedChroma(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:974
AV_PIX_FMT_BGR565BE
@ AV_PIX_FMT_BGR565BE
packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian
Definition: pixfmt.h:117
offset
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
Definition: writing_filters.txt:86
ff_free_filters
int ff_free_filters(SwsInternal *c)
Definition: slice.c:386
ff_init_filters
int ff_init_filters(SwsInternal *c)
Definition: slice.c:246
SwsInternal::is_internal_gamma
int is_internal_gamma
Definition: swscale_internal.h:391
SwsInternal::yuv2packed1
yuv2packed1_fn yuv2packed1
Definition: swscale_internal.h:567
fillPlane32
static void fillPlane32(uint8_t *plane, int stride, int width, int height, int y, int alpha, int bits, const int big_endian, int is_float)
Definition: swscale_internal.h:1082
slicethread.h
half2float.h
SwsInternal::u_temp
uint64_t u_temp
Definition: swscale_internal.h:539
AV_PIX_FMT_FLAG_BAYER
#define AV_PIX_FMT_FLAG_BAYER
The pixel format is following a Bayer pattern.
Definition: pixdesc.h:152
ff_init_gamma_convert
int ff_init_gamma_convert(SwsFilterDescriptor *desc, SwsSlice *src, uint16_t *table)
initializes gamma conversion descriptor
Definition: gamma.c:59
SwsInternal::dstFormatBpp
int dstFormatBpp
Number of bits per pixel of the destination pixel format.
Definition: swscale_internal.h:366
yuv2anyX_fn
void(* yuv2anyX_fn)(SwsInternal *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, const int16_t *chrFilter, const int16_t **chrUSrc, const int16_t **chrVSrc, int chrFilterSize, const int16_t **alpSrc, uint8_t **dest, int dstW, int y)
Write one line of horizontally scaled Y/U/V/A to YUV/RGB output by doing multi-point vertical scaling...
Definition: swscale_internal.h:300
SwsInternal::hLumFilterPos
int32_t * hLumFilterPos
Array of horizontal filter starting positions for each dst[i] for luma/alpha planes.
Definition: swscale_internal.h:441
AV_PIX_FMT_BGRA64LE
@ AV_PIX_FMT_BGRA64LE
packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is st...
Definition: pixfmt.h:205
SwsInternal::alpMmxFilter
int32_t alpMmxFilter[4 *MAX_FILTER_SIZE]
Definition: swscale_internal.h:542
SwsInternal::vChrDrop
int vChrDrop
Binary logarithm of extra vertical subsampling factor in source image chroma planes specified by user...
Definition: swscale_internal.h:373
SwsInternal::vrCoeff
uint64_t vrCoeff
Definition: swscale_internal.h:527
SwsInternal::dst_slice_align
unsigned int dst_slice_align
Definition: swscale_internal.h:693
SwsInternal::yOffset
uint64_t yOffset
Definition: swscale_internal.h:531
AV_PIX_FMT_RGB555LE
@ AV_PIX_FMT_RGB555LE
packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined
Definition: pixfmt.h:115
SwsInternal::yuv2rgb_u2g_coeff
int yuv2rgb_u2g_coeff
Definition: swscale_internal.h:493
SwsInternal::numDesc
int numDesc
Definition: swscale_internal.h:395
AV_PIX_FMT_RGB48BE
@ AV_PIX_FMT_RGB48BE
packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big...
Definition: pixfmt.h:109
ff_yuv2rgb_coeffs
const int32_t ff_yuv2rgb_coeffs[11][4]
Definition: yuv2rgb.c:47
log.h
SwsInternal::yuv2planeX
yuv2planarX_fn yuv2planeX
Definition: swscale_internal.h:565
ff_copyPlane
void ff_copyPlane(const uint8_t *src, int srcStride, int srcSliceY, int srcSliceH, int width, uint8_t *dst, int dstStride)
Definition: swscale_unscaled.c:126
SwsInternal::chrDstHSubSample
int chrDstHSubSample
Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in destination...
Definition: swscale_internal.h:371
src2
const pixel * src2
Definition: h264pred_template.c:421
SwsInternal::yuv2rgb_y_offset
int yuv2rgb_y_offset
Definition: swscale_internal.h:489
SwsInternal::v_temp
uint64_t v_temp
Definition: swscale_internal.h:540
SwsInternal::cascaded_mainindex
int cascaded_mainindex
Definition: swscale_internal.h:388
common.h
s
uint8_t s
Definition: llvidencdsp.c:39
SwsSlice::should_free_lines
int should_free_lines
flag to identify if there are dynamic allocated lines
Definition: swscale_internal.h:1126
yuv2interleavedX_fn
void(* yuv2interleavedX_fn)(enum AVPixelFormat dstFormat, const uint8_t *chrDither, const int16_t *chrFilter, int chrFilterSize, const int16_t **chrUSrc, const int16_t **chrVSrc, uint8_t *dest, int dstW)
Write one line of horizontally scaled chroma to interleaved output with multi-point vertical scaling ...
Definition: swscale_internal.h:164
graph.h
AV_PIX_FMT_FLAG_BE
#define AV_PIX_FMT_FLAG_BE
Pixel format is big-endian.
Definition: pixdesc.h:116
SwsSlice::is_ring
int is_ring
flag to identify if this slice is a ring buffer
Definition: swscale_internal.h:1125
SwsInternal::ubCoeff
uint64_t ubCoeff
Definition: swscale_internal.h:528
SwsInternal::lumConvertRange
void(* lumConvertRange)(int16_t *dst, int width, uint32_t coeff, int64_t offset)
Color range conversion functions if needed.
Definition: swscale_internal.h:668
len
int len
Definition: vorbis_enc_data.h:426
ff_updateMMXDitherTables
void ff_updateMMXDitherTables(SwsInternal *c, int dstY)
Definition: swscale.c:60
SwsSlice::v_chr_sub_sample
int v_chr_sub_sample
vertical chroma subsampling factor
Definition: swscale_internal.h:1124
AV_PIX_FMT_RGB4_BYTE
@ AV_PIX_FMT_RGB4_BYTE
packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb)
Definition: pixfmt.h:95
SwsInternal::chrYInc
int chrYInc
Definition: swscale_internal.h:365
SwsSlice
Struct which defines a slice of an image to be scaled or an output for a scaled slice.
Definition: swscale_internal.h:1120
ff_sws_init_altivec_bufs
int ff_sws_init_altivec_bufs(SwsInternal *c)
isFloat
static av_always_inline int isFloat(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:883
RangeList::ranges
Range * ranges
Definition: swscale_internal.h:92
SwsInternal::chrDstVSubSample
int chrDstVSubSample
Binary logarithm of vertical subsampling factor between luma/alpha and chroma planes in destination i...
Definition: swscale_internal.h:372
AV_PIX_FMT_PAL8
@ AV_PIX_FMT_PAL8
8 bits with AV_PIX_FMT_RGB32 palette
Definition: pixfmt.h:84
yuv2packed1_fn
void(* yuv2packed1_fn)(SwsInternal *c, const int16_t *lumSrc, const int16_t *chrUSrc[2], const int16_t *chrVSrc[2], const int16_t *alpSrc, uint8_t *dest, int dstW, int uvalpha, int y)
Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB output without any additional v...
Definition: swscale_internal.h:201
SwsInternal::vLumFilter
int16_t * vLumFilter
Array of vertical filter coefficients for luma/alpha planes.
Definition: swscale_internal.h:439
SwsFilterDescriptor::alpha
int alpha
Flag for processing alpha channel.
Definition: swscale_internal.h:1140
SwsInternal
Definition: swscale_internal.h:337
SwsColorXform::mat
int16_t mat[3][3]
Definition: swscale_internal.h:113
pixfmt.h
ff_dither8
const uint64_t ff_dither8[2]
Definition: swscale.c:37
ff_sws_init_swscale_arm
void ff_sws_init_swscale_arm(SwsInternal *c)
Definition: swscale.c:33
framepool.h
SwsInternal::vLumFilterPos
int32_t * vLumFilterPos
Array of vertical filter starting positions for each dst[i] for luma/alpha planes.
Definition: swscale_internal.h:443
SwsInternal::rgb2xyz
SwsColorXform rgb2xyz
Definition: swscale_internal.h:561
yuv2planarX_fn
void(* yuv2planarX_fn)(const int16_t *filter, int filterSize, const int16_t **src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
Write one line of horizontally scaled data to planar output with multi-point vertical scaling between...
Definition: swscale_internal.h:144
SwsInternal::chrDither8
const uint8_t * chrDither8
Definition: swscale_internal.h:551
SwsInternal::table_bU
uint8_t * table_bU[256+2 *YUVRGB_TABLE_HEADROOM]
Definition: swscale_internal.h:466
SwsInternal::convert_unscaled
SwsFunc convert_unscaled
Note that src, dst, srcStride, dstStride will be copied in the sws_scale() wrapper so they can be fre...
Definition: swscale_internal.h:359
SwsInternal::hyscale_fast
void(* hyscale_fast)(SwsInternal *c, int16_t *dst, int dstWidth, const uint8_t *src, int srcW, int xInc)
Scale one horizontal line of input data using a bilinear filter to produce one line of output data.
Definition: swscale_internal.h:608
MAX_SLICE_PLANES
#define MAX_SLICE_PLANES
Definition: swscale_internal.h:1103
SwsInternal::src0Alpha
int src0Alpha
Definition: swscale_internal.h:485
ff_init_vscale_pfn
void ff_init_vscale_pfn(SwsInternal *c, yuv2planar1_fn yuv2plane1, yuv2planarX_fn yuv2planeX, yuv2interleavedX_fn yuv2nv12cX, yuv2packed1_fn yuv2packed1, yuv2packed2_fn yuv2packed2, yuv2packedX_fn yuv2packedX, yuv2anyX_fn yuv2anyX, int use_mmx)
setup vertical scaler functions
Definition: vscale.c:258
isPackedRGB
static av_always_inline int isPackedRGB(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:922
ff_sws_fill_xyztables
av_cold int ff_sws_fill_xyztables(SwsInternal *c)
Definition: utils.c:735
SwsInternal::xyz2rgb
SwsColorXform xyz2rgb
Definition: swscale_internal.h:560
SwsLuts::out
uint16_t * out
Definition: swscale_internal.h:108
SwsInternal::chrSrcHSubSample
int chrSrcHSubSample
Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in source imag...
Definition: swscale_internal.h:369
SwsInternal::blueDither
uint64_t blueDither
Definition: swscale_internal.h:524
AV_PIX_FMT_FLAG_PLANAR
#define AV_PIX_FMT_FLAG_PLANAR
At least one pixel component is not in the first data plane.
Definition: pixdesc.h:132
ff_get_unscaled_swscale_aarch64
void ff_get_unscaled_swscale_aarch64(SwsInternal *c)
Definition: swscale_unscaled.c:208
SwsInternal::descIndex
int descIndex[2]
Definition: swscale_internal.h:396
AV_PIX_FMT_RGB565BE
@ AV_PIX_FMT_RGB565BE
packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian
Definition: pixfmt.h:112
SwsInternal::hChrFilterPos
int32_t * hChrFilterPos
Array of horizontal filter starting positions for each dst[i] for chroma planes.
Definition: swscale_internal.h:442
SwsInternal::warned_unuseable_bilinear
int warned_unuseable_bilinear
Definition: swscale_internal.h:457
ff_yuv2rgb_get_func_ptr
SwsFunc ff_yuv2rgb_get_func_ptr(SwsInternal *c)
SwsInternal::gamma
uint16_t * gamma
Definition: swscale_internal.h:392
SwsInternal::numSlice
int numSlice
Definition: swscale_internal.h:397
desc
const char * desc
Definition: libsvtav1.c:83
DITHER32_INT
#define DITHER32_INT
Definition: swscale_internal.h:520
SwsInternal::vChrFilter
int16_t * vChrFilter
Array of vertical filter coefficients for chroma planes.
Definition: swscale_internal.h:440
SwsInternal::graph
SwsGraph * graph[2]
Definition: swscale_internal.h:349
SwsInternal::pal_yuv
uint32_t pal_yuv[256]
Definition: swscale_internal.h:401
isBayer16BPS
static av_always_inline int isBayer16BPS(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:868
SwsInternal::chrSrcVSubSample
int chrSrcVSubSample
Binary logarithm of vertical subsampling factor between luma/alpha and chroma planes in source image.
Definition: swscale_internal.h:370
SwsInternal::dst0Alpha
int dst0Alpha
Definition: swscale_internal.h:486
SwsPlane::sliceY
int sliceY
index of first line
Definition: swscale_internal.h:1109
SwsInternal::dst_slice_height
int dst_slice_height
Definition: swscale_internal.h:353
SwsGraph
Filter graph, which represents a 'baked' pixel format conversion.
Definition: graph.h:132
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
w
uint8_t w
Definition: llvidencdsp.c:39
AV_PIX_FMT_BGR555LE
@ AV_PIX_FMT_BGR555LE
packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined
Definition: pixfmt.h:120
SwsInternal::readChrPlanar
planarX2_YV12_fn readChrPlanar
Definition: swscale_internal.h:586
SwsInternal::yuv2plane1
yuv2planar1_fn yuv2plane1
Definition: swscale_internal.h:564
lum
static double lum(void *priv, double x, double y, int plane)
Definition: vf_fftfilt.c:107
alpha
static const int16_t alpha[]
Definition: ilbcdata.h:55
SwsInternal::chrToYV12
planar2_YV12_fn chrToYV12
Definition: swscale_internal.h:577
SwsFunc
int(* SwsFunc)(SwsInternal *c, const uint8_t *const src[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[])
Definition: swscale_internal.h:99
isRGBinInt
static av_always_inline int isRGBinInt(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:817
SwsInternal::dst_slice_start
int dst_slice_start
Definition: swscale_internal.h:352
ff_sws_init_range_convert_riscv
av_cold void ff_sws_init_range_convert_riscv(SwsInternal *c)
Definition: swscale.c:29
ff_sws_free_altivec_bufs
void ff_sws_free_altivec_bufs(SwsInternal *c)
int32_t
int32_t
Definition: audioconvert.c:56
SwsInternal::lumConvertRange_offset
int64_t lumConvertRange_offset
Definition: swscale_internal.h:676
SwsInternal::hcScale
void(* hcScale)(SwsInternal *c, int16_t *dst, int dstW, const uint8_t *src, const int16_t *filter, const int32_t *filterPos, int filterSize)
Definition: swscale_internal.h:651
coeff
static const double coeff[2][5]
Definition: vf_owdenoise.c:80
SwsColorXform
Definition: swscale_internal.h:111
sws_internal
static SwsInternal * sws_internal(const SwsContext *sws)
Definition: swscale_internal.h:79
SwsInternal::srcColorspaceTable
int srcColorspaceTable[4]
Definition: swscale_internal.h:483
ff_init_desc_fmt_convert
int ff_init_desc_fmt_convert(SwsFilterDescriptor *desc, SwsSlice *src, SwsSlice *dst, uint32_t *pal)
initializes lum pixel format conversion descriptor
Definition: hscale.c:129
h
h
Definition: vp9dsp_template.c:2070
SwsInternal::lumMmxextFilterCodeSize
int lumMmxextFilterCodeSize
Runtime-generated MMXEXT horizontal fast bilinear scaler code size for luma/alpha planes.
Definition: swscale_internal.h:451
stride
#define stride
Definition: h264pred_template.c:536
isPlanar
static av_always_inline int isPlanar(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:915
SwsInternal::vgCoeff
uint64_t vgCoeff
Definition: swscale_internal.h:529
width
#define width
Definition: dsp.h:89
ff_get_unscaled_swscale_arm
void ff_get_unscaled_swscale_arm(SwsInternal *c)
Definition: swscale_unscaled.c:185
av_bswap16
#define av_bswap16
Definition: bswap.h:28
SwsContext
Main external API structure.
Definition: swscale.h:227
AV_PIX_FMT_FLAG_PAL
#define AV_PIX_FMT_FLAG_PAL
Pixel format has a palette in data[1], values are indexes in this palette.
Definition: pixdesc.h:120
AV_PIX_FMT_BGR444LE
@ AV_PIX_FMT_BGR444LE
packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined
Definition: pixfmt.h:138
SwsInternal::chrSrcW
int chrSrcW
Width of source chroma planes.
Definition: swscale_internal.h:360
ff_update_palette
void ff_update_palette(SwsInternal *c, const uint32_t *pal)
Definition: swscale.c:873
SwsLuts::in
uint16_t * in
Definition: swscale_internal.h:107
SwsInternal::yuv2nv12cX
yuv2interleavedX_fn yuv2nv12cX
Definition: swscale_internal.h:566
SwsInternal::lumDither8
const uint8_t * lumDither8
Definition: swscale_internal.h:551
SwsInternal::lumYInc
int lumYInc
Definition: swscale_internal.h:365
SwsInternal::gamma_value
double gamma_value
Definition: swscale_internal.h:390
ff_dither_4x4_16
const uint8_t ff_dither_4x4_16[5][8]
Definition: output.c:52
ff_hcscale_fast_c
void ff_hcscale_fast_c(SwsInternal *c, int16_t *dst1, int16_t *dst2, int dstWidth, const uint8_t *src1, const uint8_t *src2, int srcW, int xInc)
Definition: hscale_fast_bilinear.c:38
SwsInternal::uv_offx2
ptrdiff_t uv_offx2
offset (in bytes) between u and v planes
Definition: swscale_internal.h:547
src
#define src
Definition: vp8dsp.c:248
swscale.h
SwsInternal::chrConvertRange_offset
int64_t chrConvertRange_offset
Definition: swscale_internal.h:677
ff_dither_2x2_4
const uint8_t ff_dither_2x2_4[3][8]
Definition: output.c:40
SwsInternal::yuv2packedX
yuv2packedX_fn yuv2packedX
Definition: swscale_internal.h:569
isALPHA
static av_always_inline int isALPHA(enum AVPixelFormat pix_fmt)
Definition: swscale_internal.h:897
SwsInternal::frame_pool
FFFramePool frame_pool
Definition: swscale_internal.h:705
SwsInternal::hChrFilter
int16_t * hChrFilter
Array of horizontal filter coefficients for chroma planes.
Definition: swscale_internal.h:438
SwsInternal::vOffset
uint64_t vOffset
Definition: swscale_internal.h:533
AV_PIX_FMT_BGR48BE
@ AV_PIX_FMT_BGR48BE
packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big...
Definition: pixfmt.h:145
AV_WN16
#define AV_WN16(p, v)
Definition: intreadwrite.h:368