Commit 83029e47 authored by kostya's avatar kostya

Improve motion estimation metric.

Patch by Michael Niedermayer



git-svn-id: file:///var/local/repositories/ffmpeg/trunk@13090 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 21015116
...@@ -54,6 +54,8 @@ typedef struct ZmbvEncContext { ...@@ -54,6 +54,8 @@ typedef struct ZmbvEncContext {
z_stream zstream; z_stream zstream;
} ZmbvEncContext; } ZmbvEncContext;
static int score_tab[256];
/** Block comparing function /** Block comparing function
* XXX should be optimized and moved to DSPContext * XXX should be optimized and moved to DSPContext
* TODO handle out of edge ME * 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 ...@@ -62,13 +64,18 @@ static inline int block_cmp(uint8_t *src, int stride, uint8_t *src2, int stride2
{ {
int sum = 0; int sum = 0;
int i, j; int i, j;
uint8_t histogram[256]={0};
for(j = 0; j < bh; j++){ for(j = 0; j < bh; j++){
for(i = 0; i < bw; i++) for(i = 0; i < bw; i++)
sum += src[i] ^ src2[i]; histogram[src[i] ^ src2[i]]++;
src += stride; src += stride;
src2 += stride2; src2 += stride2;
} }
for(i=1; i<256; i++)
sum+= score_tab[histogram[i]];
return sum; return sum;
} }
...@@ -235,8 +242,12 @@ static av_cold int encode_init(AVCodecContext *avctx) ...@@ -235,8 +242,12 @@ static av_cold int encode_init(AVCodecContext *avctx)
{ {
ZmbvEncContext * const c = avctx->priv_data; ZmbvEncContext * const c = avctx->priv_data;
int zret; // Zlib return code int zret; // Zlib return code
int i;
int lvl = 9; int lvl = 9;
for(i=1; i<256; i++)
score_tab[i]= -i * log2(i/256.0) * 256;
c->avctx = avctx; c->avctx = avctx;
c->pic.data[0] = NULL; c->pic.data[0] = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment