Mercurial > mplayer.hg
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, |