postprocess_internal.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2001-2002 Michael Niedermayer (michaelni@gmx.at)
3  *
4  * This file is part of Libav.
5  *
6  * Libav is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Libav is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Libav; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
26 #ifndef POSTPROC_POSTPROCESS_INTERNAL_H
27 #define POSTPROC_POSTPROCESS_INTERNAL_H
28 
29 #include <string.h>
30 #include "libavutil/avutil.h"
31 #include "libavutil/log.h"
32 #include "postprocess.h"
33 
34 #define V_DEBLOCK 0x01
35 #define H_DEBLOCK 0x02
36 #define DERING 0x04
37 #define LEVEL_FIX 0x08
38 
39 #define LUM_V_DEBLOCK V_DEBLOCK // 1
40 #define LUM_H_DEBLOCK H_DEBLOCK // 2
41 #define CHROM_V_DEBLOCK (V_DEBLOCK<<4) // 16
42 #define CHROM_H_DEBLOCK (H_DEBLOCK<<4) // 32
43 #define LUM_DERING DERING // 4
44 #define CHROM_DERING (DERING<<4) // 64
45 #define LUM_LEVEL_FIX LEVEL_FIX // 8
46 #define CHROM_LEVEL_FIX (LEVEL_FIX<<4) // 128 (not implemented yet)
47 
48 // Experimental vertical filters
49 #define V_X1_FILTER 0x0200 // 512
50 #define V_A_DEBLOCK 0x0400
51 
52 // Experimental horizontal filters
53 #define H_X1_FILTER 0x2000 // 8192
54 #define H_A_DEBLOCK 0x4000
55 
57 #define FULL_Y_RANGE 0x8000 // 32768
58 
59 //Deinterlacing Filters
60 #define LINEAR_IPOL_DEINT_FILTER 0x10000 // 65536
61 #define LINEAR_BLEND_DEINT_FILTER 0x20000 // 131072
62 #define CUBIC_BLEND_DEINT_FILTER 0x8000 // (not implemented yet)
63 #define CUBIC_IPOL_DEINT_FILTER 0x40000 // 262144
64 #define MEDIAN_DEINT_FILTER 0x80000 // 524288
65 #define FFMPEG_DEINT_FILTER 0x400000
66 #define LOWPASS5_DEINT_FILTER 0x800000
67 
68 #define TEMP_NOISE_FILTER 0x100000
69 #define FORCE_QUANT 0x200000
70 
71 //use if you want a faster postprocessing code
72 //cannot differentiate between chroma & luma filters (both on or both off)
73 //obviously the -pp option on the command line has no effect except turning the here selected
74 //filters on
75 //#define COMPILE_TIME_MODE 0x77
76 
77 static inline int CLIP(int a){
78  if(a&256) return ((a)>>31)^(-1);
79  else return a;
80 }
84 struct PPFilter{
85  const char *shortName;
86  const char *longName;
90  int mask;
91 };
92 
96 typedef struct PPMode{
97  int lumMode;
98  int chromMode;
99  int error;
100 
104 
105  int maxTmpNoise[3];
106 
109 
111 } PPMode;
112 
116 typedef struct PPContext{
121 
122  uint8_t *tempBlocks;
123 
129  uint64_t *yHistogram;
130 
133 
135  uint8_t *tempBlurred[3];
136  int32_t *tempBlurredPast[3];
137 
139  uint8_t *tempDst;
140  uint8_t *tempSrc;
141 
142  uint8_t *deintTemp;
143 
144  DECLARE_ALIGNED(8, uint64_t, pQPb);
145  DECLARE_ALIGNED(8, uint64_t, pQPb2);
146 
147  DECLARE_ALIGNED(8, uint64_t, mmxDcOffset)[64];
148  DECLARE_ALIGNED(8, uint64_t, mmxDcThreshold)[64];
149 
153 
154  int QP;
155  int nonBQP;
156 
157  int frameNum;
158 
159  int cpuCaps;
160 
161  int qpStride;
162  int stride;
163 
166 
168 } PPContext;
169 
170 
171 static inline void linecpy(void *dest, const void *src, int lines, int stride) {
172  if (stride > 0) {
173  memcpy(dest, src, lines*stride);
174  } else {
175  memcpy((uint8_t*)dest+(lines-1)*stride, (const uint8_t*)src+(lines-1)*stride, -lines*stride);
176  }
177 }
178 
179 #endif /* POSTPROC_POSTPROCESS_INTERNAL_H */
int maxTmpNoise[3]
for Temporal Noise Reducing filter (Maximal sum of abs differences)
const AVClass * av_class
info on struct for av_log
int chromMode
acivates filters for chrominance
uint8_t * tempDst
Temporary buffers for handling the last row(s)
#define DECLARE_ALIGNED(n, t, v)
Definition: mem.h:55
external API header
int stride
Definition: mace.c:143
struct PPMode PPMode
Postprocessng mode.
QP_STORE_T * stdQPTable
used to fix MPEG2 style qscale
int minAllowedY
for brigtness correction
int qpStride
size of qp buffers (needed to realloc them if needed)
uint64_t * yHistogram
luma histogram.
QP_STORE_T * nonBQPTable
uint64_t mmxDcThreshold[64]
int minLumQuality
minimum quality to turn luminance filtering on
int error
non zero on error
static void linecpy(void *dest, const void *src, int lines, int stride)
#define QP_STORE_T
Definition: postprocess.h:63
uint8_t * tempBlurred[3]
Temporal noise reducing buffers.
int forcedQuant
quantizer if FORCE_QUANT is used
int maxAllowedY
for brihtness correction
float maxClippedThreshold
amount of "black" you are willing to lose to get a brightness-corrected picture
int minChromQuality
minimum quality to turn chrominance filtering on
int lumMode
acivates filters for luminance
external postprocessing API
Postprocessng mode.
uint8_t * tempBlocks
used for the horizontal code
Describe the class of an AVClass context structure.
Definition: log.h:33
const char * shortName
uint64_t mmxDcOffset[64]
int chromDefault
is chrominance filtering on by default if this filter is manually activated
QP_STORE_T * forcedQPTable
uint64_t packedYOffset
int32_t * tempBlurredPast[3]
static int CLIP(int a)
uint8_t * deintTemp
const char * longName
uint64_t packedYScale
int mask
Bitmask to turn this filter on.
Postprocessng filter.
struct PPContext PPContext
postprocess context.
postprocess context.
int stride
size of some buffers (needed to realloc them if needed)