comparison snow.c @ 3322:0b4f548dfb44 libavcodec

Snow: 10l. 1pass ratecontrol failed to set snow's internal quant.
author lorenm
date Tue, 30 May 2006 04:51:58 +0000
parents aea2230e6033
children 87c54a3f8d19
comparison
equal deleted inserted replaced
3321:8869b4dd2ffe 3322:0b4f548dfb44
3910 s->avctx->get_buffer(s->avctx, &s->mconly_picture); 3910 s->avctx->get_buffer(s->avctx, &s->mconly_picture);
3911 3911
3912 return 0; 3912 return 0;
3913 } 3913 }
3914 3914
3915 static int qscale2qlog(int qscale){
3916 return rint(QROOT*log(qscale / (float)FF_QP2LAMBDA)/log(2))
3917 + 61*QROOT/8; //<64 >60
3918 }
3919
3915 static void ratecontrol_1pass(SnowContext *s, AVFrame *pict) 3920 static void ratecontrol_1pass(SnowContext *s, AVFrame *pict)
3916 { 3921 {
3917 /* estimate the frame's complexity as a sum of weighted dwt coefs. 3922 /* estimate the frame's complexity as a sum of weighted dwt coefs.
3918 * FIXME we know exact mv bits at this point, 3923 * FIXME we know exact mv bits at this point,
3919 * but ratecontrol isn't set up to include them. */ 3924 * but ratecontrol isn't set up to include them. */
3953 s->m.current_picture.mb_var_sum= 0; 3958 s->m.current_picture.mb_var_sum= 0;
3954 } 3959 }
3955 3960
3956 pict->quality= ff_rate_estimate_qscale(&s->m, 1); 3961 pict->quality= ff_rate_estimate_qscale(&s->m, 1);
3957 s->lambda= pict->quality * 3/2; 3962 s->lambda= pict->quality * 3/2;
3963 s->qlog= qscale2qlog(pict->quality);
3958 } 3964 }
3959 3965
3960 static void calculate_vissual_weight(SnowContext *s, Plane *p){ 3966 static void calculate_vissual_weight(SnowContext *s, Plane *p){
3961 int width = p->width; 3967 int width = p->width;
3962 int height= p->height; 3968 int height= p->height;
4014 4020
4015 if(avctx->flags&CODEC_FLAG_PASS1){ 4021 if(avctx->flags&CODEC_FLAG_PASS1){
4016 if(!avctx->stats_out) 4022 if(!avctx->stats_out)
4017 avctx->stats_out = av_mallocz(256); 4023 avctx->stats_out = av_mallocz(256);
4018 } 4024 }
4019 if(!(avctx->flags&CODEC_FLAG_QSCALE)){ 4025 if((avctx->flags&CODEC_FLAG_PASS2) || !(avctx->flags&CODEC_FLAG_QSCALE)){
4020 if(ff_rate_control_init(&s->m) < 0) 4026 if(ff_rate_control_init(&s->m) < 0)
4021 return -1; 4027 return -1;
4022 } 4028 }
4023 s->pass1_rc= !(avctx->flags & (CODEC_FLAG_QSCALE|CODEC_FLAG_PASS2)); 4029 s->pass1_rc= !(avctx->flags & (CODEC_FLAG_QSCALE|CODEC_FLAG_PASS2));
4024 4030
4136 } 4142 }
4137 4143
4138 if(s->pass1_rc && avctx->frame_number == 0) 4144 if(s->pass1_rc && avctx->frame_number == 0)
4139 pict->quality= 2*FF_QP2LAMBDA; 4145 pict->quality= 2*FF_QP2LAMBDA;
4140 if(pict->quality){ 4146 if(pict->quality){
4141 s->qlog= rint(QROOT*log(pict->quality / (float)FF_QP2LAMBDA)/log(2)); 4147 s->qlog= qscale2qlog(pict->quality);
4142 //<64 >60
4143 s->qlog += 61*QROOT/8;
4144 s->lambda = pict->quality * 3/2; 4148 s->lambda = pict->quality * 3/2;
4145 } 4149 }
4146 if(s->qlog < 0 || (!pict->quality && (avctx->flags & CODEC_FLAG_QSCALE))){ 4150 if(s->qlog < 0 || (!pict->quality && (avctx->flags & CODEC_FLAG_QSCALE))){
4147 s->qlog= LOSSLESS_QLOG; 4151 s->qlog= LOSSLESS_QLOG;
4148 s->lambda = 0; 4152 s->lambda = 0;