ffmpeg / libswscale / swscale.h @ db46be01
History | View | Annotate | Download (12.1 KB)
1 | fe8054c0 | 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 | 3db822b0 | Arpi | |
21 | 0eaf5235 | Stefano Sabatini | #ifndef SWSCALE_SWSCALE_H
|
22 | #define SWSCALE_SWSCALE_H
|
||
23 | 5427e242 | Michael Niedermayer | |
24 | d4e24275 | Michael Niedermayer | /**
|
25 | 353285d7 | Diego Biurrun | * @file
|
26 | 6a4970ab | Diego Biurrun | * @brief
|
27 | d4e24275 | Michael Niedermayer | * external api for the swscale stuff
|
28 | */
|
||
29 | |||
30 | 88517699 | Måns Rullgård | #include "libavutil/avutil.h" |
31 | d28ef270 | Luca Abeni | |
32 | e08e6bb6 | Måns Rullgård | #define LIBSWSCALE_VERSION_MAJOR 0 |
33 | c508ab67 | Stefano Sabatini | #define LIBSWSCALE_VERSION_MINOR 12 |
34 | 8e9767f6 | Stefano Sabatini | #define LIBSWSCALE_VERSION_MICRO 0 |
35 | ccf95ef1 | Måns Rullgård | |
36 | e08e6bb6 | Måns Rullgård | #define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \
|
37 | LIBSWSCALE_VERSION_MINOR, \ |
||
38 | LIBSWSCALE_VERSION_MICRO) |
||
39 | #define LIBSWSCALE_VERSION AV_VERSION(LIBSWSCALE_VERSION_MAJOR, \
|
||
40 | LIBSWSCALE_VERSION_MINOR, \ |
||
41 | LIBSWSCALE_VERSION_MICRO) |
||
42 | 94c4def2 | Luca Abeni | #define LIBSWSCALE_BUILD LIBSWSCALE_VERSION_INT
|
43 | |||
44 | #define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) |
||
45 | |||
46 | b3e03fa7 | Stefano Sabatini | /**
|
47 | 0810a584 | Stefano Sabatini | * Those FF_API_* defines are not part of public API.
|
48 | * They may change, break or disappear at any time.
|
||
49 | */
|
||
50 | #ifndef FF_API_SWS_GETCONTEXT
|
||
51 | 0464ee9a | Anton Khirnov | #define FF_API_SWS_GETCONTEXT (LIBSWSCALE_VERSION_MAJOR < 2) |
52 | 0810a584 | Stefano Sabatini | #endif
|
53 | |||
54 | /**
|
||
55 | ed80ba74 | Stefano Sabatini | * Returns the LIBSWSCALE_VERSION_INT constant.
|
56 | b3e03fa7 | Stefano Sabatini | */
|
57 | unsigned swscale_version(void); |
||
58 | |||
59 | bd381fd3 | Diego Biurrun | /**
|
60 | ed80ba74 | Stefano Sabatini | * Returns the libswscale build-time configuration.
|
61 | bd381fd3 | Diego Biurrun | */
|
62 | 997980f0 | Stefano Sabatini | const char *swscale_configuration(void); |
63 | bd381fd3 | Diego Biurrun | |
64 | /**
|
||
65 | ed80ba74 | Stefano Sabatini | * Returns the libswscale license.
|
66 | bd381fd3 | Diego Biurrun | */
|
67 | 997980f0 | Stefano Sabatini | const char *swscale_license(void); |
68 | bd381fd3 | Diego Biurrun | |
69 | 28bf81c9 | Michael Niedermayer | /* values for the flags, the stuff on the command line is different */
|
70 | 221b804f | Diego Biurrun | #define SWS_FAST_BILINEAR 1 |
71 | #define SWS_BILINEAR 2 |
||
72 | #define SWS_BICUBIC 4 |
||
73 | #define SWS_X 8 |
||
74 | #define SWS_POINT 0x10 |
||
75 | #define SWS_AREA 0x20 |
||
76 | #define SWS_BICUBLIN 0x40 |
||
77 | #define SWS_GAUSS 0x80 |
||
78 | #define SWS_SINC 0x100 |
||
79 | #define SWS_LANCZOS 0x200 |
||
80 | #define SWS_SPLINE 0x400 |
||
81 | 1e621b18 | Michael Niedermayer | |
82 | 221b804f | Diego Biurrun | #define SWS_SRC_V_CHR_DROP_MASK 0x30000 |
83 | #define SWS_SRC_V_CHR_DROP_SHIFT 16 |
||
84 | 5859233b | Michael Niedermayer | |
85 | 221b804f | Diego Biurrun | #define SWS_PARAM_DEFAULT 123456 |
86 | a86c461c | Michael Niedermayer | |
87 | 221b804f | Diego Biurrun | #define SWS_PRINT_INFO 0x1000 |
88 | a86c461c | Michael Niedermayer | |
89 | 86bdf3fd | Diego Biurrun | //the following 3 flags are not completely implemented
|
90 | //internal chrominace subsampling info
|
||
91 | 221b804f | Diego Biurrun | #define SWS_FULL_CHR_H_INT 0x2000 |
92 | 1e621b18 | Michael Niedermayer | //input subsampling info
|
93 | 221b804f | Diego Biurrun | #define SWS_FULL_CHR_H_INP 0x4000 |
94 | #define SWS_DIRECT_BGR 0x8000 |
||
95 | #define SWS_ACCURATE_RND 0x40000 |
||
96 | ceb700ba | Michael Niedermayer | #define SWS_BITEXACT 0x80000 |
97 | 1e621b18 | Michael Niedermayer | |
98 | 221b804f | Diego Biurrun | #define SWS_CPU_CAPS_MMX 0x80000000 |
99 | #define SWS_CPU_CAPS_MMX2 0x20000000 |
||
100 | #define SWS_CPU_CAPS_3DNOW 0x40000000 |
||
101 | #define SWS_CPU_CAPS_ALTIVEC 0x10000000 |
||
102 | d3f3eea9 | Marc Hoffman | #define SWS_CPU_CAPS_BFIN 0x01000000 |
103 | 539ff40c | Ramiro Polla | #define SWS_CPU_CAPS_SSE2 0x02000000 |
104 | 516b1f82 | Michael Niedermayer | |
105 | c7f822d9 | Michael Niedermayer | #define SWS_MAX_REDUCE_CUTOFF 0.002 |
106 | 28bf81c9 | Michael Niedermayer | |
107 | 221b804f | Diego Biurrun | #define SWS_CS_ITU709 1 |
108 | #define SWS_CS_FCC 4 |
||
109 | #define SWS_CS_ITU601 5 |
||
110 | #define SWS_CS_ITU624 5 |
||
111 | #define SWS_CS_SMPTE170M 5 |
||
112 | #define SWS_CS_SMPTE240M 7 |
||
113 | #define SWS_CS_DEFAULT 5 |
||
114 | 0481412a | Michael Niedermayer | |
115 | 3f3dc76c | David Conrad | /**
|
116 | ed80ba74 | Stefano Sabatini | * Returns a pointer to yuv<->rgb coefficients for the given colorspace
|
117 | fbc0f6a9 | Stefano Sabatini | * suitable for sws_setColorspaceDetails().
|
118 | *
|
||
119 | * @param colorspace One of the SWS_CS_* macros. If invalid,
|
||
120 | * SWS_CS_DEFAULT is used.
|
||
121 | 3f3dc76c | David Conrad | */
|
122 | 89ee5c68 | Stefano Sabatini | const int *sws_getCoefficients(int colorspace); |
123 | 77a49659 | Michael Niedermayer | |
124 | 28bf81c9 | Michael Niedermayer | |
125 | c7f822d9 | Michael Niedermayer | // when used for filters they must have an odd number of elements
|
126 | // coeffs cannot be shared between vectors
|
||
127 | 28bf81c9 | Michael Niedermayer | typedef struct { |
128 | edbdf77e | Stefano Sabatini | double *coeff; ///< pointer to the list of coefficients |
129 | int length; ///< number of coefficients in the vector |
||
130 | c7f822d9 | Michael Niedermayer | } SwsVector; |
131 | |||
132 | // vectors can be shared
|
||
133 | typedef struct { |
||
134 | 221b804f | Diego Biurrun | SwsVector *lumH; |
135 | SwsVector *lumV; |
||
136 | SwsVector *chrH; |
||
137 | SwsVector *chrV; |
||
138 | 28bf81c9 | Michael Niedermayer | } SwsFilter; |
139 | |||
140 | d4e24275 | Michael Niedermayer | struct SwsContext;
|
141 | 077ea8a7 | Michael Niedermayer | |
142 | 2e0a80a1 | Stefano Sabatini | /**
|
143 | ed80ba74 | Stefano Sabatini | * Returns a positive value if pix_fmt is a supported input format, 0
|
144 | 8e9767f6 | Stefano Sabatini | * otherwise.
|
145 | */
|
||
146 | int sws_isSupportedInput(enum PixelFormat pix_fmt); |
||
147 | |||
148 | /**
|
||
149 | ed80ba74 | Stefano Sabatini | * Returns a positive value if pix_fmt is a supported output format, 0
|
150 | 8e9767f6 | Stefano Sabatini | * otherwise.
|
151 | */
|
||
152 | int sws_isSupportedOutput(enum PixelFormat pix_fmt); |
||
153 | |||
154 | /**
|
||
155 | 33ce3846 | Ramiro Polla | * Allocates an empty SwsContext. This must be filled and passed to
|
156 | * sws_init_context(). For filling see AVOptions, options.c and
|
||
157 | * sws_setColorspaceDetails().
|
||
158 | 635d4aed | Michael Niedermayer | */
|
159 | struct SwsContext *sws_alloc_context(void); |
||
160 | |||
161 | /**
|
||
162 | 33ce3846 | Ramiro Polla | * Initializes the swscaler context sws_context.
|
163 | 499287e0 | Stefano Sabatini | *
|
164 | * @return zero or positive value on success, a negative value on
|
||
165 | * error
|
||
166 | 635d4aed | Michael Niedermayer | */
|
167 | int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter); |
||
168 | |||
169 | /**
|
||
170 | ed80ba74 | Stefano Sabatini | * Frees the swscaler context swsContext.
|
171 | * If swsContext is NULL, then does nothing.
|
||
172 | 2e0a80a1 | Stefano Sabatini | */
|
173 | d4e24275 | Michael Niedermayer | void sws_freeContext(struct SwsContext *swsContext); |
174 | 28bf81c9 | Michael Niedermayer | |
175 | 0810a584 | Stefano Sabatini | #if FF_API_SWS_GETCONTEXT
|
176 | a1588654 | Stefano Sabatini | /**
|
177 | ed80ba74 | Stefano Sabatini | * Allocates and returns a SwsContext. You need it to perform
|
178 | a1588654 | Stefano Sabatini | * scaling/conversion operations using sws_scale().
|
179 | *
|
||
180 | * @param srcW the width of the source image
|
||
181 | * @param srcH the height of the source image
|
||
182 | * @param srcFormat the source image format
|
||
183 | * @param dstW the width of the destination image
|
||
184 | * @param dstH the height of the destination image
|
||
185 | * @param dstFormat the destination image format
|
||
186 | * @param flags specify which algorithm and options to use for rescaling
|
||
187 | * @return a pointer to an allocated context, or NULL in case of error
|
||
188 | 0464ee9a | Anton Khirnov | * @note this function is to be removed after a saner alternative is
|
189 | * written
|
||
190 | a1588654 | Stefano Sabatini | */
|
191 | d648c720 | Diego Biurrun | struct SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat, |
192 | int dstW, int dstH, enum PixelFormat dstFormat, |
||
193 | int flags, SwsFilter *srcFilter,
|
||
194 | 0020c54c | Diego Biurrun | SwsFilter *dstFilter, const double *param); |
195 | 0810a584 | Stefano Sabatini | #endif
|
196 | 583799c4 | Stefano Sabatini | |
197 | /**
|
||
198 | ed80ba74 | Stefano Sabatini | * Scales the image slice in srcSlice and puts the resulting scaled
|
199 | 532ec283 | Stefano Sabatini | * slice in the image in dst. A slice is a sequence of consecutive
|
200 | a520e9f2 | Stefano Sabatini | * rows in an image.
|
201 | *
|
||
202 | * Slices have to be provided in sequential order, either in
|
||
203 | * top-bottom or bottom-top order. If slices are provided in
|
||
204 | * non-sequential order the behavior of the function is undefined.
|
||
205 | 583799c4 | Stefano Sabatini | *
|
206 | * @param context the scaling context previously created with
|
||
207 | * sws_getContext()
|
||
208 | 15239b7f | Stefano Sabatini | * @param srcSlice the array containing the pointers to the planes of
|
209 | 583799c4 | Stefano Sabatini | * the source slice
|
210 | * @param srcStride the array containing the strides for each plane of
|
||
211 | * the source image
|
||
212 | * @param srcSliceY the position in the source image of the slice to
|
||
213 | * process, that is the number (counted starting from
|
||
214 | * zero) in the image of the first row of the slice
|
||
215 | * @param srcSliceH the height of the source slice, that is the number
|
||
216 | * of rows in the slice
|
||
217 | * @param dst the array containing the pointers to the planes of
|
||
218 | * the destination image
|
||
219 | * @param dstStride the array containing the strides for each plane of
|
||
220 | * the destination image
|
||
221 | * @return the height of the output slice
|
||
222 | */
|
||
223 | 01cc47dc | David Conrad | int sws_scale(struct SwsContext *context, const uint8_t* const srcSlice[], const int srcStride[], |
224 | int srcSliceY, int srcSliceH, uint8_t* const dst[], const int dstStride[]); |
||
225 | d458b7d4 | Stefano Sabatini | |
226 | c099766f | Stefano Sabatini | #if LIBSWSCALE_VERSION_MAJOR < 1 |
227 | 1eeded39 | Stefano Sabatini | /**
|
228 | * @deprecated Use sws_scale() instead.
|
||
229 | */
|
||
230 | f28cc577 | Alexis Ballier | int sws_scale_ordered(struct SwsContext *context, const uint8_t* const src[], |
231 | d648c720 | Diego Biurrun | int srcStride[], int srcSliceY, int srcSliceH, |
232 | uint8_t* dst[], int dstStride[]) attribute_deprecated;
|
||
233 | c099766f | Stefano Sabatini | #endif
|
234 | d4e24275 | Michael Niedermayer | |
235 | 2d26fa28 | Stefano Sabatini | /**
|
236 | * @param inv_table the yuv2rgb coefficients, normally ff_yuv2rgb_coeffs[x]
|
||
237 | * @param fullRange if 1 then the luma range is 0..255 if 0 it is 16..235
|
||
238 | * @return -1 if not supported
|
||
239 | */
|
||
240 | d648c720 | Diego Biurrun | int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], |
241 | int srcRange, const int table[4], int dstRange, |
||
242 | int brightness, int contrast, int saturation); |
||
243 | 2d26fa28 | Stefano Sabatini | |
244 | /**
|
||
245 | * @return -1 if not supported
|
||
246 | */
|
||
247 | d648c720 | Diego Biurrun | int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, |
248 | int *srcRange, int **table, int *dstRange, |
||
249 | int *brightness, int *contrast, int *saturation); |
||
250 | 6d3cf67c | Stefano Sabatini | |
251 | /**
|
||
252 | 1aff375d | Ramiro Polla | * Allocates and returns an uninitialized vector with length coefficients.
|
253 | */
|
||
254 | SwsVector *sws_allocVec(int length);
|
||
255 | |||
256 | /**
|
||
257 | ed80ba74 | Stefano Sabatini | * Returns a normalized Gaussian curve used to filter stuff
|
258 | 6d3cf67c | Stefano Sabatini | * quality=3 is high quality, lower is lower quality.
|
259 | */
|
||
260 | d4e24275 | Michael Niedermayer | SwsVector *sws_getGaussianVec(double variance, double quality); |
261 | c326825e | Stefano Sabatini | |
262 | /**
|
||
263 | ed80ba74 | Stefano Sabatini | * Allocates and returns a vector with length coefficients, all
|
264 | 532ec283 | Stefano Sabatini | * with the same value c.
|
265 | c326825e | Stefano Sabatini | */
|
266 | d4e24275 | Michael Niedermayer | SwsVector *sws_getConstVec(double c, int length); |
267 | b5fdaebb | Stefano Sabatini | |
268 | /**
|
||
269 | ed80ba74 | Stefano Sabatini | * Allocates and returns a vector with just one coefficient, with
|
270 | b5fdaebb | Stefano Sabatini | * value 1.0.
|
271 | */
|
||
272 | d4e24275 | Michael Niedermayer | SwsVector *sws_getIdentityVec(void);
|
273 | 0bcb5b39 | Stefano Sabatini | |
274 | /**
|
||
275 | ed80ba74 | Stefano Sabatini | * Scales all the coefficients of a by the scalar value.
|
276 | 0bcb5b39 | Stefano Sabatini | */
|
277 | d4e24275 | Michael Niedermayer | void sws_scaleVec(SwsVector *a, double scalar); |
278 | a26b51cd | Stefano Sabatini | |
279 | /**
|
||
280 | ed80ba74 | Stefano Sabatini | * Scales all the coefficients of a so that their sum equals height.
|
281 | a26b51cd | Stefano Sabatini | */
|
282 | d4e24275 | Michael Niedermayer | void sws_normalizeVec(SwsVector *a, double height); |
283 | void sws_convVec(SwsVector *a, SwsVector *b);
|
||
284 | void sws_addVec(SwsVector *a, SwsVector *b);
|
||
285 | void sws_subVec(SwsVector *a, SwsVector *b);
|
||
286 | void sws_shiftVec(SwsVector *a, int shift); |
||
287 | 89b74647 | Stefano Sabatini | |
288 | /**
|
||
289 | ed80ba74 | Stefano Sabatini | * Allocates and returns a clone of the vector a, that is a vector
|
290 | 532ec283 | Stefano Sabatini | * with the same coefficients as a.
|
291 | 89b74647 | Stefano Sabatini | */
|
292 | d4e24275 | Michael Niedermayer | SwsVector *sws_cloneVec(SwsVector *a); |
293 | |||
294 | 26b40a65 | Stefano Sabatini | #if LIBSWSCALE_VERSION_MAJOR < 1 |
295 | /**
|
||
296 | * @deprecated Use sws_printVec2() instead.
|
||
297 | */
|
||
298 | attribute_deprecated void sws_printVec(SwsVector *a);
|
||
299 | #endif
|
||
300 | |||
301 | /**
|
||
302 | ed80ba74 | Stefano Sabatini | * Prints with av_log() a textual representation of the vector a
|
303 | 532ec283 | Stefano Sabatini | * if log_level <= av_log_level.
|
304 | 26b40a65 | Stefano Sabatini | */
|
305 | void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level); |
||
306 | |||
307 | d4e24275 | Michael Niedermayer | void sws_freeVec(SwsVector *a);
|
308 | |||
309 | 6a4970ab | Diego Biurrun | SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, |
310 | b534f73d | Stefano Sabatini | float lumaSharpen, float chromaSharpen, |
311 | 221b804f | Diego Biurrun | float chromaHShift, float chromaVShift, |
312 | int verbose);
|
||
313 | e21206a8 | Michael Niedermayer | void sws_freeFilter(SwsFilter *filter);
|
314 | |||
315 | b954b34a | Stefano Sabatini | /**
|
316 | ed80ba74 | Stefano Sabatini | * Checks if context can be reused, otherwise reallocates a new
|
317 | 39e80e6c | Stefano Sabatini | * one.
|
318 | b954b34a | Stefano Sabatini | *
|
319 | ed80ba74 | Stefano Sabatini | * If context is NULL, just calls sws_getContext() to get a new
|
320 | * context. Otherwise, checks if the parameters are the ones already
|
||
321 | * saved in context. If that is the case, returns the current
|
||
322 | * context. Otherwise, frees context and gets a new context with
|
||
323 | 39e80e6c | Stefano Sabatini | * the new parameters.
|
324 | *
|
||
325 | 532ec283 | Stefano Sabatini | * Be warned that srcFilter and dstFilter are not checked, they
|
326 | 39e80e6c | Stefano Sabatini | * are assumed to remain the same.
|
327 | b954b34a | Stefano Sabatini | */
|
328 | 22e46959 | Víctor Paesa | struct SwsContext *sws_getCachedContext(struct SwsContext *context, |
329 | 96b27045 | Stefano Sabatini | int srcW, int srcH, enum PixelFormat srcFormat, |
330 | d648c720 | Diego Biurrun | int dstW, int dstH, enum PixelFormat dstFormat, |
331 | int flags, SwsFilter *srcFilter,
|
||
332 | 0020c54c | Diego Biurrun | SwsFilter *dstFilter, const double *param); |
333 | 22e46959 | Víctor Paesa | |
334 | 2b991422 | Reinhard Tartler | /**
|
335 | ed80ba74 | Stefano Sabatini | * Converts an 8bit paletted frame into a frame with a color depth of 32-bits.
|
336 | 2b991422 | Reinhard Tartler | *
|
337 | * The output frame will have the same packed format as the palette.
|
||
338 | *
|
||
339 | * @param src source frame buffer
|
||
340 | * @param dst destination frame buffer
|
||
341 | * @param num_pixels number of pixels to convert
|
||
342 | * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src
|
||
343 | */
|
||
344 | void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); |
||
345 | |||
346 | /**
|
||
347 | ed80ba74 | Stefano Sabatini | * Converts an 8bit paletted frame into a frame with a color depth of 24 bits.
|
348 | 2b991422 | Reinhard Tartler | *
|
349 | * With the palette format "ABCD", the destination frame ends up with the format "ABC".
|
||
350 | *
|
||
351 | * @param src source frame buffer
|
||
352 | * @param dst destination frame buffer
|
||
353 | * @param num_pixels number of pixels to convert
|
||
354 | * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src
|
||
355 | */
|
||
356 | void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); |
||
357 | |||
358 | |||
359 | 0eaf5235 | Stefano Sabatini | #endif /* SWSCALE_SWSCALE_H */ |