annotate libpostproc/postprocess.c @ 3198:6b9f0c4fbdbe libavcodec

First part of a series of speed-enchancing patches. This one sets up a snow.h and makes snow use the dsputil function pointer framework to access the three functions that will be implemented in asm in the other parts of the patchset. Patch by Robert Edele < yartrebo AH earthlink POIS net> Original thread: Subject: [Ffmpeg-devel] [PATCH] Snow mmx+sse2 asm optimizations Date: Sun, 05 Feb 2006 12:47:14 -0500
author gpoirier
date Thu, 16 Mar 2006 19:18:18 +0000
parents f4597d12563b
children
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 /*
1067
54aa0bb40e97 avoid #include "../
michael
parents: 1029
diff changeset
2 Copyright (C) 2001-2003 Michael Niedermayer (michaelni@gmx.at)
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
3
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
4 AltiVec optimizations (C) 2004 Romain Dolbeau <romain@dolbeau.org>
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
5
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
6 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
7 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
8 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
9 (at your option) any later version.
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
10
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
11 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
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
14 GNU General Public License for more details.
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
15
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
16 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
17 along with this program; if not, write to the Free Software
3036
0b546eab515d Update licensing information: The FSF changed postal address.
diego
parents: 2979
diff changeset
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
19 */
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
20
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 1076
diff changeset
21 /**
3644e555a20a doxy / cosmetics
michaelni
parents: 1076
diff changeset
22 * @file postprocess.c
3644e555a20a doxy / cosmetics
michaelni
parents: 1076
diff changeset
23 * postprocessing.
3644e555a20a doxy / cosmetics
michaelni
parents: 1076
diff changeset
24 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
25
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
26 /*
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
27 C MMX MMX2 3DNow AltiVec
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
28 isVertDC Ec Ec Ec
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
29 isVertMinMaxOk Ec Ec Ec
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
30 doVertLowPass E e e Ec
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
31 doVertDefFilter Ec Ec e e Ec
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
32 isHorizDC Ec Ec Ec
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
33 isHorizMinMaxOk a E Ec
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
34 doHorizLowPass E e e Ec
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
35 doHorizDefFilter Ec Ec e e Ec
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
36 do_a_deblock Ec E Ec E
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
37 deRing E e e* Ecp
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
38 Vertical RKAlgo1 E a a
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
39 Horizontal RKAlgo1 a a
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
40 Vertical X1# a E E
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
41 Horizontal X1# a E E
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
42 LinIpolDeinterlace e E E*
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
43 CubicIpolDeinterlace a e e*
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
44 LinBlendDeinterlace e E E*
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
45 MedianDeinterlace# E Ec Ec
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
46 TempDeNoiser# E e e Ec
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 152
diff changeset
47
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 152
diff changeset
48 * i dont have a 3dnow CPU -> its untested, but noone said it doesnt work so it seems to work
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 152
diff changeset
49 # more or less selfinvented filters so the exactness isnt too meaningfull
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
50 E = Exact implementation
111
8e4c5a16c9fc fixed the height%8!=0 bug
michael
parents: 109
diff changeset
51 e = allmost exact implementation (slightly different rounding,...)
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
52 a = alternative / approximate impl
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
53 c = checked against the other implementations (-vo md5)
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
54 p = partially optimized, still some work to do
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
55 */
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
56
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
57 /*
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
58 TODO:
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
59 reduce the time wasted on the mem transfer
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
60 unroll stuff if instructions depend too much on the prior one
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
61 move YScale thing to the end instead of fixing QP
96
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
62 write a faster and higher quality deblocking filter :)
97
e57b1d38d71f bugfixes: last 3 lines not brightness/contrast corrected
michael
parents: 96
diff changeset
63 make the mainloop more flexible (variable number of blocks at once
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
64 (the if/else stuff per block is slowing things down)
99
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
65 compare the quality & speed of all filters
4f072fa99ccf fixed a rounding bug thing in the X1 Filter
michael
parents: 98
diff changeset
66 split this huge file
140
52ed0baddd56 minor speedup
michael
parents: 135
diff changeset
67 optimize c versions
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 152
diff changeset
68 try to unroll inner for(x=0 ... loop to avoid these damn if(x ... checks
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
69 ...
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
70 */
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
71
107
bd163e13a0fb minor cleanups
michael
parents: 106
diff changeset
72 //Changelog: use the CVS log
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
73
1067
54aa0bb40e97 avoid #include "../
michael
parents: 1029
diff changeset
74 #include "config.h"
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
75 #include <inttypes.h>
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
76 #include <stdio.h>
97
e57b1d38d71f bugfixes: last 3 lines not brightness/contrast corrected
michael
parents: 96
diff changeset
77 #include <stdlib.h>
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
78 #include <string.h>
133
e0bf2e9ce24c a few warning fixes (missing #include's)
pl
parents: 132
diff changeset
79 #ifdef HAVE_MALLOC_H
e0bf2e9ce24c a few warning fixes (missing #include's)
pl
parents: 132
diff changeset
80 #include <malloc.h>
e0bf2e9ce24c a few warning fixes (missing #include's)
pl
parents: 132
diff changeset
81 #endif
96
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
82 //#undef HAVE_MMX2
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
83 //#define HAVE_3DNOW
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
84 //#undef HAVE_MMX
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
85 //#undef ARCH_X86
163
32e7f17a04a7 faster mmx2 / 3dnow deblocking filter
michael
parents: 158
diff changeset
86 //#define DEBUG_BRIGHTNESS
1069
8528d0b9e508 moving postprocess to ffmpeg/libavcodec
michaelni
parents: 1067
diff changeset
87 #ifdef USE_FASTMEMCPY
1775
3875b8b30399 changed includes
alex
parents: 1724
diff changeset
88 #include "fastmemcpy.h"
837
ee8bb36d2e60 dont use fastmemcpy for PIC
michael
parents: 833
diff changeset
89 #endif
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
90 #include "postprocess.h"
829
c39e14fc2392 cleanup
michael
parents: 820
diff changeset
91 #include "postprocess_internal.h"
1069
8528d0b9e508 moving postprocess to ffmpeg/libavcodec
michaelni
parents: 1067
diff changeset
92
8528d0b9e508 moving postprocess to ffmpeg/libavcodec
michaelni
parents: 1067
diff changeset
93 #include "mangle.h" //FIXME should be supressed
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
94
2041
b996fbe0a7e7 Newer version, using a vectorized version of the
michael
parents: 2040
diff changeset
95 #ifdef HAVE_ALTIVEC_H
b996fbe0a7e7 Newer version, using a vectorized version of the
michael
parents: 2040
diff changeset
96 #include <altivec.h>
b996fbe0a7e7 Newer version, using a vectorized version of the
michael
parents: 2040
diff changeset
97 #endif
b996fbe0a7e7 Newer version, using a vectorized version of the
michael
parents: 2040
diff changeset
98
1071
0a48dd404167 * update cleanup rules (Steven M. Schultz)
kabi
parents: 1069
diff changeset
99 #ifndef HAVE_MEMALIGN
0a48dd404167 * update cleanup rules (Steven M. Schultz)
kabi
parents: 1069
diff changeset
100 #define memalign(a,b) malloc(b)
0a48dd404167 * update cleanup rules (Steven M. Schultz)
kabi
parents: 1069
diff changeset
101 #endif
0a48dd404167 * update cleanup rules (Steven M. Schultz)
kabi
parents: 1069
diff changeset
102
104
9607b48e2c2d Cleanup:
arpi
parents: 102
diff changeset
103 #define MIN(a,b) ((a) > (b) ? (b) : (a))
9607b48e2c2d Cleanup:
arpi
parents: 102
diff changeset
104 #define MAX(a,b) ((a) < (b) ? (b) : (a))
9607b48e2c2d Cleanup:
arpi
parents: 102
diff changeset
105 #define ABS(a) ((a) > 0 ? (a) : (-(a)))
9607b48e2c2d Cleanup:
arpi
parents: 102
diff changeset
106 #define SIGN(a) ((a) > 0 ? 1 : -1)
9607b48e2c2d Cleanup:
arpi
parents: 102
diff changeset
107
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
108 #define GET_MODE_BUFFER_SIZE 500
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
109 #define OPTIONS_ARRAY_SIZE 10
787
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
110 #define BLOCK_SIZE 8
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
111 #define TEMP_STRIDE 8
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
112 //#define NUM_BLOCKS_AT_ONCE 16 //not used yet
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
113
1847
ef661c4dc5a6 attribute_used patch by (mitya at school dot ioffe dot ru (Dmitry Baryshkov))
michael
parents: 1775
diff changeset
114 #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
ef661c4dc5a6 attribute_used patch by (mitya at school dot ioffe dot ru (Dmitry Baryshkov))
michael
parents: 1775
diff changeset
115 # define attribute_used __attribute__((used))
2037
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
116 # define always_inline __attribute__((always_inline)) inline
1847
ef661c4dc5a6 attribute_used patch by (mitya at school dot ioffe dot ru (Dmitry Baryshkov))
michael
parents: 1775
diff changeset
117 #else
ef661c4dc5a6 attribute_used patch by (mitya at school dot ioffe dot ru (Dmitry Baryshkov))
michael
parents: 1775
diff changeset
118 # define attribute_used
2037
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
119 # define always_inline inline
1847
ef661c4dc5a6 attribute_used patch by (mitya at school dot ioffe dot ru (Dmitry Baryshkov))
michael
parents: 1775
diff changeset
120 #endif
ef661c4dc5a6 attribute_used patch by (mitya at school dot ioffe dot ru (Dmitry Baryshkov))
michael
parents: 1775
diff changeset
121
2293
15cfba1b97b5 adapting existing mmx/mmx2/sse/3dnow optimizations so they work on x86_64 patch by (Aurelien Jacobs <aurel at gnuage dot org>)
michael
parents: 2188
diff changeset
122 #if defined(ARCH_X86) || defined(ARCH_X86_64)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
123 static uint64_t __attribute__((aligned(8))) attribute_used w05= 0x0005000500050005LL;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
124 static uint64_t __attribute__((aligned(8))) attribute_used w04= 0x0004000400040004LL;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
125 static uint64_t __attribute__((aligned(8))) attribute_used w20= 0x0020002000200020LL;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
126 static uint64_t __attribute__((aligned(8))) attribute_used b00= 0x0000000000000000LL;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
127 static uint64_t __attribute__((aligned(8))) attribute_used b01= 0x0101010101010101LL;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
128 static uint64_t __attribute__((aligned(8))) attribute_used b02= 0x0202020202020202LL;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
129 static uint64_t __attribute__((aligned(8))) attribute_used b08= 0x0808080808080808LL;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
130 static uint64_t __attribute__((aligned(8))) attribute_used b80= 0x8080808080808080LL;
148
1cfc4d567c0a minor changes (fixed some warnings, added attribute aligned(8) stuff)
michael
parents: 142
diff changeset
131 #endif
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
132
1157
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
133 static uint8_t clip_table[3*256];
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
134 static uint8_t * const clip_tab= clip_table + 256;
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
135
2031
4225c131a2eb warning fixes by (Michael Roitzsch <mroi at users dot sourceforge dot net>)
michael
parents: 2024
diff changeset
136 static const int verbose= 0;
179
02b2b7ffe324 new -pp options stuff (-npp ...)
michael
parents: 171
diff changeset
137
1847
ef661c4dc5a6 attribute_used patch by (mitya at school dot ioffe dot ru (Dmitry Baryshkov))
michael
parents: 1775
diff changeset
138 static const int attribute_used deringThreshold= 20;
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
139
787
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
140
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
141 static struct PPFilter filters[]=
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
142 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
143 {"hb", "hdeblock", 1, 1, 3, H_DEBLOCK},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
144 {"vb", "vdeblock", 1, 2, 4, V_DEBLOCK},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
145 /* {"hr", "rkhdeblock", 1, 1, 3, H_RK1_FILTER},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
146 {"vr", "rkvdeblock", 1, 2, 4, V_RK1_FILTER},*/
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
147 {"h1", "x1hdeblock", 1, 1, 3, H_X1_FILTER},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
148 {"v1", "x1vdeblock", 1, 2, 4, V_X1_FILTER},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
149 {"ha", "ahdeblock", 1, 1, 3, H_A_DEBLOCK},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
150 {"va", "avdeblock", 1, 2, 4, V_A_DEBLOCK},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
151 {"dr", "dering", 1, 5, 6, DERING},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
152 {"al", "autolevels", 0, 1, 2, LEVEL_FIX},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
153 {"lb", "linblenddeint", 1, 1, 4, LINEAR_BLEND_DEINT_FILTER},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
154 {"li", "linipoldeint", 1, 1, 4, LINEAR_IPOL_DEINT_FILTER},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
155 {"ci", "cubicipoldeint", 1, 1, 4, CUBIC_IPOL_DEINT_FILTER},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
156 {"md", "mediandeint", 1, 1, 4, MEDIAN_DEINT_FILTER},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
157 {"fd", "ffmpegdeint", 1, 1, 4, FFMPEG_DEINT_FILTER},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
158 {"l5", "lowpass5", 1, 1, 4, LOWPASS5_DEINT_FILTER},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
159 {"tn", "tmpnoise", 1, 7, 8, TEMP_NOISE_FILTER},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
160 {"fq", "forcequant", 1, 0, 0, FORCE_QUANT},
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
161 {NULL, NULL,0,0,0,0} //End Marker
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
162 };
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
163
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
164 static char *replaceTable[]=
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
165 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
166 "default", "hdeblock:a,vdeblock:a,dering:a",
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
167 "de", "hdeblock:a,vdeblock:a,dering:a",
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
168 "fast", "x1hdeblock:a,x1vdeblock:a,dering:a",
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
169 "fa", "x1hdeblock:a,x1vdeblock:a,dering:a",
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
170 "ac", "ha:a:128:7,va:a,dering:a",
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
171 NULL //End Marker
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
172 };
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
173
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
174
2293
15cfba1b97b5 adapting existing mmx/mmx2/sse/3dnow optimizations so they work on x86_64 patch by (Aurelien Jacobs <aurel at gnuage dot org>)
michael
parents: 2188
diff changeset
175 #if defined(ARCH_X86) || defined(ARCH_X86_64)
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
176 static inline void prefetchnta(void *p)
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
177 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
178 asm volatile( "prefetchnta (%0)\n\t"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
179 : : "r" (p)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
180 );
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
181 }
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
182
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
183 static inline void prefetcht0(void *p)
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
184 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
185 asm volatile( "prefetcht0 (%0)\n\t"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
186 : : "r" (p)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
187 );
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
188 }
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
189
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
190 static inline void prefetcht1(void *p)
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
191 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
192 asm volatile( "prefetcht1 (%0)\n\t"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
193 : : "r" (p)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
194 );
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
195 }
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
196
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
197 static inline void prefetcht2(void *p)
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
198 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
199 asm volatile( "prefetcht2 (%0)\n\t"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
200 : : "r" (p)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
201 );
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
202 }
102
2cb2660cbd7e small changes for mplayer integration:
arpi
parents: 101
diff changeset
203 #endif
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
204
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
205 // The horizontal Functions exist only in C cuz the MMX code is faster with vertical filters and transposing
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
206
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
207 /**
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
208 * Check if the given 8x8 Block is mostly "flat"
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
209 */
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
210 static inline int isHorizDC_C(uint8_t src[], int stride, PPContext *c)
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
211 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
212 int numEq= 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
213 int y;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
214 const int dcOffset= ((c->nonBQP*c->ppMode.baseDcDiff)>>8) + 1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
215 const int dcThreshold= dcOffset*2 + 1;
1196
2e06398e4647 mpeg2 qscale flag
michaelni
parents: 1157
diff changeset
216
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
217 for(y=0; y<BLOCK_SIZE; y++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
218 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
219 if(((unsigned)(src[0] - src[1] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
220 if(((unsigned)(src[1] - src[2] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
221 if(((unsigned)(src[2] - src[3] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
222 if(((unsigned)(src[3] - src[4] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
223 if(((unsigned)(src[4] - src[5] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
224 if(((unsigned)(src[5] - src[6] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
225 if(((unsigned)(src[6] - src[7] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
226 src+= stride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
227 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
228 return numEq > c->ppMode.flatnessThreshold;
787
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
229 }
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
230
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
231 /**
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
232 * Check if the middle 8x8 Block in the given 8x16 block is flat
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
233 */
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
234 static inline int isVertDC_C(uint8_t src[], int stride, PPContext *c){
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
235 int numEq= 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
236 int y;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
237 const int dcOffset= ((c->nonBQP*c->ppMode.baseDcDiff)>>8) + 1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
238 const int dcThreshold= dcOffset*2 + 1;
1196
2e06398e4647 mpeg2 qscale flag
michaelni
parents: 1157
diff changeset
239
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
240 src+= stride*4; // src points to begin of the 8x8 Block
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
241 for(y=0; y<BLOCK_SIZE-1; y++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
242 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
243 if(((unsigned)(src[0] - src[0+stride] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
244 if(((unsigned)(src[1] - src[1+stride] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
245 if(((unsigned)(src[2] - src[2+stride] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
246 if(((unsigned)(src[3] - src[3+stride] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
247 if(((unsigned)(src[4] - src[4+stride] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
248 if(((unsigned)(src[5] - src[5+stride] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
249 if(((unsigned)(src[6] - src[6+stride] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
250 if(((unsigned)(src[7] - src[7+stride] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
251 src+= stride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
252 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
253 return numEq > c->ppMode.flatnessThreshold;
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
254 }
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
255
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
256 static inline int isHorizMinMaxOk_C(uint8_t src[], int stride, int QP)
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
257 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
258 int i;
1327
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
259 #if 1
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
260 for(i=0; i<2; i++){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
261 if((unsigned)(src[0] - src[5] + 2*QP) > 4*QP) return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
262 src += stride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
263 if((unsigned)(src[2] - src[7] + 2*QP) > 4*QP) return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
264 src += stride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
265 if((unsigned)(src[4] - src[1] + 2*QP) > 4*QP) return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
266 src += stride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
267 if((unsigned)(src[6] - src[3] + 2*QP) > 4*QP) return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
268 src += stride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
269 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
270 #else
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
271 for(i=0; i<8; i++){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
272 if((unsigned)(src[0] - src[7] + 2*QP) > 4*QP) return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
273 src += stride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
274 }
1327
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
275 #endif
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
276 return 1;
1327
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
277 }
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
278
1327
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
279 static inline int isVertMinMaxOk_C(uint8_t src[], int stride, int QP)
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
280 {
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
281 #if 1
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
282 #if 1
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
283 int x;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
284 src+= stride*4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
285 for(x=0; x<BLOCK_SIZE; x+=4)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
286 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
287 if((unsigned)(src[ x + 0*stride] - src[ x + 5*stride] + 2*QP) > 4*QP) return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
288 if((unsigned)(src[1+x + 2*stride] - src[1+x + 7*stride] + 2*QP) > 4*QP) return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
289 if((unsigned)(src[2+x + 4*stride] - src[2+x + 1*stride] + 2*QP) > 4*QP) return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
290 if((unsigned)(src[3+x + 6*stride] - src[3+x + 3*stride] + 2*QP) > 4*QP) return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
291 }
1327
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
292 #else
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
293 int x;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
294 src+= stride*3;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
295 for(x=0; x<BLOCK_SIZE; x++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
296 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
297 if((unsigned)(src[x + stride] - src[x + (stride<<3)] + 2*QP) > 4*QP) return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
298 }
1327
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
299 #endif
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
300 return 1;
1327
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
301 #else
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
302 int x;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
303 src+= stride*4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
304 for(x=0; x<BLOCK_SIZE; x++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
305 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
306 int min=255;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
307 int max=0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
308 int y;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
309 for(y=0; y<8; y++){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
310 int v= src[x + y*stride];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
311 if(v>max) max=v;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
312 if(v<min) min=v;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
313 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
314 if(max-min > 2*QP) return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
315 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
316 return 1;
1327
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
317 #endif
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
318 }
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
319
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
320 static inline int horizClassify_C(uint8_t src[], int stride, PPContext *c){
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
321 if( isHorizDC_C(src, stride, c) ){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
322 if( isHorizMinMaxOk_C(src, stride, c->QP) )
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
323 return 1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
324 else
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
325 return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
326 }else{
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
327 return 2;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
328 }
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
329 }
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
330
1327
854571532c89 blinking blocks around thin vertical lines and dots bugfix
michaelni
parents: 1282
diff changeset
331 static inline int vertClassify_C(uint8_t src[], int stride, PPContext *c){
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
332 if( isVertDC_C(src, stride, c) ){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
333 if( isVertMinMaxOk_C(src, stride, c->QP) )
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
334 return 1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
335 else
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
336 return 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
337 }else{
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
338 return 2;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
339 }
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
340 }
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
341
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
342 static inline void doHorizDefFilter_C(uint8_t dst[], int stride, PPContext *c)
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
343 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
344 int y;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
345 for(y=0; y<BLOCK_SIZE; y++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
346 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
347 const int middleEnergy= 5*(dst[4] - dst[3]) + 2*(dst[2] - dst[5]);
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
348
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
349 if(ABS(middleEnergy) < 8*c->QP)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
350 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
351 const int q=(dst[3] - dst[4])/2;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
352 const int leftEnergy= 5*(dst[2] - dst[1]) + 2*(dst[0] - dst[3]);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
353 const int rightEnergy= 5*(dst[6] - dst[5]) + 2*(dst[4] - dst[7]);
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
354
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
355 int d= ABS(middleEnergy) - MIN( ABS(leftEnergy), ABS(rightEnergy) );
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
356 d= MAX(d, 0);
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
357
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
358 d= (5*d + 32) >> 6;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
359 d*= SIGN(-middleEnergy);
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
360
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
361 if(q>0)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
362 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
363 d= d<0 ? 0 : d;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
364 d= d>q ? q : d;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
365 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
366 else
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
367 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
368 d= d>0 ? 0 : d;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
369 d= d<q ? q : d;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
370 }
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
371
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
372 dst[3]-= d;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
373 dst[4]+= d;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
374 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
375 dst+= stride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
376 }
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
377 }
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
378
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
379 /**
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
380 * Do a horizontal low pass filter on the 10x8 block (dst points to middle 8x8 Block)
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
381 * using the 9-Tap Filter (1,1,2,2,4,2,2,1,1)/16 (C version)
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
382 */
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
383 static inline void doHorizLowPass_C(uint8_t dst[], int stride, PPContext *c)
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
384 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
385 int y;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
386 for(y=0; y<BLOCK_SIZE; y++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
387 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
388 const int first= ABS(dst[-1] - dst[0]) < c->QP ? dst[-1] : dst[0];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
389 const int last= ABS(dst[8] - dst[7]) < c->QP ? dst[8] : dst[7];
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
390
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
391 int sums[10];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
392 sums[0] = 4*first + dst[0] + dst[1] + dst[2] + 4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
393 sums[1] = sums[0] - first + dst[3];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
394 sums[2] = sums[1] - first + dst[4];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
395 sums[3] = sums[2] - first + dst[5];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
396 sums[4] = sums[3] - first + dst[6];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
397 sums[5] = sums[4] - dst[0] + dst[7];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
398 sums[6] = sums[5] - dst[1] + last;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
399 sums[7] = sums[6] - dst[2] + last;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
400 sums[8] = sums[7] - dst[3] + last;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
401 sums[9] = sums[8] - dst[4] + last;
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
402
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
403 dst[0]= (sums[0] + sums[2] + 2*dst[0])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
404 dst[1]= (sums[1] + sums[3] + 2*dst[1])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
405 dst[2]= (sums[2] + sums[4] + 2*dst[2])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
406 dst[3]= (sums[3] + sums[5] + 2*dst[3])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
407 dst[4]= (sums[4] + sums[6] + 2*dst[4])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
408 dst[5]= (sums[5] + sums[7] + 2*dst[5])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
409 dst[6]= (sums[6] + sums[8] + 2*dst[6])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
410 dst[7]= (sums[7] + sums[9] + 2*dst[7])>>4;
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
411
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
412 dst+= stride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
413 }
165
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
414 }
ea3b49451497 oops, too much cleanup ;)
michael
parents: 164
diff changeset
415
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
416 /**
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
417 * Experimental Filter 1 (Horizontal)
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
418 * will not damage linear gradients
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
419 * Flat blocks should look like they where passed through the (1,1,2,2,4,2,2,1,1) 9-Tap filter
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
420 * can only smooth blocks at the expected locations (it cant smooth them if they did move)
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
421 * MMX2 version does correct clipping C version doesnt
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
422 * not identical with the vertical one
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
423 */
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
424 static inline void horizX1Filter(uint8_t *src, int stride, int QP)
95
8bce253b537c new postprocess code by Michael Niedermayer (michaelni@gmx.at)
arpi
parents:
diff changeset
425 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
426 int y;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
427 static uint64_t *lut= NULL;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
428 if(lut==NULL)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
429 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
430 int i;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
431 lut= (uint64_t*)memalign(8, 256*8);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
432 for(i=0; i<256; i++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
433 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
434 int v= i < 128 ? 2*i : 2*(i-256);
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
435 /*
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
436 //Simulate 112242211 9-Tap filter
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
437 uint64_t a= (v/16) & 0xFF;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
438 uint64_t b= (v/8) & 0xFF;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
439 uint64_t c= (v/4) & 0xFF;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
440 uint64_t d= (3*v/8) & 0xFF;
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
441 */
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
442 //Simulate piecewise linear interpolation
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
443 uint64_t a= (v/16) & 0xFF;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
444 uint64_t b= (v*3/16) & 0xFF;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
445 uint64_t c= (v*5/16) & 0xFF;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
446 uint64_t d= (7*v/16) & 0xFF;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
447 uint64_t A= (0x100 - a)&0xFF;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
448 uint64_t B= (0x100 - b)&0xFF;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
449 uint64_t C= (0x100 - c)&0xFF;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
450 uint64_t D= (0x100 - c)&0xFF;
130
0cce5d30d1d8 dering in mmx2
michael
parents: 129
diff changeset
451
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
452 lut[i] = (a<<56) | (b<<48) | (c<<40) | (d<<32) |
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
453 (D<<24) | (C<<16) | (B<<8) | (A);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
454 //lut[i] = (v<<32) | (v<<24);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
455 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
456 }
134
2c469e390117 dering in c
michael
parents: 133
diff changeset
457
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
458 for(y=0; y<BLOCK_SIZE; y++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
459 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
460 int a= src[1] - src[2];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
461 int b= src[3] - src[4];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
462 int c= src[5] - src[6];
134
2c469e390117 dering in c
michael
parents: 133
diff changeset
463
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
464 int d= MAX(ABS(b) - (ABS(a) + ABS(c))/2, 0);
167
2d97f0157a79 faster dering
michael
parents: 166
diff changeset
465
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
466 if(d < QP)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
467 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
468 int v = d * SIGN(-b);
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 105
diff changeset
469
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
470 src[1] +=v/8;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
471 src[2] +=v/4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
472 src[3] +=3*v/8;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
473 src[4] -=3*v/8;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
474 src[5] -=v/4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
475 src[6] -=v/8;
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 105
diff changeset
476
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
477 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
478 src+=stride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
479 }
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 105
diff changeset
480 }
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 105
diff changeset
481
2037
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
482 /**
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
483 * accurate deblock filter
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
484 */
2039
f25e485a7850 mmx optimized version of the per line/accurate deblock filter
michael
parents: 2038
diff changeset
485 static always_inline void do_a_deblock_C(uint8_t *src, int step, int stride, PPContext *c){
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
486 int y;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
487 const int QP= c->QP;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
488 const int dcOffset= ((c->nonBQP*c->ppMode.baseDcDiff)>>8) + 1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
489 const int dcThreshold= dcOffset*2 + 1;
2037
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
490 //START_TIMER
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
491 src+= step*4; // src points to begin of the 8x8 Block
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
492 for(y=0; y<8; y++){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
493 int numEq= 0;
2037
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
494
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
495 if(((unsigned)(src[-1*step] - src[0*step] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
496 if(((unsigned)(src[ 0*step] - src[1*step] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
497 if(((unsigned)(src[ 1*step] - src[2*step] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
498 if(((unsigned)(src[ 2*step] - src[3*step] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
499 if(((unsigned)(src[ 3*step] - src[4*step] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
500 if(((unsigned)(src[ 4*step] - src[5*step] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
501 if(((unsigned)(src[ 5*step] - src[6*step] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
502 if(((unsigned)(src[ 6*step] - src[7*step] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
503 if(((unsigned)(src[ 7*step] - src[8*step] + dcOffset)) < dcThreshold) numEq++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
504 if(numEq > c->ppMode.flatnessThreshold){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
505 int min, max, x;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
506
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
507 if(src[0] > src[step]){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
508 max= src[0];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
509 min= src[step];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
510 }else{
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
511 max= src[step];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
512 min= src[0];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
513 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
514 for(x=2; x<8; x+=2){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
515 if(src[x*step] > src[(x+1)*step]){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
516 if(src[x *step] > max) max= src[ x *step];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
517 if(src[(x+1)*step] < min) min= src[(x+1)*step];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
518 }else{
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
519 if(src[(x+1)*step] > max) max= src[(x+1)*step];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
520 if(src[ x *step] < min) min= src[ x *step];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
521 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
522 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
523 if(max-min < 2*QP){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
524 const int first= ABS(src[-1*step] - src[0]) < QP ? src[-1*step] : src[0];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
525 const int last= ABS(src[8*step] - src[7*step]) < QP ? src[8*step] : src[7*step];
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
526
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
527 int sums[10];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
528 sums[0] = 4*first + src[0*step] + src[1*step] + src[2*step] + 4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
529 sums[1] = sums[0] - first + src[3*step];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
530 sums[2] = sums[1] - first + src[4*step];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
531 sums[3] = sums[2] - first + src[5*step];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
532 sums[4] = sums[3] - first + src[6*step];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
533 sums[5] = sums[4] - src[0*step] + src[7*step];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
534 sums[6] = sums[5] - src[1*step] + last;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
535 sums[7] = sums[6] - src[2*step] + last;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
536 sums[8] = sums[7] - src[3*step] + last;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
537 sums[9] = sums[8] - src[4*step] + last;
2037
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
538
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
539 src[0*step]= (sums[0] + sums[2] + 2*src[0*step])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
540 src[1*step]= (sums[1] + sums[3] + 2*src[1*step])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
541 src[2*step]= (sums[2] + sums[4] + 2*src[2*step])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
542 src[3*step]= (sums[3] + sums[5] + 2*src[3*step])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
543 src[4*step]= (sums[4] + sums[6] + 2*src[4*step])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
544 src[5*step]= (sums[5] + sums[7] + 2*src[5*step])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
545 src[6*step]= (sums[6] + sums[8] + 2*src[6*step])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
546 src[7*step]= (sums[7] + sums[9] + 2*src[7*step])>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
547 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
548 }else{
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
549 const int middleEnergy= 5*(src[4*step] - src[3*step]) + 2*(src[2*step] - src[5*step]);
2037
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
550
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
551 if(ABS(middleEnergy) < 8*QP)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
552 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
553 const int q=(src[3*step] - src[4*step])/2;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
554 const int leftEnergy= 5*(src[2*step] - src[1*step]) + 2*(src[0*step] - src[3*step]);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
555 const int rightEnergy= 5*(src[6*step] - src[5*step]) + 2*(src[4*step] - src[7*step]);
2037
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
556
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
557 int d= ABS(middleEnergy) - MIN( ABS(leftEnergy), ABS(rightEnergy) );
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
558 d= MAX(d, 0);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
559
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
560 d= (5*d + 32) >> 6;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
561 d*= SIGN(-middleEnergy);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
562
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
563 if(q>0)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
564 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
565 d= d<0 ? 0 : d;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
566 d= d>q ? q : d;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
567 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
568 else
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
569 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
570 d= d>0 ? 0 : d;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
571 d= d<q ? q : d;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
572 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
573
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
574 src[3*step]-= d;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
575 src[4*step]+= d;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
576 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
577 }
2037
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
578
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
579 src += stride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
580 }
2037
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
581 /*if(step==16){
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
582 STOP_TIMER("step16")
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
583 }else{
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
584 STOP_TIMER("stepX")
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
585 }*/
98d8283534bb accurate/slow (per line instead of per block) deblock filter spport which is identical to what is recommanded in the mpeg4 spec
michael
parents: 2036
diff changeset
586 }
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 105
diff changeset
587
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
588 //Note: we have C, MMX, MMX2, 3DNOW version there is no 3DNOW+MMX2 one
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
589 //Plain C versions
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
590 #if !defined (HAVE_MMX) || defined (RUNTIME_CPUDETECT)
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
591 #define COMPILE_C
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
592 #endif
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
593
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
594 #ifdef ARCH_POWERPC
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
595 #ifdef HAVE_ALTIVEC
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
596 #define COMPILE_ALTIVEC
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
597 #endif //HAVE_ALTIVEC
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
598 #endif //ARCH_POWERPC
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
599
2293
15cfba1b97b5 adapting existing mmx/mmx2/sse/3dnow optimizations so they work on x86_64 patch by (Aurelien Jacobs <aurel at gnuage dot org>)
michael
parents: 2188
diff changeset
600 #if defined(ARCH_X86) || defined(ARCH_X86_64)
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
601
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
602 #if (defined (HAVE_MMX) && !defined (HAVE_3DNOW) && !defined (HAVE_MMX2)) || defined (RUNTIME_CPUDETECT)
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
603 #define COMPILE_MMX
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
604 #endif
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
605
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
606 #if defined (HAVE_MMX2) || defined (RUNTIME_CPUDETECT)
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
607 #define COMPILE_MMX2
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
608 #endif
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
609
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
610 #if (defined (HAVE_3DNOW) && !defined (HAVE_MMX2)) || defined (RUNTIME_CPUDETECT)
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
611 #define COMPILE_3DNOW
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
612 #endif
787
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
613 #endif //ARCH_X86
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
614
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
615 #undef HAVE_MMX
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
616 #undef HAVE_MMX2
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
617 #undef HAVE_3DNOW
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
618 #undef HAVE_ALTIVEC
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
619
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
620 #ifdef COMPILE_C
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
621 #undef HAVE_MMX
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
622 #undef HAVE_MMX2
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
623 #undef HAVE_3DNOW
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
624 #define RENAME(a) a ## _C
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
625 #include "postprocess_template.c"
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
626 #endif
106
389391a6d0bf rewrote the horizontal lowpass filter to fix a bug which caused a blocky look
michael
parents: 105
diff changeset
627
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
628 #ifdef ARCH_POWERPC
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
629 #ifdef COMPILE_ALTIVEC
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
630 #undef RENAME
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
631 #define HAVE_ALTIVEC
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
632 #define RENAME(a) a ## _altivec
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
633 #include "postprocess_altivec_template.c"
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
634 #include "postprocess_template.c"
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
635 #endif
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
636 #endif //ARCH_POWERPC
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
637
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
638 //MMX versions
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
639 #ifdef COMPILE_MMX
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
640 #undef RENAME
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
641 #define HAVE_MMX
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
642 #undef HAVE_MMX2
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
643 #undef HAVE_3DNOW
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
644 #define RENAME(a) a ## _MMX
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
645 #include "postprocess_template.c"
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
646 #endif
128
e5266b8e79be much better horizontal filters (transpose & use the vertical ones) :)
michael
parents: 126
diff changeset
647
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
648 //MMX2 versions
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
649 #ifdef COMPILE_MMX2
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
650 #undef RENAME
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
651 #define HAVE_MMX
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
652 #define HAVE_MMX2
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
653 #undef HAVE_3DNOW
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
654 #define RENAME(a) a ## _MMX2
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
655 #include "postprocess_template.c"
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
656 #endif
128
e5266b8e79be much better horizontal filters (transpose & use the vertical ones) :)
michael
parents: 126
diff changeset
657
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
658 //3DNOW versions
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
659 #ifdef COMPILE_3DNOW
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
660 #undef RENAME
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
661 #define HAVE_MMX
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
662 #undef HAVE_MMX2
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
663 #define HAVE_3DNOW
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
664 #define RENAME(a) a ## _3DNow
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
665 #include "postprocess_template.c"
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
666 #endif
128
e5266b8e79be much better horizontal filters (transpose & use the vertical ones) :)
michael
parents: 126
diff changeset
667
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
668 // minor note: the HAVE_xyz is messed up after that line so dont use it
128
e5266b8e79be much better horizontal filters (transpose & use the vertical ones) :)
michael
parents: 126
diff changeset
669
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
670 static inline void postProcess(uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
671 QP_STORE_T QPs[], int QPStride, int isColor, pp_mode_t *vm, pp_context_t *vc)
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 152
diff changeset
672 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
673 PPContext *c= (PPContext *)vc;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
674 PPMode *ppMode= (PPMode *)vm;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
675 c->ppMode= *ppMode; //FIXME
787
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
676
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
677 // useing ifs here as they are faster than function pointers allthough the
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
678 // difference wouldnt be messureable here but its much better because
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
679 // someone might exchange the cpu whithout restarting mplayer ;)
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
680 #ifdef RUNTIME_CPUDETECT
2293
15cfba1b97b5 adapting existing mmx/mmx2/sse/3dnow optimizations so they work on x86_64 patch by (Aurelien Jacobs <aurel at gnuage dot org>)
michael
parents: 2188
diff changeset
681 #if defined(ARCH_X86) || defined(ARCH_X86_64)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
682 // ordered per speed fasterst first
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
683 if(c->cpuCaps & PP_CPU_CAPS_MMX2)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
684 postProcess_MMX2(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
685 else if(c->cpuCaps & PP_CPU_CAPS_3DNOW)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
686 postProcess_3DNow(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
687 else if(c->cpuCaps & PP_CPU_CAPS_MMX)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
688 postProcess_MMX(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
689 else
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
690 postProcess_C(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
157
bc12fd7e6153 temp denoiser changes: (a-b)^2 instead of |a-b| and MMX2/3DNOW version
michael
parents: 156
diff changeset
691 #else
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
692 #ifdef ARCH_POWERPC
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
693 #ifdef HAVE_ALTIVEC
2188
226d0a39347d typo fix by (Marcin 'Morgoth' Kurek <morgoth6 at box43 dot pl>)
michael
parents: 2055
diff changeset
694 if(c->cpuCaps & PP_CPU_CAPS_ALTIVEC)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
695 postProcess_altivec(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
696 else
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
697 #endif
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
698 #endif
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
699 postProcess_C(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
157
bc12fd7e6153 temp denoiser changes: (a-b)^2 instead of |a-b| and MMX2/3DNOW version
michael
parents: 156
diff changeset
700 #endif
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
701 #else //RUNTIME_CPUDETECT
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
702 #ifdef HAVE_MMX2
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
703 postProcess_MMX2(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
704 #elif defined (HAVE_3DNOW)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
705 postProcess_3DNow(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
706 #elif defined (HAVE_MMX)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
707 postProcess_MMX(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
2036
6a6c678517b3 altivec optimizations and horizontal filter fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 2031
diff changeset
708 #elif defined (HAVE_ALTIVEC)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
709 postProcess_altivec(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
710 #else
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
711 postProcess_C(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
171
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
712 #endif
fa9734559c98 runtime cpu detect optional (compiles faster)
michael
parents: 169
diff changeset
713 #endif //!RUNTIME_CPUDETECT
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 152
diff changeset
714 }
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 152
diff changeset
715
169
20bcd5b70886 runtime cpu detection
michael
parents: 168
diff changeset
716 //static void postProcess(uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
717 // QP_STORE_T QPs[], int QPStride, int isColor, struct PPMode *ppMode);
96
29ac11dc53d3 fixed a bug in the horizontal default filter
arpi
parents: 95
diff changeset
718
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
719 /* -pp Command line Help
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
720 */
804
f3a1bc99d4a0 change qscale type to int8 and fix qscale ordering
michael
parents: 799
diff changeset
721 char *pp_help=
2407
cb521eadf9ae Make -pphelp output consistent with the other instances of -xxx help.
diego
parents: 2293
diff changeset
722 "Available postprocessing filters:\n"
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
723 "Filters Options\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
724 "short long name short long option Description\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
725 "* * a autoq CPU power dependent enabler\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
726 " c chrom chrominance filtering enabled\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
727 " y nochrom chrominance filtering disabled\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
728 " n noluma luma filtering disabled\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
729 "hb hdeblock (2 threshold) horizontal deblocking filter\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
730 " 1. difference factor: default=32, higher -> more deblocking\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
731 " 2. flatness threshold: default=39, lower -> more deblocking\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
732 " the h & v deblocking filters share these\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
733 " so you can't set different thresholds for h / v\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
734 "vb vdeblock (2 threshold) vertical deblocking filter\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
735 "ha hadeblock (2 threshold) horizontal deblocking filter\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
736 "va vadeblock (2 threshold) vertical deblocking filter\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
737 "h1 x1hdeblock experimental h deblock filter 1\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
738 "v1 x1vdeblock experimental v deblock filter 1\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
739 "dr dering deringing filter\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
740 "al autolevels automatic brightness / contrast\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
741 " f fullyrange stretch luminance to (0..255)\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
742 "lb linblenddeint linear blend deinterlacer\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
743 "li linipoldeint linear interpolating deinterlace\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
744 "ci cubicipoldeint cubic interpolating deinterlacer\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
745 "md mediandeint median deinterlacer\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
746 "fd ffmpegdeint ffmpeg deinterlacer\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
747 "l5 lowpass5 FIR lowpass deinterlacer\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
748 "de default hb:a,vb:a,dr:a\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
749 "fa fast h1:a,v1:a,dr:a\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
750 "ac ha:a:128:7,va:a,dr:a\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
751 "tn tmpnoise (3 threshold) temporal noise reducer\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
752 " 1. <= 2. <= 3. larger -> stronger filtering\n"
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
753 "fq forceQuant <quantizer> force quantizer\n"
2407
cb521eadf9ae Make -pphelp output consistent with the other instances of -xxx help.
diego
parents: 2293
diff changeset
754 "Usage:\n"
cb521eadf9ae Make -pphelp output consistent with the other instances of -xxx help.
diego
parents: 2293
diff changeset
755 "<filterName>[:<option>[:<option>...]][[,|/][-]<filterName>[:<option>...]]...\n"
cb521eadf9ae Make -pphelp output consistent with the other instances of -xxx help.
diego
parents: 2293
diff changeset
756 "long form example:\n"
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
757 "vdeblock:autoq/hdeblock:autoq/linblenddeint default,-vdeblock\n"
2407
cb521eadf9ae Make -pphelp output consistent with the other instances of -xxx help.
diego
parents: 2293
diff changeset
758 "short form example:\n"
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
759 "vb:a/hb:a/lb de,-vb\n"
2407
cb521eadf9ae Make -pphelp output consistent with the other instances of -xxx help.
diego
parents: 2293
diff changeset
760 "more examples:\n"
cb521eadf9ae Make -pphelp output consistent with the other instances of -xxx help.
diego
parents: 2293
diff changeset
761 "tn:64:128:256\n"
3162
f4597d12563b Make -xy help output consistent, output an empty line before and after.
diego
parents: 3036
diff changeset
762 "\n"
184
69d105cc6158 -npp help
michael
parents: 183
diff changeset
763 ;
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
764
829
c39e14fc2392 cleanup
michael
parents: 820
diff changeset
765 pp_mode_t *pp_get_mode_by_name_and_quality(char *name, int quality)
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
766 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
767 char temp[GET_MODE_BUFFER_SIZE];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
768 char *p= temp;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
769 char *filterDelimiters= ",/";
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
770 char *optionDelimiters= ":";
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
771 struct PPMode *ppMode;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
772 char *filterToken;
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
773
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
774 ppMode= memalign(8, sizeof(PPMode));
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
775
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
776 ppMode->lumMode= 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
777 ppMode->chromMode= 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
778 ppMode->maxTmpNoise[0]= 700;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
779 ppMode->maxTmpNoise[1]= 1500;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
780 ppMode->maxTmpNoise[2]= 3000;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
781 ppMode->maxAllowedY= 234;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
782 ppMode->minAllowedY= 16;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
783 ppMode->baseDcDiff= 256/8;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
784 ppMode->flatnessThreshold= 56-16-1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
785 ppMode->maxClippedThreshold= 0.01;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
786 ppMode->error=0;
793
8e9faf69110f cleanup
michael
parents: 792
diff changeset
787
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
788 strncpy(temp, name, GET_MODE_BUFFER_SIZE);
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
789
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
790 if(verbose>1) printf("pp: %s\n", name);
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 152
diff changeset
791
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
792 for(;;){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
793 char *filterName;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
794 int q= 1000000; //PP_QUALITY_MAX;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
795 int chrom=-1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
796 int luma=-1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
797 char *option;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
798 char *options[OPTIONS_ARRAY_SIZE];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
799 int i;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
800 int filterNameOk=0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
801 int numOfUnknownOptions=0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
802 int enable=1; //does the user want us to enabled or disabled the filter
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
803
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
804 filterToken= strtok(p, filterDelimiters);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
805 if(filterToken == NULL) break;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
806 p+= strlen(filterToken) + 1; // p points to next filterToken
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
807 filterName= strtok(filterToken, optionDelimiters);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
808 if(verbose>1) printf("pp: %s::%s\n", filterToken, filterName);
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
809
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
810 if(*filterName == '-')
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
811 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
812 enable=0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
813 filterName++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
814 }
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 152
diff changeset
815
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
816 for(;;){ //for all options
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
817 option= strtok(NULL, optionDelimiters);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
818 if(option == NULL) break;
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
819
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
820 if(verbose>1) printf("pp: option: %s\n", option);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
821 if(!strcmp("autoq", option) || !strcmp("a", option)) q= quality;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
822 else if(!strcmp("nochrom", option) || !strcmp("y", option)) chrom=0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
823 else if(!strcmp("chrom", option) || !strcmp("c", option)) chrom=1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
824 else if(!strcmp("noluma", option) || !strcmp("n", option)) luma=0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
825 else
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
826 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
827 options[numOfUnknownOptions] = option;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
828 numOfUnknownOptions++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
829 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
830 if(numOfUnknownOptions >= OPTIONS_ARRAY_SIZE-1) break;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
831 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
832 options[numOfUnknownOptions] = NULL;
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
833
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
834 /* replace stuff from the replace Table */
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
835 for(i=0; replaceTable[2*i]!=NULL; i++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
836 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
837 if(!strcmp(replaceTable[2*i], filterName))
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
838 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
839 int newlen= strlen(replaceTable[2*i + 1]);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
840 int plen;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
841 int spaceLeft;
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
842
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
843 if(p==NULL) p= temp, *p=0; //last filter
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
844 else p--, *p=','; //not last filter
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
845
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
846 plen= strlen(p);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
847 spaceLeft= p - temp + plen;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
848 if(spaceLeft + newlen >= GET_MODE_BUFFER_SIZE)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
849 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
850 ppMode->error++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
851 break;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
852 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
853 memmove(p + newlen, p, plen+1);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
854 memcpy(p, replaceTable[2*i + 1], newlen);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
855 filterNameOk=1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
856 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
857 }
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
858
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
859 for(i=0; filters[i].shortName!=NULL; i++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
860 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
861 // printf("Compareing %s, %s, %s\n", filters[i].shortName,filters[i].longName, filterName);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
862 if( !strcmp(filters[i].longName, filterName)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
863 || !strcmp(filters[i].shortName, filterName))
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
864 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
865 ppMode->lumMode &= ~filters[i].mask;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
866 ppMode->chromMode &= ~filters[i].mask;
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
867
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
868 filterNameOk=1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
869 if(!enable) break; // user wants to disable it
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
870
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
871 if(q >= filters[i].minLumQuality && luma)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
872 ppMode->lumMode|= filters[i].mask;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
873 if(chrom==1 || (chrom==-1 && filters[i].chromDefault))
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
874 if(q >= filters[i].minChromQuality)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
875 ppMode->chromMode|= filters[i].mask;
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
876
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
877 if(filters[i].mask == LEVEL_FIX)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
878 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
879 int o;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
880 ppMode->minAllowedY= 16;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
881 ppMode->maxAllowedY= 234;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
882 for(o=0; options[o]!=NULL; o++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
883 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
884 if( !strcmp(options[o],"fullyrange")
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
885 ||!strcmp(options[o],"f"))
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
886 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
887 ppMode->minAllowedY= 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
888 ppMode->maxAllowedY= 255;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
889 numOfUnknownOptions--;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
890 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
891 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
892 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
893 else if(filters[i].mask == TEMP_NOISE_FILTER)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
894 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
895 int o;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
896 int numOfNoises=0;
156
c09459686be3 temporal noise reducer in C (-pp 0x100000)
michael
parents: 152
diff changeset
897
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
898 for(o=0; options[o]!=NULL; o++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
899 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
900 char *tail;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
901 ppMode->maxTmpNoise[numOfNoises]=
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
902 strtol(options[o], &tail, 0);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
903 if(tail!=options[o])
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
904 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
905 numOfNoises++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
906 numOfUnknownOptions--;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
907 if(numOfNoises >= 3) break;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
908 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
909 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
910 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
911 else if(filters[i].mask == V_DEBLOCK || filters[i].mask == H_DEBLOCK
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
912 || filters[i].mask == V_A_DEBLOCK || filters[i].mask == H_A_DEBLOCK)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
913 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
914 int o;
181
edc5f6cf1855 customizeable deblocking (2 thresholds)
michael
parents: 180
diff changeset
915
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
916 for(o=0; options[o]!=NULL && o<2; o++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
917 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
918 char *tail;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
919 int val= strtol(options[o], &tail, 0);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
920 if(tail==options[o]) break;
181
edc5f6cf1855 customizeable deblocking (2 thresholds)
michael
parents: 180
diff changeset
921
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
922 numOfUnknownOptions--;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
923 if(o==0) ppMode->baseDcDiff= val;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
924 else ppMode->flatnessThreshold= val;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
925 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
926 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
927 else if(filters[i].mask == FORCE_QUANT)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
928 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
929 int o;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
930 ppMode->forcedQuant= 15;
183
d310beb2d848 -npp fq:<quantizer>
michael
parents: 182
diff changeset
931
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
932 for(o=0; options[o]!=NULL && o<1; o++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
933 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
934 char *tail;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
935 int val= strtol(options[o], &tail, 0);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
936 if(tail==options[o]) break;
183
d310beb2d848 -npp fq:<quantizer>
michael
parents: 182
diff changeset
937
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
938 numOfUnknownOptions--;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
939 ppMode->forcedQuant= val;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
940 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
941 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
942 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
943 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
944 if(!filterNameOk) ppMode->error++;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
945 ppMode->error += numOfUnknownOptions;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
946 }
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
947
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
948 if(verbose>1) printf("pp: lumMode=%X, chromMode=%X\n", ppMode->lumMode, ppMode->chromMode);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
949 if(ppMode->error)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
950 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
951 fprintf(stderr, "%d errors in postprocess string \"%s\"\n", ppMode->error, name);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
952 free(ppMode);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
953 return NULL;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
954 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
955 return ppMode;
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
956 }
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
957
829
c39e14fc2392 cleanup
michael
parents: 820
diff changeset
958 void pp_free_mode(pp_mode_t *mode){
c39e14fc2392 cleanup
michael
parents: 820
diff changeset
959 if(mode) free(mode);
c39e14fc2392 cleanup
michael
parents: 820
diff changeset
960 }
c39e14fc2392 cleanup
michael
parents: 820
diff changeset
961
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 837
diff changeset
962 static void reallocAlign(void **p, int alignment, int size){
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
963 if(*p) free(*p);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
964 *p= memalign(alignment, size);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
965 memset(*p, 0, size);
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 837
diff changeset
966 }
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 837
diff changeset
967
1196
2e06398e4647 mpeg2 qscale flag
michaelni
parents: 1157
diff changeset
968 static void reallocBuffers(PPContext *c, int width, int height, int stride, int qpStride){
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
969 int mbWidth = (width+15)>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
970 int mbHeight= (height+15)>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
971 int i;
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 837
diff changeset
972
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
973 c->stride= stride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
974 c->qpStride= qpStride;
787
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
975
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
976 reallocAlign((void **)&c->tempDst, 8, stride*24);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
977 reallocAlign((void **)&c->tempSrc, 8, stride*24);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
978 reallocAlign((void **)&c->tempBlocks, 8, 2*16*8);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
979 reallocAlign((void **)&c->yHistogram, 8, 256*sizeof(uint64_t));
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
980 for(i=0; i<256; i++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
981 c->yHistogram[i]= width*height/64*15/256;
787
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
982
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
983 for(i=0; i<3; i++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
984 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
985 //Note:the +17*1024 is just there so i dont have to worry about r/w over te end
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
986 reallocAlign((void **)&c->tempBlured[i], 8, stride*mbHeight*16 + 17*1024);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
987 reallocAlign((void **)&c->tempBluredPast[i], 8, 256*((height+7)&(~7))/2 + 17*1024);//FIXME size
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
988 }
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 837
diff changeset
989
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
990 reallocAlign((void **)&c->deintTemp, 8, 2*width+32);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
991 reallocAlign((void **)&c->nonBQPTable, 8, qpStride*mbHeight*sizeof(QP_STORE_T));
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
992 reallocAlign((void **)&c->stdQPTable, 8, qpStride*mbHeight*sizeof(QP_STORE_T));
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
993 reallocAlign((void **)&c->forcedQPTable, 8, mbWidth*sizeof(QP_STORE_T));
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 837
diff changeset
994 }
179
02b2b7ffe324 new -pp options stuff (-npp ...)
michael
parents: 171
diff changeset
995
1282
8988af3ae1e8 Warning and compatibility fixes.
mellum
parents: 1223
diff changeset
996 static void global_init(void){
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
997 int i;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
998 memset(clip_table, 0, 256);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
999 for(i=256; i<512; i++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1000 clip_table[i]= i;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1001 memset(clip_table+512, 0, 256);
1157
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
1002 }
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
1003
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 837
diff changeset
1004 pp_context_t *pp_get_context(int width, int height, int cpuCaps){
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1005 PPContext *c= memalign(32, sizeof(PPContext));
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1006 int stride= (width+15)&(~15); //assumed / will realloc if needed
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1007 int qpStride= (width+15)/16 + 2; //assumed / will realloc if needed
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
1008
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1009 global_init();
1157
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
1010
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1011 memset(c, 0, sizeof(PPContext));
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1012 c->cpuCaps= cpuCaps;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1013 if(cpuCaps&PP_FORMAT){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1014 c->hChromaSubSample= cpuCaps&0x3;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1015 c->vChromaSubSample= (cpuCaps>>4)&0x3;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1016 }else{
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1017 c->hChromaSubSample= 1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1018 c->vChromaSubSample= 1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1019 }
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 837
diff changeset
1020
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1021 reallocBuffers(c, width, height, stride, qpStride);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
1022
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1023 c->frameNum=-1;
179
02b2b7ffe324 new -pp options stuff (-npp ...)
michael
parents: 171
diff changeset
1024
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1025 return c;
179
02b2b7ffe324 new -pp options stuff (-npp ...)
michael
parents: 171
diff changeset
1026 }
02b2b7ffe324 new -pp options stuff (-npp ...)
michael
parents: 171
diff changeset
1027
792
2d1283d511b7 cosmetics ;)
michael
parents: 791
diff changeset
1028 void pp_free_context(void *vc){
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1029 PPContext *c = (PPContext*)vc;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1030 int i;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
1031
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1032 for(i=0; i<3; i++) free(c->tempBlured[i]);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1033 for(i=0; i<3; i++) free(c->tempBluredPast[i]);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
1034
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1035 free(c->tempBlocks);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1036 free(c->yHistogram);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1037 free(c->tempDst);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1038 free(c->tempSrc);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1039 free(c->deintTemp);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1040 free(c->stdQPTable);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1041 free(c->nonBQPTable);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1042 free(c->forcedQPTable);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2667
diff changeset
1043
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1044 memset(c, 0, sizeof(PPContext));
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 837
diff changeset
1045
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1046 free(c);
787
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
1047 }
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
1048
792
2d1283d511b7 cosmetics ;)
michael
parents: 791
diff changeset
1049 void pp_postprocess(uint8_t * src[3], int srcStride[3],
787
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
1050 uint8_t * dst[3], int dstStride[3],
791
4f61ca80b6c1 better deblocking filter
michael
parents: 787
diff changeset
1051 int width, int height,
787
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
1052 QP_STORE_T *QP_store, int QPStride,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1053 pp_mode_t *vm, void *vc, int pict_type)
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
1054 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1055 int mbWidth = (width+15)>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1056 int mbHeight= (height+15)>>4;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1057 PPMode *mode = (PPMode*)vm;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1058 PPContext *c = (PPContext*)vc;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1059 int minStride= MAX(ABS(srcStride[0]), ABS(dstStride[0]));
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1060 int absQPStride = ABS(QPStride);
1196
2e06398e4647 mpeg2 qscale flag
michaelni
parents: 1157
diff changeset
1061
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1062 // c->stride and c->QPStride are always positive
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1063 if(c->stride < minStride || c->qpStride < absQPStride)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1064 reallocBuffers(c, width, height,
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1065 MAX(minStride, c->stride),
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1066 MAX(c->qpStride, absQPStride));
787
4914252c963a postprocessing cleanup:
michael
parents: 419
diff changeset
1067
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1068 if(QP_store==NULL || (mode->lumMode & FORCE_QUANT))
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1069 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1070 int i;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1071 QP_store= c->forcedQPTable;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1072 absQPStride = QPStride = 0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1073 if(mode->lumMode & FORCE_QUANT)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1074 for(i=0; i<mbWidth; i++) QP_store[i]= mode->forcedQuant;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1075 else
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1076 for(i=0; i<mbWidth; i++) QP_store[i]= 1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1077 }
1196
2e06398e4647 mpeg2 qscale flag
michaelni
parents: 1157
diff changeset
1078 //printf("pict_type:%d\n", pict_type);
2e06398e4647 mpeg2 qscale flag
michaelni
parents: 1157
diff changeset
1079
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1080 if(pict_type & PP_PICT_TYPE_QP2){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1081 int i;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1082 const int count= mbHeight * absQPStride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1083 for(i=0; i<(count>>2); i++){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1084 ((uint32_t*)c->stdQPTable)[i] = (((uint32_t*)QP_store)[i]>>1) & 0x7F7F7F7F;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1085 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1086 for(i<<=2; i<count; i++){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1087 c->stdQPTable[i] = QP_store[i]>>1;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1088 }
1196
2e06398e4647 mpeg2 qscale flag
michaelni
parents: 1157
diff changeset
1089 QP_store= c->stdQPTable;
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1090 QPStride= absQPStride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1091 }
1196
2e06398e4647 mpeg2 qscale flag
michaelni
parents: 1157
diff changeset
1092
791
4f61ca80b6c1 better deblocking filter
michael
parents: 787
diff changeset
1093 if(0){
4f61ca80b6c1 better deblocking filter
michael
parents: 787
diff changeset
1094 int x,y;
4f61ca80b6c1 better deblocking filter
michael
parents: 787
diff changeset
1095 for(y=0; y<mbHeight; y++){
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1096 for(x=0; x<mbWidth; x++){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1097 printf("%2d ", QP_store[x + y*QPStride]);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1098 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1099 printf("\n");
791
4f61ca80b6c1 better deblocking filter
michael
parents: 787
diff changeset
1100 }
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1101 printf("\n");
791
4f61ca80b6c1 better deblocking filter
michael
parents: 787
diff changeset
1102 }
798
michael
parents: 793
diff changeset
1103
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1104 if((pict_type&7)!=3)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1105 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1106 if (QPStride >= 0) {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1107 int i;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1108 const int count= mbHeight * QPStride;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1109 for(i=0; i<(count>>2); i++){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1110 ((uint32_t*)c->nonBQPTable)[i] = ((uint32_t*)QP_store)[i] & 0x3F3F3F3F;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1111 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1112 for(i<<=2; i<count; i++){
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1113 c->nonBQPTable[i] = QP_store[i] & 0x3F;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1114 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1115 } else {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1116 int i,j;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1117 for(i=0; i<mbHeight; i++) {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1118 for(j=0; j<absQPStride; j++) {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1119 c->nonBQPTable[i*absQPStride+j] = QP_store[i*QPStride+j] & 0x3F;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1120 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1121 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1122 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1123 }
152
561ec01a1a78 QP_store==null bugfix and no opendivx bugfix
michael
parents: 150
diff changeset
1124
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1125 if(verbose>2)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1126 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1127 printf("using npp filters 0x%X/0x%X\n", mode->lumMode, mode->chromMode);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1128 }
202
fbe0398a7a4d dont print -npp parser debug info if only -v
michael
parents: 185
diff changeset
1129
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1130 postProcess(src[0], srcStride[0], dst[0], dstStride[0],
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1131 width, height, QP_store, QPStride, 0, mode, c);
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
1132
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1133 width = (width )>>c->hChromaSubSample;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1134 height = (height)>>c->vChromaSubSample;
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
1135
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1136 if(mode->chromMode)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1137 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1138 postProcess(src[1], srcStride[1], dst[1], dstStride[1],
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1139 width, height, QP_store, QPStride, 1, mode, c);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1140 postProcess(src[2], srcStride[2], dst[2], dstStride[2],
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1141 width, height, QP_store, QPStride, 2, mode, c);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1142 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1143 else if(srcStride[1] == dstStride[1] && srcStride[2] == dstStride[2])
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1144 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1145 linecpy(dst[1], src[1], height, srcStride[1]);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1146 linecpy(dst[2], src[2], height, srcStride[2]);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1147 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1148 else
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1149 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1150 int y;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1151 for(y=0; y<height; y++)
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1152 {
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1153 memcpy(&(dst[1][y*dstStride[1]]), &(src[1][y*srcStride[1]]), width);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1154 memcpy(&(dst[2][y*dstStride[2]]), &(src[2][y*srcStride[2]]), width);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1155 }
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
1156 }
116
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
1157 }
1895a8fa81ea auto brightness/ contrast bugfix
michael
parents: 115
diff changeset
1158