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)