annotate libpostproc/postprocess.h @ 625:bb6a69f9d409 libavcodec

slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG) per context DCT selection
author michaelni
date Thu, 29 Aug 2002 23:55:32 +0000
parents 3ef1cc75d5f5
children 4914252c963a
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
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
23 #define BLOCK_SIZE 8
96
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
24 #define TEMP_STRIDE 8
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 104
diff changeset
25 //#define NUM_BLOCKS_AT_ONCE 16 //not used yet
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
26
96
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
27 #define V_DEBLOCK 0x01
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
28 #define H_DEBLOCK 0x02
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
29 #define DERING 0x04
97
e57b1d38d71f bugfixes: last 3 lines not brightness/contrast corrected
michael
parents: 96
diff changeset
30 #define LEVEL_FIX 0x08 /* Brightness & Contrast */
96
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
31
99
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
32 #define LUM_V_DEBLOCK V_DEBLOCK // 1
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
33 #define LUM_H_DEBLOCK H_DEBLOCK // 2
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
34 #define CHROM_V_DEBLOCK (V_DEBLOCK<<4) // 16
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
35 #define CHROM_H_DEBLOCK (H_DEBLOCK<<4) // 32
131
f91bb7527628 just a few "not implemented yet" removed
michael
parents: 116
diff changeset
36 #define LUM_DERING DERING // 4
f91bb7527628 just a few "not implemented yet" removed
michael
parents: 116
diff changeset
37 #define CHROM_DERING (DERING<<4) // 64
99
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
38 #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
39 #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
40
99
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
41 // Experimental vertical filters
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
42 #define V_RK1_FILTER 0x0100 // 256
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
43 #define V_X1_FILTER 0x0200 // 512
96
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
44
99
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
45 // Experimental horizontal filters
131
f91bb7527628 just a few "not implemented yet" removed
michael
parents: 116
diff changeset
46 #define H_RK1_FILTER 0x1000 // 4096
99
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
47 #define H_X1_FILTER 0x2000 // 8192
97
e57b1d38d71f bugfixes: last 3 lines not brightness/contrast corrected
michael
parents: 96
diff changeset
48
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
49 // 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
50 #define FULL_Y_RANGE 0x8000 // 32768
a2c063b6ecf9 fixed a bug in the tmp buffer
michael
parents: 111
diff changeset
51
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 104
diff changeset
52 //Deinterlacing Filters
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 104
diff changeset
53 #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
54 #define LINEAR_BLEND_DEINT_FILTER 0x20000 // 131072
111
8e4c5a16c9fc fixed the height%8!=0 bug
michael
parents: 107
diff changeset
55 #define CUBIC_BLEND_DEINT_FILTER 0x8000 // (not implemented yet)
8e4c5a16c9fc fixed the height%8!=0 bug
michael
parents: 107
diff changeset
56 #define CUBIC_IPOL_DEINT_FILTER 0x40000 // 262144
107
bd163e13a0fb minor cleanups
michael
parents: 106
diff changeset
57 #define MEDIAN_DEINT_FILTER 0x80000 // 524288
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 104
diff changeset
58
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
59 #define TEMP_NOISE_FILTER 0x100000
183
d310beb2d848 -npp fq:<quantizer>
michael
parents: 182
diff changeset
60 #define FORCE_QUANT 0x200000
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
61
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 104
diff changeset
62
104
9607b48e2c2d Cleanup:
arpi
parents: 103
diff changeset
63 #define GET_PP_QUALITY_MAX 6
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
64
113
3e0dcdb6b340 added compiletime option to turn width%8==0 on
michael
parents: 112
diff changeset
65 //must be defined if stride%8 != 0
114
cd4ba843b418 PP_FUNNY_STRIDE disabled
arpi
parents: 113
diff changeset
66 //#define PP_FUNNY_STRIDE
113
3e0dcdb6b340 added compiletime option to turn width%8==0 on
michael
parents: 112
diff changeset
67
107
bd163e13a0fb minor cleanups
michael
parents: 106
diff changeset
68 //#define TIMING
bd163e13a0fb minor cleanups
michael
parents: 106
diff changeset
69 //#define MORE_TIMING
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
70
172
a0efaf471d6b compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 156
diff changeset
71 //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
72 //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
73 //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
74 //filters on
a0efaf471d6b compiletime pp-mode support (luminance = chrominance filters though) 1-2% faster with -benchmark -vo null -nosound
michael
parents: 156
diff changeset
75 //#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
76
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
77 #define QP_STORE_T int
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
78
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
79 struct PPMode{
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
80 int lumMode; //acivates filters for luminance
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
81 int chromMode; //acivates filters for chrominance
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
82 int oldMode; // will be passed to odivx
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
83 int error; // non zero on error
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
84
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
85 int minAllowedY; // for brigtness correction
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
86 int maxAllowedY; // for brihtness correction
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
87
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
88 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
89
3ccd74a91074 minor brightness/contrast bugfix / moved some global vars into ppMode
michael
parents: 179
diff changeset
90 int maxDcDiff; // max abs diff between pixels to be considered flat
183
d310beb2d848 -npp fq:<quantizer>
michael
parents: 182
diff changeset
91 int forcedQuant; // quantizer if FORCE_QUANT is used
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
92 };
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
93
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
94 struct PPFilter{
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
95 char *shortName;
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
96 char *longName;
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
97 int chromDefault; // is chrominance filtering on by default if this filter is manually activated
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
98 int minLumQuality; // minimum quality to turn luminance filtering on
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
99 int minChromQuality; // minimum quality to turn chrominance filtering on
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
100 int mask; // Bitmask to turn this filter on
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
101 };
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
102
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
103 /* Obsolete, dont use it, use postprocess2() instead */
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
104 void postprocess(unsigned char * src[], int src_stride,
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
105 unsigned char * dst[], int dst_stride,
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
106 int horizontal_size, int vertical_size,
103
0ec7d482ec8d small changes for mplayer integration:
arpi
parents: 99
diff changeset
107 QP_STORE_T *QP_store, int QP_stride, int mode);
104
9607b48e2c2d Cleanup:
arpi
parents: 103
diff changeset
108
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
109 void postprocess2(unsigned char * src[], int src_stride,
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
110 unsigned char * dst[], int dst_stride,
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
111 int horizontal_size, int vertical_size,
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
112 QP_STORE_T *QP_store, int QP_stride, struct PPMode *mode);
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
113
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
114
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
115 /* Obsolete, dont use it, use getPpModeByNameAndQuality() instead */
103
0ec7d482ec8d small changes for mplayer integration:
arpi
parents: 99
diff changeset
116 int getPpModeForQuality(int quality);
104
9607b48e2c2d Cleanup:
arpi
parents: 103
diff changeset
117
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 131
diff changeset
118 // name is the stuff after "-pp" on the command line
319
3ef1cc75d5f5 fix typo found by Milan Cutka <cutka@szm.sk>
michael
parents: 183
diff changeset
119 struct PPMode getPPModeByNameAndQuality(char *name, int quality);
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 114
diff changeset
120
179
02b2b7ffe324 new -pp options stuff (-npp ...)
michael
parents: 172
diff changeset
121 int readPPOpt(void *conf, char *arg);
02b2b7ffe324 new -pp options stuff (-npp ...)
michael
parents: 172
diff changeset
122
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
123 #endif