ffmpeg / libswscale / swscale_internal.h @ db46be01
History | View | Annotate | Download (20.4 KB)
1 | 5427e242 | Michael Niedermayer | /*
|
---|---|---|---|
2 | d026b45e | Diego Biurrun | * Copyright (C) 2001-2003 Michael Niedermayer <michaelni@gmx.at>
|
3 | *
|
||
4 | 2912e87a | Mans Rullgard | * This file is part of Libav.
|
5 | d026b45e | Diego Biurrun | *
|
6 | 2912e87a | Mans Rullgard | * Libav is free software; you can redistribute it and/or
|
7 | 807e0c66 | Luca Abeni | * 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 | d026b45e | Diego Biurrun | *
|
11 | 2912e87a | Mans Rullgard | * Libav is distributed in the hope that it will be useful,
|
12 | d026b45e | Diego Biurrun | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 | 807e0c66 | Luca Abeni | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14 | * Lesser General Public License for more details.
|
||
15 | d026b45e | Diego Biurrun | *
|
16 | 807e0c66 | Luca Abeni | * You should have received a copy of the GNU Lesser General Public
|
17 | 2912e87a | Mans Rullgard | * License along with Libav; if not, write to the Free Software
|
18 | b19bcbaa | Diego Biurrun | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
19 | d026b45e | Diego Biurrun | */
|
20 | 5427e242 | Michael Niedermayer | |
21 | 0eaf5235 | Stefano Sabatini | #ifndef SWSCALE_SWSCALE_INTERNAL_H
|
22 | #define SWSCALE_SWSCALE_INTERNAL_H
|
||
23 | 5427e242 | Michael Niedermayer | |
24 | 4706949c | Diego Biurrun | #include "config.h" |
25 | |||
26 | b63f641e | Aurelien Jacobs | #if HAVE_ALTIVEC_H
|
27 | f2015f0c | Alex Beregszaszi | #include <altivec.h> |
28 | #endif
|
||
29 | |||
30 | 83da2c6f | Diego Biurrun | #include "libavutil/avutil.h" |
31 | 94c4def2 | Luca Abeni | |
32 | 59ded10c | Michael Niedermayer | #define STR(s) AV_TOSTRING(s) //AV_STRINGIFY is too long |
33 | 1625216e | Michael Niedermayer | |
34 | 5427e242 | Michael Niedermayer | #define MAX_FILTER_SIZE 256 |
35 | |||
36 | 9507d911 | Michael Niedermayer | #if ARCH_X86
|
37 | #define VOFW 5120 |
||
38 | #else
|
||
39 | #define VOFW 2048 // faster on PPC and not tested on others |
||
40 | #endif
|
||
41 | |||
42 | 710af50e | Benoit Fouet | #define VOF (VOFW*2) |
43 | 8b2fce0d | Michael Niedermayer | |
44 | a898cdc9 | Måns Rullgård | #if HAVE_BIGENDIAN
|
45 | 9990e426 | Michael Niedermayer | #define ALT32_CORR (-1) |
46 | #else
|
||
47 | #define ALT32_CORR 1 |
||
48 | 1625216e | Michael Niedermayer | #endif
|
49 | |||
50 | b63f641e | Aurelien Jacobs | #if ARCH_X86_64
|
51 | 1625216e | Michael Niedermayer | # define APCK_PTR2 8 |
52 | # define APCK_COEF 16 |
||
53 | # define APCK_SIZE 24 |
||
54 | #else
|
||
55 | # define APCK_PTR2 4 |
||
56 | # define APCK_COEF 8 |
||
57 | # define APCK_SIZE 16 |
||
58 | 9990e426 | Michael Niedermayer | #endif
|
59 | |||
60 | 1615fb91 | Diego Biurrun | struct SwsContext;
|
61 | |||
62 | a959e247 | Zuxy Meng | typedef int (*SwsFunc)(struct SwsContext *context, const uint8_t* src[], |
63 | 457eed72 | Diego Biurrun | int srcStride[], int srcSliceY, int srcSliceH, |
64 | uint8_t* dst[], int dstStride[]);
|
||
65 | 5427e242 | Michael Niedermayer | |
66 | 8a322796 | Diego Biurrun | /* This struct should be aligned on at least a 32-byte boundary. */
|
67 | dd68318c | Ramiro Polla | typedef struct SwsContext { |
68 | 221b804f | Diego Biurrun | /**
|
69 | * info on struct for av_log
|
||
70 | */
|
||
71 | 635a8cd2 | Panagiotis Issaris | const AVClass *av_class;
|
72 | 221b804f | Diego Biurrun | |
73 | /**
|
||
74 | 56b69633 | Diego Biurrun | * Note that src, dst, srcStride, dstStride will be copied in the
|
75 | * sws_scale() wrapper so they can be freely modified here.
|
||
76 | 221b804f | Diego Biurrun | */
|
77 | SwsFunc swScale; |
||
78 | 9556124c | Ramiro Polla | int srcW; ///< Width of source luma/alpha planes. |
79 | int srcH; ///< Height of source luma/alpha planes. |
||
80 | int dstH; ///< Height of destination luma/alpha planes. |
||
81 | int chrSrcW; ///< Width of source chroma planes. |
||
82 | int chrSrcH; ///< Height of source chroma planes. |
||
83 | int chrDstW; ///< Width of destination chroma planes. |
||
84 | int chrDstH; ///< Height of destination chroma planes. |
||
85 | 221b804f | Diego Biurrun | int lumXInc, chrXInc;
|
86 | int lumYInc, chrYInc;
|
||
87 | 9556124c | Ramiro Polla | enum PixelFormat dstFormat; ///< Destination pixel format. |
88 | enum PixelFormat srcFormat; ///< Source pixel format. |
||
89 | 30b61475 | Stefano Sabatini | int dstFormatBpp; ///< Number of bits per pixel of the destination pixel format. |
90 | int srcFormatBpp; ///< Number of bits per pixel of the source pixel format. |
||
91 | 5d4d503f | Ramiro Polla | int chrSrcHSubSample; ///< Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in source image. |
92 | int chrSrcVSubSample; ///< Binary logarithm of vertical subsampling factor between luma/alpha and chroma planes in source image. |
||
93 | int chrDstHSubSample; ///< Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in destination image. |
||
94 | int chrDstVSubSample; ///< Binary logarithm of vertical subsampling factor between luma/alpha and chroma planes in destination image. |
||
95 | int vChrDrop; ///< Binary logarithm of extra vertical subsampling factor in source image chroma planes specified by user. |
||
96 | int sliceDir; ///< Direction that slices are fed to the scaler (1 = top-to-bottom, -1 = bottom-to-top). |
||
97 | 9556124c | Ramiro Polla | double param[2]; ///< Input parameters for scaling algorithms that need them. |
98 | 221b804f | Diego Biurrun | |
99 | 49004617 | Vitor Sessak | uint32_t pal_yuv[256];
|
100 | uint32_t pal_rgb[256];
|
||
101 | |||
102 | 5d4d503f | Ramiro Polla | /**
|
103 | * @name Scaled horizontal lines ring buffer.
|
||
104 | * The horizontal scaler keeps just enough scaled lines in a ring buffer
|
||
105 | * so they may be passed to the vertical scaler. The pointers to the
|
||
106 | * allocated buffers for each line are duplicated in sequence in the ring
|
||
107 | * buffer to simplify indexing and avoid wrapping around between lines
|
||
108 | * inside the vertical scaler code. The wrapping is done before the
|
||
109 | * vertical scaler is called.
|
||
110 | */
|
||
111 | //@{
|
||
112 | int16_t **lumPixBuf; ///< Ring buffer for scaled horizontal luma plane lines to be fed to the vertical scaler.
|
||
113 | int16_t **chrPixBuf; ///< Ring buffer for scaled horizontal chroma plane lines to be fed to the vertical scaler.
|
||
114 | int16_t **alpPixBuf; ///< Ring buffer for scaled horizontal alpha plane lines to be fed to the vertical scaler.
|
||
115 | int vLumBufSize; ///< Number of vertical luma/alpha lines allocated in the ring buffer. |
||
116 | int vChrBufSize; ///< Number of vertical chroma lines allocated in the ring buffer. |
||
117 | int lastInLumBuf; ///< Last scaled horizontal luma/alpha line from source in the ring buffer. |
||
118 | int lastInChrBuf; ///< Last scaled horizontal chroma line from source in the ring buffer. |
||
119 | int lumBufIndex; ///< Index in ring buffer of the last scaled horizontal luma/alpha line from source. |
||
120 | int chrBufIndex; ///< Index in ring buffer of the last scaled horizontal chroma line from source. |
||
121 | //@}
|
||
122 | 221b804f | Diego Biurrun | |
123 | 8a322796 | Diego Biurrun | uint8_t formatConvBuffer[VOF]; //FIXME dynamic allocation, but we have to change a lot of code for this to be useful
|
124 | 221b804f | Diego Biurrun | |
125 | 5d4d503f | Ramiro Polla | /**
|
126 | * @name Horizontal and vertical filters.
|
||
127 | * To better understand the following fields, here is a pseudo-code of
|
||
128 | * their usage in filtering a horizontal line:
|
||
129 | * @code
|
||
130 | * for (i = 0; i < width; i++) {
|
||
131 | * dst[i] = 0;
|
||
132 | * for (j = 0; j < filterSize; j++)
|
||
133 | * dst[i] += src[ filterPos[i] + j ] * filter[ filterSize * i + j ];
|
||
134 | * dst[i] >>= FRAC_BITS; // The actual implementation is fixed-point.
|
||
135 | * }
|
||
136 | * @endcode
|
||
137 | */
|
||
138 | //@{
|
||
139 | int16_t *hLumFilter; ///< Array of horizontal filter coefficients for luma/alpha planes.
|
||
140 | int16_t *hChrFilter; ///< Array of horizontal filter coefficients for chroma planes.
|
||
141 | int16_t *vLumFilter; ///< Array of vertical filter coefficients for luma/alpha planes.
|
||
142 | int16_t *vChrFilter; ///< Array of vertical filter coefficients for chroma planes.
|
||
143 | int16_t *hLumFilterPos; ///< Array of horizontal filter starting positions for each dst[i] for luma/alpha planes.
|
||
144 | int16_t *hChrFilterPos; ///< Array of horizontal filter starting positions for each dst[i] for chroma planes.
|
||
145 | int16_t *vLumFilterPos; ///< Array of vertical filter starting positions for each dst[i] for luma/alpha planes.
|
||
146 | int16_t *vChrFilterPos; ///< Array of vertical filter starting positions for each dst[i] for chroma planes.
|
||
147 | int hLumFilterSize; ///< Horizontal filter size for luma/alpha pixels. |
||
148 | int hChrFilterSize; ///< Horizontal filter size for chroma pixels. |
||
149 | int vLumFilterSize; ///< Vertical filter size for luma/alpha pixels. |
||
150 | int vChrFilterSize; ///< Vertical filter size for chroma pixels. |
||
151 | //@}
|
||
152 | 221b804f | Diego Biurrun | |
153 | 9556124c | Ramiro Polla | int lumMmx2FilterCodeSize; ///< Runtime-generated MMX2 horizontal fast bilinear scaler code size for luma/alpha planes. |
154 | int chrMmx2FilterCodeSize; ///< Runtime-generated MMX2 horizontal fast bilinear scaler code size for chroma planes. |
||
155 | uint8_t *lumMmx2FilterCode; ///< Runtime-generated MMX2 horizontal fast bilinear scaler code for luma/alpha planes.
|
||
156 | uint8_t *chrMmx2FilterCode; ///< Runtime-generated MMX2 horizontal fast bilinear scaler code for chroma planes.
|
||
157 | 221b804f | Diego Biurrun | |
158 | int canMMX2BeUsed;
|
||
159 | |||
160 | 9556124c | Ramiro Polla | int dstY; ///< Last destination vertical line output from last slice. |
161 | int flags; ///< Flags passed by the user to select scaler algorithm, optimizations, subsampling, etc... |
||
162 | 221b804f | Diego Biurrun | void * yuvTable; // pointer to the yuv->rgb table start so it can be freed() |
163 | uint8_t * table_rV[256];
|
||
164 | uint8_t * table_gU[256];
|
||
165 | int table_gV[256]; |
||
166 | uint8_t * table_bU[256];
|
||
167 | |||
168 | //Colorspace stuff
|
||
169 | int contrast, brightness, saturation; // for sws_getColorspaceDetails |
||
170 | int srcColorspaceTable[4]; |
||
171 | int dstColorspaceTable[4]; |
||
172 | 9556124c | Ramiro Polla | int srcRange; ///< 0 = MPG YUV range, 1 = JPG YUV range (source image). |
173 | int dstRange; ///< 0 = MPG YUV range, 1 = JPG YUV range (destination image). |
||
174 | 43c16478 | Michael Niedermayer | int yuv2rgb_y_offset;
|
175 | int yuv2rgb_y_coeff;
|
||
176 | int yuv2rgb_v2r_coeff;
|
||
177 | int yuv2rgb_v2g_coeff;
|
||
178 | int yuv2rgb_u2g_coeff;
|
||
179 | int yuv2rgb_u2b_coeff;
|
||
180 | 221b804f | Diego Biurrun | |
181 | #define RED_DITHER "0*8" |
||
182 | #define GREEN_DITHER "1*8" |
||
183 | #define BLUE_DITHER "2*8" |
||
184 | #define Y_COEFF "3*8" |
||
185 | #define VR_COEFF "4*8" |
||
186 | #define UB_COEFF "5*8" |
||
187 | #define VG_COEFF "6*8" |
||
188 | #define UG_COEFF "7*8" |
||
189 | #define Y_OFFSET "8*8" |
||
190 | #define U_OFFSET "9*8" |
||
191 | #define V_OFFSET "10*8" |
||
192 | 8bae9ddc | Michael Niedermayer | #define LUM_MMX_FILTER_OFFSET "11*8" |
193 | #define CHR_MMX_FILTER_OFFSET "11*8+4*4*256" |
||
194 | 8a322796 | Diego Biurrun | #define DSTW_OFFSET "11*8+4*4*256*2" //do not change, it is hardcoded in the ASM |
195 | 221b804f | Diego Biurrun | #define ESP_OFFSET "11*8+4*4*256*2+8" |
196 | #define VROUNDER_OFFSET "11*8+4*4*256*2+16" |
||
197 | #define U_TEMP "11*8+4*4*256*2+24" |
||
198 | #define V_TEMP "11*8+4*4*256*2+32" |
||
199 | 6858492e | Cédric Schieli | #define Y_TEMP "11*8+4*4*256*2+40" |
200 | #define ALP_MMX_FILTER_OFFSET "11*8+4*4*256*2+48" |
||
201 | 221b804f | Diego Biurrun | |
202 | 92db6235 | Pavel Pavlov | DECLARE_ALIGNED(8, uint64_t, redDither);
|
203 | DECLARE_ALIGNED(8, uint64_t, greenDither);
|
||
204 | DECLARE_ALIGNED(8, uint64_t, blueDither);
|
||
205 | |||
206 | DECLARE_ALIGNED(8, uint64_t, yCoeff);
|
||
207 | DECLARE_ALIGNED(8, uint64_t, vrCoeff);
|
||
208 | DECLARE_ALIGNED(8, uint64_t, ubCoeff);
|
||
209 | DECLARE_ALIGNED(8, uint64_t, vgCoeff);
|
||
210 | DECLARE_ALIGNED(8, uint64_t, ugCoeff);
|
||
211 | DECLARE_ALIGNED(8, uint64_t, yOffset);
|
||
212 | DECLARE_ALIGNED(8, uint64_t, uOffset);
|
||
213 | DECLARE_ALIGNED(8, uint64_t, vOffset);
|
||
214 | 221b804f | Diego Biurrun | int32_t lumMmxFilter[4*MAX_FILTER_SIZE];
|
215 | int32_t chrMmxFilter[4*MAX_FILTER_SIZE];
|
||
216 | 5d4d503f | Ramiro Polla | int dstW; ///< Width of destination luma/alpha planes. |
217 | 92db6235 | Pavel Pavlov | DECLARE_ALIGNED(8, uint64_t, esp);
|
218 | DECLARE_ALIGNED(8, uint64_t, vRounder);
|
||
219 | DECLARE_ALIGNED(8, uint64_t, u_temp);
|
||
220 | DECLARE_ALIGNED(8, uint64_t, v_temp);
|
||
221 | DECLARE_ALIGNED(8, uint64_t, y_temp);
|
||
222 | 6858492e | Cédric Schieli | int32_t alpMmxFilter[4*MAX_FILTER_SIZE];
|
223 | a31de956 | Michael Niedermayer | |
224 | b63f641e | Aurelien Jacobs | #if HAVE_ALTIVEC
|
225 | d3243d14 | Ramiro Polla | vector signed short CY; |
226 | vector signed short CRV; |
||
227 | vector signed short CBU; |
||
228 | vector signed short CGU; |
||
229 | vector signed short CGV; |
||
230 | vector signed short OY; |
||
231 | vector unsigned short CSHIFT; |
||
232 | vector signed short *vYCoeffsBank, *vCCoeffsBank; |
||
233 | a31de956 | Michael Niedermayer | #endif
|
234 | |||
235 | b63f641e | Aurelien Jacobs | #if ARCH_BFIN
|
236 | 92db6235 | Pavel Pavlov | DECLARE_ALIGNED(4, uint32_t, oy);
|
237 | DECLARE_ALIGNED(4, uint32_t, oc);
|
||
238 | DECLARE_ALIGNED(4, uint32_t, zero);
|
||
239 | DECLARE_ALIGNED(4, uint32_t, cy);
|
||
240 | DECLARE_ALIGNED(4, uint32_t, crv);
|
||
241 | DECLARE_ALIGNED(4, uint32_t, rmask);
|
||
242 | DECLARE_ALIGNED(4, uint32_t, cbu);
|
||
243 | DECLARE_ALIGNED(4, uint32_t, bmask);
|
||
244 | DECLARE_ALIGNED(4, uint32_t, cgu);
|
||
245 | DECLARE_ALIGNED(4, uint32_t, cgv);
|
||
246 | DECLARE_ALIGNED(4, uint32_t, gmask);
|
||
247 | d3f3eea9 | Marc Hoffman | #endif
|
248 | |||
249 | b63f641e | Aurelien Jacobs | #if HAVE_VIS
|
250 | 4a888526 | Måns Rullgård | DECLARE_ALIGNED(8, uint64_t, sparc_coeffs)[10]; |
251 | 90c1d7b4 | Denes Balatoni | #endif
|
252 | d3f3eea9 | Marc Hoffman | |
253 | 40fa5140 | Ramiro Polla | /* function pointers for swScale() */
|
254 | void (*yuv2nv12X )(struct SwsContext *c, |
||
255 | const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, |
||
256 | const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize, |
||
257 | uint8_t *dest, uint8_t *uDest, |
||
258 | int dstW, int chrDstW, int dstFormat); |
||
259 | void (*yuv2yuv1 )(struct SwsContext *c, |
||
260 | const int16_t *lumSrc, const int16_t *chrSrc, const int16_t *alpSrc, |
||
261 | uint8_t *dest, |
||
262 | uint8_t *uDest, uint8_t *vDest, uint8_t *aDest, |
||
263 | c3ab0004 | Ramiro Polla | long dstW, long chrDstW); |
264 | 40fa5140 | Ramiro Polla | void (*yuv2yuvX )(struct SwsContext *c, |
265 | const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, |
||
266 | const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize, |
||
267 | const int16_t **alpSrc,
|
||
268 | uint8_t *dest, |
||
269 | uint8_t *uDest, uint8_t *vDest, uint8_t *aDest, |
||
270 | c3ab0004 | Ramiro Polla | long dstW, long chrDstW); |
271 | 40fa5140 | Ramiro Polla | void (*yuv2packed1)(struct SwsContext *c, |
272 | const uint16_t *buf0,
|
||
273 | const uint16_t *uvbuf0, const uint16_t *uvbuf1, |
||
274 | const uint16_t *abuf0,
|
||
275 | uint8_t *dest, |
||
276 | int dstW, int uvalpha, int dstFormat, int flags, int y); |
||
277 | void (*yuv2packed2)(struct SwsContext *c, |
||
278 | const uint16_t *buf0, const uint16_t *buf1, |
||
279 | const uint16_t *uvbuf0, const uint16_t *uvbuf1, |
||
280 | const uint16_t *abuf0, const uint16_t *abuf1, |
||
281 | uint8_t *dest, |
||
282 | int dstW, int yalpha, int uvalpha, int y); |
||
283 | void (*yuv2packedX)(struct SwsContext *c, |
||
284 | const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, |
||
285 | const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize, |
||
286 | const int16_t **alpSrc, uint8_t *dest,
|
||
287 | c3ab0004 | Ramiro Polla | long dstW, long dstY); |
288 | 40fa5140 | Ramiro Polla | |
289 | bb53e1d1 | Ramiro Polla | void (*lumToYV12)(uint8_t *dst, const uint8_t *src, |
290 | c3ab0004 | Ramiro Polla | long width, uint32_t *pal); ///< Unscaled conversion of luma plane to YV12 for horizontal scaler. |
291 | bb53e1d1 | Ramiro Polla | void (*alpToYV12)(uint8_t *dst, const uint8_t *src, |
292 | c3ab0004 | Ramiro Polla | long width, uint32_t *pal); ///< Unscaled conversion of alpha plane to YV12 for horizontal scaler. |
293 | bb53e1d1 | Ramiro Polla | void (*chrToYV12)(uint8_t *dstU, uint8_t *dstV,
|
294 | const uint8_t *src1, const uint8_t *src2, |
||
295 | c3ab0004 | Ramiro Polla | long width, uint32_t *pal); ///< Unscaled conversion of chroma planes to YV12 for horizontal scaler. |
296 | 40fa5140 | Ramiro Polla | void (*hyscale_fast)(struct SwsContext *c, |
297 | c3ab0004 | Ramiro Polla | int16_t *dst, long dstWidth,
|
298 | 40fa5140 | Ramiro Polla | const uint8_t *src, int srcW, int xInc); |
299 | void (*hcscale_fast)(struct SwsContext *c, |
||
300 | c3ab0004 | Ramiro Polla | int16_t *dst, long dstWidth,
|
301 | 457eed72 | Diego Biurrun | const uint8_t *src1, const uint8_t *src2, |
302 | int srcW, int xInc); |
||
303 | 40fa5140 | Ramiro Polla | |
304 | void (*hScale)(int16_t *dst, int dstW, const uint8_t *src, int srcW, |
||
305 | 457eed72 | Diego Biurrun | int xInc, const int16_t *filter, const int16_t *filterPos, |
306 | c3ab0004 | Ramiro Polla | long filterSize);
|
307 | 40fa5140 | Ramiro Polla | |
308 | bae76dc3 | Ramiro Polla | void (*lumConvertRange)(uint16_t *dst, int width); ///< Color range conversion function for luma plane if needed. |
309 | void (*chrConvertRange)(uint16_t *dst, int width); ///< Color range conversion function for chroma planes if needed. |
||
310 | |||
311 | 84011f10 | Ramiro Polla | int lumSrcOffset; ///< Offset given to luma src pointers passed to horizontal input functions. |
312 | int chrSrcOffset; ///< Offset given to chroma src pointers passed to horizontal input functions. |
||
313 | int alpSrcOffset; ///< Offset given to alpha src pointers passed to horizontal input functions. |
||
314 | |||
315 | e7a47515 | Ramiro Polla | int needs_hcscale; ///< Set if there are chroma planes to be converted. |
316 | |||
317 | 5427e242 | Michael Niedermayer | } SwsContext; |
318 | //FIXME check init (where 0)
|
||
319 | |||
320 | 780daf2b | Diego Biurrun | SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c); |
321 | 457eed72 | Diego Biurrun | int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4], |
322 | int fullRange, int brightness, |
||
323 | int contrast, int saturation); |
||
324 | 5427e242 | Michael Niedermayer | |
325 | 457eed72 | Diego Biurrun | void ff_yuv2rgb_init_tables_altivec(SwsContext *c, const int inv_table[4], |
326 | int brightness, int contrast, int saturation); |
||
327 | befa8e66 | Ramiro Polla | SwsFunc ff_yuv2rgb_init_mmx(SwsContext *c); |
328 | SwsFunc ff_yuv2rgb_init_vis(SwsContext *c); |
||
329 | SwsFunc ff_yuv2rgb_init_mlib(SwsContext *c); |
||
330 | 780daf2b | Diego Biurrun | SwsFunc ff_yuv2rgb_init_altivec(SwsContext *c); |
331 | befa8e66 | Ramiro Polla | SwsFunc ff_yuv2rgb_get_func_ptr_bfin(SwsContext *c); |
332 | d5e9bc06 | Ramiro Polla | void ff_bfin_get_unscaled_swscale(SwsContext *c);
|
333 | 780daf2b | Diego Biurrun | void ff_yuv2packedX_altivec(SwsContext *c,
|
334 | 5a55d5b5 | Reimar Döffinger | const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, |
335 | const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize, |
||
336 | 457eed72 | Diego Biurrun | uint8_t *dest, int dstW, int dstY); |
337 | c95a3a9f | Diego Biurrun | |
338 | b4b91702 | Måns Rullgård | const char *sws_format_name(enum PixelFormat format); |
339 | 94c4def2 | Luca Abeni | |
340 | e9e12f0e | Luca Abeni | //FIXME replace this with something faster
|
341 | 714f32bf | Michael Niedermayer | #define is16BPS(x) ( \
|
342 | (x)==PIX_FMT_GRAY16BE \ |
||
343 | || (x)==PIX_FMT_GRAY16LE \ |
||
344 | 5b21719e | Kostya Shishkov | || (x)==PIX_FMT_RGB48BE \ |
345 | || (x)==PIX_FMT_RGB48LE \ |
||
346 | 709c0181 | Ramiro Polla | || (x)==PIX_FMT_YUV420P16LE \ |
347 | || (x)==PIX_FMT_YUV422P16LE \ |
||
348 | || (x)==PIX_FMT_YUV444P16LE \ |
||
349 | || (x)==PIX_FMT_YUV420P16BE \ |
||
350 | || (x)==PIX_FMT_YUV422P16BE \ |
||
351 | || (x)==PIX_FMT_YUV444P16BE \ |
||
352 | 714f32bf | Michael Niedermayer | ) |
353 | c3dc6c5a | Michael Niedermayer | #define isBE(x) ((x)&1) |
354 | de1275d5 | Michael Niedermayer | #define isPlanar8YUV(x) ( \
|
355 | 9d9de37d | Ivo van Poorten | (x)==PIX_FMT_YUV410P \ |
356 | || (x)==PIX_FMT_YUV420P \ |
||
357 | 9621f2f5 | Cédric Schieli | || (x)==PIX_FMT_YUVA420P \ |
358 | 9d9de37d | Ivo van Poorten | || (x)==PIX_FMT_YUV411P \ |
359 | || (x)==PIX_FMT_YUV422P \ |
||
360 | || (x)==PIX_FMT_YUV444P \ |
||
361 | 9ba7fe6d | Andreas Öman | || (x)==PIX_FMT_YUV440P \ |
362 | 9d9de37d | Ivo van Poorten | || (x)==PIX_FMT_NV12 \ |
363 | || (x)==PIX_FMT_NV21 \ |
||
364 | ) |
||
365 | de1275d5 | Michael Niedermayer | #define isPlanarYUV(x) ( \
|
366 | isPlanar8YUV(x) \ |
||
367 | 709c0181 | Ramiro Polla | || (x)==PIX_FMT_YUV420P16LE \ |
368 | || (x)==PIX_FMT_YUV422P16LE \ |
||
369 | || (x)==PIX_FMT_YUV444P16LE \ |
||
370 | || (x)==PIX_FMT_YUV420P16BE \ |
||
371 | || (x)==PIX_FMT_YUV422P16BE \ |
||
372 | || (x)==PIX_FMT_YUV444P16BE \ |
||
373 | de1275d5 | Michael Niedermayer | ) |
374 | 9d9de37d | Ivo van Poorten | #define isYUV(x) ( \
|
375 | (x)==PIX_FMT_UYVY422 \ |
||
376 | || (x)==PIX_FMT_YUYV422 \ |
||
377 | || isPlanarYUV(x) \ |
||
378 | ) |
||
379 | #define isGray(x) ( \
|
||
380 | (x)==PIX_FMT_GRAY8 \ |
||
381 | df0743e0 | Baptiste Coudurier | || (x)==PIX_FMT_Y400A \ |
382 | 9d9de37d | Ivo van Poorten | || (x)==PIX_FMT_GRAY16BE \ |
383 | || (x)==PIX_FMT_GRAY16LE \ |
||
384 | ) |
||
385 | #define isGray16(x) ( \
|
||
386 | (x)==PIX_FMT_GRAY16BE \ |
||
387 | || (x)==PIX_FMT_GRAY16LE \ |
||
388 | ) |
||
389 | 3b1ee703 | Michael Niedermayer | #define isRGBinInt(x) ( \
|
390 | e8417235 | Kostya Shishkov | (x)==PIX_FMT_RGB48BE \ |
391 | || (x)==PIX_FMT_RGB48LE \ |
||
392 | || (x)==PIX_FMT_RGB32 \ |
||
393 | 9990e426 | Michael Niedermayer | || (x)==PIX_FMT_RGB32_1 \ |
394 | 9d9de37d | Ivo van Poorten | || (x)==PIX_FMT_RGB24 \ |
395 | 1379b584 | Alexis Ballier | || (x)==PIX_FMT_RGB565BE \ |
396 | || (x)==PIX_FMT_RGB565LE \ |
||
397 | || (x)==PIX_FMT_RGB555BE \ |
||
398 | || (x)==PIX_FMT_RGB555LE \ |
||
399 | a4e44130 | Janusz Krzysztofik | || (x)==PIX_FMT_RGB444BE \ |
400 | || (x)==PIX_FMT_RGB444LE \ |
||
401 | 9d9de37d | Ivo van Poorten | || (x)==PIX_FMT_RGB8 \ |
402 | || (x)==PIX_FMT_RGB4 \ |
||
403 | || (x)==PIX_FMT_RGB4_BYTE \ |
||
404 | || (x)==PIX_FMT_MONOBLACK \ |
||
405 | ec1bca2a | Michael Niedermayer | || (x)==PIX_FMT_MONOWHITE \ |
406 | 9d9de37d | Ivo van Poorten | ) |
407 | 3b1ee703 | Michael Niedermayer | #define isBGRinInt(x) ( \
|
408 | d52337af | Michael Niedermayer | (x)==PIX_FMT_BGR32 \ |
409 | 9990e426 | Michael Niedermayer | || (x)==PIX_FMT_BGR32_1 \ |
410 | 9d9de37d | Ivo van Poorten | || (x)==PIX_FMT_BGR24 \ |
411 | 1379b584 | Alexis Ballier | || (x)==PIX_FMT_BGR565BE \ |
412 | || (x)==PIX_FMT_BGR565LE \ |
||
413 | || (x)==PIX_FMT_BGR555BE \ |
||
414 | || (x)==PIX_FMT_BGR555LE \ |
||
415 | a4e44130 | Janusz Krzysztofik | || (x)==PIX_FMT_BGR444BE \ |
416 | || (x)==PIX_FMT_BGR444LE \ |
||
417 | 9d9de37d | Ivo van Poorten | || (x)==PIX_FMT_BGR8 \ |
418 | || (x)==PIX_FMT_BGR4 \ |
||
419 | || (x)==PIX_FMT_BGR4_BYTE \ |
||
420 | || (x)==PIX_FMT_MONOBLACK \ |
||
421 | ec1bca2a | Michael Niedermayer | || (x)==PIX_FMT_MONOWHITE \ |
422 | 9d9de37d | Ivo van Poorten | ) |
423 | 81858371 | Michael Niedermayer | #define isRGBinBytes(x) ( \
|
424 | (x)==PIX_FMT_RGB48BE \ |
||
425 | || (x)==PIX_FMT_RGB48LE \ |
||
426 | || (x)==PIX_FMT_RGBA \ |
||
427 | || (x)==PIX_FMT_ARGB \ |
||
428 | || (x)==PIX_FMT_RGB24 \ |
||
429 | ) |
||
430 | #define isBGRinBytes(x) ( \
|
||
431 | (x)==PIX_FMT_BGRA \ |
||
432 | || (x)==PIX_FMT_ABGR \ |
||
433 | || (x)==PIX_FMT_BGR24 \ |
||
434 | ) |
||
435 | #define isAnyRGB(x) ( \
|
||
436 | isRGBinInt(x) \ |
||
437 | || isBGRinInt(x) \ |
||
438 | ) |
||
439 | c2751600 | Cédric Schieli | #define isALPHA(x) ( \
|
440 | (x)==PIX_FMT_BGR32 \ |
||
441 | || (x)==PIX_FMT_BGR32_1 \ |
||
442 | || (x)==PIX_FMT_RGB32 \ |
||
443 | || (x)==PIX_FMT_RGB32_1 \ |
||
444 | df0743e0 | Baptiste Coudurier | || (x)==PIX_FMT_Y400A \ |
445 | c2751600 | Cédric Schieli | || (x)==PIX_FMT_YUVA420P \ |
446 | ) |
||
447 | df0743e0 | Baptiste Coudurier | #define usePal(x) ((av_pix_fmt_descriptors[x].flags & PIX_FMT_PAL) || (x) == PIX_FMT_Y400A)
|
448 | e9e12f0e | Luca Abeni | |
449 | 43175f50 | Diego Biurrun | extern const uint64_t ff_dither4[2]; |
450 | extern const uint64_t ff_dither8[2]; |
||
451 | 0cb25594 | Carl Eugen Hoyos | |
452 | e40b183d | Luca Barbato | extern const AVClass sws_context_class; |
453 | |||
454 | a4388ebd | Ramiro Polla | /**
|
455 | * Sets c->swScale to an unscaled converter if one exists for the specific
|
||
456 | * source and destination formats, bit depths, flags, etc.
|
||
457 | */
|
||
458 | void ff_get_unscaled_swscale(SwsContext *c);
|
||
459 | |||
460 | /**
|
||
461 | * Returns the SWS_CPU_CAPS for the optimized code compiled into swscale.
|
||
462 | */
|
||
463 | int ff_hardcodedcpuflags(void); |
||
464 | |||
465 | /**
|
||
466 | * Returns function pointer to fastest main scaler path function depending
|
||
467 | * on architecture and available optimizations.
|
||
468 | */
|
||
469 | SwsFunc ff_getSwsFunc(SwsContext *c); |
||
470 | |||
471 | 0eaf5235 | Stefano Sabatini | #endif /* SWSCALE_SWSCALE_INTERNAL_H */ |