Improve motion estimation metric.

Patch by Michael Niedermayer

Originally committed as revision 13090 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Michael Niedermayer 2008-05-09 09:02:41 +00:00 committed by Kostya Shishkov
parent b9a7da77ec
commit 058aae3ce7

View File

@ -54,6 +54,8 @@ typedef struct ZmbvEncContext {
z_stream zstream;
} ZmbvEncContext;
static int score_tab[256];
/** Block comparing function
* XXX should be optimized and moved to DSPContext
* TODO handle out of edge ME
@ -62,13 +64,18 @@ static inline int block_cmp(uint8_t *src, int stride, uint8_t *src2, int stride2
{
int sum = 0;
int i, j;
uint8_t histogram[256]={0};
for(j = 0; j < bh; j++){
for(i = 0; i < bw; i++)
sum += src[i] ^ src2[i];
histogram[src[i] ^ src2[i]]++;
src += stride;
src2 += stride2;
}
for(i=1; i<256; i++)
sum+= score_tab[histogram[i]];
return sum;
}
@ -235,8 +242,12 @@ static av_cold int encode_init(AVCodecContext *avctx)
{
ZmbvEncContext * const c = avctx->priv_data;
int zret; // Zlib return code
int i;
int lvl = 9;
for(i=1; i<256; i++)
score_tab[i]= -i * log2(i/256.0) * 256;
c->avctx = avctx;
c->pic.data[0] = NULL;