comparison libmpcodecs/ve_lavc.c @ 11032:a3c8c02e78a5

use lagrange multipler instead of qscale
author michael
date Tue, 07 Oct 2003 11:45:09 +0000
parents 6e35326c742f
children c9a3a1e70263
comparison
equal deleted inserted replaced
11031:f57563a141aa 11032:a3c8c02e78a5
56 static int lavc_param_vbitrate = -1; 56 static int lavc_param_vbitrate = -1;
57 static int lavc_param_vrate_tolerance = 1000*8; 57 static int lavc_param_vrate_tolerance = 1000*8;
58 static int lavc_param_mb_decision = 0; /* default is realtime encoding */ 58 static int lavc_param_mb_decision = 0; /* default is realtime encoding */
59 static int lavc_param_v4mv = 0; 59 static int lavc_param_v4mv = 0;
60 static int lavc_param_vme = 4; 60 static int lavc_param_vme = 4;
61 static int lavc_param_vqscale = 0; 61 static float lavc_param_vqscale = 0.0;
62 static int lavc_param_vqmin = 2; 62 static int lavc_param_vqmin = 2;
63 static int lavc_param_vqmax = 31; 63 static int lavc_param_vqmax = 31;
64 static int lavc_param_mb_qmin = 2; 64 static int lavc_param_mb_qmin = 2;
65 static int lavc_param_mb_qmax = 31; 65 static int lavc_param_mb_qmax = 31;
66 static float lavc_param_lmin = 2;
67 static float lavc_param_lmax = 31;
66 static int lavc_param_vqdiff = 3; 68 static int lavc_param_vqdiff = 3;
67 static float lavc_param_vqcompress = 0.5; 69 static float lavc_param_vqcompress = 0.5;
68 static float lavc_param_vqblur = 0.5; 70 static float lavc_param_vqblur = 0.5;
69 static float lavc_param_vb_qfactor = 1.25; 71 static float lavc_param_vb_qfactor = 1.25;
70 static float lavc_param_vb_qoffset = 1.25; 72 static float lavc_param_vb_qoffset = 1.25;
141 {"vratetol", &lavc_param_vrate_tolerance, CONF_TYPE_INT, CONF_RANGE, 4, 24000000, NULL}, 143 {"vratetol", &lavc_param_vrate_tolerance, CONF_TYPE_INT, CONF_RANGE, 4, 24000000, NULL},
142 {"vhq", &lavc_param_mb_decision, CONF_TYPE_FLAG, 0, 0, 1, NULL}, 144 {"vhq", &lavc_param_mb_decision, CONF_TYPE_FLAG, 0, 0, 1, NULL},
143 {"mbd", &lavc_param_mb_decision, CONF_TYPE_INT, CONF_RANGE, 0, 9, NULL}, 145 {"mbd", &lavc_param_mb_decision, CONF_TYPE_INT, CONF_RANGE, 0, 9, NULL},
144 {"v4mv", &lavc_param_v4mv, CONF_TYPE_FLAG, 0, 0, 1, NULL}, 146 {"v4mv", &lavc_param_v4mv, CONF_TYPE_FLAG, 0, 0, 1, NULL},
145 {"vme", &lavc_param_vme, CONF_TYPE_INT, CONF_RANGE, 0, 5, NULL}, 147 {"vme", &lavc_param_vme, CONF_TYPE_INT, CONF_RANGE, 0, 5, NULL},
146 {"vqscale", &lavc_param_vqscale, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, 148 {"vqscale", &lavc_param_vqscale, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL},
147 {"vqmin", &lavc_param_vqmin, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, 149 {"vqmin", &lavc_param_vqmin, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL},
148 {"vqmax", &lavc_param_vqmax, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, 150 {"vqmax", &lavc_param_vqmax, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL},
149 {"mbqmin", &lavc_param_mb_qmin, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, 151 {"mbqmin", &lavc_param_mb_qmin, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL},
150 {"mbqmax", &lavc_param_mb_qmax, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, 152 {"mbqmax", &lavc_param_mb_qmax, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL},
153 {"lmin", &lavc_param_lmin, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL},
154 {"lmax", &lavc_param_lmax, CONF_TYPE_FLOAT, CONF_RANGE, 0.01, 255.0, NULL},
151 {"vqdiff", &lavc_param_vqdiff, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, 155 {"vqdiff", &lavc_param_vqdiff, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL},
152 {"vqcomp", &lavc_param_vqcompress, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL}, 156 {"vqcomp", &lavc_param_vqcompress, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL},
153 {"vqblur", &lavc_param_vqblur, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL}, 157 {"vqblur", &lavc_param_vqblur, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL},
154 {"vb_qfactor", &lavc_param_vb_qfactor, CONF_TYPE_FLOAT, CONF_RANGE, -31.0, 31.0, NULL}, 158 {"vb_qfactor", &lavc_param_vb_qfactor, CONF_TYPE_FLOAT, CONF_RANGE, -31.0, 31.0, NULL},
155 {"vmax_b_frames", &lavc_param_vmax_b_frames, CONF_TYPE_INT, CONF_RANGE, 0, FF_MAX_B_FRAMES, NULL}, 159 {"vmax_b_frames", &lavc_param_vmax_b_frames, CONF_TYPE_INT, CONF_RANGE, 0, FF_MAX_B_FRAMES, NULL},
246 250
247 #define stats_file (vf->priv->stats_file) 251 #define stats_file (vf->priv->stats_file)
248 #define mux_v (vf->priv->mux) 252 #define mux_v (vf->priv->mux)
249 #define lavc_venc_context (vf->priv->context) 253 #define lavc_venc_context (vf->priv->context)
250 254
255 #if LIBAVCODEC_BUILD < 4684
256 #define FF_QP2LAMBDA 1
257 #endif
258
251 static int config(struct vf_instance_s* vf, 259 static int config(struct vf_instance_s* vf,
252 int width, int height, int d_width, int d_height, 260 int width, int height, int d_width, int d_height,
253 unsigned int flags, unsigned int outfmt){ 261 unsigned int flags, unsigned int outfmt){
254 int size, i; 262 int size, i;
255 void *p; 263 void *p;
280 lavc_venc_context->qmin= lavc_param_vqmin; 288 lavc_venc_context->qmin= lavc_param_vqmin;
281 lavc_venc_context->qmax= lavc_param_vqmax; 289 lavc_venc_context->qmax= lavc_param_vqmax;
282 #if LIBAVCODEC_BUILD >= 4646 290 #if LIBAVCODEC_BUILD >= 4646
283 lavc_venc_context->mb_qmin= lavc_param_mb_qmin; 291 lavc_venc_context->mb_qmin= lavc_param_mb_qmin;
284 lavc_venc_context->mb_qmax= lavc_param_mb_qmax; 292 lavc_venc_context->mb_qmax= lavc_param_mb_qmax;
293 #endif
294 #if LIBAVCODEC_BUILD >= 4684
295 lavc_venc_context->lmin= (int)(FF_QP2LAMBDA * lavc_param_lmin + 0.5);
296 lavc_venc_context->lmax= (int)(FF_QP2LAMBDA * lavc_param_lmax + 0.5);
285 #endif 297 #endif
286 lavc_venc_context->max_qdiff= lavc_param_vqdiff; 298 lavc_venc_context->max_qdiff= lavc_param_vqdiff;
287 lavc_venc_context->qcompress= lavc_param_vqcompress; 299 lavc_venc_context->qcompress= lavc_param_vqcompress;
288 lavc_venc_context->qblur= lavc_param_vqblur; 300 lavc_venc_context->qblur= lavc_param_vqblur;
289 lavc_venc_context->max_b_frames= lavc_param_vmax_b_frames; 301 lavc_venc_context->max_b_frames= lavc_param_vmax_b_frames;
545 lavc_venc_context->me_method = ME_ZERO+lavc_param_vme; 557 lavc_venc_context->me_method = ME_ZERO+lavc_param_vme;
546 558
547 /* fixed qscale :p */ 559 /* fixed qscale :p */
548 if (lavc_param_vqscale) 560 if (lavc_param_vqscale)
549 { 561 {
550 printf("Using constant qscale = %d (VBR)\n", lavc_param_vqscale); 562 printf("Using constant qscale = %f (VBR)\n", lavc_param_vqscale);
551 lavc_venc_context->flags |= CODEC_FLAG_QSCALE; 563 lavc_venc_context->flags |= CODEC_FLAG_QSCALE;
552 #if LIBAVCODEC_BUILD >= 4668 564 #if LIBAVCODEC_BUILD >= 4668
553 lavc_venc_context->global_quality= FF_QUALITY_SCALE * lavc_param_vqscale; 565 lavc_venc_context->global_quality=
554 #endif 566 #endif
555 vf->priv->pic->quality = lavc_param_vqscale; 567 vf->priv->pic->quality = (int)(FF_QP2LAMBDA * lavc_param_vqscale + 0.5);
556 } 568 }
557 569
558 if (avcodec_open(lavc_venc_context, vf->priv->codec) != 0) { 570 if (avcodec_open(lavc_venc_context, vf->priv->codec) != 0) {
559 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CantOpenCodec); 571 mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CantOpenCodec);
560 return 0; 572 return 0;
677 quality += (double)*(q+x); 689 quality += (double)*(q+x);
678 q += lavc_venc_context->coded_frame->qstride; 690 q += lavc_venc_context->coded_frame->qstride;
679 } 691 }
680 quality /= w * h; 692 quality /= w * h;
681 } else 693 } else
682 quality = lavc_venc_context->coded_frame->quality; 694 quality = lavc_venc_context->coded_frame->quality / (float)FF_QP2LAMBDA;
683 695
684 fprintf(fvstats, "%6d, %2.2f, %6d, %2.2f, %2.2f, %2.2f, %2.2f %c\n", 696 fprintf(fvstats, "%6d, %2.2f, %6d, %2.2f, %2.2f, %2.2f, %2.2f %c\n",
685 lavc_venc_context->coded_frame->coded_picture_number, 697 lavc_venc_context->coded_frame->coded_picture_number,
686 quality, 698 quality,
687 out_size, 699 out_size,