Originally committed as revision 1637 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -16,6 +16,11 @@ | |||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
| */ | |||
| /** | |||
| * @file postprocess.c | |||
| * postprocessing. | |||
| */ | |||
| /* | |||
| C MMX MMX2 3DNow | |||
| isVertDC Ec Ec | |||
| @@ -36,7 +36,7 @@ extern "C" { | |||
| typedef void pp_context_t; | |||
| typedef void pp_mode_t; | |||
| extern char *pp_help; //a simple help text | |||
| extern char *pp_help; ///< a simple help text | |||
| void pp_postprocess(uint8_t * src[3], int srcStride[3], | |||
| uint8_t * dst[3], int dstStride[3], | |||
| @@ -16,10 +16,15 @@ | |||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
| */ | |||
| /** | |||
| * @file postprocess_internal.h | |||
| * internal api header. | |||
| */ | |||
| #define V_DEBLOCK 0x01 | |||
| #define H_DEBLOCK 0x02 | |||
| #define DERING 0x04 | |||
| #define LEVEL_FIX 0x08 /* Brightness & Contrast */ | |||
| #define LEVEL_FIX 0x08 ///< Brightness & Contrast | |||
| #define LUM_V_DEBLOCK V_DEBLOCK // 1 | |||
| #define LUM_H_DEBLOCK H_DEBLOCK // 2 | |||
| @@ -36,7 +41,7 @@ | |||
| // Experimental horizontal filters | |||
| #define H_X1_FILTER 0x2000 // 8192 | |||
| // select between full y range (255-0) or standart one (234-16) | |||
| /// select between full y range (255-0) or standart one (234-16) | |||
| #define FULL_Y_RANGE 0x8000 // 32768 | |||
| //Deinterlacing Filters | |||
| @@ -56,47 +61,59 @@ | |||
| //filters on | |||
| //#define COMPILE_TIME_MODE 0x77 | |||
| /** | |||
| * Postprocessng filter. | |||
| */ | |||
| struct PPFilter{ | |||
| char *shortName; | |||
| char *longName; | |||
| int chromDefault; // is chrominance filtering on by default if this filter is manually activated | |||
| int minLumQuality; // minimum quality to turn luminance filtering on | |||
| int minChromQuality; // minimum quality to turn chrominance filtering on | |||
| int mask; // Bitmask to turn this filter on | |||
| int chromDefault; ///< is chrominance filtering on by default if this filter is manually activated | |||
| int minLumQuality; ///< minimum quality to turn luminance filtering on | |||
| int minChromQuality; ///< minimum quality to turn chrominance filtering on | |||
| int mask; ///< Bitmask to turn this filter on | |||
| }; | |||
| /** | |||
| * Postprocessng mode. | |||
| */ | |||
| typedef struct PPMode{ | |||
| int lumMode; // acivates filters for luminance | |||
| int chromMode; // acivates filters for chrominance | |||
| int error; // non zero on error | |||
| int lumMode; ///< acivates filters for luminance | |||
| int chromMode; ///< acivates filters for chrominance | |||
| int error; ///< non zero on error | |||
| int minAllowedY; // for brigtness correction | |||
| int maxAllowedY; // for brihtness correction | |||
| float maxClippedThreshold; // amount of "black" u r willing to loose to get a brightness corrected picture | |||
| int minAllowedY; ///< for brigtness correction | |||
| int maxAllowedY; ///< for brihtness correction | |||
| float maxClippedThreshold; ///< amount of "black" u r willing to loose to get a brightness corrected picture | |||
| int maxTmpNoise[3]; // for Temporal Noise Reducing filter (Maximal sum of abs differences) | |||
| int maxTmpNoise[3]; ///< for Temporal Noise Reducing filter (Maximal sum of abs differences) | |||
| int baseDcDiff; | |||
| int flatnessThreshold; | |||
| int forcedQuant; // quantizer if FORCE_QUANT is used | |||
| int forcedQuant; ///< quantizer if FORCE_QUANT is used | |||
| } PPMode; | |||
| /** | |||
| * postprocess context. | |||
| */ | |||
| typedef struct PPContext{ | |||
| uint8_t *tempBlocks; //used for the horizontal code | |||
| uint8_t *tempBlocks; ///<used for the horizontal code | |||
| /* we need 64bit here otherwise we´ll going to have a problem | |||
| after watching a black picture for 5 hours*/ | |||
| /** | |||
| * luma histogram. | |||
| * we need 64bit here otherwise we'll going to have a problem | |||
| * after watching a black picture for 5 hours | |||
| */ | |||
| uint64_t *yHistogram; | |||
| uint64_t __attribute__((aligned(8))) packedYOffset; | |||
| uint64_t __attribute__((aligned(8))) packedYScale; | |||
| /* Temporal noise reducing buffers */ | |||
| /** Temporal noise reducing buffers */ | |||
| uint8_t *tempBlured[3]; | |||
| int32_t *tempBluredPast[3]; | |||
| /* Temporary buffers for handling the last row(s) */ | |||
| /** Temporary buffers for handling the last row(s) */ | |||
| uint8_t *tempDst; | |||
| uint8_t *tempSrc; | |||
| @@ -118,7 +135,7 @@ typedef struct PPContext{ | |||
| int cpuCaps; | |||
| int stride; //size of some buffers (needed to realloc them if needed) | |||
| int stride; ///<size of some buffers (needed to realloc them if needed) | |||
| int hChromaSubSample; | |||
| int vChromaSubSample; | |||
| @@ -16,6 +16,12 @@ | |||
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
| */ | |||
| /** | |||
| * @file postprocess_template.c | |||
| * mmx/mmx2/3dnow postprocess code. | |||
| */ | |||
| #undef PAVGB | |||
| #undef PMINUB | |||
| #undef PMAXUB | |||
| @@ -1523,7 +1529,7 @@ DERING_CORE((%0, %1, 8),(%%edx, %1, 4) ,%%mm2,%%mm4,%%mm0,%%mm3,%%mm5,%%mm1,%%mm | |||
| } | |||
| /** | |||
| * Deinterlaces the given block | |||
| * Deinterlaces the given block by linearly interpolating every second line. | |||
| * will be called for every 8x8 block and can read & write from line 4-15 | |||
| * lines 0-3 have been passed through the deblock / dering filters allready, but can be read too | |||
| * lines 4-12 will be read into the deblocking filter and should be deinterlaced | |||
| @@ -1570,7 +1576,7 @@ static inline void RENAME(deInterlaceInterpolateLinear)(uint8_t src[], int strid | |||
| } | |||
| /** | |||
| * Deinterlaces the given block | |||
| * Deinterlaces the given block by cubic interpolating every second line. | |||
| * will be called for every 8x8 block and can read & write from line 4-15 | |||
| * lines 0-3 have been passed through the deblock / dering filters allready, but can be read too | |||
| * lines 4-12 will be read into the deblocking filter and should be deinterlaced | |||
| @@ -1635,7 +1641,7 @@ DEINT_CUBIC((%%edx, %1), (%0, %1, 8), (%%edx, %1, 4), (%%ecx), (%%ecx, %1, 2)) | |||
| } | |||
| /** | |||
| * Deinterlaces the given block | |||
| * Deinterlaces the given block by filtering every second line with a (-1 4 2 4 -1) filter. | |||
| * will be called for every 8x8 block and can read & write from line 4-15 | |||
| * lines 0-3 have been passed through the deblock / dering filters allready, but can be read too | |||
| * lines 4-12 will be read into the deblocking filter and should be deinterlaced | |||
| @@ -1714,7 +1720,7 @@ DEINT_FF((%%edx, %1), (%%edx, %1, 2), (%0, %1, 8), (%%edx, %1, 4)) | |||
| } | |||
| /** | |||
| * Deinterlaces the given block | |||
| * Deinterlaces the given block by filtering all lines with a (1 2 1) filter. | |||
| * will be called for every 8x8 block and can read & write from line 4-15 | |||
| * lines 0-3 have been passed through the deblock / dering filters allready, but can be read too | |||
| * lines 4-12 will be read into the deblocking filter and should be deinterlaced | |||
| @@ -1789,7 +1795,7 @@ static inline void RENAME(deInterlaceBlendLinear)(uint8_t src[], int stride) | |||
| } | |||
| /** | |||
| * Deinterlaces the given block | |||
| * Deinterlaces the given block by applying a median filter to every second line. | |||
| * will be called for every 8x8 block and can read & write from line 4-15, | |||
| * lines 0-3 have been passed through the deblock / dering filters allready, but can be read too | |||
| * lines 4-12 will be read into the deblocking filter and should be deinterlaced | |||