diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2008-05-09 09:02:41 +0000 |
---|---|---|
committer | Kostya Shishkov <kostya.shishkov@gmail.com> | 2008-05-09 09:02:41 +0000 |
commit | 058aae3ce7626334013dbc9aef9136ba42464814 (patch) | |
tree | c78f76bf29e265bb47bc0fd47112778d673d339e /libavcodec/zmbvenc.c | |
parent | b9a7da77ec42a8ee924044fdbeb69cb5b0f1b2ca (diff) | |
download | ffmpeg-058aae3ce7626334013dbc9aef9136ba42464814.tar.gz |
Improve motion estimation metric.
Patch by Michael Niedermayer
Originally committed as revision 13090 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/zmbvenc.c')
-rw-r--r-- | libavcodec/zmbvenc.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libavcodec/zmbvenc.c b/libavcodec/zmbvenc.c index 2feeb66605..fbefa7cafc 100644 --- a/libavcodec/zmbvenc.c +++ b/libavcodec/zmbvenc.c @@ -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; |