FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
ratecontrol.h
Go to the documentation of this file.
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 <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 */
Generated on Sat May 25 2013 04:01:09 for FFmpeg by
1.8.2