# HG changeset patch # User michael # Date 1086629402 0 # Node ID 4bfb146e701bbbb69bdd437cad1375a72376c2f7 # Parent 9e4bebc39ade50994ca98a74226f6d137670bc46 nsse weight diff -r 9e4bebc39ade -r 4bfb146e701b avcodec.h --- 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; diff -r 9e4bebc39ade -r 4bfb146e701b dsputil.c --- 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; yavctx->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){ diff -r 9e4bebc39ade -r 4bfb146e701b motion_est.c --- 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; diff -r 9e4bebc39ade -r 4bfb146e701b mpegvideo.c --- 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)