annotate postproc/postprocess.h @ 7946:f483ab704252

postprocessing cleanup: remove opendivx #ifdefs remove rk1 filter remove unused / obsolete stuff add -1,4,2,4,-1 deinterlacing filter (ffmpeg uses that) threadsafe / no more non-const globals some optimizations different strides for Y,U,V possible remove ebx usage (someone really should fix gcc, this is really lame) change the dering filter slightly (tell me if its worse for any files)
author michael
date Mon, 28 Oct 2002 19:31:04 +0000
parents ac6e2ce386fa
children 0a4ab841ae29
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2158
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
1 /*
3964
4911e2fc554b -npp fq:<quantizer>
michael
parents: 3832
diff changeset
2 Copyright (C) 2001-2002 Michael Niedermayer (michaelni@gmx.at)
2158
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
3
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
6 the Free Software Foundation; either version 2 of the License, or
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
7 (at your option) any later version.
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
8
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
12 GNU General Public License for more details.
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
13
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
15 along with this program; if not, write to the Free Software
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
17 */
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
18
2186
491d4fc9b6f2 small changes for mplayer integration:
arpi
parents: 2179
diff changeset
19 // POSTPROCESS_H is defined by opendivx's postprocess.h
491d4fc9b6f2 small changes for mplayer integration:
arpi
parents: 2179
diff changeset
20 #ifndef NEWPOSTPROCESS_H
491d4fc9b6f2 small changes for mplayer integration:
arpi
parents: 2179
diff changeset
21 #define NEWPOSTPROCESS_H
2158
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
22
2159
795f3d022657 fixed a bug in the horizontal default filter
arpi
parents: 2158
diff changeset
23 #define V_DEBLOCK 0x01
795f3d022657 fixed a bug in the horizontal default filter
arpi
parents: 2158
diff changeset
24 #define H_DEBLOCK 0x02
795f3d022657 fixed a bug in the horizontal default filter
arpi
parents: 2158
diff changeset
25 #define DERING 0x04
2168
21a8f158d19f bugfixes: last 3 lines not brightness/contrast corrected
michael
parents: 2159
diff changeset
26 #define LEVEL_FIX 0x08 /* Brightness & Contrast */
2159
795f3d022657 fixed a bug in the horizontal default filter
arpi
parents: 2158
diff changeset
27
2179
2d8d14b882cc fixed a rounding bug thing in the X1 Filter
michael
parents: 2169
diff changeset
28 #define LUM_V_DEBLOCK V_DEBLOCK // 1
2d8d14b882cc fixed a rounding bug thing in the X1 Filter
michael
parents: 2169
diff changeset
29 #define LUM_H_DEBLOCK H_DEBLOCK // 2
2d8d14b882cc fixed a rounding bug thing in the X1 Filter
michael
parents: 2169
diff changeset
30 #define CHROM_V_DEBLOCK (V_DEBLOCK<<4) // 16
2d8d14b882cc fixed a rounding bug thing in the X1 Filter
michael
parents: 2169
diff changeset
31 #define CHROM_H_DEBLOCK (H_DEBLOCK<<4) // 32
2474
2e9442544447 just a few "not implemented yet" removed
michael
parents: 2389
diff changeset
32 #define LUM_DERING DERING // 4
2e9442544447 just a few "not implemented yet" removed
michael
parents: 2389
diff changeset
33 #define CHROM_DERING (DERING<<4) // 64
2179
2d8d14b882cc fixed a rounding bug thing in the X1 Filter
michael
parents: 2169
diff changeset
34 #define LUM_LEVEL_FIX LEVEL_FIX // 8
2203
f90b6e259dc8 rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 2189
diff changeset
35 #define CHROM_LEVEL_FIX (LEVEL_FIX<<4) // 128 (not implemented yet)
2159
795f3d022657 fixed a bug in the horizontal default filter
arpi
parents: 2158
diff changeset
36
2179
2d8d14b882cc fixed a rounding bug thing in the X1 Filter
michael
parents: 2169
diff changeset
37 // Experimental vertical filters
2d8d14b882cc fixed a rounding bug thing in the X1 Filter
michael
parents: 2169
diff changeset
38 #define V_X1_FILTER 0x0200 // 512
2159
795f3d022657 fixed a bug in the horizontal default filter
arpi
parents: 2158
diff changeset
39
2179
2d8d14b882cc fixed a rounding bug thing in the X1 Filter
michael
parents: 2169
diff changeset
40 // Experimental horizontal filters
2d8d14b882cc fixed a rounding bug thing in the X1 Filter
michael
parents: 2169
diff changeset
41 #define H_X1_FILTER 0x2000 // 8192
2168
21a8f158d19f bugfixes: last 3 lines not brightness/contrast corrected
michael
parents: 2159
diff changeset
42
2389
bd3f33e7dd26 auto brightness/ contrast bugfix
michael
parents: 2292
diff changeset
43 // select between full y range (255-0) or standart one (234-16)
2285
4840e356d0d3 fixed a bug in the tmp buffer
michael
parents: 2246
diff changeset
44 #define FULL_Y_RANGE 0x8000 // 32768
4840e356d0d3 fixed a bug in the tmp buffer
michael
parents: 2246
diff changeset
45
2203
f90b6e259dc8 rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 2189
diff changeset
46 //Deinterlacing Filters
f90b6e259dc8 rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 2189
diff changeset
47 #define LINEAR_IPOL_DEINT_FILTER 0x10000 // 65536
f90b6e259dc8 rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 2189
diff changeset
48 #define LINEAR_BLEND_DEINT_FILTER 0x20000 // 131072
2246
f7c1485b33be fixed the height%8!=0 bug
michael
parents: 2221
diff changeset
49 #define CUBIC_BLEND_DEINT_FILTER 0x8000 // (not implemented yet)
f7c1485b33be fixed the height%8!=0 bug
michael
parents: 2221
diff changeset
50 #define CUBIC_IPOL_DEINT_FILTER 0x40000 // 262144
2221
9fd911c931cd minor cleanups
michael
parents: 2203
diff changeset
51 #define MEDIAN_DEINT_FILTER 0x80000 // 524288
7946
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
52 #define FFMPEG_DEINT_FILTER 0x400000
2203
f90b6e259dc8 rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 2189
diff changeset
53
2860
08b833fb875a temporal noise reducer in C (-pp 0x100000)
michael
parents: 2474
diff changeset
54 #define TEMP_NOISE_FILTER 0x100000
3964
4911e2fc554b -npp fq:<quantizer>
michael
parents: 3832
diff changeset
55 #define FORCE_QUANT 0x200000
2860
08b833fb875a temporal noise reducer in C (-pp 0x100000)
michael
parents: 2474
diff changeset
56
2203
f90b6e259dc8 rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 2189
diff changeset
57
2189
82556b3a1228 Cleanup:
arpi
parents: 2186
diff changeset
58 #define GET_PP_QUALITY_MAX 6
2158
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
59
3154
b2e24fec97bc compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 2860
diff changeset
60 //use if u want a faster postprocessing code
b2e24fec97bc compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 2860
diff changeset
61 //cant differentiate between chroma & luma filters (both on or both off)
b2e24fec97bc compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 2860
diff changeset
62 //obviosly the -pp option at the commandline has no effect except turning the here selected
b2e24fec97bc compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 2860
diff changeset
63 //filters on
b2e24fec97bc compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 2860
diff changeset
64 //#define COMPILE_TIME_MODE 0x77
b2e24fec97bc compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 2860
diff changeset
65
2158
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
66 #define QP_STORE_T int
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
67
7946
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
68 char *postproc_help;
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
69
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
70 typedef struct PPMode{
2389
bd3f33e7dd26 auto brightness/ contrast bugfix
michael
parents: 2292
diff changeset
71 int lumMode; //acivates filters for luminance
bd3f33e7dd26 auto brightness/ contrast bugfix
michael
parents: 2292
diff changeset
72 int chromMode; //acivates filters for chrominance
bd3f33e7dd26 auto brightness/ contrast bugfix
michael
parents: 2292
diff changeset
73 int error; // non zero on error
bd3f33e7dd26 auto brightness/ contrast bugfix
michael
parents: 2292
diff changeset
74
2860
08b833fb875a temporal noise reducer in C (-pp 0x100000)
michael
parents: 2474
diff changeset
75 int minAllowedY; // for brigtness correction
08b833fb875a temporal noise reducer in C (-pp 0x100000)
michael
parents: 2474
diff changeset
76 int maxAllowedY; // for brihtness correction
08b833fb875a temporal noise reducer in C (-pp 0x100000)
michael
parents: 2474
diff changeset
77
08b833fb875a temporal noise reducer in C (-pp 0x100000)
michael
parents: 2474
diff changeset
78 int maxTmpNoise[3]; // for Temporal Noise Reducing filter (Maximal sum of abs differences)
3832
d05cfaf5f0f2 minor brightness/contrast bugfix / moved some global vars into ppMode
michael
parents: 3771
diff changeset
79
d05cfaf5f0f2 minor brightness/contrast bugfix / moved some global vars into ppMode
michael
parents: 3771
diff changeset
80 int maxDcDiff; // max abs diff between pixels to be considered flat
7946
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
81 int flatnessThreshold;
2389
bd3f33e7dd26 auto brightness/ contrast bugfix
michael
parents: 2292
diff changeset
82
7946
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
83 int forcedQuant; // quantizer if FORCE_QUANT is used
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
84 } PPMode;
2389
bd3f33e7dd26 auto brightness/ contrast bugfix
michael
parents: 2292
diff changeset
85
7946
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
86 void postprocess(uint8_t * src[3], int srcStride[3],
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
87 uint8_t * dst[3], int dstStride[3],
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
88 int horizontalSize, int verticalSize,
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
89 QP_STORE_T *QP_store, int QP_stride,
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
90 PPMode *mode, void *ppContext);
2189
82556b3a1228 Cleanup:
arpi
parents: 2186
diff changeset
91
2860
08b833fb875a temporal noise reducer in C (-pp 0x100000)
michael
parents: 2474
diff changeset
92 // name is the stuff after "-pp" on the command line
7946
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
93 PPMode getPPModeByNameAndQuality(char *name, int quality);
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
94
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
95 void *getPPContext(int width, int height);
f483ab704252 postprocessing cleanup:
michael
parents: 5576
diff changeset
96 void freePPContext(void *ppContext);
2389
bd3f33e7dd26 auto brightness/ contrast bugfix
michael
parents: 2292
diff changeset
97
3771
a14b3a600b81 new -pp options stuff (-npp ...)
michael
parents: 3154
diff changeset
98 int readPPOpt(void *conf, char *arg);
a14b3a600b81 new -pp options stuff (-npp ...)
michael
parents: 3154
diff changeset
99
2158
508468a75be0 new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
100 #endif