annotate libpostproc/postprocess_internal.h @ 1516:0f0e9dfa6723 libavcodec

theora decoding support (only keyframes for now, because by theora the frame isn't flipped so the motion vectors are getting screwed up)
author alex
date Sat, 11 Oct 2003 17:44:21 +0000
parents 2e06398e4647
children ea5200a9f730
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
1 /*
c39e14fc2392 cleanup
michael
parents:
diff changeset
2 Copyright (C) 2001-2002 Michael Niedermayer (michaelni@gmx.at)
c39e14fc2392 cleanup
michael
parents:
diff changeset
3
c39e14fc2392 cleanup
michael
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
c39e14fc2392 cleanup
michael
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
c39e14fc2392 cleanup
michael
parents:
diff changeset
6 the Free Software Foundation; either version 2 of the License, or
c39e14fc2392 cleanup
michael
parents:
diff changeset
7 (at your option) any later version.
c39e14fc2392 cleanup
michael
parents:
diff changeset
8
c39e14fc2392 cleanup
michael
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
c39e14fc2392 cleanup
michael
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
c39e14fc2392 cleanup
michael
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c39e14fc2392 cleanup
michael
parents:
diff changeset
12 GNU General Public License for more details.
c39e14fc2392 cleanup
michael
parents:
diff changeset
13
c39e14fc2392 cleanup
michael
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
c39e14fc2392 cleanup
michael
parents:
diff changeset
15 along with this program; if not, write to the Free Software
c39e14fc2392 cleanup
michael
parents:
diff changeset
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
c39e14fc2392 cleanup
michael
parents:
diff changeset
17 */
c39e14fc2392 cleanup
michael
parents:
diff changeset
18
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
19 /**
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
20 * @file postprocess_internal.h
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
21 * internal api header.
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
22 */
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
23
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
24 #define V_DEBLOCK 0x01
c39e14fc2392 cleanup
michael
parents:
diff changeset
25 #define H_DEBLOCK 0x02
c39e14fc2392 cleanup
michael
parents:
diff changeset
26 #define DERING 0x04
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
27 #define LEVEL_FIX 0x08 ///< Brightness & Contrast
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
28
c39e14fc2392 cleanup
michael
parents:
diff changeset
29 #define LUM_V_DEBLOCK V_DEBLOCK // 1
c39e14fc2392 cleanup
michael
parents:
diff changeset
30 #define LUM_H_DEBLOCK H_DEBLOCK // 2
c39e14fc2392 cleanup
michael
parents:
diff changeset
31 #define CHROM_V_DEBLOCK (V_DEBLOCK<<4) // 16
c39e14fc2392 cleanup
michael
parents:
diff changeset
32 #define CHROM_H_DEBLOCK (H_DEBLOCK<<4) // 32
c39e14fc2392 cleanup
michael
parents:
diff changeset
33 #define LUM_DERING DERING // 4
c39e14fc2392 cleanup
michael
parents:
diff changeset
34 #define CHROM_DERING (DERING<<4) // 64
c39e14fc2392 cleanup
michael
parents:
diff changeset
35 #define LUM_LEVEL_FIX LEVEL_FIX // 8
c39e14fc2392 cleanup
michael
parents:
diff changeset
36 #define CHROM_LEVEL_FIX (LEVEL_FIX<<4) // 128 (not implemented yet)
c39e14fc2392 cleanup
michael
parents:
diff changeset
37
c39e14fc2392 cleanup
michael
parents:
diff changeset
38 // Experimental vertical filters
c39e14fc2392 cleanup
michael
parents:
diff changeset
39 #define V_X1_FILTER 0x0200 // 512
c39e14fc2392 cleanup
michael
parents:
diff changeset
40
c39e14fc2392 cleanup
michael
parents:
diff changeset
41 // Experimental horizontal filters
c39e14fc2392 cleanup
michael
parents:
diff changeset
42 #define H_X1_FILTER 0x2000 // 8192
c39e14fc2392 cleanup
michael
parents:
diff changeset
43
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
44 /// select between full y range (255-0) or standart one (234-16)
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
45 #define FULL_Y_RANGE 0x8000 // 32768
c39e14fc2392 cleanup
michael
parents:
diff changeset
46
c39e14fc2392 cleanup
michael
parents:
diff changeset
47 //Deinterlacing Filters
c39e14fc2392 cleanup
michael
parents:
diff changeset
48 #define LINEAR_IPOL_DEINT_FILTER 0x10000 // 65536
c39e14fc2392 cleanup
michael
parents:
diff changeset
49 #define LINEAR_BLEND_DEINT_FILTER 0x20000 // 131072
c39e14fc2392 cleanup
michael
parents:
diff changeset
50 #define CUBIC_BLEND_DEINT_FILTER 0x8000 // (not implemented yet)
c39e14fc2392 cleanup
michael
parents:
diff changeset
51 #define CUBIC_IPOL_DEINT_FILTER 0x40000 // 262144
c39e14fc2392 cleanup
michael
parents:
diff changeset
52 #define MEDIAN_DEINT_FILTER 0x80000 // 524288
c39e14fc2392 cleanup
michael
parents:
diff changeset
53 #define FFMPEG_DEINT_FILTER 0x400000
1157
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
54 #define LOWPASS5_DEINT_FILTER 0x800000
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
55
c39e14fc2392 cleanup
michael
parents:
diff changeset
56 #define TEMP_NOISE_FILTER 0x100000
c39e14fc2392 cleanup
michael
parents:
diff changeset
57 #define FORCE_QUANT 0x200000
c39e14fc2392 cleanup
michael
parents:
diff changeset
58
c39e14fc2392 cleanup
michael
parents:
diff changeset
59 //use if u want a faster postprocessing code
c39e14fc2392 cleanup
michael
parents:
diff changeset
60 //cant differentiate between chroma & luma filters (both on or both off)
c39e14fc2392 cleanup
michael
parents:
diff changeset
61 //obviosly the -pp option at the commandline has no effect except turning the here selected
c39e14fc2392 cleanup
michael
parents:
diff changeset
62 //filters on
c39e14fc2392 cleanup
michael
parents:
diff changeset
63 //#define COMPILE_TIME_MODE 0x77
c39e14fc2392 cleanup
michael
parents:
diff changeset
64
1157
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
65 #if 1
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
66 static inline int CLIP(int a){
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
67 if(a&256) return ((a)>>31)^(-1);
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
68 else return a;
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
69 }
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
70 //#define CLIP(a) (((a)&256) ? ((a)>>31)^(-1) : (a))
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
71 #elif 0
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
72 #define CLIP(a) clip_tab[a]
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
73 #else
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
74 #define CLIP(a) (a)
57fe9c4e0c6e fixing cliping of c deinterlacers
michaelni
parents: 1109
diff changeset
75 #endif
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
76 /**
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
77 * Postprocessng filter.
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
78 */
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
79 struct PPFilter{
c39e14fc2392 cleanup
michael
parents:
diff changeset
80 char *shortName;
c39e14fc2392 cleanup
michael
parents:
diff changeset
81 char *longName;
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
82 int chromDefault; ///< is chrominance filtering on by default if this filter is manually activated
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
83 int minLumQuality; ///< minimum quality to turn luminance filtering on
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
84 int minChromQuality; ///< minimum quality to turn chrominance filtering on
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
85 int mask; ///< Bitmask to turn this filter on
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
86 };
c39e14fc2392 cleanup
michael
parents:
diff changeset
87
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
88 /**
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
89 * Postprocessng mode.
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
90 */
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
91 typedef struct PPMode{
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
92 int lumMode; ///< acivates filters for luminance
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
93 int chromMode; ///< acivates filters for chrominance
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
94 int error; ///< non zero on error
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
95
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
96 int minAllowedY; ///< for brigtness correction
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
97 int maxAllowedY; ///< for brihtness correction
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
98 float maxClippedThreshold; ///< amount of "black" u r willing to loose to get a brightness corrected picture
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
99
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
100 int maxTmpNoise[3]; ///< for Temporal Noise Reducing filter (Maximal sum of abs differences)
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
101
c39e14fc2392 cleanup
michael
parents:
diff changeset
102 int baseDcDiff;
c39e14fc2392 cleanup
michael
parents:
diff changeset
103 int flatnessThreshold;
c39e14fc2392 cleanup
michael
parents:
diff changeset
104
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
105 int forcedQuant; ///< quantizer if FORCE_QUANT is used
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
106 } PPMode;
c39e14fc2392 cleanup
michael
parents:
diff changeset
107
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
108 /**
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
109 * postprocess context.
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
110 */
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
111 typedef struct PPContext{
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
112 uint8_t *tempBlocks; ///<used for the horizontal code
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
113
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
114 /**
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
115 * luma histogram.
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
116 * we need 64bit here otherwise we'll going to have a problem
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
117 * after watching a black picture for 5 hours
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
118 */
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
119 uint64_t *yHistogram;
c39e14fc2392 cleanup
michael
parents:
diff changeset
120
c39e14fc2392 cleanup
michael
parents:
diff changeset
121 uint64_t __attribute__((aligned(8))) packedYOffset;
c39e14fc2392 cleanup
michael
parents:
diff changeset
122 uint64_t __attribute__((aligned(8))) packedYScale;
c39e14fc2392 cleanup
michael
parents:
diff changeset
123
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
124 /** Temporal noise reducing buffers */
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
125 uint8_t *tempBlured[3];
c39e14fc2392 cleanup
michael
parents:
diff changeset
126 int32_t *tempBluredPast[3];
c39e14fc2392 cleanup
michael
parents:
diff changeset
127
1109
3644e555a20a doxy / cosmetics
michaelni
parents: 957
diff changeset
128 /** Temporary buffers for handling the last row(s) */
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
129 uint8_t *tempDst;
c39e14fc2392 cleanup
michael
parents:
diff changeset
130 uint8_t *tempSrc;
c39e14fc2392 cleanup
michael
parents:
diff changeset
131
c39e14fc2392 cleanup
michael
parents:
diff changeset
132 uint8_t *deintTemp;
c39e14fc2392 cleanup
michael
parents:
diff changeset
133
c39e14fc2392 cleanup
michael
parents:
diff changeset
134 uint64_t __attribute__((aligned(8))) pQPb;
c39e14fc2392 cleanup
michael
parents:
diff changeset
135 uint64_t __attribute__((aligned(8))) pQPb2;
c39e14fc2392 cleanup
michael
parents:
diff changeset
136
c39e14fc2392 cleanup
michael
parents:
diff changeset
137 uint64_t __attribute__((aligned(8))) mmxDcOffset[32];
c39e14fc2392 cleanup
michael
parents:
diff changeset
138 uint64_t __attribute__((aligned(8))) mmxDcThreshold[32];
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 829
diff changeset
139
1196
2e06398e4647 mpeg2 qscale flag
michaelni
parents: 1157
diff changeset
140 QP_STORE_T *stdQPTable; ///< used to fix MPEG2 style qscale
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
141 QP_STORE_T *nonBQPTable;
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 829
diff changeset
142 QP_STORE_T *forcedQPTable;
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 829
diff changeset
143
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
144 int QP;
c39e14fc2392 cleanup
michael
parents:
diff changeset
145 int nonBQP;
c39e14fc2392 cleanup
michael
parents:
diff changeset
146
c39e14fc2392 cleanup
michael
parents:
diff changeset
147 int frameNum;
c39e14fc2392 cleanup
michael
parents:
diff changeset
148
c39e14fc2392 cleanup
michael
parents:
diff changeset
149 int cpuCaps;
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 829
diff changeset
150
1196
2e06398e4647 mpeg2 qscale flag
michaelni
parents: 1157
diff changeset
151 int qpStride; ///<size of qp buffers (needed to realloc them if needed)
2e06398e4647 mpeg2 qscale flag
michaelni
parents: 1157
diff changeset
152 int stride; ///<size of some buffers (needed to realloc them if needed)
957
8a95bda80fdc YUV 411/422/444 support for pp
michael
parents: 937
diff changeset
153
8a95bda80fdc YUV 411/422/444 support for pp
michael
parents: 937
diff changeset
154 int hChromaSubSample;
8a95bda80fdc YUV 411/422/444 support for pp
michael
parents: 937
diff changeset
155 int vChromaSubSample;
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
156
c39e14fc2392 cleanup
michael
parents:
diff changeset
157 PPMode ppMode;
c39e14fc2392 cleanup
michael
parents:
diff changeset
158 } PPContext;
c39e14fc2392 cleanup
michael
parents:
diff changeset
159
1196
2e06398e4647 mpeg2 qscale flag
michaelni
parents: 1157
diff changeset
160