Mercurial > libavcodec.hg
changeset 2066:4bfb146e701b libavcodec
nsse weight
author | michael |
---|---|
date | Mon, 07 Jun 2004 17:30:02 +0000 |
parents | 9e4bebc39ade |
children | f37b6ffc81ed |
files | avcodec.h dsputil.c motion_est.c mpegvideo.c |
diffstat | 4 files changed, 21 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/avcodec.h Mon Jun 07 03:23:31 2004 +0000 +++ b/avcodec.h Mon Jun 07 17:30:02 2004 +0000 @@ -17,7 +17,7 @@ #define FFMPEG_VERSION_INT 0x000408 #define FFMPEG_VERSION "0.4.8" -#define LIBAVCODEC_BUILD 4715 +#define LIBAVCODEC_BUILD 4716 #define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT #define LIBAVCODEC_VERSION FFMPEG_VERSION @@ -1591,11 +1591,18 @@ int mb_threshold; /** - * + * precision of the intra dc coefficient - 8. * - encoding: set by user * - decoding: unused */ int intra_dc_precision; + + /** + * noise vs. sse weight for the nsse comparsion function. + * - encoding: set by user + * - decoding: unused + */ + int nsse_weight; } AVCodecContext;
--- a/dsputil.c Mon Jun 07 03:23:31 2004 +0000 +++ b/dsputil.c Mon Jun 07 17:30:02 2004 +0000 @@ -2587,11 +2587,11 @@ return s; } -static int nsse16_c(/*MpegEncContext*/ void *c, uint8_t *s1, uint8_t *s2, int stride, int h){ +static int nsse16_c(MpegEncContext *c, uint8_t *s1, uint8_t *s2, int stride, int h){ int score1=0; int score2=0; int x,y; - + for(y=0; y<h; y++){ for(x=0; x<16; x++){ score1+= (s1[x ] - s2[x ])*(s1[x ] - s2[x ]); @@ -2607,11 +2607,12 @@ s1+= stride; s2+= stride; } - - return score1 + ABS(score2)*8; + + if(c) return score1 + ABS(score2)*c->avctx->nsse_weight; + else return score1 + ABS(score2)*8; } -static int nsse8_c(/*MpegEncContext*/ void *c, uint8_t *s1, uint8_t *s2, int stride, int h){ +static int nsse8_c(MpegEncContext *c, uint8_t *s1, uint8_t *s2, int stride, int h){ int score1=0; int score2=0; int x,y; @@ -2632,7 +2633,8 @@ s2+= stride; } - return score1 + ABS(score2)*8; + if(c) return score1 + ABS(score2)*c->avctx->nsse_weight; + else return score1 + ABS(score2)*8; } static int try_8x8basis_c(int16_t rem[64], int16_t weight[64], int16_t basis[64], int scale){
--- a/motion_est.c Mon Jun 07 03:23:31 2004 +0000 +++ b/motion_est.c Mon Jun 07 17:30:02 2004 +0000 @@ -223,7 +223,6 @@ switch(type&0xFF){ default: case FF_CMP_SAD: - case FF_CMP_NSSE: return s->lambda>>FF_LAMBDA_SHIFT; case FF_CMP_DCT: return (3*s->lambda)>>(FF_LAMBDA_SHIFT+1); @@ -232,6 +231,7 @@ case FF_CMP_RD: case FF_CMP_PSNR: case FF_CMP_SSE: + case FF_CMP_NSSE: return s->lambda2>>FF_LAMBDA_SHIFT; case FF_CMP_BIT: return 1;
--- a/mpegvideo.c Mon Jun 07 03:23:31 2004 +0000 +++ b/mpegvideo.c Mon Jun 07 17:30:02 2004 +0000 @@ -3917,9 +3917,9 @@ if(w==16 && h==16) if(s->avctx->mb_cmp == FF_CMP_NSSE){ - return s->dsp.nsse[0](NULL, s->new_picture.data[0] + s->mb_x*16 + s->mb_y*s->linesize*16, s->dest[0], s->linesize, 16) - +s->dsp.nsse[1](NULL, s->new_picture.data[1] + s->mb_x*8 + s->mb_y*s->uvlinesize*8,s->dest[1], s->uvlinesize, 8) - +s->dsp.nsse[1](NULL, s->new_picture.data[2] + s->mb_x*8 + s->mb_y*s->uvlinesize*8,s->dest[2], s->uvlinesize, 8); + return s->dsp.nsse[0](s, s->new_picture.data[0] + s->mb_x*16 + s->mb_y*s->linesize*16, s->dest[0], s->linesize, 16) + +s->dsp.nsse[1](s, s->new_picture.data[1] + s->mb_x*8 + s->mb_y*s->uvlinesize*8,s->dest[1], s->uvlinesize, 8) + +s->dsp.nsse[1](s, s->new_picture.data[2] + s->mb_x*8 + s->mb_y*s->uvlinesize*8,s->dest[2], s->uvlinesize, 8); }else{ return s->dsp.sse[0](NULL, s->new_picture.data[0] + s->mb_x*16 + s->mb_y*s->linesize*16, s->dest[0], s->linesize, 16) +s->dsp.sse[1](NULL, s->new_picture.data[1] + s->mb_x*8 + s->mb_y*s->uvlinesize*8,s->dest[1], s->uvlinesize, 8)