changeset 693:b6a7ff92df57 libavcodec

darkness masking (lumi masking does only bright stuff now)
author michaelni
date Tue, 24 Sep 2002 10:53:59 +0000
parents 852b5a416161
children 20810b0193ef
files avcodec.h mpegvideo.c ratecontrol.c
diffstat 3 files changed, 19 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/avcodec.h	Tue Sep 24 09:15:46 2002 +0000
+++ b/avcodec.h	Tue Sep 24 10:53:59 2002 +0000
@@ -5,8 +5,8 @@
 
 #define LIBAVCODEC_VERSION_INT 0x000406
 #define LIBAVCODEC_VERSION     "0.4.6"
-#define LIBAVCODEC_BUILD       4625
-#define LIBAVCODEC_BUILD_STR   "4625"
+#define LIBAVCODEC_BUILD       4626
+#define LIBAVCODEC_BUILD_STR   "4626"
 
 enum CodecID {
     CODEC_ID_NONE, 
@@ -668,6 +668,13 @@
      */
     float p_masking;
 
+    /**
+     * darkness masking (0-> disabled)
+     * encoding: set by user
+     * decoding: unused
+     */
+    float dark_masking;
+
     //FIXME this should be reordered after kabis API is finished ...
     //TODO kill kabi
     /*
--- a/mpegvideo.c	Tue Sep 24 09:15:46 2002 +0000
+++ b/mpegvideo.c	Tue Sep 24 10:53:59 2002 +0000
@@ -433,23 +433,24 @@
     } else {
         s->intra_only = 0;
     }
-    
+
     /* ME algorithm */
     if (avctx->me_method == 0)
         /* For compatibility */
         s->me_method = motion_estimation_method;
     else
         s->me_method = avctx->me_method;
-        
+
     /* Fixed QSCALE */
     s->fixed_qscale = (avctx->flags & CODEC_FLAG_QSCALE);
     
     s->adaptive_quant= (   s->avctx->lumi_masking
+                        || s->avctx->dark_masking
                         || s->avctx->temporal_cplx_masking 
                         || s->avctx->spatial_cplx_masking
                         || s->avctx->p_masking)
                        && !s->fixed_qscale;
-    
+
     switch(avctx->codec->id) {
     case CODEC_ID_MPEG1VIDEO:
         s->out_format = FMT_MPEG1;
--- a/ratecontrol.c	Tue Sep 24 09:15:46 2002 +0000
+++ b/ratecontrol.c	Tue Sep 24 10:53:59 2002 +0000
@@ -465,6 +465,7 @@
 static void adaptive_quantization(MpegEncContext *s, double q){
     int i;
     const float lumi_masking= s->avctx->lumi_masking / (128.0*128.0);
+    const float dark_masking= s->avctx->dark_masking / (128.0*128.0);
     const float temp_cplx_masking= s->avctx->temporal_cplx_masking;
     const float spatial_cplx_masking = s->avctx->spatial_cplx_masking;
     const float p_masking = s->avctx->p_masking;
@@ -492,7 +493,11 @@
             factor= pow(temp_cplx, - temp_cplx_masking);
         }
         factor*=pow(spat_cplx, - spatial_cplx_masking);
-        factor*= (1.0 - (lumi-128)*(lumi-128)*lumi_masking);
+
+        if(lumi>127)
+            factor*= (1.0 - (lumi-128)*(lumi-128)*lumi_masking);
+        else
+            factor*= (1.0 - (lumi-128)*(lumi-128)*dark_masking);
         
         if(factor<0.00001) factor= 0.00001;