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