51
55
#define FULL_Y_RANGE 0x8000 // 32768
53
57
//Deinterlacing Filters
54
#define LINEAR_IPOL_DEINT_FILTER 0x10000 // 65536
55
#define LINEAR_BLEND_DEINT_FILTER 0x20000 // 131072
56
#define CUBIC_BLEND_DEINT_FILTER 0x8000 // (not implemented yet)
57
#define CUBIC_IPOL_DEINT_FILTER 0x40000 // 262144
58
#define MEDIAN_DEINT_FILTER 0x80000 // 524288
59
#define FFMPEG_DEINT_FILTER 0x400000
60
#define LOWPASS5_DEINT_FILTER 0x800000
58
#define LINEAR_IPOL_DEINT_FILTER 0x10000 // 65536
59
#define LINEAR_BLEND_DEINT_FILTER 0x20000 // 131072
60
#define CUBIC_BLEND_DEINT_FILTER 0x8000 // (not implemented yet)
61
#define CUBIC_IPOL_DEINT_FILTER 0x40000 // 262144
62
#define MEDIAN_DEINT_FILTER 0x80000 // 524288
63
#define FFMPEG_DEINT_FILTER 0x400000
64
#define LOWPASS5_DEINT_FILTER 0x800000
62
66
#define TEMP_NOISE_FILTER 0x100000
63
67
#define FORCE_QUANT 0x200000
65
#if ( defined(__PIC__) || defined(__pic__) ) && ! defined(PIC)
69
//use if u want a faster postprocessing code
70
//cant differentiate between chroma & luma filters (both on or both off)
71
//obviosly the -pp option at the commandline has no effect except turning the here selected
69
//use if you want a faster postprocessing code
70
//cannot differentiate between chroma & luma filters (both on or both off)
71
//obviously the -pp option on the command line has no effect except turning the here selected
73
73
//#define COMPILE_TIME_MODE 0x77
76
75
static inline int CLIP(int a){
77
if(a&256) return ((a)>>31)^(-1);
76
if(a&256) return ((a)>>31)^(-1);
80
//#define CLIP(a) (((a)&256) ? ((a)>>31)^(-1) : (a))
82
#define CLIP(a) clip_tab[a]
87
80
* Postprocessng filter.
90
const char *shortName;
92
int chromDefault; ///< is chrominance filtering on by default if this filter is manually activated
93
int minLumQuality; ///< minimum quality to turn luminance filtering on
94
int minChromQuality; ///< minimum quality to turn chrominance filtering on
95
int mask; ///< Bitmask to turn this filter on
83
const char *shortName;
85
int chromDefault; ///< is chrominance filtering on by default if this filter is manually activated
86
int minLumQuality; ///< minimum quality to turn luminance filtering on
87
int minChromQuality; ///< minimum quality to turn chrominance filtering on
88
int mask; ///< Bitmask to turn this filter on
99
92
* Postprocessng mode.
101
94
typedef struct PPMode{
102
int lumMode; ///< acivates filters for luminance
103
int chromMode; ///< acivates filters for chrominance
104
int error; ///< non zero on error
106
int minAllowedY; ///< for brigtness correction
107
int maxAllowedY; ///< for brihtness correction
108
float maxClippedThreshold; ///< amount of "black" u r willing to loose to get a brightness corrected picture
110
int maxTmpNoise[3]; ///< for Temporal Noise Reducing filter (Maximal sum of abs differences)
113
int flatnessThreshold;
115
int forcedQuant; ///< quantizer if FORCE_QUANT is used
95
int lumMode; ///< acivates filters for luminance
96
int chromMode; ///< acivates filters for chrominance
97
int error; ///< non zero on error
99
int minAllowedY; ///< for brigtness correction
100
int maxAllowedY; ///< for brihtness correction
101
float maxClippedThreshold; ///< amount of "black" u r willing to loose to get a brightness corrected picture
103
int maxTmpNoise[3]; ///< for Temporal Noise Reducing filter (Maximal sum of abs differences)
106
int flatnessThreshold;
108
int forcedQuant; ///< quantizer if FORCE_QUANT is used
119
112
* postprocess context.
121
114
typedef struct PPContext{
123
* info on struct for av_log
127
uint8_t *tempBlocks; ///<used for the horizontal code
131
* we need 64bit here otherwise we'll going to have a problem
132
* after watching a black picture for 5 hours
134
uint64_t *yHistogram;
136
DECLARE_ALIGNED(8, uint64_t, packedYOffset);
137
DECLARE_ALIGNED(8, uint64_t, packedYScale);
139
/** Temporal noise reducing buffers */
140
uint8_t *tempBlured[3];
141
int32_t *tempBluredPast[3];
143
/** Temporary buffers for handling the last row(s) */
149
DECLARE_ALIGNED(8, uint64_t, pQPb);
150
DECLARE_ALIGNED(8, uint64_t, pQPb2);
152
DECLARE_ALIGNED(8, uint64_t, mmxDcOffset[64]);
153
DECLARE_ALIGNED(8, uint64_t, mmxDcThreshold[64]);
155
QP_STORE_T *stdQPTable; ///< used to fix MPEG2 style qscale
156
QP_STORE_T *nonBQPTable;
157
QP_STORE_T *forcedQPTable;
166
int qpStride; ///<size of qp buffers (needed to realloc them if needed)
167
int stride; ///<size of some buffers (needed to realloc them if needed)
169
int hChromaSubSample;
170
int vChromaSubSample;
116
* info on struct for av_log
118
const AVClass *av_class;
120
uint8_t *tempBlocks; ///<used for the horizontal code
124
* we need 64bit here otherwise we'll going to have a problem
125
* after watching a black picture for 5 hours
127
uint64_t *yHistogram;
129
DECLARE_ALIGNED(8, uint64_t, packedYOffset);
130
DECLARE_ALIGNED(8, uint64_t, packedYScale);
132
/** Temporal noise reducing buffers */
133
uint8_t *tempBlurred[3];
134
int32_t *tempBlurredPast[3];
136
/** Temporary buffers for handling the last row(s) */
142
DECLARE_ALIGNED(8, uint64_t, pQPb);
143
DECLARE_ALIGNED(8, uint64_t, pQPb2);
145
DECLARE_ALIGNED(8, uint64_t, mmxDcOffset[64]);
146
DECLARE_ALIGNED(8, uint64_t, mmxDcThreshold[64]);
148
QP_STORE_T *stdQPTable; ///< used to fix MPEG2 style qscale
149
QP_STORE_T *nonBQPTable;
150
QP_STORE_T *forcedQPTable;
159
int qpStride; ///<size of qp buffers (needed to realloc them if needed)
160
int stride; ///<size of some buffers (needed to realloc them if needed)
162
int hChromaSubSample;
163
int vChromaSubSample;
176
static inline void linecpy(void *dest, void *src, int lines, int stride)
179
memcpy(dest, src, lines*stride);
181
memcpy(dest+(lines-1)*stride, src+(lines-1)*stride, -lines*stride);
169
static inline void linecpy(void *dest, const void *src, int lines, int stride) {
171
memcpy(dest, src, lines*stride);
173
memcpy((uint8_t*)dest+(lines-1)*stride, (const uint8_t*)src+(lines-1)*stride, -lines*stride);
177
#endif /* FFMPEG_POSTPROCESS_INTERNAL_H */