]> git.sesse.net Git - ffmpeg/blob - libavcodec/ratecontrol.c
hq_hqa: Fix table data for profile 17
[ffmpeg] / libavcodec / ratecontrol.c
1 /*
2  * Rate control for video encoders
3  *
4  * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
5  *
6  * This file is part of Libav.
7  *
8  * Libav is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * Libav is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with Libav; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 /**
24  * @file
25  * Rate control for video encoders.
26  */
27
28 #include "libavutil/attributes.h"
29 #include "avcodec.h"
30 #include "internal.h"
31 #include "ratecontrol.h"
32 #include "mpegutils.h"
33 #include "mpegvideo.h"
34 #include "libavutil/eval.h"
35
36 #undef NDEBUG // Always check asserts, the speed effect is far too small to disable them.
37 #include <assert.h>
38
39 #ifndef M_E
40 #define M_E 2.718281828
41 #endif
42
43 static int init_pass2(MpegEncContext *s);
44 static double get_qscale(MpegEncContext *s, RateControlEntry *rce,
45                          double rate_factor, int frame_num);
46
47 void ff_write_pass1_stats(MpegEncContext *s)
48 {
49     snprintf(s->avctx->stats_out, 256,
50              "in:%d out:%d type:%d q:%d itex:%d ptex:%d mv:%d misc:%d "
51              "fcode:%d bcode:%d mc-var:%d var:%d icount:%d skipcount:%d hbits:%d;\n",
52              s->current_picture_ptr->f->display_picture_number,
53              s->current_picture_ptr->f->coded_picture_number,
54              s->pict_type,
55              s->current_picture.f->quality,
56              s->i_tex_bits,
57              s->p_tex_bits,
58              s->mv_bits,
59              s->misc_bits,
60              s->f_code,
61              s->b_code,
62              s->current_picture.mc_mb_var_sum,
63              s->current_picture.mb_var_sum,
64              s->i_count, s->skip_count,
65              s->header_bits);
66 }
67
68 static inline double qp2bits(RateControlEntry *rce, double qp)
69 {
70     if (qp <= 0.0) {
71         av_log(NULL, AV_LOG_ERROR, "qp<=0.0\n");
72     }
73     return rce->qscale * (double)(rce->i_tex_bits + rce->p_tex_bits + 1) / qp;
74 }
75
76 static inline double bits2qp(RateControlEntry *rce, double bits)
77 {
78     if (bits < 0.9) {
79         av_log(NULL, AV_LOG_ERROR, "bits<0.9\n");
80     }
81     return rce->qscale * (double)(rce->i_tex_bits + rce->p_tex_bits + 1) / bits;
82 }
83
84 av_cold int ff_rate_control_init(MpegEncContext *s)
85 {
86     RateControlContext *rcc = &s->rc_context;
87     int i, res;
88     static const char * const const_names[] = {
89         "PI",
90         "E",
91         "iTex",
92         "pTex",
93         "tex",
94         "mv",
95         "fCode",
96         "iCount",
97         "mcVar",
98         "var",
99         "isI",
100         "isP",
101         "isB",
102         "avgQP",
103         "qComp",
104 #if 0
105         "lastIQP",
106         "lastPQP",
107         "lastBQP",
108         "nextNonBQP",
109 #endif
110         "avgIITex",
111         "avgPITex",
112         "avgPPTex",
113         "avgBPTex",
114         "avgTex",
115         NULL
116     };
117     static double (* const func1[])(void *, double) = {
118         (void *)bits2qp,
119         (void *)qp2bits,
120         NULL
121     };
122     static const char * const func1_names[] = {
123         "bits2qp",
124         "qp2bits",
125         NULL
126     };
127     emms_c();
128
129     res = av_expr_parse(&rcc->rc_eq_eval,
130                         s->rc_eq ? s->rc_eq : "tex^qComp",
131                         const_names, func1_names, func1,
132                         NULL, NULL, 0, s->avctx);
133     if (res < 0) {
134         av_log(s->avctx, AV_LOG_ERROR, "Error parsing rc_eq \"%s\"\n", s->rc_eq);
135         return res;
136     }
137
138     for (i = 0; i < 5; i++) {
139         rcc->pred[i].coeff = FF_QP2LAMBDA * 7.0;
140         rcc->pred[i].count = 1.0;
141         rcc->pred[i].decay = 0.4;
142
143         rcc->i_cplx_sum [i] =
144         rcc->p_cplx_sum [i] =
145         rcc->mv_bits_sum[i] =
146         rcc->qscale_sum [i] =
147         rcc->frame_count[i] = 1; // 1 is better because of 1/0 and such
148
149         rcc->last_qscale_for[i] = FF_QP2LAMBDA * 5;
150     }
151     rcc->buffer_index = s->avctx->rc_initial_buffer_occupancy;
152
153     if (s->flags & CODEC_FLAG_PASS2) {
154         int i;
155         char *p;
156
157         /* find number of pics */
158         p = s->avctx->stats_in;
159         for (i = -1; p; i++)
160             p = strchr(p + 1, ';');
161         i += s->max_b_frames;
162         if (i <= 0 || i >= INT_MAX / sizeof(RateControlEntry))
163             return -1;
164         rcc->entry       = av_mallocz(i * sizeof(RateControlEntry));
165         rcc->num_entries = i;
166
167         /* init all to skipped p frames
168          * (with b frames we might have a not encoded frame at the end FIXME) */
169         for (i = 0; i < rcc->num_entries; i++) {
170             RateControlEntry *rce = &rcc->entry[i];
171
172             rce->pict_type  = rce->new_pict_type = AV_PICTURE_TYPE_P;
173             rce->qscale     = rce->new_qscale    = FF_QP2LAMBDA * 2;
174             rce->misc_bits  = s->mb_num + 10;
175             rce->mb_var_sum = s->mb_num * 100;
176         }
177
178         /* read stats */
179         p = s->avctx->stats_in;
180         for (i = 0; i < rcc->num_entries - s->max_b_frames; i++) {
181             RateControlEntry *rce;
182             int picture_number;
183             int e;
184             char *next;
185
186             next = strchr(p, ';');
187             if (next) {
188                 (*next) = 0; // sscanf in unbelievably slow on looong strings // FIXME copy / do not write
189                 next++;
190             }
191             e = sscanf(p, " in:%d ", &picture_number);
192
193             assert(picture_number >= 0);
194             assert(picture_number < rcc->num_entries);
195             rce = &rcc->entry[picture_number];
196
197             e += sscanf(p, " in:%*d out:%*d type:%d q:%f itex:%d ptex:%d mv:%d misc:%d fcode:%d bcode:%d mc-var:%d var:%d icount:%d skipcount:%d hbits:%d",
198                         &rce->pict_type, &rce->qscale, &rce->i_tex_bits, &rce->p_tex_bits,
199                         &rce->mv_bits, &rce->misc_bits,
200                         &rce->f_code, &rce->b_code,
201                         &rce->mc_mb_var_sum, &rce->mb_var_sum,
202                         &rce->i_count, &rce->skip_count, &rce->header_bits);
203             if (e != 14) {
204                 av_log(s->avctx, AV_LOG_ERROR,
205                        "statistics are damaged at line %d, parser out=%d\n",
206                        i, e);
207                 return -1;
208             }
209
210             p = next;
211         }
212
213         if (init_pass2(s) < 0)
214             return -1;
215
216         // FIXME maybe move to end
217         if ((s->flags & CODEC_FLAG_PASS2) && s->avctx->rc_strategy == FF_RC_STRATEGY_XVID) {
218 #if CONFIG_LIBXVID
219             return ff_xvid_rate_control_init(s);
220 #else
221             av_log(s->avctx, AV_LOG_ERROR,
222                    "Xvid ratecontrol requires libavcodec compiled with Xvid support.\n");
223             return -1;
224 #endif
225         }
226     }
227
228     if (!(s->flags & CODEC_FLAG_PASS2)) {
229         rcc->short_term_qsum   = 0.001;
230         rcc->short_term_qcount = 0.001;
231
232         rcc->pass1_rc_eq_output_sum = 0.001;
233         rcc->pass1_wanted_bits      = 0.001;
234
235         if (s->avctx->qblur > 1.0) {
236             av_log(s->avctx, AV_LOG_ERROR, "qblur too large\n");
237             return -1;
238         }
239         /* init stuff with the user specified complexity */
240         if (s->rc_initial_cplx) {
241             for (i = 0; i < 60 * 30; i++) {
242                 double bits = s->rc_initial_cplx * (i / 10000.0 + 1.0) * s->mb_num;
243                 RateControlEntry rce;
244
245                 if (i % ((s->gop_size + 3) / 4) == 0)
246                     rce.pict_type = AV_PICTURE_TYPE_I;
247                 else if (i % (s->max_b_frames + 1))
248                     rce.pict_type = AV_PICTURE_TYPE_B;
249                 else
250                     rce.pict_type = AV_PICTURE_TYPE_P;
251
252                 rce.new_pict_type = rce.pict_type;
253                 rce.mc_mb_var_sum = bits * s->mb_num / 100000;
254                 rce.mb_var_sum    = s->mb_num;
255
256                 rce.qscale    = FF_QP2LAMBDA * 2;
257                 rce.f_code    = 2;
258                 rce.b_code    = 1;
259                 rce.misc_bits = 1;
260
261                 if (s->pict_type == AV_PICTURE_TYPE_I) {
262                     rce.i_count    = s->mb_num;
263                     rce.i_tex_bits = bits;
264                     rce.p_tex_bits = 0;
265                     rce.mv_bits    = 0;
266                 } else {
267                     rce.i_count    = 0; // FIXME we do know this approx
268                     rce.i_tex_bits = 0;
269                     rce.p_tex_bits = bits * 0.9;
270                     rce.mv_bits    = bits * 0.1;
271                 }
272                 rcc->i_cplx_sum[rce.pict_type]  += rce.i_tex_bits * rce.qscale;
273                 rcc->p_cplx_sum[rce.pict_type]  += rce.p_tex_bits * rce.qscale;
274                 rcc->mv_bits_sum[rce.pict_type] += rce.mv_bits;
275                 rcc->frame_count[rce.pict_type]++;
276
277                 get_qscale(s, &rce, rcc->pass1_wanted_bits / rcc->pass1_rc_eq_output_sum, i);
278
279                 // FIXME misbehaves a little for variable fps
280                 rcc->pass1_wanted_bits += s->bit_rate / (1 / av_q2d(s->avctx->time_base));
281             }
282         }
283     }
284
285     return 0;
286 }
287
288 av_cold void ff_rate_control_uninit(MpegEncContext *s)
289 {
290     RateControlContext *rcc = &s->rc_context;
291     emms_c();
292
293     av_expr_free(rcc->rc_eq_eval);
294     av_freep(&rcc->entry);
295
296 #if CONFIG_LIBXVID
297     if ((s->flags & CODEC_FLAG_PASS2) && s->avctx->rc_strategy == FF_RC_STRATEGY_XVID)
298         ff_xvid_rate_control_uninit(s);
299 #endif
300 }
301
302 int ff_vbv_update(MpegEncContext *s, int frame_size)
303 {
304     RateControlContext *rcc = &s->rc_context;
305     const double fps        = 1 / av_q2d(s->avctx->time_base);
306     const int buffer_size   = s->avctx->rc_buffer_size;
307     const double min_rate   = s->avctx->rc_min_rate / fps;
308     const double max_rate   = s->avctx->rc_max_rate / fps;
309
310     ff_dlog(s, "%d %f %d %f %f\n",
311             buffer_size, rcc->buffer_index, frame_size, min_rate, max_rate);
312
313     if (buffer_size) {
314         int left;
315
316         rcc->buffer_index -= frame_size;
317         if (rcc->buffer_index < 0) {
318             av_log(s->avctx, AV_LOG_ERROR, "rc buffer underflow\n");
319             rcc->buffer_index = 0;
320         }
321
322         left = buffer_size - rcc->buffer_index - 1;
323         rcc->buffer_index += av_clip(left, min_rate, max_rate);
324
325         if (rcc->buffer_index > buffer_size) {
326             int stuffing = ceil((rcc->buffer_index - buffer_size) / 8);
327
328             if (stuffing < 4 && s->codec_id == AV_CODEC_ID_MPEG4)
329                 stuffing = 4;
330             rcc->buffer_index -= 8 * stuffing;
331
332             if (s->avctx->debug & FF_DEBUG_RC)
333                 av_log(s->avctx, AV_LOG_DEBUG, "stuffing %d bytes\n", stuffing);
334
335             return stuffing;
336         }
337     }
338     return 0;
339 }
340
341 /**
342  * Modify the bitrate curve from pass1 for one frame.
343  */
344 static double get_qscale(MpegEncContext *s, RateControlEntry *rce,
345                          double rate_factor, int frame_num)
346 {
347     RateControlContext *rcc = &s->rc_context;
348     AVCodecContext *a       = s->avctx;
349     const int pict_type     = rce->new_pict_type;
350     const double mb_num     = s->mb_num;
351     double q, bits;
352     int i;
353
354     double const_values[] = {
355         M_PI,
356         M_E,
357         rce->i_tex_bits * rce->qscale,
358         rce->p_tex_bits * rce->qscale,
359         (rce->i_tex_bits + rce->p_tex_bits) * (double)rce->qscale,
360         rce->mv_bits / mb_num,
361         rce->pict_type == AV_PICTURE_TYPE_B ? (rce->f_code + rce->b_code) * 0.5 : rce->f_code,
362         rce->i_count / mb_num,
363         rce->mc_mb_var_sum / mb_num,
364         rce->mb_var_sum / mb_num,
365         rce->pict_type == AV_PICTURE_TYPE_I,
366         rce->pict_type == AV_PICTURE_TYPE_P,
367         rce->pict_type == AV_PICTURE_TYPE_B,
368         rcc->qscale_sum[pict_type] / (double)rcc->frame_count[pict_type],
369         a->qcompress,
370 #if 0
371         rcc->last_qscale_for[AV_PICTURE_TYPE_I],
372         rcc->last_qscale_for[AV_PICTURE_TYPE_P],
373         rcc->last_qscale_for[AV_PICTURE_TYPE_B],
374         rcc->next_non_b_qscale,
375 #endif
376         rcc->i_cplx_sum[AV_PICTURE_TYPE_I] / (double)rcc->frame_count[AV_PICTURE_TYPE_I],
377         rcc->i_cplx_sum[AV_PICTURE_TYPE_P] / (double)rcc->frame_count[AV_PICTURE_TYPE_P],
378         rcc->p_cplx_sum[AV_PICTURE_TYPE_P] / (double)rcc->frame_count[AV_PICTURE_TYPE_P],
379         rcc->p_cplx_sum[AV_PICTURE_TYPE_B] / (double)rcc->frame_count[AV_PICTURE_TYPE_B],
380         (rcc->i_cplx_sum[pict_type] + rcc->p_cplx_sum[pict_type]) / (double)rcc->frame_count[pict_type],
381         0
382     };
383
384     bits = av_expr_eval(rcc->rc_eq_eval, const_values, rce);
385     if (isnan(bits)) {
386         av_log(s->avctx, AV_LOG_ERROR, "Error evaluating rc_eq \"%s\"\n", s->rc_eq);
387         return -1;
388     }
389
390     rcc->pass1_rc_eq_output_sum += bits;
391     bits *= rate_factor;
392     if (bits < 0.0)
393         bits = 0.0;
394     bits += 1.0; // avoid 1/0 issues
395
396     /* user override */
397     for (i = 0; i < s->avctx->rc_override_count; i++) {
398         RcOverride *rco = s->avctx->rc_override;
399         if (rco[i].start_frame > frame_num)
400             continue;
401         if (rco[i].end_frame < frame_num)
402             continue;
403
404         if (rco[i].qscale)
405             bits = qp2bits(rce, rco[i].qscale);  // FIXME move at end to really force it?
406         else
407             bits *= rco[i].quality_factor;
408     }
409
410     q = bits2qp(rce, bits);
411
412     /* I/B difference */
413     if (pict_type == AV_PICTURE_TYPE_I && s->avctx->i_quant_factor < 0.0)
414         q = -q * s->avctx->i_quant_factor + s->avctx->i_quant_offset;
415     else if (pict_type == AV_PICTURE_TYPE_B && s->avctx->b_quant_factor < 0.0)
416         q = -q * s->avctx->b_quant_factor + s->avctx->b_quant_offset;
417     if (q < 1)
418         q = 1;
419
420     return q;
421 }
422
423 static double get_diff_limited_q(MpegEncContext *s, RateControlEntry *rce, double q)
424 {
425     RateControlContext *rcc   = &s->rc_context;
426     AVCodecContext *a         = s->avctx;
427     const int pict_type       = rce->new_pict_type;
428     const double last_p_q     = rcc->last_qscale_for[AV_PICTURE_TYPE_P];
429     const double last_non_b_q = rcc->last_qscale_for[rcc->last_non_b_pict_type];
430
431     if (pict_type == AV_PICTURE_TYPE_I &&
432         (a->i_quant_factor > 0.0 || rcc->last_non_b_pict_type == AV_PICTURE_TYPE_P))
433         q = last_p_q * FFABS(a->i_quant_factor) + a->i_quant_offset;
434     else if (pict_type == AV_PICTURE_TYPE_B &&
435              a->b_quant_factor > 0.0)
436         q = last_non_b_q * a->b_quant_factor + a->b_quant_offset;
437     if (q < 1)
438         q = 1;
439
440     /* last qscale / qdiff stuff */
441     if (rcc->last_non_b_pict_type == pict_type || pict_type != AV_PICTURE_TYPE_I) {
442         double last_q     = rcc->last_qscale_for[pict_type];
443         const int maxdiff = FF_QP2LAMBDA * a->max_qdiff;
444
445         if (q > last_q + maxdiff)
446             q = last_q + maxdiff;
447         else if (q < last_q - maxdiff)
448             q = last_q - maxdiff;
449     }
450
451     rcc->last_qscale_for[pict_type] = q; // Note we cannot do that after blurring
452
453     if (pict_type != AV_PICTURE_TYPE_B)
454         rcc->last_non_b_pict_type = pict_type;
455
456     return q;
457 }
458
459 /**
460  * Get the qmin & qmax for pict_type.
461  */
462 static void get_qminmax(int *qmin_ret, int *qmax_ret, MpegEncContext *s, int pict_type)
463 {
464     int qmin = s->lmin;
465     int qmax = s->lmax;
466
467     assert(qmin <= qmax);
468
469     switch (pict_type) {
470     case AV_PICTURE_TYPE_B:
471         qmin = (int)(qmin * FFABS(s->avctx->b_quant_factor) + s->avctx->b_quant_offset + 0.5);
472         qmax = (int)(qmax * FFABS(s->avctx->b_quant_factor) + s->avctx->b_quant_offset + 0.5);
473         break;
474     case AV_PICTURE_TYPE_I:
475         qmin = (int)(qmin * FFABS(s->avctx->i_quant_factor) + s->avctx->i_quant_offset + 0.5);
476         qmax = (int)(qmax * FFABS(s->avctx->i_quant_factor) + s->avctx->i_quant_offset + 0.5);
477         break;
478     }
479
480     qmin = av_clip(qmin, 1, FF_LAMBDA_MAX);
481     qmax = av_clip(qmax, 1, FF_LAMBDA_MAX);
482
483     if (qmax < qmin)
484         qmax = qmin;
485
486     *qmin_ret = qmin;
487     *qmax_ret = qmax;
488 }
489
490 static double modify_qscale(MpegEncContext *s, RateControlEntry *rce,
491                             double q, int frame_num)
492 {
493     RateControlContext *rcc  = &s->rc_context;
494     const double buffer_size = s->avctx->rc_buffer_size;
495     const double fps         = 1 / av_q2d(s->avctx->time_base);
496     const double min_rate    = s->avctx->rc_min_rate / fps;
497     const double max_rate    = s->avctx->rc_max_rate / fps;
498     const int pict_type      = rce->new_pict_type;
499     int qmin, qmax;
500
501     get_qminmax(&qmin, &qmax, s, pict_type);
502
503     /* modulation */
504     if (s->rc_qmod_freq &&
505         frame_num % s->rc_qmod_freq == 0 &&
506         pict_type == AV_PICTURE_TYPE_P)
507         q *= s->rc_qmod_amp;
508
509     /* buffer overflow/underflow protection */
510     if (buffer_size) {
511         double expected_size = rcc->buffer_index;
512         double q_limit;
513
514         if (min_rate) {
515             double d = 2 * (buffer_size - expected_size) / buffer_size;
516             if (d > 1.0)
517                 d = 1.0;
518             else if (d < 0.0001)
519                 d = 0.0001;
520             q *= pow(d, 1.0 / s->rc_buffer_aggressivity);
521
522             q_limit = bits2qp(rce,
523                               FFMAX((min_rate - buffer_size + rcc->buffer_index) *
524                                     s->avctx->rc_min_vbv_overflow_use, 1));
525
526             if (q > q_limit) {
527                 if (s->avctx->debug & FF_DEBUG_RC)
528                     av_log(s->avctx, AV_LOG_DEBUG,
529                            "limiting QP %f -> %f\n", q, q_limit);
530                 q = q_limit;
531             }
532         }
533
534         if (max_rate) {
535             double d = 2 * expected_size / buffer_size;
536             if (d > 1.0)
537                 d = 1.0;
538             else if (d < 0.0001)
539                 d = 0.0001;
540             q /= pow(d, 1.0 / s->rc_buffer_aggressivity);
541
542             q_limit = bits2qp(rce,
543                               FFMAX(rcc->buffer_index *
544                                     s->avctx->rc_max_available_vbv_use,
545                                     1));
546             if (q < q_limit) {
547                 if (s->avctx->debug & FF_DEBUG_RC)
548                     av_log(s->avctx, AV_LOG_DEBUG,
549                            "limiting QP %f -> %f\n", q, q_limit);
550                 q = q_limit;
551             }
552         }
553     }
554     ff_dlog(s, "q:%f max:%f min:%f size:%f index:%f agr:%f\n",
555             q, max_rate, min_rate, buffer_size, rcc->buffer_index,
556             s->rc_buffer_aggressivity);
557     if (s->rc_qsquish == 0.0 || qmin == qmax) {
558         if (q < qmin)
559             q = qmin;
560         else if (q > qmax)
561             q = qmax;
562     } else {
563         double min2 = log(qmin);
564         double max2 = log(qmax);
565
566         q  = log(q);
567         q  = (q - min2) / (max2 - min2) - 0.5;
568         q *= -4.0;
569         q  = 1.0 / (1.0 + exp(q));
570         q  = q * (max2 - min2) + min2;
571
572         q = exp(q);
573     }
574
575     return q;
576 }
577
578 // ----------------------------------
579 // 1 Pass Code
580
581 static double predict_size(Predictor *p, double q, double var)
582 {
583     return p->coeff * var / (q * p->count);
584 }
585
586 static void update_predictor(Predictor *p, double q, double var, double size)
587 {
588     double new_coeff = size * q / (var + 1);
589     if (var < 10)
590         return;
591
592     p->count *= p->decay;
593     p->coeff *= p->decay;
594     p->count++;
595     p->coeff += new_coeff;
596 }
597
598 static void adaptive_quantization(MpegEncContext *s, double q)
599 {
600     int i;
601     const float lumi_masking         = s->avctx->lumi_masking / (128.0 * 128.0);
602     const float dark_masking         = s->avctx->dark_masking / (128.0 * 128.0);
603     const float temp_cplx_masking    = s->avctx->temporal_cplx_masking;
604     const float spatial_cplx_masking = s->avctx->spatial_cplx_masking;
605     const float p_masking            = s->avctx->p_masking;
606     const float border_masking       = s->border_masking;
607     float bits_sum                   = 0.0;
608     float cplx_sum                   = 0.0;
609     float *cplx_tab                  = s->cplx_tab;
610     float *bits_tab                  = s->bits_tab;
611     const int qmin                   = s->avctx->mb_lmin;
612     const int qmax                   = s->avctx->mb_lmax;
613     Picture *const pic               = &s->current_picture;
614     const int mb_width               = s->mb_width;
615     const int mb_height              = s->mb_height;
616
617     for (i = 0; i < s->mb_num; i++) {
618         const int mb_xy = s->mb_index2xy[i];
619         float temp_cplx = sqrt(pic->mc_mb_var[mb_xy]); // FIXME merge in pow()
620         float spat_cplx = sqrt(pic->mb_var[mb_xy]);
621         const int lumi  = pic->mb_mean[mb_xy];
622         float bits, cplx, factor;
623         int mb_x = mb_xy % s->mb_stride;
624         int mb_y = mb_xy / s->mb_stride;
625         int mb_distance;
626         float mb_factor = 0.0;
627         if (spat_cplx < 4)
628             spat_cplx = 4;              // FIXME finetune
629         if (temp_cplx < 4)
630             temp_cplx = 4;              // FIXME finetune
631
632         if ((s->mb_type[mb_xy] & CANDIDATE_MB_TYPE_INTRA)) { // FIXME hq mode
633             cplx   = spat_cplx;
634             factor = 1.0 + p_masking;
635         } else {
636             cplx   = temp_cplx;
637             factor = pow(temp_cplx, -temp_cplx_masking);
638         }
639         factor *= pow(spat_cplx, -spatial_cplx_masking);
640
641         if (lumi > 127)
642             factor *= (1.0 - (lumi - 128) * (lumi - 128) * lumi_masking);
643         else
644             factor *= (1.0 - (lumi - 128) * (lumi - 128) * dark_masking);
645
646         if (mb_x < mb_width / 5) {
647             mb_distance = mb_width / 5 - mb_x;
648             mb_factor   = (float)mb_distance / (float)(mb_width / 5);
649         } else if (mb_x > 4 * mb_width / 5) {
650             mb_distance = mb_x - 4 * mb_width / 5;
651             mb_factor   = (float)mb_distance / (float)(mb_width / 5);
652         }
653         if (mb_y < mb_height / 5) {
654             mb_distance = mb_height / 5 - mb_y;
655             mb_factor   = FFMAX(mb_factor,
656                                 (float)mb_distance / (float)(mb_height / 5));
657         } else if (mb_y > 4 * mb_height / 5) {
658             mb_distance = mb_y - 4 * mb_height / 5;
659             mb_factor   = FFMAX(mb_factor,
660                                 (float)mb_distance / (float)(mb_height / 5));
661         }
662
663         factor *= 1.0 - border_masking * mb_factor;
664
665         if (factor < 0.00001)
666             factor = 0.00001;
667
668         bits        = cplx * factor;
669         cplx_sum   += cplx;
670         bits_sum   += bits;
671         cplx_tab[i] = cplx;
672         bits_tab[i] = bits;
673     }
674
675     /* handle qmin/qmax clipping */
676     if (s->mpv_flags & FF_MPV_FLAG_NAQ) {
677         float factor = bits_sum / cplx_sum;
678         for (i = 0; i < s->mb_num; i++) {
679             float newq = q * cplx_tab[i] / bits_tab[i];
680             newq *= factor;
681
682             if (newq > qmax) {
683                 bits_sum -= bits_tab[i];
684                 cplx_sum -= cplx_tab[i] * q / qmax;
685             } else if (newq < qmin) {
686                 bits_sum -= bits_tab[i];
687                 cplx_sum -= cplx_tab[i] * q / qmin;
688             }
689         }
690         if (bits_sum < 0.001)
691             bits_sum = 0.001;
692         if (cplx_sum < 0.001)
693             cplx_sum = 0.001;
694     }
695
696     for (i = 0; i < s->mb_num; i++) {
697         const int mb_xy = s->mb_index2xy[i];
698         float newq      = q * cplx_tab[i] / bits_tab[i];
699         int intq;
700
701         if (s->mpv_flags & FF_MPV_FLAG_NAQ) {
702             newq *= bits_sum / cplx_sum;
703         }
704
705         intq = (int)(newq + 0.5);
706
707         if (intq > qmax)
708             intq = qmax;
709         else if (intq < qmin)
710             intq = qmin;
711         s->lambda_table[mb_xy] = intq;
712     }
713 }
714
715 void ff_get_2pass_fcode(MpegEncContext *s)
716 {
717     RateControlContext *rcc = &s->rc_context;
718     RateControlEntry *rce   = &rcc->entry[s->picture_number];
719
720     s->f_code = rce->f_code;
721     s->b_code = rce->b_code;
722 }
723
724 // FIXME rd or at least approx for dquant
725
726 float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)
727 {
728     float q;
729     int qmin, qmax;
730     float br_compensation;
731     double diff;
732     double short_term_q;
733     double fps;
734     int picture_number = s->picture_number;
735     int64_t wanted_bits;
736     RateControlContext *rcc = &s->rc_context;
737     AVCodecContext *a       = s->avctx;
738     RateControlEntry local_rce, *rce;
739     double bits;
740     double rate_factor;
741     int var;
742     const int pict_type = s->pict_type;
743     Picture * const pic = &s->current_picture;
744     emms_c();
745
746 #if CONFIG_LIBXVID
747     if ((s->flags & CODEC_FLAG_PASS2) &&
748         s->avctx->rc_strategy == FF_RC_STRATEGY_XVID)
749         return ff_xvid_rate_estimate_qscale(s, dry_run);
750 #endif
751
752     get_qminmax(&qmin, &qmax, s, pict_type);
753
754     fps = 1 / av_q2d(s->avctx->time_base);
755     /* update predictors */
756     if (picture_number > 2 && !dry_run) {
757         const int last_var = s->last_pict_type == AV_PICTURE_TYPE_I ? rcc->last_mb_var_sum
758                                                                     : rcc->last_mc_mb_var_sum;
759         update_predictor(&rcc->pred[s->last_pict_type],
760                          rcc->last_qscale,
761                          sqrt(last_var), s->frame_bits);
762     }
763
764     if (s->flags & CODEC_FLAG_PASS2) {
765         assert(picture_number >= 0);
766         assert(picture_number < rcc->num_entries);
767         rce         = &rcc->entry[picture_number];
768         wanted_bits = rce->expected_bits;
769     } else {
770         Picture *dts_pic;
771         rce = &local_rce;
772
773         /* FIXME add a dts field to AVFrame and ensure it is set and use it
774          * here instead of reordering but the reordering is simpler for now
775          * until H.264 B-pyramid must be handled. */
776         if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay)
777             dts_pic = s->current_picture_ptr;
778         else
779             dts_pic = s->last_picture_ptr;
780
781         if (!dts_pic || dts_pic->f->pts == AV_NOPTS_VALUE)
782             wanted_bits = (uint64_t)(s->bit_rate * (double)picture_number / fps);
783         else
784             wanted_bits = (uint64_t)(s->bit_rate * (double)dts_pic->f->pts / fps);
785     }
786
787     diff = s->total_bits - wanted_bits;
788     br_compensation = (a->bit_rate_tolerance - diff) / a->bit_rate_tolerance;
789     if (br_compensation <= 0.0)
790         br_compensation = 0.001;
791
792     var = pict_type == AV_PICTURE_TYPE_I ? pic->mb_var_sum : pic->mc_mb_var_sum;
793
794     short_term_q = 0; /* avoid warning */
795     if (s->flags & CODEC_FLAG_PASS2) {
796         if (pict_type != AV_PICTURE_TYPE_I)
797             assert(pict_type == rce->new_pict_type);
798
799         q = rce->new_qscale / br_compensation;
800         ff_dlog(s, "%f %f %f last:%d var:%d type:%d//\n", q, rce->new_qscale,
801                 br_compensation, s->frame_bits, var, pict_type);
802     } else {
803         rce->pict_type     =
804         rce->new_pict_type = pict_type;
805         rce->mc_mb_var_sum = pic->mc_mb_var_sum;
806         rce->mb_var_sum    = pic->mb_var_sum;
807         rce->qscale        = FF_QP2LAMBDA * 2;
808         rce->f_code        = s->f_code;
809         rce->b_code        = s->b_code;
810         rce->misc_bits     = 1;
811
812         bits = predict_size(&rcc->pred[pict_type], rce->qscale, sqrt(var));
813         if (pict_type == AV_PICTURE_TYPE_I) {
814             rce->i_count    = s->mb_num;
815             rce->i_tex_bits = bits;
816             rce->p_tex_bits = 0;
817             rce->mv_bits    = 0;
818         } else {
819             rce->i_count    = 0;    // FIXME we do know this approx
820             rce->i_tex_bits = 0;
821             rce->p_tex_bits = bits * 0.9;
822             rce->mv_bits    = bits * 0.1;
823         }
824         rcc->i_cplx_sum[pict_type]  += rce->i_tex_bits * rce->qscale;
825         rcc->p_cplx_sum[pict_type]  += rce->p_tex_bits * rce->qscale;
826         rcc->mv_bits_sum[pict_type] += rce->mv_bits;
827         rcc->frame_count[pict_type]++;
828
829         bits        = rce->i_tex_bits + rce->p_tex_bits;
830         rate_factor = rcc->pass1_wanted_bits /
831                       rcc->pass1_rc_eq_output_sum * br_compensation;
832
833         q = get_qscale(s, rce, rate_factor, picture_number);
834         if (q < 0)
835             return -1;
836
837         assert(q > 0.0);
838         q = get_diff_limited_q(s, rce, q);
839         assert(q > 0.0);
840
841         // FIXME type dependent blur like in 2-pass
842         if (pict_type == AV_PICTURE_TYPE_P || s->intra_only) {
843             rcc->short_term_qsum   *= a->qblur;
844             rcc->short_term_qcount *= a->qblur;
845
846             rcc->short_term_qsum += q;
847             rcc->short_term_qcount++;
848             q = short_term_q = rcc->short_term_qsum / rcc->short_term_qcount;
849         }
850         assert(q > 0.0);
851
852         q = modify_qscale(s, rce, q, picture_number);
853
854         rcc->pass1_wanted_bits += s->bit_rate / fps;
855
856         assert(q > 0.0);
857     }
858
859     if (s->avctx->debug & FF_DEBUG_RC) {
860         av_log(s->avctx, AV_LOG_DEBUG,
861                "%c qp:%d<%2.1f<%d %d want:%d total:%d comp:%f st_q:%2.2f "
862                "size:%d var:%d/%d br:%d fps:%d\n",
863                av_get_picture_type_char(pict_type),
864                qmin, q, qmax, picture_number,
865                (int)wanted_bits / 1000, (int)s->total_bits / 1000,
866                br_compensation, short_term_q, s->frame_bits,
867                pic->mb_var_sum, pic->mc_mb_var_sum,
868                s->bit_rate / 1000, (int)fps);
869     }
870
871     if (q < qmin)
872         q = qmin;
873     else if (q > qmax)
874         q = qmax;
875
876     if (s->adaptive_quant)
877         adaptive_quantization(s, q);
878     else
879         q = (int)(q + 0.5);
880
881     if (!dry_run) {
882         rcc->last_qscale        = q;
883         rcc->last_mc_mb_var_sum = pic->mc_mb_var_sum;
884         rcc->last_mb_var_sum    = pic->mb_var_sum;
885     }
886     return q;
887 }
888
889 // ----------------------------------------------
890 // 2-Pass code
891
892 static int init_pass2(MpegEncContext *s)
893 {
894     RateControlContext *rcc = &s->rc_context;
895     AVCodecContext *a       = s->avctx;
896     int i, toobig;
897     double fps             = 1 / av_q2d(s->avctx->time_base);
898     double complexity[5]   = { 0 }; // approximate bits at quant=1
899     uint64_t const_bits[5] = { 0 }; // quantizer independent bits
900     uint64_t all_const_bits;
901     uint64_t all_available_bits = (uint64_t)(s->bit_rate *
902                                              (double)rcc->num_entries / fps);
903     double rate_factor          = 0;
904     double step;
905     const int filter_size = (int)(a->qblur * 4) | 1;
906     double expected_bits;
907     double *qscale, *blurred_qscale, qscale_sum;
908
909     /* find complexity & const_bits & decide the pict_types */
910     for (i = 0; i < rcc->num_entries; i++) {
911         RateControlEntry *rce = &rcc->entry[i];
912
913         rce->new_pict_type                = rce->pict_type;
914         rcc->i_cplx_sum[rce->pict_type]  += rce->i_tex_bits * rce->qscale;
915         rcc->p_cplx_sum[rce->pict_type]  += rce->p_tex_bits * rce->qscale;
916         rcc->mv_bits_sum[rce->pict_type] += rce->mv_bits;
917         rcc->frame_count[rce->pict_type]++;
918
919         complexity[rce->new_pict_type] += (rce->i_tex_bits + rce->p_tex_bits) *
920                                           (double)rce->qscale;
921         const_bits[rce->new_pict_type] += rce->mv_bits + rce->misc_bits;
922     }
923
924     all_const_bits = const_bits[AV_PICTURE_TYPE_I] +
925                      const_bits[AV_PICTURE_TYPE_P] +
926                      const_bits[AV_PICTURE_TYPE_B];
927
928     if (all_available_bits < all_const_bits) {
929         av_log(s->avctx, AV_LOG_ERROR, "requested bitrate is too low\n");
930         return -1;
931     }
932
933     qscale         = av_malloc(sizeof(double) * rcc->num_entries);
934     blurred_qscale = av_malloc(sizeof(double) * rcc->num_entries);
935     toobig = 0;
936
937     for (step = 256 * 256; step > 0.0000001; step *= 0.5) {
938         expected_bits = 0;
939         rate_factor  += step;
940
941         rcc->buffer_index = s->avctx->rc_buffer_size / 2;
942
943         /* find qscale */
944         for (i = 0; i < rcc->num_entries; i++) {
945             RateControlEntry *rce = &rcc->entry[i];
946
947             qscale[i] = get_qscale(s, &rcc->entry[i], rate_factor, i);
948             rcc->last_qscale_for[rce->pict_type] = qscale[i];
949         }
950         assert(filter_size % 2 == 1);
951
952         /* fixed I/B QP relative to P mode */
953         for (i = rcc->num_entries - 1; i >= 0; i--) {
954             RateControlEntry *rce = &rcc->entry[i];
955
956             qscale[i] = get_diff_limited_q(s, rce, qscale[i]);
957         }
958
959         /* smooth curve */
960         for (i = 0; i < rcc->num_entries; i++) {
961             RateControlEntry *rce = &rcc->entry[i];
962             const int pict_type   = rce->new_pict_type;
963             int j;
964             double q = 0.0, sum = 0.0;
965
966             for (j = 0; j < filter_size; j++) {
967                 int index    = i + j - filter_size / 2;
968                 double d     = index - i;
969                 double coeff = a->qblur == 0 ? 1.0 : exp(-d * d / (a->qblur * a->qblur));
970
971                 if (index < 0 || index >= rcc->num_entries)
972                     continue;
973                 if (pict_type != rcc->entry[index].new_pict_type)
974                     continue;
975                 q   += qscale[index] * coeff;
976                 sum += coeff;
977             }
978             blurred_qscale[i] = q / sum;
979         }
980
981         /* find expected bits */
982         for (i = 0; i < rcc->num_entries; i++) {
983             RateControlEntry *rce = &rcc->entry[i];
984             double bits;
985
986             rce->new_qscale = modify_qscale(s, rce, blurred_qscale[i], i);
987
988             bits  = qp2bits(rce, rce->new_qscale) + rce->mv_bits + rce->misc_bits;
989             bits += 8 * ff_vbv_update(s, bits);
990
991             rce->expected_bits = expected_bits;
992             expected_bits     += bits;
993         }
994
995         ff_dlog(s->avctx,
996                 "expected_bits: %f all_available_bits: %d rate_factor: %f\n",
997                 expected_bits, (int)all_available_bits, rate_factor);
998         if (expected_bits > all_available_bits) {
999             rate_factor -= step;
1000             ++toobig;
1001         }
1002     }
1003     av_free(qscale);
1004     av_free(blurred_qscale);
1005
1006     /* check bitrate calculations and print info */
1007     qscale_sum = 0.0;
1008     for (i = 0; i < rcc->num_entries; i++) {
1009         ff_dlog(s, "[lavc rc] entry[%d].new_qscale = %.3f  qp = %.3f\n",
1010                 i,
1011                 rcc->entry[i].new_qscale,
1012                 rcc->entry[i].new_qscale / FF_QP2LAMBDA);
1013         qscale_sum += av_clip(rcc->entry[i].new_qscale / FF_QP2LAMBDA,
1014                               s->avctx->qmin, s->avctx->qmax);
1015     }
1016     assert(toobig <= 40);
1017     av_log(s->avctx, AV_LOG_DEBUG,
1018            "[lavc rc] requested bitrate: %d bps  expected bitrate: %d bps\n",
1019            s->bit_rate,
1020            (int)(expected_bits / ((double)all_available_bits / s->bit_rate)));
1021     av_log(s->avctx, AV_LOG_DEBUG,
1022            "[lavc rc] estimated target average qp: %.3f\n",
1023            (float)qscale_sum / rcc->num_entries);
1024     if (toobig == 0) {
1025         av_log(s->avctx, AV_LOG_INFO,
1026                "[lavc rc] Using all of requested bitrate is not "
1027                "necessary for this video with these parameters.\n");
1028     } else if (toobig == 40) {
1029         av_log(s->avctx, AV_LOG_ERROR,
1030                "[lavc rc] Error: bitrate too low for this video "
1031                "with these parameters.\n");
1032         return -1;
1033     } else if (fabs(expected_bits / all_available_bits - 1.0) > 0.01) {
1034         av_log(s->avctx, AV_LOG_ERROR,
1035                "[lavc rc] Error: 2pass curve failed to converge\n");
1036         return -1;
1037     }
1038
1039     return 0;
1040 }