Browse Source

Improve motion estimation metric.

Patch by Michael Niedermayer

Originally committed as revision 13090 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Michael Niedermayer Kostya Shishkov 18 years ago
parent
commit
058aae3ce7
1 changed files with 12 additions and 1 deletions
  1. +12
    -1
      libavcodec/zmbvenc.c

+ 12
- 1
libavcodec/zmbvenc.c 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;


Loading…
Cancel
Save