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