darkness masking (lumi masking does only bright stuff now)

Originally committed as revision 967 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Michael Niedermayer 23 years ago
parent 9960903667
commit 5e746b9995
  1. 11
      libavcodec/avcodec.h
  2. 7
      libavcodec/mpegvideo.c
  3. 7
      libavcodec/ratecontrol.c

@ -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 @@ typedef struct AVCodecContext {
*/
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
/*

@ -433,23 +433,24 @@ int MPV_encode_init(AVCodecContext *avctx)
} 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;

@ -465,6 +465,7 @@ static void update_predictor(Predictor *p, double q, double var, double size)
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 @@ static void adaptive_quantization(MpegEncContext *s, double q){
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;

Loading…
Cancel
Save