Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.5
@@ -15,6 +15,9 @@ libavutil: 2014-08-09 | |||||
API changes, most recent first: | API changes, most recent first: | ||||
2014-09-24 - xxxxxxx - libpostproc 53.1.100 | |||||
Add vissualization support | |||||
2014-09-xx - xxxxxxx - lavc 56.1.101 - dv_profile.h | 2014-09-xx - xxxxxxx - lavc 56.1.101 - dv_profile.h | ||||
deprecate avpriv_dv_frame_profile2(), which was made public by accident. | deprecate avpriv_dv_frame_profile2(), which was made public by accident. | ||||
@@ -151,6 +151,7 @@ static const struct PPFilter filters[]= | |||||
{"tn", "tmpnoise", 1, 7, 8, TEMP_NOISE_FILTER}, | {"tn", "tmpnoise", 1, 7, 8, TEMP_NOISE_FILTER}, | ||||
{"fq", "forcequant", 1, 0, 0, FORCE_QUANT}, | {"fq", "forcequant", 1, 0, 0, FORCE_QUANT}, | ||||
{"be", "bitexact", 1, 0, 0, BITEXACT}, | {"be", "bitexact", 1, 0, 0, BITEXACT}, | ||||
{"vi", "visualize", 1, 0, 0, VISUALIZE}, | |||||
{NULL, NULL,0,0,0,0} //End Marker | {NULL, NULL,0,0,0,0} //End Marker | ||||
}; | }; | ||||
@@ -430,7 +431,7 @@ static inline void horizX1Filter(uint8_t *src, int stride, int QP) | |||||
* accurate deblock filter | * accurate deblock filter | ||||
*/ | */ | ||||
static av_always_inline void do_a_deblock_C(uint8_t *src, int step, | static av_always_inline void do_a_deblock_C(uint8_t *src, int step, | ||||
int stride, const PPContext *c) | |||||
int stride, const PPContext *c, int mode) | |||||
{ | { | ||||
int y; | int y; | ||||
const int QP= c->QP; | const int QP= c->QP; | ||||
@@ -485,6 +486,16 @@ static av_always_inline void do_a_deblock_C(uint8_t *src, int step, | |||||
sums[8] = sums[7] - src[3*step] + last; | sums[8] = sums[7] - src[3*step] + last; | ||||
sums[9] = sums[8] - src[4*step] + last; | sums[9] = sums[8] - src[4*step] + last; | ||||
if (mode & VISUALIZE) { | |||||
src[0*step] = | |||||
src[1*step] = | |||||
src[2*step] = | |||||
src[3*step] = | |||||
src[4*step] = | |||||
src[5*step] = | |||||
src[6*step] = | |||||
src[7*step] = 128; | |||||
} | |||||
src[0*step]= (sums[0] + sums[2] + 2*src[0*step])>>4; | src[0*step]= (sums[0] + sums[2] + 2*src[0*step])>>4; | ||||
src[1*step]= (sums[1] + sums[3] + 2*src[1*step])>>4; | src[1*step]= (sums[1] + sums[3] + 2*src[1*step])>>4; | ||||
src[2*step]= (sums[2] + sums[4] + 2*src[2*step])>>4; | src[2*step]= (sums[2] + sums[4] + 2*src[2*step])>>4; | ||||
@@ -516,6 +527,13 @@ static av_always_inline void do_a_deblock_C(uint8_t *src, int step, | |||||
d = FFMAX(d, q); | d = FFMAX(d, q); | ||||
} | } | ||||
if ((mode & VISUALIZE) && d) { | |||||
d= (d < 0) ? 32 : -32; | |||||
src[3*step]= av_clip_uint8(src[3*step] - d); | |||||
src[4*step]= av_clip_uint8(src[4*step] + d); | |||||
d = 0; | |||||
} | |||||
src[3*step]-= d; | src[3*step]-= d; | ||||
src[4*step]+= d; | src[4*step]+= d; | ||||
} | } | ||||
@@ -69,6 +69,7 @@ | |||||
#define TEMP_NOISE_FILTER 0x100000 | #define TEMP_NOISE_FILTER 0x100000 | ||||
#define FORCE_QUANT 0x200000 | #define FORCE_QUANT 0x200000 | ||||
#define BITEXACT 0x1000000 | #define BITEXACT 0x1000000 | ||||
#define VISUALIZE 0x2000000 | |||||
//use if you want a faster postprocessing code | //use if you want a faster postprocessing code | ||||
//cannot differentiate between chroma & luma filters (both on or both off) | //cannot differentiate between chroma & luma filters (both on or both off) | ||||
@@ -2544,7 +2544,7 @@ Switch between | |||||
/** | /** | ||||
* accurate deblock filter | * accurate deblock filter | ||||
*/ | */ | ||||
static av_always_inline void RENAME(do_a_deblock)(uint8_t *src, int step, int stride, const PPContext *c){ | |||||
static av_always_inline void RENAME(do_a_deblock)(uint8_t *src, int step, int stride, const PPContext *c, int mode){ | |||||
int64_t dc_mask, eq_mask, both_masks; | int64_t dc_mask, eq_mask, both_masks; | ||||
int64_t sums[10*8*2]; | int64_t sums[10*8*2]; | ||||
src+= step*3; // src points to begin of the 8x8 Block | src+= step*3; // src points to begin of the 8x8 Block | ||||
@@ -3272,6 +3272,12 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ | |||||
uint8_t * const tempDst= (dstStride > 0 ? c.tempDst : c.tempDst - 23*dstStride) + 32; | uint8_t * const tempDst= (dstStride > 0 ? c.tempDst : c.tempDst - 23*dstStride) + 32; | ||||
//const int mbWidth= isColor ? (width+7)>>3 : (width+15)>>4; | //const int mbWidth= isColor ? (width+7)>>3 : (width+15)>>4; | ||||
if (mode & VISUALIZE){ | |||||
if(!(mode & (V_A_DEBLOCK | H_A_DEBLOCK)) || TEMPLATE_PP_MMX) { | |||||
av_log(c2, AV_LOG_WARNING, "Visualization is currently only supported with the accurate deblock filter without SIMD\n"); | |||||
} | |||||
} | |||||
#if TEMPLATE_PP_MMX | #if TEMPLATE_PP_MMX | ||||
for(i=0; i<57; i++){ | for(i=0; i<57; i++){ | ||||
int offset= ((i*c.ppMode.baseDcDiff)>>8) + 1; | int offset= ((i*c.ppMode.baseDcDiff)>>8) + 1; | ||||
@@ -3566,7 +3572,7 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ | |||||
else if(t==2) | else if(t==2) | ||||
RENAME(doVertDefFilter)(dstBlock, stride, &c); | RENAME(doVertDefFilter)(dstBlock, stride, &c); | ||||
}else if(mode & V_A_DEBLOCK){ | }else if(mode & V_A_DEBLOCK){ | ||||
RENAME(do_a_deblock)(dstBlock, stride, 1, &c); | |||||
RENAME(do_a_deblock)(dstBlock, stride, 1, &c, mode); | |||||
} | } | ||||
} | } | ||||
@@ -3587,7 +3593,7 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ | |||||
else if(t==2) | else if(t==2) | ||||
RENAME(doVertDefFilter)(tempBlock1, 16, &c); | RENAME(doVertDefFilter)(tempBlock1, 16, &c); | ||||
}else if(mode & H_A_DEBLOCK){ | }else if(mode & H_A_DEBLOCK){ | ||||
RENAME(do_a_deblock)(tempBlock1, 16, 1, &c); | |||||
RENAME(do_a_deblock)(tempBlock1, 16, 1, &c, mode); | |||||
} | } | ||||
RENAME(transpose2)(dstBlock-4, dstStride, tempBlock1 + 4*16); | RENAME(transpose2)(dstBlock-4, dstStride, tempBlock1 + 4*16); | ||||
@@ -3619,7 +3625,7 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ | |||||
RENAME(doHorizDefFilter)(dstBlock-4, stride, &c); | RENAME(doHorizDefFilter)(dstBlock-4, stride, &c); | ||||
#endif | #endif | ||||
}else if(mode & H_A_DEBLOCK){ | }else if(mode & H_A_DEBLOCK){ | ||||
RENAME(do_a_deblock)(dstBlock-8, 1, stride, &c); | |||||
RENAME(do_a_deblock)(dstBlock-8, 1, stride, &c, mode); | |||||
} | } | ||||
#endif //TEMPLATE_PP_MMX | #endif //TEMPLATE_PP_MMX | ||||
if(mode & DERING){ | if(mode & DERING){ | ||||
@@ -29,7 +29,7 @@ | |||||
#include "libavutil/avutil.h" | #include "libavutil/avutil.h" | ||||
#define LIBPOSTPROC_VERSION_MAJOR 53 | #define LIBPOSTPROC_VERSION_MAJOR 53 | ||||
#define LIBPOSTPROC_VERSION_MINOR 0 | |||||
#define LIBPOSTPROC_VERSION_MINOR 1 | |||||
#define LIBPOSTPROC_VERSION_MICRO 100 | #define LIBPOSTPROC_VERSION_MICRO 100 | ||||
#define LIBPOSTPROC_VERSION_INT AV_VERSION_INT(LIBPOSTPROC_VERSION_MAJOR, \ | #define LIBPOSTPROC_VERSION_INT AV_VERSION_INT(LIBPOSTPROC_VERSION_MAJOR, \ | ||||