Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

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