Statistics
| Branch: | Revision:

ffmpeg / postproc / postprocess.h @ 07f8991b

History | View | Annotate | Download (4.05 KB)

1
/*
2
    Copyright (C) 2001 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
// POSTPROCESS_H is defined by opendivx's postprocess.h
20
#ifndef NEWPOSTPROCESS_H
21
#define NEWPOSTPROCESS_H
22

    
23
#define BLOCK_SIZE 8
24
#define TEMP_STRIDE 8
25
//#define NUM_BLOCKS_AT_ONCE 16 //not used yet
26

    
27
#define V_DEBLOCK        0x01
28
#define H_DEBLOCK        0x02
29
#define DERING                0x04
30
#define LEVEL_FIX        0x08 /* Brightness & Contrast */
31

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

    
41
// Experimental vertical filters
42
#define V_RK1_FILTER        0x0100                        // 256
43
#define V_X1_FILTER        0x0200                        // 512
44

    
45
// Experimental horizontal filters
46
#define H_RK1_FILTER        0x1000                        // 4096
47
#define H_X1_FILTER        0x2000                        // 8192
48

    
49
// select between full y range (255-0) or standart one (234-16)
50
#define FULL_Y_RANGE        0x8000                        // 32768
51

    
52
//Deinterlacing Filters
53
#define        LINEAR_IPOL_DEINT_FILTER        0x10000        // 65536
54
#define        LINEAR_BLEND_DEINT_FILTER        0x20000        // 131072
55
#define        CUBIC_BLEND_DEINT_FILTER        0x8000        // (not implemented yet)
56
#define        CUBIC_IPOL_DEINT_FILTER                0x40000        // 262144
57
#define        MEDIAN_DEINT_FILTER                0x80000        // 524288
58

    
59
#define TEMP_NOISE_FILTER                0x100000
60

    
61

    
62
#define GET_PP_QUALITY_MAX 6
63

    
64
//must be defined if stride%8 != 0
65
//#define PP_FUNNY_STRIDE
66

    
67
//#define TIMING
68
//#define MORE_TIMING
69

    
70
//use if u want a faster postprocessing code
71
//cant differentiate between chroma & luma filters (both on or both off)
72
//obviosly the -pp option at the commandline has no effect except turning the here selected
73
//filters on
74
//#define COMPILE_TIME_MODE 0x77
75

    
76
#define QP_STORE_T int
77

    
78
struct PPMode{
79
        int lumMode; //acivates filters for luminance
80
        int chromMode; //acivates filters for chrominance
81
        int oldMode; // will be passed to odivx
82
        int error; // non zero on error
83

    
84
        int minAllowedY; // for brigtness correction
85
        int maxAllowedY; // for brihtness correction
86

    
87
        int maxTmpNoise[3]; // for Temporal Noise Reducing filter (Maximal sum of abs differences)
88
        
89
        int maxDcDiff; // max abs diff between pixels to be considered flat
90
};
91

    
92
struct PPFilter{
93
        char *shortName;
94
        char *longName;
95
        int chromDefault;         // is chrominance filtering on by default if this filter is manually activated
96
        int minLumQuality;         // minimum quality to turn luminance filtering on
97
        int minChromQuality;        // minimum quality to turn chrominance filtering on
98
        int mask;                 // Bitmask to turn this filter on
99
};
100

    
101
/* Obsolete, dont use it, use postprocess2() instead */
102
void postprocess(unsigned char * src[], int src_stride,
103
                 unsigned char * dst[], int dst_stride,
104
                 int horizontal_size,   int vertical_size,
105
                 QP_STORE_T *QP_store,  int QP_stride, int mode);
106

    
107
void postprocess2(unsigned char * src[], int src_stride,
108
                 unsigned char * dst[], int dst_stride,
109
                 int horizontal_size,   int vertical_size,
110
                 QP_STORE_T *QP_store,  int QP_stride, struct PPMode *mode);
111

    
112

    
113
/* Obsolete, dont use it, use getPpModeByNameAndQuality() instead */
114
int getPpModeForQuality(int quality);
115

    
116
// name is the stuff after "-pp" on the command line
117
struct PPMode getPpModeByNameAndQuality(char *name, int quality);
118

    
119
int readPPOpt(void *conf, char *arg);
120

    
121
#endif