Statistics
| Branch: | Revision:

ffmpeg / libavcodec / libpostproc / postprocess_internal.h @ b304569a

History | View | Annotate | Download (4.23 KB)

1
/*
2
    Copyright (C) 2001-2002 Michael Niedermayer (michaelni@gmx.at)
3

4
    This program is free software; you can redistribute it and/or modify
5
    it under the terms of the GNU General Public License as published by
6
    the Free Software Foundation; either version 2 of the License, or
7
    (at your option) any later version.
8

9
    This program is distributed in the hope that it will be useful,
10
    but WITHOUT ANY WARRANTY; without even the implied warranty of
11
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
    GNU General Public License for more details.
13

14
    You should have received a copy of the GNU General Public License
15
    along with this program; if not, write to the Free Software
16
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
*/
18

    
19
/**
20
 * @file postprocess_internal.h
21
 * internal api header.
22
 */
23

    
24
#define V_DEBLOCK        0x01
25
#define H_DEBLOCK        0x02
26
#define DERING                0x04
27
#define LEVEL_FIX        0x08 ///< Brightness & Contrast
28

    
29
#define LUM_V_DEBLOCK        V_DEBLOCK                //   1
30
#define LUM_H_DEBLOCK        H_DEBLOCK                //   2
31
#define CHROM_V_DEBLOCK        (V_DEBLOCK<<4)                //  16
32
#define CHROM_H_DEBLOCK        (H_DEBLOCK<<4)                //  32
33
#define LUM_DERING        DERING                        //   4
34
#define CHROM_DERING        (DERING<<4)                //  64
35
#define LUM_LEVEL_FIX        LEVEL_FIX                //   8
36
#define CHROM_LEVEL_FIX        (LEVEL_FIX<<4)                // 128 (not implemented yet)
37

    
38
// Experimental vertical filters
39
#define V_X1_FILTER        0x0200                        // 512
40

    
41
// Experimental horizontal filters
42
#define H_X1_FILTER        0x2000                        // 8192
43

    
44
/// select between full y range (255-0) or standart one (234-16)
45
#define FULL_Y_RANGE        0x8000                        // 32768
46

    
47
//Deinterlacing Filters
48
#define        LINEAR_IPOL_DEINT_FILTER        0x10000        // 65536
49
#define        LINEAR_BLEND_DEINT_FILTER        0x20000        // 131072
50
#define        CUBIC_BLEND_DEINT_FILTER        0x8000        // (not implemented yet)
51
#define        CUBIC_IPOL_DEINT_FILTER                0x40000        // 262144
52
#define        MEDIAN_DEINT_FILTER                0x80000        // 524288
53
#define        FFMPEG_DEINT_FILTER                0x400000
54

    
55
#define TEMP_NOISE_FILTER                0x100000
56
#define FORCE_QUANT                        0x200000
57

    
58
//use if u want a faster postprocessing code
59
//cant differentiate between chroma & luma filters (both on or both off)
60
//obviosly the -pp option at the commandline has no effect except turning the here selected
61
//filters on
62
//#define COMPILE_TIME_MODE 0x77
63

    
64
/**
65
 * Postprocessng filter.
66
 */
67
struct PPFilter{
68
        char *shortName;
69
        char *longName;
70
        int chromDefault;         ///< is chrominance filtering on by default if this filter is manually activated
71
        int minLumQuality;         ///< minimum quality to turn luminance filtering on
72
        int minChromQuality;        ///< minimum quality to turn chrominance filtering on
73
        int mask;                 ///< Bitmask to turn this filter on
74
};
75

    
76
/**
77
 * Postprocessng mode.
78
 */
79
typedef struct PPMode{
80
        int lumMode;                         ///< acivates filters for luminance
81
        int chromMode;                         ///< acivates filters for chrominance
82
        int error;                         ///< non zero on error
83

    
84
        int minAllowedY;                 ///< for brigtness correction
85
        int maxAllowedY;                 ///< for brihtness correction
86
        float maxClippedThreshold;        ///< amount of "black" u r willing to loose to get a brightness corrected picture
87

    
88
        int maxTmpNoise[3];                 ///< for Temporal Noise Reducing filter (Maximal sum of abs differences)
89

    
90
        int baseDcDiff;
91
        int flatnessThreshold;
92

    
93
        int forcedQuant;                 ///< quantizer if FORCE_QUANT is used
94
} PPMode;
95

    
96
/**
97
 * postprocess context.
98
 */
99
typedef struct PPContext{
100
        uint8_t *tempBlocks; ///<used for the horizontal code
101

    
102
        /**
103
         * luma histogram.         
104
         * we need 64bit here otherwise we'll going to have a problem
105
         * after watching a black picture for 5 hours
106
         */
107
        uint64_t *yHistogram;
108

    
109
        uint64_t __attribute__((aligned(8))) packedYOffset;
110
        uint64_t __attribute__((aligned(8))) packedYScale;
111

    
112
        /** Temporal noise reducing buffers */
113
        uint8_t *tempBlured[3];
114
        int32_t *tempBluredPast[3];
115

    
116
        /** Temporary buffers for handling the last row(s) */
117
        uint8_t *tempDst;
118
        uint8_t *tempSrc;
119

    
120
        uint8_t *deintTemp;
121

    
122
        uint64_t __attribute__((aligned(8))) pQPb;
123
        uint64_t __attribute__((aligned(8))) pQPb2;
124

    
125
        uint64_t __attribute__((aligned(8))) mmxDcOffset[32];
126
        uint64_t __attribute__((aligned(8))) mmxDcThreshold[32];
127

    
128
        QP_STORE_T *nonBQPTable;
129
        QP_STORE_T *forcedQPTable;
130

    
131
        int QP;
132
        int nonBQP;
133

    
134
        int frameNum;
135
        
136
        int cpuCaps;
137
        
138
        int stride; ///<size of some buffers (needed to realloc them if needed)
139
        
140
        int hChromaSubSample;
141
        int vChromaSubSample;
142

    
143
        PPMode ppMode;
144
} PPContext;
145