annotate libpostproc/postprocess_internal.h @ 1080:a150aba978de libavcodec

huffyuv v1 tables, as they are essential and the only possible way for decding of v1 files they very likely cant be copyrighted ...
author michaelni
date Mon, 24 Feb 2003 09:49:37 +0000
parents 8a95bda80fdc
children 3644e555a20a
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
c39e14fc2392 cleanup
michael
parents:
diff changeset
19 #define V_DEBLOCK 0x01
c39e14fc2392 cleanup
michael
parents:
diff changeset
20 #define H_DEBLOCK 0x02
c39e14fc2392 cleanup
michael
parents:
diff changeset
21 #define DERING 0x04
c39e14fc2392 cleanup
michael
parents:
diff changeset
22 #define LEVEL_FIX 0x08 /* Brightness & Contrast */
c39e14fc2392 cleanup
michael
parents:
diff changeset
23
c39e14fc2392 cleanup
michael
parents:
diff changeset
24 #define LUM_V_DEBLOCK V_DEBLOCK // 1
c39e14fc2392 cleanup
michael
parents:
diff changeset
25 #define LUM_H_DEBLOCK H_DEBLOCK // 2
c39e14fc2392 cleanup
michael
parents:
diff changeset
26 #define CHROM_V_DEBLOCK (V_DEBLOCK<<4) // 16
c39e14fc2392 cleanup
michael
parents:
diff changeset
27 #define CHROM_H_DEBLOCK (H_DEBLOCK<<4) // 32
c39e14fc2392 cleanup
michael
parents:
diff changeset
28 #define LUM_DERING DERING // 4
c39e14fc2392 cleanup
michael
parents:
diff changeset
29 #define CHROM_DERING (DERING<<4) // 64
c39e14fc2392 cleanup
michael
parents:
diff changeset
30 #define LUM_LEVEL_FIX LEVEL_FIX // 8
c39e14fc2392 cleanup
michael
parents:
diff changeset
31 #define CHROM_LEVEL_FIX (LEVEL_FIX<<4) // 128 (not implemented yet)
c39e14fc2392 cleanup
michael
parents:
diff changeset
32
c39e14fc2392 cleanup
michael
parents:
diff changeset
33 // Experimental vertical filters
c39e14fc2392 cleanup
michael
parents:
diff changeset
34 #define V_X1_FILTER 0x0200 // 512
c39e14fc2392 cleanup
michael
parents:
diff changeset
35
c39e14fc2392 cleanup
michael
parents:
diff changeset
36 // Experimental horizontal filters
c39e14fc2392 cleanup
michael
parents:
diff changeset
37 #define H_X1_FILTER 0x2000 // 8192
c39e14fc2392 cleanup
michael
parents:
diff changeset
38
c39e14fc2392 cleanup
michael
parents:
diff changeset
39 // select between full y range (255-0) or standart one (234-16)
c39e14fc2392 cleanup
michael
parents:
diff changeset
40 #define FULL_Y_RANGE 0x8000 // 32768
c39e14fc2392 cleanup
michael
parents:
diff changeset
41
c39e14fc2392 cleanup
michael
parents:
diff changeset
42 //Deinterlacing Filters
c39e14fc2392 cleanup
michael
parents:
diff changeset
43 #define LINEAR_IPOL_DEINT_FILTER 0x10000 // 65536
c39e14fc2392 cleanup
michael
parents:
diff changeset
44 #define LINEAR_BLEND_DEINT_FILTER 0x20000 // 131072
c39e14fc2392 cleanup
michael
parents:
diff changeset
45 #define CUBIC_BLEND_DEINT_FILTER 0x8000 // (not implemented yet)
c39e14fc2392 cleanup
michael
parents:
diff changeset
46 #define CUBIC_IPOL_DEINT_FILTER 0x40000 // 262144
c39e14fc2392 cleanup
michael
parents:
diff changeset
47 #define MEDIAN_DEINT_FILTER 0x80000 // 524288
c39e14fc2392 cleanup
michael
parents:
diff changeset
48 #define FFMPEG_DEINT_FILTER 0x400000
c39e14fc2392 cleanup
michael
parents:
diff changeset
49
c39e14fc2392 cleanup
michael
parents:
diff changeset
50 #define TEMP_NOISE_FILTER 0x100000
c39e14fc2392 cleanup
michael
parents:
diff changeset
51 #define FORCE_QUANT 0x200000
c39e14fc2392 cleanup
michael
parents:
diff changeset
52
c39e14fc2392 cleanup
michael
parents:
diff changeset
53 //use if u want a faster postprocessing code
c39e14fc2392 cleanup
michael
parents:
diff changeset
54 //cant differentiate between chroma & luma filters (both on or both off)
c39e14fc2392 cleanup
michael
parents:
diff changeset
55 //obviosly the -pp option at the commandline has no effect except turning the here selected
c39e14fc2392 cleanup
michael
parents:
diff changeset
56 //filters on
c39e14fc2392 cleanup
michael
parents:
diff changeset
57 //#define COMPILE_TIME_MODE 0x77
c39e14fc2392 cleanup
michael
parents:
diff changeset
58
c39e14fc2392 cleanup
michael
parents:
diff changeset
59 struct PPFilter{
c39e14fc2392 cleanup
michael
parents:
diff changeset
60 char *shortName;
c39e14fc2392 cleanup
michael
parents:
diff changeset
61 char *longName;
c39e14fc2392 cleanup
michael
parents:
diff changeset
62 int chromDefault; // is chrominance filtering on by default if this filter is manually activated
c39e14fc2392 cleanup
michael
parents:
diff changeset
63 int minLumQuality; // minimum quality to turn luminance filtering on
c39e14fc2392 cleanup
michael
parents:
diff changeset
64 int minChromQuality; // minimum quality to turn chrominance filtering on
c39e14fc2392 cleanup
michael
parents:
diff changeset
65 int mask; // Bitmask to turn this filter on
c39e14fc2392 cleanup
michael
parents:
diff changeset
66 };
c39e14fc2392 cleanup
michael
parents:
diff changeset
67
c39e14fc2392 cleanup
michael
parents:
diff changeset
68 typedef struct PPMode{
c39e14fc2392 cleanup
michael
parents:
diff changeset
69 int lumMode; // acivates filters for luminance
c39e14fc2392 cleanup
michael
parents:
diff changeset
70 int chromMode; // acivates filters for chrominance
c39e14fc2392 cleanup
michael
parents:
diff changeset
71 int error; // non zero on error
c39e14fc2392 cleanup
michael
parents:
diff changeset
72
c39e14fc2392 cleanup
michael
parents:
diff changeset
73 int minAllowedY; // for brigtness correction
c39e14fc2392 cleanup
michael
parents:
diff changeset
74 int maxAllowedY; // for brihtness correction
c39e14fc2392 cleanup
michael
parents:
diff changeset
75 float maxClippedThreshold; // amount of "black" u r willing to loose to get a brightness corrected picture
c39e14fc2392 cleanup
michael
parents:
diff changeset
76
c39e14fc2392 cleanup
michael
parents:
diff changeset
77 int maxTmpNoise[3]; // for Temporal Noise Reducing filter (Maximal sum of abs differences)
c39e14fc2392 cleanup
michael
parents:
diff changeset
78
c39e14fc2392 cleanup
michael
parents:
diff changeset
79 int baseDcDiff;
c39e14fc2392 cleanup
michael
parents:
diff changeset
80 int flatnessThreshold;
c39e14fc2392 cleanup
michael
parents:
diff changeset
81
c39e14fc2392 cleanup
michael
parents:
diff changeset
82 int forcedQuant; // quantizer if FORCE_QUANT is used
c39e14fc2392 cleanup
michael
parents:
diff changeset
83 } PPMode;
c39e14fc2392 cleanup
michael
parents:
diff changeset
84
c39e14fc2392 cleanup
michael
parents:
diff changeset
85 typedef struct PPContext{
c39e14fc2392 cleanup
michael
parents:
diff changeset
86 uint8_t *tempBlocks; //used for the horizontal code
c39e14fc2392 cleanup
michael
parents:
diff changeset
87
c39e14fc2392 cleanup
michael
parents:
diff changeset
88 /* we need 64bit here otherwise weŽll going to have a problem
c39e14fc2392 cleanup
michael
parents:
diff changeset
89 after watching a black picture for 5 hours*/
c39e14fc2392 cleanup
michael
parents:
diff changeset
90 uint64_t *yHistogram;
c39e14fc2392 cleanup
michael
parents:
diff changeset
91
c39e14fc2392 cleanup
michael
parents:
diff changeset
92 uint64_t __attribute__((aligned(8))) packedYOffset;
c39e14fc2392 cleanup
michael
parents:
diff changeset
93 uint64_t __attribute__((aligned(8))) packedYScale;
c39e14fc2392 cleanup
michael
parents:
diff changeset
94
c39e14fc2392 cleanup
michael
parents:
diff changeset
95 /* Temporal noise reducing buffers */
c39e14fc2392 cleanup
michael
parents:
diff changeset
96 uint8_t *tempBlured[3];
c39e14fc2392 cleanup
michael
parents:
diff changeset
97 int32_t *tempBluredPast[3];
c39e14fc2392 cleanup
michael
parents:
diff changeset
98
c39e14fc2392 cleanup
michael
parents:
diff changeset
99 /* Temporary buffers for handling the last row(s) */
c39e14fc2392 cleanup
michael
parents:
diff changeset
100 uint8_t *tempDst;
c39e14fc2392 cleanup
michael
parents:
diff changeset
101 uint8_t *tempSrc;
c39e14fc2392 cleanup
michael
parents:
diff changeset
102
c39e14fc2392 cleanup
michael
parents:
diff changeset
103 uint8_t *deintTemp;
c39e14fc2392 cleanup
michael
parents:
diff changeset
104
c39e14fc2392 cleanup
michael
parents:
diff changeset
105 uint64_t __attribute__((aligned(8))) pQPb;
c39e14fc2392 cleanup
michael
parents:
diff changeset
106 uint64_t __attribute__((aligned(8))) pQPb2;
c39e14fc2392 cleanup
michael
parents:
diff changeset
107
c39e14fc2392 cleanup
michael
parents:
diff changeset
108 uint64_t __attribute__((aligned(8))) mmxDcOffset[32];
c39e14fc2392 cleanup
michael
parents:
diff changeset
109 uint64_t __attribute__((aligned(8))) mmxDcThreshold[32];
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 829
diff changeset
110
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
111 QP_STORE_T *nonBQPTable;
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 829
diff changeset
112 QP_STORE_T *forcedQPTable;
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 829
diff changeset
113
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
114 int QP;
c39e14fc2392 cleanup
michael
parents:
diff changeset
115 int nonBQP;
c39e14fc2392 cleanup
michael
parents:
diff changeset
116
c39e14fc2392 cleanup
michael
parents:
diff changeset
117 int frameNum;
c39e14fc2392 cleanup
michael
parents:
diff changeset
118
c39e14fc2392 cleanup
michael
parents:
diff changeset
119 int cpuCaps;
937
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 829
diff changeset
120
04fd733c5e4b buffer alloc cleanup / 10l
michael
parents: 829
diff changeset
121 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
122
8a95bda80fdc YUV 411/422/444 support for pp
michael
parents: 937
diff changeset
123 int hChromaSubSample;
8a95bda80fdc YUV 411/422/444 support for pp
michael
parents: 937
diff changeset
124 int vChromaSubSample;
829
c39e14fc2392 cleanup
michael
parents:
diff changeset
125
c39e14fc2392 cleanup
michael
parents:
diff changeset
126 PPMode ppMode;
c39e14fc2392 cleanup
michael
parents:
diff changeset
127 } PPContext;
c39e14fc2392 cleanup
michael
parents:
diff changeset
128