[SCM] libav/experimental: nsse weight

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:40:37 UTC 2013


The following commit has been merged in the experimental branch:
commit d4c5d2adf3cb15fd67bad5a916bac52089fdba82
Author: Michael Niedermayer <michaelni at gmx.at>
Date:   Mon Jun 7 17:30:02 2004 +0000

    nsse weight
    
    Originally committed as revision 3205 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 70df542..de6fd95 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -17,7 +17,7 @@ extern "C" {
 
 #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 @@ typedef struct AVCodecContext {
      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 --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c
index 5c84a13..4afe743 100644
--- a/libavcodec/dsputil.c
+++ b/libavcodec/dsputil.c
@@ -2587,11 +2587,11 @@ static int pix_abs8_xy2_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size,
     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 @@ static int nsse16_c(/*MpegEncContext*/ void *c, uint8_t *s1, uint8_t *s2, int st
         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 @@ static int nsse8_c(/*MpegEncContext*/ void *c, uint8_t *s1, uint8_t *s2, int str
         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 --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c
index bee1e07..be8465b 100644
--- a/libavcodec/motion_est.c
+++ b/libavcodec/motion_est.c
@@ -223,7 +223,6 @@ static inline int get_penalty_factor(MpegEncContext *s, int type){
     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 @@ static inline int get_penalty_factor(MpegEncContext *s, int type){
     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 --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index f402a81..d3f849f 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -3917,9 +3917,9 @@ static int sse_mb(MpegEncContext *s){
 
     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)

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list