tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ratecontrol.h (2916B)


      1 /*
      2 * Ratecontrol
      3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
      4 * Copyright (c) 2002-2004 Michael Niedermayer
      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 #ifndef AVCODEC_RATECONTROL_H
     24 #define AVCODEC_RATECONTROL_H
     25 
     26 /**
     27 * @file
     28 * ratecontrol header.
     29 */
     30 
     31 #include <stdint.h>
     32 
     33 typedef struct Predictor{
     34    double coeff;
     35    double count;
     36    double decay;
     37 } Predictor;
     38 
     39 typedef struct RateControlEntry{
     40    int pict_type;
     41    float qscale;
     42    int i_count;
     43    int f_code;
     44    int b_code;
     45    int mv_bits;
     46    int i_tex_bits;
     47    int p_tex_bits;
     48    int misc_bits;
     49    int header_bits;
     50    uint64_t expected_bits;
     51    int new_pict_type;
     52    float new_qscale;
     53    int64_t mc_mb_var_sum;
     54    int64_t mb_var_sum;
     55 }RateControlEntry;
     56 
     57 /**
     58 * rate control context.
     59 */
     60 typedef struct RateControlContext{
     61    int num_entries;              ///< number of RateControlEntries
     62    RateControlEntry *entry;
     63    double buffer_index;          ///< amount of bits in the video/audio buffer
     64    Predictor pred[5];
     65    double short_term_qsum;       ///< sum of recent qscales
     66    double short_term_qcount;     ///< count of recent qscales
     67    double pass1_rc_eq_output_sum;///< sum of the output of the rc equation, this is used for normalization
     68    double pass1_wanted_bits;     ///< bits which should have been output by the pass1 code (including complexity init)
     69    double last_qscale;
     70    double last_qscale_for[5];    ///< last qscale for a specific pict type, used for max_diff & ipb factor stuff
     71    int64_t last_mc_mb_var_sum;
     72    int64_t last_mb_var_sum;
     73    uint64_t i_cplx_sum[5];
     74    uint64_t p_cplx_sum[5];
     75    uint64_t mv_bits_sum[5];
     76    uint64_t qscale_sum[5];
     77    int frame_count[5];
     78    int last_non_b_pict_type;
     79 
     80    struct AVExpr *rc_eq_eval;
     81 }RateControlContext;
     82 
     83 struct MpegEncContext;
     84 
     85 /* rate control */
     86 int ff_rate_control_init(struct MpegEncContext *s);
     87 float ff_rate_estimate_qscale(struct MpegEncContext *s, int dry_run);
     88 void ff_write_pass1_stats(struct MpegEncContext *s);
     89 int ff_vbv_update(struct MpegEncContext *s, int frame_size);
     90 void ff_get_2pass_fcode(struct MpegEncContext *s);
     91 void ff_rate_control_uninit(RateControlContext *rcc);
     92 
     93 #endif /* AVCODEC_RATECONTROL_H */