annotate libpostproc/postprocess.h @ 787:4914252c963a libavcodec

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:30:58 +0000
parents 3ef1cc75d5f5
children 4f61ca80b6c1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
1 /*
183
d310beb2d848 -npp fq:<quantizer>
michael
parents: 182
diff changeset
2 Copyright (C) 2001-2002 Michael Niedermayer (michaelni@gmx.at)
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
3
8bce253b537c 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
8bce253b537c 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
8bce253b537c 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
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
7 (at your option) any later version.
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
8
8bce253b537c 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,
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
12 GNU General Public License for more details.
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
13
8bce253b537c 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
8bce253b537c 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
8bce253b537c 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
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
17 */
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
18
103
0ec7d482ec8d small changes for mplayer integration:
arpi
parents: 99
diff changeset
19 // POSTPROCESS_H is defined by opendivx's postprocess.h
0ec7d482ec8d small changes for mplayer integration:
arpi
parents: 99
diff changeset
20 #ifndef NEWPOSTPROCESS_H
0ec7d482ec8d small changes for mplayer integration:
arpi
parents: 99
diff changeset
21 #define NEWPOSTPROCESS_H
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
22
96
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
23 #define V_DEBLOCK 0x01
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
24 #define H_DEBLOCK 0x02
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
25 #define DERING 0x04
97
e57b1d38d71f bugfixes: last 3 lines not brightness/contrast corrected
michael
parents: 96
diff changeset
26 #define LEVEL_FIX 0x08 /* Brightness & Contrast */
96
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
27
99
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
28 #define LUM_V_DEBLOCK V_DEBLOCK // 1
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
29 #define LUM_H_DEBLOCK H_DEBLOCK // 2
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
30 #define CHROM_V_DEBLOCK (V_DEBLOCK<<4) // 16
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
31 #define CHROM_H_DEBLOCK (H_DEBLOCK<<4) // 32
131
f91bb7527628 just a few "not implemented yet" removed
michael
parents: 116
diff changeset
32 #define LUM_DERING DERING // 4
f91bb7527628 just a few "not implemented yet" removed
michael
parents: 116
diff changeset
33 #define CHROM_DERING (DERING<<4) // 64
99
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
34 #define LUM_LEVEL_FIX LEVEL_FIX // 8
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 104
diff changeset
35 #define CHROM_LEVEL_FIX (LEVEL_FIX<<4) // 128 (not implemented yet)
96
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
36
99
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
37 // Experimental vertical filters
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
38 #define V_X1_FILTER 0x0200 // 512
96
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
39
99
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
40 // Experimental horizontal filters
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
41 #define H_X1_FILTER 0x2000 // 8192
97
e57b1d38d71f bugfixes: last 3 lines not brightness/contrast corrected
michael
parents: 96
diff changeset
42
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
43 // select between full y range (255-0) or standart one (234-16)
112
a2c063b6ecf9 fixed a bug in the tmp buffer
michael
parents: 111
diff changeset
44 #define FULL_Y_RANGE 0x8000 // 32768
a2c063b6ecf9 fixed a bug in the tmp buffer
michael
parents: 111
diff changeset
45
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 104
diff changeset
46 //Deinterlacing Filters
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 104
diff changeset
47 #define LINEAR_IPOL_DEINT_FILTER 0x10000 // 65536
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 104
diff changeset
48 #define LINEAR_BLEND_DEINT_FILTER 0x20000 // 131072
111
8e4c5a16c9fc fixed the height%8!=0 bug
michael
parents: 107
diff changeset
49 #define CUBIC_BLEND_DEINT_FILTER 0x8000 // (not implemented yet)
8e4c5a16c9fc fixed the height%8!=0 bug
michael
parents: 107
diff changeset
50 #define CUBIC_IPOL_DEINT_FILTER 0x40000 // 262144
107
bd163e13a0fb minor cleanups
michael
parents: 106
diff changeset
51 #define MEDIAN_DEINT_FILTER 0x80000 // 524288
787
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
52 #define FFMPEG_DEINT_FILTER 0x400000
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 104
diff changeset
53
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
54 #define TEMP_NOISE_FILTER 0x100000
183
d310beb2d848 -npp fq:<quantizer>
michael
parents: 182
diff changeset
55 #define FORCE_QUANT 0x200000
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
56
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 104
diff changeset
57
104
9607b48e2c2d Cleanup:
arpi
parents: 103
diff changeset
58 #define GET_PP_QUALITY_MAX 6
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
59
172
a0efaf471d6b compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 156
diff changeset
60 //use if u want a faster postprocessing code
a0efaf471d6b compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 156
diff changeset
61 //cant differentiate between chroma & luma filters (both on or both off)
a0efaf471d6b compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 156
diff changeset
62 //obviosly the -pp option at the commandline has no effect except turning the here selected
a0efaf471d6b compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 156
diff changeset
63 //filters on
a0efaf471d6b compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 156
diff changeset
64 //#define COMPILE_TIME_MODE 0x77
a0efaf471d6b compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 156
diff changeset
65
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
66 #define QP_STORE_T int
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
67
787
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
68 char *postproc_help;
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
69
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
70 typedef struct PPMode{
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
71 int lumMode; //acivates filters for luminance
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
72 int chromMode; //acivates filters for chrominance
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
73 int error; // non zero on error
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
74
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
75 int minAllowedY; // for brigtness correction
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
76 int maxAllowedY; // for brihtness correction
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
77
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
78 int maxTmpNoise[3]; // for Temporal Noise Reducing filter (Maximal sum of abs differences)
182
3ccd74a91074 minor brightness/contrast bugfix / moved some global vars into ppMode
michael
parents: 179
diff changeset
79
3ccd74a91074 minor brightness/contrast bugfix / moved some global vars into ppMode
michael
parents: 179
diff changeset
80 int maxDcDiff; // max abs diff between pixels to be considered flat
787
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
81 int flatnessThreshold;
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
82
787
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
83 int forcedQuant; // quantizer if FORCE_QUANT is used
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
84 } PPMode;
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
85
787
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
86 void postprocess(uint8_t * src[3], int srcStride[3],
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
87 uint8_t * dst[3], int dstStride[3],
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
88 int horizontalSize, int verticalSize,
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
89 QP_STORE_T *QP_store, int QP_stride,
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
90 PPMode *mode, void *ppContext);
104
9607b48e2c2d Cleanup:
arpi
parents: 103
diff changeset
91
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
92 // name is the stuff after "-pp" on the command line
787
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
93 PPMode getPPModeByNameAndQuality(char *name, int quality);
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
94
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
95 void *getPPContext(int width, int height);
4914252c963a postprocessing cleanup:
michael
parents: 319
diff changeset
96 void freePPContext(void *ppContext);
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
97
179
02b2b7ffe324 new -pp options stuff (-npp ...)
michael
parents: 172
diff changeset
98 int readPPOpt(void *conf, char *arg);
02b2b7ffe324 new -pp options stuff (-npp ...)
michael
parents: 172
diff changeset
99
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
100 #endif