Mercurial > libavcodec.hg
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; |