swscale.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_H
22 #define SWSCALE_SWSCALE_H
23 
24 /**
25  * @file
26  * @ingroup lsws
27  * external API header
28  */
29 
30 /**
31  * @defgroup lsws Libswscale
32  * @{
33  */
34 
35 #include <stdint.h>
36 
37 #include "libavutil/avutil.h"
38 #include "libavutil/log.h"
39 #include "libavutil/pixfmt.h"
40 #include "version.h"
41 
42 /**
43  * Return the LIBSWSCALE_VERSION_INT constant.
44  */
45 unsigned swscale_version(void);
46 
47 /**
48  * Return the libswscale build-time configuration.
49  */
50 const char *swscale_configuration(void);
51 
52 /**
53  * Return the libswscale license.
54  */
55 const char *swscale_license(void);
56 
57 /* values for the flags, the stuff on the command line is different */
58 #define SWS_FAST_BILINEAR 1
59 #define SWS_BILINEAR 2
60 #define SWS_BICUBIC 4
61 #define SWS_X 8
62 #define SWS_POINT 0x10
63 #define SWS_AREA 0x20
64 #define SWS_BICUBLIN 0x40
65 #define SWS_GAUSS 0x80
66 #define SWS_SINC 0x100
67 #define SWS_LANCZOS 0x200
68 #define SWS_SPLINE 0x400
69 
70 #define SWS_SRC_V_CHR_DROP_MASK 0x30000
71 #define SWS_SRC_V_CHR_DROP_SHIFT 16
72 
73 #define SWS_PARAM_DEFAULT 123456
74 
75 #define SWS_PRINT_INFO 0x1000
76 
77 //the following 3 flags are not completely implemented
78 //internal chrominace subsampling info
79 #define SWS_FULL_CHR_H_INT 0x2000
80 //input subsampling info
81 #define SWS_FULL_CHR_H_INP 0x4000
82 #define SWS_DIRECT_BGR 0x8000
83 #define SWS_ACCURATE_RND 0x40000
84 #define SWS_BITEXACT 0x80000
85 #define SWS_ERROR_DIFFUSION 0x800000
86 
87 #if FF_API_SWS_CPU_CAPS
88 /**
89  * CPU caps are autodetected now, those flags
90  * are only provided for API compatibility.
91  */
92 #define SWS_CPU_CAPS_MMX 0x80000000
93 #define SWS_CPU_CAPS_MMXEXT 0x20000000
94 #define SWS_CPU_CAPS_MMX2 0x20000000
95 #define SWS_CPU_CAPS_3DNOW 0x40000000
96 #define SWS_CPU_CAPS_ALTIVEC 0x10000000
97 #define SWS_CPU_CAPS_BFIN 0x01000000
98 #define SWS_CPU_CAPS_SSE2 0x02000000
99 #endif
100 
101 #define SWS_MAX_REDUCE_CUTOFF 0.002
102 
103 #define SWS_CS_ITU709 1
104 #define SWS_CS_FCC 4
105 #define SWS_CS_ITU601 5
106 #define SWS_CS_ITU624 5
107 #define SWS_CS_SMPTE170M 5
108 #define SWS_CS_SMPTE240M 7
109 #define SWS_CS_DEFAULT 5
110 
111 /**
112  * Return a pointer to yuv<->rgb coefficients for the given colorspace
113  * suitable for sws_setColorspaceDetails().
114  *
115  * @param colorspace One of the SWS_CS_* macros. If invalid,
116  * SWS_CS_DEFAULT is used.
117  */
118 const int *sws_getCoefficients(int colorspace);
119 
120 // when used for filters they must have an odd number of elements
121 // coeffs cannot be shared between vectors
122 typedef struct SwsVector {
123  double *coeff; ///< pointer to the list of coefficients
124  int length; ///< number of coefficients in the vector
125 } SwsVector;
126 
127 // vectors can be shared
128 typedef struct SwsFilter {
133 } SwsFilter;
134 
135 struct SwsContext;
136 
137 /**
138  * Return a positive value if pix_fmt is a supported input format, 0
139  * otherwise.
140  */
142 
143 /**
144  * Return a positive value if pix_fmt is a supported output format, 0
145  * otherwise.
146  */
148 
149 /**
150  * Allocate an empty SwsContext. This must be filled and passed to
151  * sws_init_context(). For filling see AVOptions, options.c and
152  * sws_setColorspaceDetails().
153  */
154 struct SwsContext *sws_alloc_context(void);
155 
156 /**
157  * Initialize the swscaler context sws_context.
158  *
159  * @return zero or positive value on success, a negative value on
160  * error
161  */
162 int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter);
163 
164 /**
165  * Free the swscaler context swsContext.
166  * If swsContext is NULL, then does nothing.
167  */
168 void sws_freeContext(struct SwsContext *swsContext);
169 
170 #if FF_API_SWS_GETCONTEXT
171 /**
172  * Allocate and return an SwsContext. You need it to perform
173  * scaling/conversion operations using sws_scale().
174  *
175  * @param srcW the width of the source image
176  * @param srcH the height of the source image
177  * @param srcFormat the source image format
178  * @param dstW the width of the destination image
179  * @param dstH the height of the destination image
180  * @param dstFormat the destination image format
181  * @param flags specify which algorithm and options to use for rescaling
182  * @return a pointer to an allocated context, or NULL in case of error
183  * @note this function is to be removed after a saner alternative is
184  * written
185  * @deprecated Use sws_getCachedContext() instead.
186  */
188  int dstW, int dstH, enum AVPixelFormat dstFormat,
189  int flags, SwsFilter *srcFilter,
190  SwsFilter *dstFilter, const double *param);
191 #endif
192 
193 /**
194  * Scale the image slice in srcSlice and put the resulting scaled
195  * slice in the image in dst. A slice is a sequence of consecutive
196  * rows in an image.
197  *
198  * Slices have to be provided in sequential order, either in
199  * top-bottom or bottom-top order. If slices are provided in
200  * non-sequential order the behavior of the function is undefined.
201  *
202  * @param c the scaling context previously created with
203  * sws_getContext()
204  * @param srcSlice the array containing the pointers to the planes of
205  * the source slice
206  * @param srcStride the array containing the strides for each plane of
207  * the source image
208  * @param srcSliceY the position in the source image of the slice to
209  * process, that is the number (counted starting from
210  * zero) in the image of the first row of the slice
211  * @param srcSliceH the height of the source slice, that is the number
212  * of rows in the slice
213  * @param dst the array containing the pointers to the planes of
214  * the destination image
215  * @param dstStride the array containing the strides for each plane of
216  * the destination image
217  * @return the height of the output slice
218  */
219 int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[],
220  const int srcStride[], int srcSliceY, int srcSliceH,
221  uint8_t *const dst[], const int dstStride[]);
222 
223 /**
224  * @param dstRange flag indicating the while-black range of the output (1=jpeg / 0=mpeg)
225  * @param srcRange flag indicating the while-black range of the input (1=jpeg / 0=mpeg)
226  * @param table the yuv2rgb coefficients describing the output yuv space, normally ff_yuv2rgb_coeffs[x]
227  * @param inv_table the yuv2rgb coefficients describing the input yuv space, normally ff_yuv2rgb_coeffs[x]
228  * @param brightness 16.16 fixed point brightness correction
229  * @param contrast 16.16 fixed point contrast correction
230  * @param saturation 16.16 fixed point saturation correction
231  * @return -1 if not supported
232  */
233 int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4],
234  int srcRange, const int table[4], int dstRange,
235  int brightness, int contrast, int saturation);
236 
237 /**
238  * @return -1 if not supported
239  */
240 int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table,
241  int *srcRange, int **table, int *dstRange,
242  int *brightness, int *contrast, int *saturation);
243 
244 /**
245  * Allocate and return an uninitialized vector with length coefficients.
246  */
248 
249 /**
250  * Return a normalized Gaussian curve used to filter stuff
251  * quality = 3 is high quality, lower is lower quality.
252  */
253 SwsVector *sws_getGaussianVec(double variance, double quality);
254 
255 /**
256  * Allocate and return a vector with length coefficients, all
257  * with the same value c.
258  */
259 SwsVector *sws_getConstVec(double c, int length);
260 
261 /**
262  * Allocate and return a vector with just one coefficient, with
263  * value 1.0.
264  */
266 
267 /**
268  * Scale all the coefficients of a by the scalar value.
269  */
270 void sws_scaleVec(SwsVector *a, double scalar);
271 
272 /**
273  * Scale all the coefficients of a so that their sum equals height.
274  */
275 void sws_normalizeVec(SwsVector *a, double height);
277 void sws_addVec(SwsVector *a, SwsVector *b);
278 void sws_subVec(SwsVector *a, SwsVector *b);
279 void sws_shiftVec(SwsVector *a, int shift);
280 
281 /**
282  * Allocate and return a clone of the vector a, that is a vector
283  * with the same coefficients as a.
284  */
286 
287 /**
288  * Print with av_log() a textual representation of the vector a
289  * if log_level <= av_log_level.
290  */
291 void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level);
292 
293 void sws_freeVec(SwsVector *a);
294 
295 SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
296  float lumaSharpen, float chromaSharpen,
297  float chromaHShift, float chromaVShift,
298  int verbose);
300 
301 /**
302  * Check if context can be reused, otherwise reallocate a new one.
303  *
304  * If context is NULL, just calls sws_getContext() to get a new
305  * context. Otherwise, checks if the parameters are the ones already
306  * saved in context. If that is the case, returns the current
307  * context. Otherwise, frees context and gets a new context with
308  * the new parameters.
309  *
310  * Be warned that srcFilter and dstFilter are not checked, they
311  * are assumed to remain the same.
312  */
313 struct SwsContext *sws_getCachedContext(struct SwsContext *context,
314  int srcW, int srcH, enum AVPixelFormat srcFormat,
315  int dstW, int dstH, enum AVPixelFormat dstFormat,
316  int flags, SwsFilter *srcFilter,
317  SwsFilter *dstFilter, const double *param);
318 
319 /**
320  * Convert an 8-bit paletted frame into a frame with a color depth of 32 bits.
321  *
322  * The output frame will have the same packed format as the palette.
323  *
324  * @param src source frame buffer
325  * @param dst destination frame buffer
326  * @param num_pixels number of pixels to convert
327  * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src
328  */
329 void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette);
330 
331 /**
332  * Convert an 8-bit paletted frame into a frame with a color depth of 24 bits.
333  *
334  * With the palette format "ABCD", the destination frame ends up with the format "ABC".
335  *
336  * @param src source frame buffer
337  * @param dst destination frame buffer
338  * @param num_pixels number of pixels to convert
339  * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src
340  */
341 void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette);
342 
343 /**
344  * Get the AVClass for swsContext. It can be used in combination with
345  * AV_OPT_SEARCH_FAKE_OBJ for examining options.
346  *
347  * @see av_opt_find().
348  */
349 const AVClass *sws_get_class(void);
350 
351 /**
352  * @}
353  */
354 
355 #endif /* SWSCALE_SWSCALE_H */
SwsFilter * sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, float lumaSharpen, float chromaSharpen, float chromaHShift, float chromaVShift, int verbose)
SwsVector * chrV
Definition: swscale.h:132
void sws_freeVec(SwsVector *a)
struct SwsContext * sws_alloc_context(void)
Allocate an empty SwsContext.
static int shift(int a, int b)
Definition: sonic.c:86
SwsVector * lumV
Definition: swscale.h:130
const char * swscale_configuration(void)
Return the libswscale build-time configuration.
void sws_shiftVec(SwsVector *a, int shift)
int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, int *srcRange, int **table, int *dstRange, int *brightness, int *contrast, int *saturation)
external API header
struct SwsContext * sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param)
Allocate and return an SwsContext.
int srcRange
0 = MPG YUV range, 1 = JPG YUV range (source image).
void sws_convVec(SwsVector *a, SwsVector *b)
swscale version macros
unsigned swscale_version(void)
Return the LIBSWSCALE_VERSION_INT constant.
int srcH
Height of source luma/alpha planes.
uint8_t
int length
number of coefficients in the vector
Definition: swscale.h:124
#define b
Definition: input.c:42
int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[])
Scale the image slice in srcSlice and put the resulting scaled slice in the image in dst...
Definition: swscale.c:798
int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter)
Initialize the swscaler context sws_context.
void sws_normalizeVec(SwsVector *a, double height)
Scale all the coefficients of a so that their sum equals height.
the mask is usually to keep the same permissions Filters should remove permissions on reference they give to output whenever necessary It can be automatically done by setting the rej_perms field on the output pad Here are a few guidelines corresponding to common then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
void sws_scaleVec(SwsVector *a, double scalar)
Scale all the coefficients of a by the scalar value.
enum AVPixelFormat pix_fmt
Definition: v4l.c:63
enum AVPixelFormat dstFormat
Destination pixel format.
int dstH
Height of destination luma/alpha planes.
SwsVector * sws_getGaussianVec(double variance, double quality)
Return a normalized Gaussian curve used to filter stuff quality = 3 is high quality, lower is lower quality.
const char * swscale_license(void)
Return the libswscale license.
const int * sws_getCoefficients(int colorspace)
Return a pointer to yuv<->rgb coefficients for the given colorspace suitable for sws_setColorspaceDet...
Definition: yuv2rgb.c:56
static const struct endianess table[]
int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], int srcRange, const int table[4], int dstRange, int brightness, int contrast, int saturation)
SwsVector * sws_allocVec(int length)
Allocate and return an uninitialized vector with length coefficients.
SwsVector * lumH
Definition: swscale.h:129
void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette)
Convert an 8-bit paletted frame into a frame with a color depth of 32 bits.
int verbose
void sws_addVec(SwsVector *a, SwsVector *b)
int sws_isSupportedInput(enum AVPixelFormat pix_fmt)
Return a positive value if pix_fmt is a supported input format, 0 otherwise.
int dstRange
0 = MPG YUV range, 1 = JPG YUV range (destination image).
SwsVector * chrH
Definition: swscale.h:131
SwsVector * sws_getIdentityVec(void)
Allocate and return a vector with just one coefficient, with value 1.0.
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about quality
SwsVector * sws_cloneVec(SwsVector *a)
Allocate and return a clone of the vector a, that is a vector with the same coefficients as a...
int dstW
Width of destination luma/alpha planes.
void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level)
Print with av_log() a textual representation of the vector a if log_level <= av_log_level.
double * coeff
pointer to the list of coefficients
Definition: swscale.h:123
AVS_Value src
Definition: avisynth_c.h:523
int sws_isSupportedOutput(enum AVPixelFormat pix_fmt)
Return a positive value if pix_fmt is a supported output format, 0 otherwise.
struct SwsVector SwsVector
BYTE int const BYTE int int int height
Definition: avisynth_c.h:713
Describe the class of an AVClass context structure.
Definition: log.h:50
struct SwsFilter SwsFilter
SwsVector * sws_getConstVec(double c, int length)
Allocate and return a vector with length coefficients, all with the same value c. ...
static int flags
Definition: cpu.c:23
int palette
Definition: v4l.c:61
double param[2]
Input parameters for scaling algorithms that need them.
static double c[64]
enum AVPixelFormat srcFormat
Source pixel format.
struct SwsContext * sws_getCachedContext(struct SwsContext *context, int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param)
Check if context can be reused, otherwise reallocate a new one.
pixel format definitions
else dst[i][x+y *dst_stride[i]]
Definition: vf_mcdeint.c:160
void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette)
Convert an 8-bit paletted frame into a frame with a color depth of 24 bits.
void sws_freeFilter(SwsFilter *filter)
void sws_freeContext(struct SwsContext *swsContext)
Free the swscaler context swsContext.
enum AVColorSpace colorspace
Definition: dirac.c:98
void sws_subVec(SwsVector *a, SwsVector *b)
int srcW
Width of source luma/alpha planes.
AVPixelFormat
Pixel format.
Definition: pixfmt.h:66
const AVClass * sws_get_class(void)
Get the AVClass for swsContext.