annotate libswscale/swscale.h @ 20244:81a514f118d2

Implement bob (pseudo?) deinterlacing for xvmc. Patch from Tomas Janousek (tomi at nomi cz) with modifications by Carl Eugen Hoyos (cehoyos at ag or at) and me.
author reimar
date Sun, 15 Oct 2006 18:27:34 +0000
parents aca9e9783f67
children 1f2ba24b4e47
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1 /*
20094
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
2 * Copyright (C) 2001-2003 Michael Niedermayer <michaelni@gmx.at>
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
3 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
4 * This file is part of FFmpeg.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
5 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or modify
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
7 * it under the terms of the GNU General Public License as published by
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
9 * (at your option) any later version.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
10 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
14 * GNU General Public License for more details.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
15 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
16 * You should have received a copy of the GNU General Public License
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
17 * along with FFmpeg; if not, write to the Free Software
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
19 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
20 * the C code (not assembly, mmx, ...) of the swscaler which has been written
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
21 * by Michael Niedermayer can be used under the LGPL license too
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19661
diff changeset
22 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
23
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
24 #ifndef SWSCALE_H
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
25 #define SWSCALE_H
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
26
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
27 /**
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
28 * @file swscale.h
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
29 * @brief
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
30 * external api for the swscale stuff
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
31 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
32
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
33 #ifdef __cplusplus
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
34 extern "C" {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
35 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
36
19143
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
37 #define AV_STRINGIFY(s) AV_TOSTRING(s)
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
38 #define AV_TOSTRING(s) #s
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
39
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
40 #define LIBSWSCALE_VERSION_INT ((0<<16)+(5<<8)+0)
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
41 #define LIBSWSCALE_VERSION 0.5.0
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
42 #define LIBSWSCALE_BUILD LIBSWSCALE_VERSION_INT
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
43
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
44 #define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION)
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
45
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
46 /* values for the flags, the stuff on the command line is different */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
47 #define SWS_FAST_BILINEAR 1
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
48 #define SWS_BILINEAR 2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
49 #define SWS_BICUBIC 4
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
50 #define SWS_X 8
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
51 #define SWS_POINT 0x10
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
52 #define SWS_AREA 0x20
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
53 #define SWS_BICUBLIN 0x40
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
54 #define SWS_GAUSS 0x80
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
55 #define SWS_SINC 0x100
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
56 #define SWS_LANCZOS 0x200
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
57 #define SWS_SPLINE 0x400
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
58
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
59 #define SWS_SRC_V_CHR_DROP_MASK 0x30000
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
60 #define SWS_SRC_V_CHR_DROP_SHIFT 16
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
61
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
62 #define SWS_PARAM_DEFAULT 123456
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
63
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
64 #define SWS_PRINT_INFO 0x1000
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
65
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
66 //the following 3 flags are not completly implemented
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
67 //internal chrominace subsamling info
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
68 #define SWS_FULL_CHR_H_INT 0x2000
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
69 //input subsampling info
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
70 #define SWS_FULL_CHR_H_INP 0x4000
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
71 #define SWS_DIRECT_BGR 0x8000
19172
bae6c99a99cc vertical scaler with accurate rounding, some people on doom9 can see +-1 errors
michael
parents: 19143
diff changeset
72 #define SWS_ACCURATE_RND 0x40000
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
73
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
74 #define SWS_CPU_CAPS_MMX 0x80000000
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
75 #define SWS_CPU_CAPS_MMX2 0x20000000
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
76 #define SWS_CPU_CAPS_3DNOW 0x40000000
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
77 #define SWS_CPU_CAPS_ALTIVEC 0x10000000
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
78
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
79 #define SWS_MAX_REDUCE_CUTOFF 0.002
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
80
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
81 #define SWS_CS_ITU709 1
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
82 #define SWS_CS_FCC 4
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
83 #define SWS_CS_ITU601 5
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
84 #define SWS_CS_ITU624 5
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
85 #define SWS_CS_SMPTE170M 5
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
86 #define SWS_CS_SMPTE240M 7
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
87 #define SWS_CS_DEFAULT 5
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
88
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
89
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
90
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
91 // when used for filters they must have an odd number of elements
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
92 // coeffs cannot be shared between vectors
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
93 typedef struct {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
94 double *coeff;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
95 int length;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
96 } SwsVector;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
97
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
98 // vectors can be shared
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
99 typedef struct {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
100 SwsVector *lumH;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
101 SwsVector *lumV;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
102 SwsVector *chrH;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
103 SwsVector *chrV;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
104 } SwsFilter;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
105
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
106 struct SwsContext;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
107
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
108 void sws_freeContext(struct SwsContext *swsContext);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
109
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
110 struct SwsContext *sws_getContext(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat, int flags,
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
111 SwsFilter *srcFilter, SwsFilter *dstFilter, double *param);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
112 int sws_scale(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY,
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
113 int srcSliceH, uint8_t* dst[], int dstStride[]);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
114 int sws_scale_ordered(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY,
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
115 int srcSliceH, uint8_t* dst[], int dstStride[]);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
116
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
117
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
118 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);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
119 int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, int *srcRange, int **table, int *dstRange, int *brightness, int *contrast, int *saturation);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
120 SwsVector *sws_getGaussianVec(double variance, double quality);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
121 SwsVector *sws_getConstVec(double c, int length);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
122 SwsVector *sws_getIdentityVec(void);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
123 void sws_scaleVec(SwsVector *a, double scalar);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
124 void sws_normalizeVec(SwsVector *a, double height);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
125 void sws_convVec(SwsVector *a, SwsVector *b);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
126 void sws_addVec(SwsVector *a, SwsVector *b);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
127 void sws_subVec(SwsVector *a, SwsVector *b);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
128 void sws_shiftVec(SwsVector *a, int shift);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
129 SwsVector *sws_cloneVec(SwsVector *a);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
130
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
131 void sws_printVec(SwsVector *a);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
132 void sws_freeVec(SwsVector *a);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
133
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
134 SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
135 float lumaSarpen, float chromaSharpen,
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
136 float chromaHShift, float chromaVShift,
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
137 int verbose);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
138 void sws_freeFilter(SwsFilter *filter);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
139
19661
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
140 struct SwsContext *sws_getCachedContext(struct SwsContext *context,
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
141 int srcW, int srcH, int srcFormat,
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
142 int dstW, int dstH, int dstFormat, int flags,
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
143 SwsFilter *srcFilter, SwsFilter *dstFilter, double *param);
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
144
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
145 #ifdef __cplusplus
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
146 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
147 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
148
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
149 #endif