Statistics
| Branch: | Revision:

ffmpeg / libavcodec / ratecontrol.h @ 2912e87a

History | View | Annotate | Download (3.29 KB)

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 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
#ifndef AVCODEC_RATECONTROL_H
24
#define AVCODEC_RATECONTROL_H
25

    
26
/**
27
 * @file
28
 * ratecontrol header.
29
 */
30

    
31
#include <stdio.h>
32
#include <stdint.h>
33
#include "libavutil/eval.h"
34

    
35
typedef struct Predictor{
36
    double coeff;
37
    double count;
38
    double decay;
39
} Predictor;
40

    
41
typedef struct RateControlEntry{
42
    int pict_type;
43
    float qscale;
44
    int mv_bits;
45
    int i_tex_bits;
46
    int p_tex_bits;
47
    int misc_bits;
48
    int header_bits;
49
    uint64_t expected_bits;
50
    int new_pict_type;
51
    float new_qscale;
52
    int mc_mb_var_sum;
53
    int mb_var_sum;
54
    int i_count;
55
    int skip_count;
56
    int f_code;
57
    int b_code;
58
}RateControlEntry;
59

    
60
/**
61
 * rate control context.
62
 */
63
typedef struct RateControlContext{
64
    FILE *stats_file;
65
    int num_entries;              ///< number of RateControlEntries
66
    RateControlEntry *entry;
67
    double buffer_index;          ///< amount of bits in the video/audio buffer
68
    Predictor pred[5];
69
    double short_term_qsum;       ///< sum of recent qscales
70
    double short_term_qcount;     ///< count of recent qscales
71
    double pass1_rc_eq_output_sum;///< sum of the output of the rc equation, this is used for normalization
72
    double pass1_wanted_bits;     ///< bits which should have been outputed by the pass1 code (including complexity init)
73
    double last_qscale;
74
    double last_qscale_for[5];    ///< last qscale for a specific pict type, used for max_diff & ipb factor stuff
75
    int last_mc_mb_var_sum;
76
    int last_mb_var_sum;
77
    uint64_t i_cplx_sum[5];
78
    uint64_t p_cplx_sum[5];
79
    uint64_t mv_bits_sum[5];
80
    uint64_t qscale_sum[5];
81
    int frame_count[5];
82
    int last_non_b_pict_type;
83

    
84
    void *non_lavc_opaque;        ///< context for non lavc rc code (for example xvid)
85
    float dry_run_qscale;         ///< for xvid rc
86
    int last_picture_number;      ///< for xvid rc
87
    AVExpr * rc_eq_eval;
88
}RateControlContext;
89

    
90
struct MpegEncContext;
91

    
92
/* rate control */
93
int ff_rate_control_init(struct MpegEncContext *s);
94
float ff_rate_estimate_qscale(struct MpegEncContext *s, int dry_run);
95
void ff_write_pass1_stats(struct MpegEncContext *s);
96
void ff_rate_control_uninit(struct MpegEncContext *s);
97
int ff_vbv_update(struct MpegEncContext *s, int frame_size);
98
void ff_get_2pass_fcode(struct MpegEncContext *s);
99

    
100
int ff_xvid_rate_control_init(struct MpegEncContext *s);
101
void ff_xvid_rate_control_uninit(struct MpegEncContext *s);
102
float ff_xvid_rate_estimate_qscale(struct MpegEncContext *s, int dry_run);
103

    
104
#endif /* AVCODEC_RATECONTROL_H */
105