Originally committed as revision 11816 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
@@ -643,8 +643,8 @@ static av_always_inline void do_a_deblock_C(uint8_t *src, int step, int stride, | |||||
// minor note: the HAVE_xyz is messed up after that line so do not use it. | // minor note: the HAVE_xyz is messed up after that line so do not use it. | ||||
static inline void postProcess(uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height, | |||||
QP_STORE_T QPs[], int QPStride, int isColor, pp_mode_t *vm, pp_context_t *vc) | |||||
static inline void postProcess(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height, | |||||
const QP_STORE_T QPs[], int QPStride, int isColor, pp_mode_t *vm, pp_context_t *vc) | |||||
{ | { | ||||
PPContext *c= (PPContext *)vc; | PPContext *c= (PPContext *)vc; | ||||
PPMode *ppMode= (PPMode *)vm; | PPMode *ppMode= (PPMode *)vm; | ||||
@@ -1021,10 +1021,10 @@ void pp_free_context(void *vc){ | |||||
av_free(c); | av_free(c); | ||||
} | } | ||||
void pp_postprocess(uint8_t * src[3], int srcStride[3], | |||||
uint8_t * dst[3], int dstStride[3], | |||||
void pp_postprocess(const uint8_t * src[3], const int srcStride[3], | |||||
uint8_t * dst[3], const int dstStride[3], | |||||
int width, int height, | int width, int height, | ||||
QP_STORE_T *QP_store, int QPStride, | |||||
const QP_STORE_T *QP_store, int QPStride, | |||||
pp_mode_t *vm, void *vc, int pict_type) | pp_mode_t *vm, void *vc, int pict_type) | ||||
{ | { | ||||
int mbWidth = (width+15)>>4; | int mbWidth = (width+15)>>4; | ||||
@@ -1046,16 +1046,16 @@ void pp_postprocess(uint8_t * src[3], int srcStride[3], | |||||
QP_store= c->forcedQPTable; | QP_store= c->forcedQPTable; | ||||
absQPStride = QPStride = 0; | absQPStride = QPStride = 0; | ||||
if(mode->lumMode & FORCE_QUANT) | if(mode->lumMode & FORCE_QUANT) | ||||
for(i=0; i<mbWidth; i++) QP_store[i]= mode->forcedQuant; | |||||
for(i=0; i<mbWidth; i++) c->forcedQPTable[i]= mode->forcedQuant; | |||||
else | else | ||||
for(i=0; i<mbWidth; i++) QP_store[i]= 1; | |||||
for(i=0; i<mbWidth; i++) c->forcedQPTable[i]= 1; | |||||
} | } | ||||
if(pict_type & PP_PICT_TYPE_QP2){ | if(pict_type & PP_PICT_TYPE_QP2){ | ||||
int i; | int i; | ||||
const int count= mbHeight * absQPStride; | const int count= mbHeight * absQPStride; | ||||
for(i=0; i<(count>>2); i++){ | for(i=0; i<(count>>2); i++){ | ||||
((uint32_t*)c->stdQPTable)[i] = (((uint32_t*)QP_store)[i]>>1) & 0x7F7F7F7F; | |||||
((uint32_t*)c->stdQPTable)[i] = (((const uint32_t*)QP_store)[i]>>1) & 0x7F7F7F7F; | |||||
} | } | ||||
for(i<<=2; i<count; i++){ | for(i<<=2; i<count; i++){ | ||||
c->stdQPTable[i] = QP_store[i]>>1; | c->stdQPTable[i] = QP_store[i]>>1; | ||||
@@ -1081,7 +1081,7 @@ for(y=0; y<mbHeight; y++){ | |||||
int i; | int i; | ||||
const int count= mbHeight * QPStride; | const int count= mbHeight * QPStride; | ||||
for(i=0; i<(count>>2); i++){ | for(i=0; i<(count>>2); i++){ | ||||
((uint32_t*)c->nonBQPTable)[i] = ((uint32_t*)QP_store)[i] & 0x3F3F3F3F; | |||||
((uint32_t*)c->nonBQPTable)[i] = ((const uint32_t*)QP_store)[i] & 0x3F3F3F3F; | |||||
} | } | ||||
for(i<<=2; i<count; i++){ | for(i<<=2; i<count; i++){ | ||||
c->nonBQPTable[i] = QP_store[i] & 0x3F; | c->nonBQPTable[i] = QP_store[i] & 0x3F; | ||||
@@ -48,10 +48,10 @@ extern const char *const pp_help; ///< a simple help text | |||||
extern const char pp_help[]; ///< a simple help text | extern const char pp_help[]; ///< a simple help text | ||||
#endif | #endif | ||||
void pp_postprocess(uint8_t * src[3], int srcStride[3], | |||||
uint8_t * dst[3], int dstStride[3], | |||||
void pp_postprocess(const uint8_t * src[3], const int srcStride[3], | |||||
uint8_t * dst[3], const int dstStride[3], | |||||
int horizontalSize, int verticalSize, | int horizontalSize, int verticalSize, | ||||
QP_STORE_T *QP_store, int QP_stride, | |||||
const QP_STORE_T *QP_store, int QP_stride, | |||||
pp_mode_t *mode, pp_context_t *ppContext, int pict_type); | pp_mode_t *mode, pp_context_t *ppContext, int pict_type); | ||||
@@ -3180,8 +3180,8 @@ asm volatile( | |||||
} | } | ||||
#endif //HAVE_MMX | #endif //HAVE_MMX | ||||
static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height, | |||||
QP_STORE_T QPs[], int QPStride, int isColor, PPContext *c); | |||||
static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height, | |||||
const QP_STORE_T QPs[], int QPStride, int isColor, PPContext *c); | |||||
/** | /** | ||||
* Copies a block from src to dst and fixes the blacklevel. | * Copies a block from src to dst and fixes the blacklevel. | ||||
@@ -3189,7 +3189,7 @@ static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int | |||||
*/ | */ | ||||
#undef SCALED_CPY | #undef SCALED_CPY | ||||
static inline void RENAME(blockCopy)(uint8_t dst[], int dstStride, uint8_t src[], int srcStride, | |||||
static inline void RENAME(blockCopy)(uint8_t dst[], int dstStride, const uint8_t src[], int srcStride, | |||||
int levelFix, int64_t *packedOffsetAndScale) | int levelFix, int64_t *packedOffsetAndScale) | ||||
{ | { | ||||
#ifndef HAVE_MMX | #ifndef HAVE_MMX | ||||
@@ -3346,8 +3346,8 @@ static inline void RENAME(duplicate)(uint8_t src[], int stride) | |||||
/** | /** | ||||
* Filters array of bytes (Y or U or V values) | * Filters array of bytes (Y or U or V values) | ||||
*/ | */ | ||||
static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height, | |||||
QP_STORE_T QPs[], int QPStride, int isColor, PPContext *c2) | |||||
static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height, | |||||
const QP_STORE_T QPs[], int QPStride, int isColor, PPContext *c2) | |||||
{ | { | ||||
DECLARE_ALIGNED(8, PPContext, c)= *c2; //copy to stack for faster access | DECLARE_ALIGNED(8, PPContext, c)= *c2; //copy to stack for faster access | ||||
int x,y; | int x,y; | ||||
@@ -3462,7 +3462,7 @@ static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int | |||||
/* copy & deinterlace first row of blocks */ | /* copy & deinterlace first row of blocks */ | ||||
y=-BLOCK_SIZE; | y=-BLOCK_SIZE; | ||||
{ | { | ||||
uint8_t *srcBlock= &(src[y*srcStride]); | |||||
const uint8_t *srcBlock= &(src[y*srcStride]); | |||||
uint8_t *dstBlock= tempDst + dstStride; | uint8_t *dstBlock= tempDst + dstStride; | ||||
// From this point on it is guaranteed that we can read and write 16 lines downward | // From this point on it is guaranteed that we can read and write 16 lines downward | ||||
@@ -3545,13 +3545,13 @@ static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int | |||||
for(y=0; y<height; y+=BLOCK_SIZE) | for(y=0; y<height; y+=BLOCK_SIZE) | ||||
{ | { | ||||
//1% speedup if these are here instead of the inner loop | //1% speedup if these are here instead of the inner loop | ||||
uint8_t *srcBlock= &(src[y*srcStride]); | |||||
const uint8_t *srcBlock= &(src[y*srcStride]); | |||||
uint8_t *dstBlock= &(dst[y*dstStride]); | uint8_t *dstBlock= &(dst[y*dstStride]); | ||||
#ifdef HAVE_MMX | #ifdef HAVE_MMX | ||||
uint8_t *tempBlock1= c.tempBlocks; | uint8_t *tempBlock1= c.tempBlocks; | ||||
uint8_t *tempBlock2= c.tempBlocks + 8; | uint8_t *tempBlock2= c.tempBlocks + 8; | ||||
#endif | #endif | ||||
int8_t *QPptr= &QPs[(y>>qpVShift)*QPStride]; | |||||
const int8_t *QPptr= &QPs[(y>>qpVShift)*QPStride]; | |||||
int8_t *nonBQPptr= &c.nonBQPTable[(y>>qpVShift)*FFABS(QPStride)]; | int8_t *nonBQPptr= &c.nonBQPTable[(y>>qpVShift)*FFABS(QPStride)]; | ||||
int QP=0; | int QP=0; | ||||
/* can we mess with a 8x16 block from srcBlock/dstBlock downwards and 1 line upwards | /* can we mess with a 8x16 block from srcBlock/dstBlock downwards and 1 line upwards | ||||