annotate postproc/swscale.h @ 12334:eeddcef4fb08

"hard" frame duplication for mencoder. this finally makes it possible to generate valid mpeg output from avi's that have duplicate frames in them, or when using inverse telecine filters. to use it, put the "harddup" filter at the end of your filter chain.
author rfelker
date Wed, 28 Apr 2004 04:02:46 +0000
parents 21e5cb258a95
children 6bd869a18d2c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4295
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
1 /*
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9416
diff changeset
2 Copyright (C) 2001-2003 Michael Niedermayer <michaelni@gmx.at>
4295
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
3
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
4 This program is free software; you can redistribute it and/or modify
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
5 it under the terms of the GNU General Public License as published by
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
6 the Free Software Foundation; either version 2 of the License, or
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
7 (at your option) any later version.
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
8
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
9 This program is distributed in the hope that it will be useful,
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
12 GNU General Public License for more details.
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
13
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
14 You should have received a copy of the GNU General Public License
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
15 along with this program; if not, write to the Free Software
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
67c56df76a44 copyright(swscaler) = GPL
michael
parents: 4294
diff changeset
17 */
3272
7e4399d1eb65 horizontal up/downscale linear & cubic
michael
parents: 3209
diff changeset
18
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9416
diff changeset
19 #ifndef SWSCALE_H
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9416
diff changeset
20 #define SWSCALE_H
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9416
diff changeset
21
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
22 /**
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
23 * @file swscale.h
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
24 * @brief
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
25 * external api for the swscale stuff
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
26 */
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
27
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
28 #ifdef __cplusplus
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
29 extern "C" {
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
30 #endif
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9416
diff changeset
31
4276
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
32 /* values for the flags, the stuff on the command line is different */
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
33 #define SWS_FAST_BILINEAR 1
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
34 #define SWS_BILINEAR 2
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
35 #define SWS_BICUBIC 4
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
36 #define SWS_X 8
4401
8d00348d0d6b nearest neighbor / sdl emulation ;) scaling (-sws 4)
michael
parents: 4297
diff changeset
37 #define SWS_POINT 0x10
4402
67abbf501b02 area averageing scaling support (-sws 5) (is identical to bilinear for upscale)
michael
parents: 4401
diff changeset
38 #define SWS_AREA 0x20
6580
5059143aa020 -sws 6 (luma bicubic & chroma bilinear)
michael
parents: 6578
diff changeset
39 #define SWS_BICUBLIN 0x40
6637
f47f12ba3b88 more scaling algos
michael
parents: 6580
diff changeset
40 #define SWS_GAUSS 0x80
f47f12ba3b88 more scaling algos
michael
parents: 6580
diff changeset
41 #define SWS_SINC 0x100
f47f12ba3b88 more scaling algos
michael
parents: 6580
diff changeset
42 #define SWS_LANCZOS 0x200
f47f12ba3b88 more scaling algos
michael
parents: 6580
diff changeset
43 #define SWS_SPLINE 0x400
4467
9512d6832b38 YUY2, BGR24, BGR32 input support (no mmx yet)
michael
parents: 4419
diff changeset
44
6637
f47f12ba3b88 more scaling algos
michael
parents: 6580
diff changeset
45 #define SWS_SRC_V_CHR_DROP_MASK 0x30000
f47f12ba3b88 more scaling algos
michael
parents: 6580
diff changeset
46 #define SWS_SRC_V_CHR_DROP_SHIFT 16
6540
5b3cace64e9d 100l (non mmx versions didnt compile)
michael
parents: 6517
diff changeset
47
6637
f47f12ba3b88 more scaling algos
michael
parents: 6580
diff changeset
48 #define SWS_PARAM_MASK 0x3FC0000
f47f12ba3b88 more scaling algos
michael
parents: 6580
diff changeset
49 #define SWS_PARAM_SHIFT 18
f47f12ba3b88 more scaling algos
michael
parents: 6580
diff changeset
50
f47f12ba3b88 more scaling algos
michael
parents: 6580
diff changeset
51 #define SWS_PRINT_INFO 0x1000
f47f12ba3b88 more scaling algos
michael
parents: 6580
diff changeset
52
f47f12ba3b88 more scaling algos
michael
parents: 6580
diff changeset
53 //the following 3 flags are not completly implemented
4467
9512d6832b38 YUY2, BGR24, BGR32 input support (no mmx yet)
michael
parents: 4419
diff changeset
54 //internal chrominace subsamling info
6541
michael
parents: 6540
diff changeset
55 #define SWS_FULL_CHR_H_INT 0x2000
4467
9512d6832b38 YUY2, BGR24, BGR32 input support (no mmx yet)
michael
parents: 4419
diff changeset
56 //input subsampling info
6541
michael
parents: 6540
diff changeset
57 #define SWS_FULL_CHR_H_INP 0x4000
michael
parents: 6540
diff changeset
58 #define SWS_DIRECT_BGR 0x8000
4467
9512d6832b38 YUY2, BGR24, BGR32 input support (no mmx yet)
michael
parents: 4419
diff changeset
59
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9697
diff changeset
60 #define SWS_CPU_CAPS_MMX 0x80000000
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9697
diff changeset
61 #define SWS_CPU_CAPS_MMX2 0x20000000
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9697
diff changeset
62 #define SWS_CPU_CAPS_3DNOW 0x40000000
12017
21e5cb258a95 AltiVec support in postproc/ + altivec optimizations for yuv2yuvX patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 9985
diff changeset
63 #define SWS_CPU_CAPS_ALTIVEC 0x10000000
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9697
diff changeset
64
4290
1f8ceb12284d general convolution filtering of the source picture
michael
parents: 4276
diff changeset
65 #define SWS_MAX_REDUCE_CUTOFF 0.002
4276
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
66
9416
83fe90af3e16 brightness / saturation / contrast / different yuv colorspace support for some yuv2rgb converters (many converters still ignore it)
michael
parents: 9414
diff changeset
67 #define SWS_CS_ITU709 1
83fe90af3e16 brightness / saturation / contrast / different yuv colorspace support for some yuv2rgb converters (many converters still ignore it)
michael
parents: 9414
diff changeset
68 #define SWS_CS_FCC 4
83fe90af3e16 brightness / saturation / contrast / different yuv colorspace support for some yuv2rgb converters (many converters still ignore it)
michael
parents: 9414
diff changeset
69 #define SWS_CS_ITU601 5
83fe90af3e16 brightness / saturation / contrast / different yuv colorspace support for some yuv2rgb converters (many converters still ignore it)
michael
parents: 9414
diff changeset
70 #define SWS_CS_ITU624 5
83fe90af3e16 brightness / saturation / contrast / different yuv colorspace support for some yuv2rgb converters (many converters still ignore it)
michael
parents: 9414
diff changeset
71 #define SWS_CS_SMPTE170M 5
83fe90af3e16 brightness / saturation / contrast / different yuv colorspace support for some yuv2rgb converters (many converters still ignore it)
michael
parents: 9414
diff changeset
72 #define SWS_CS_SMPTE240M 7
83fe90af3e16 brightness / saturation / contrast / different yuv colorspace support for some yuv2rgb converters (many converters still ignore it)
michael
parents: 9414
diff changeset
73 #define SWS_CS_DEFAULT 5
83fe90af3e16 brightness / saturation / contrast / different yuv colorspace support for some yuv2rgb converters (many converters still ignore it)
michael
parents: 9414
diff changeset
74
9413
0d86fe21b281 cleanup
michael
parents: 6637
diff changeset
75
4276
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
76
4290
1f8ceb12284d general convolution filtering of the source picture
michael
parents: 4276
diff changeset
77 // when used for filters they must have an odd number of elements
1f8ceb12284d general convolution filtering of the source picture
michael
parents: 4276
diff changeset
78 // coeffs cannot be shared between vectors
4276
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
79 typedef struct {
4290
1f8ceb12284d general convolution filtering of the source picture
michael
parents: 4276
diff changeset
80 double *coeff;
4276
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
81 int length;
4290
1f8ceb12284d general convolution filtering of the source picture
michael
parents: 4276
diff changeset
82 } SwsVector;
1f8ceb12284d general convolution filtering of the source picture
michael
parents: 4276
diff changeset
83
1f8ceb12284d general convolution filtering of the source picture
michael
parents: 4276
diff changeset
84 // vectors can be shared
1f8ceb12284d general convolution filtering of the source picture
michael
parents: 4276
diff changeset
85 typedef struct {
1f8ceb12284d general convolution filtering of the source picture
michael
parents: 4276
diff changeset
86 SwsVector *lumH;
1f8ceb12284d general convolution filtering of the source picture
michael
parents: 4276
diff changeset
87 SwsVector *lumV;
1f8ceb12284d general convolution filtering of the source picture
michael
parents: 4276
diff changeset
88 SwsVector *chrH;
1f8ceb12284d general convolution filtering of the source picture
michael
parents: 4276
diff changeset
89 SwsVector *chrV;
4276
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
90 } SwsFilter;
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
91
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
92 struct SwsContext;
2217
fd9311c3fa42 header for swscale.c
arpi
parents:
diff changeset
93
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
94 void sws_freeContext(struct SwsContext *swsContext);
4276
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
95
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
96 struct SwsContext *sws_getContext(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat, int flags,
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
97 SwsFilter *srcFilter, SwsFilter *dstFilter);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
98 int sws_scale(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY,
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
99 int srcSliceH, uint8_t* dst[], int dstStride[]);
9697
5025150738eb 10000l (YUV vs. YVU swscale fix/cleanup)
michael
parents: 9494
diff changeset
100 int sws_scale_ordered(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY,
5025150738eb 10000l (YUV vs. YVU swscale fix/cleanup)
michael
parents: 9494
diff changeset
101 int srcSliceH, uint8_t* dst[], int dstStride[]);
4276
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
102
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
103
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
104 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);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
105 int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, int *srcRange, int **table, int *dstRange, int *brightness, int *contrast, int *saturation);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
106 SwsVector *sws_getGaussianVec(double variance, double quality);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
107 SwsVector *sws_getConstVec(double c, int length);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
108 SwsVector *sws_getIdentityVec(void);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
109 void sws_scaleVec(SwsVector *a, double scalar);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
110 void sws_normalizeVec(SwsVector *a, double height);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
111 void sws_convVec(SwsVector *a, SwsVector *b);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
112 void sws_addVec(SwsVector *a, SwsVector *b);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
113 void sws_subVec(SwsVector *a, SwsVector *b);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
114 void sws_shiftVec(SwsVector *a, int shift);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
115 SwsVector *sws_cloneVec(SwsVector *a);
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9416
diff changeset
116
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
117 void sws_printVec(SwsVector *a);
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
118 void sws_freeVec(SwsVector *a);
4276
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
119
9985
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
120 SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
121 float lumaSarpen, float chromaSharpen,
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
122 float chromaHShift, float chromaVShift,
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
123 int verbose);
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
124 void sws_freeFilter(SwsFilter *filter);
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
125
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
126 #ifdef __cplusplus
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
127 }
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9476
diff changeset
128 #endif
4276
9199d15cb4e0 removed global vars so that multiple swscalers can be used
michael
parents: 3344
diff changeset
129
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9416
diff changeset
130 #endif