FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
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
int64_t
mc_mb_var_sum
;
53
int64_t
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
int
num_entries
;
///< number of RateControlEntries
65
RateControlEntry
*
entry
;
66
double
buffer_index
;
///< amount of bits in the video/audio buffer
67
Predictor
pred
[5];
68
double
short_term_qsum
;
///< sum of recent qscales
69
double
short_term_qcount
;
///< count of recent qscales
70
double
pass1_rc_eq_output_sum
;
///< sum of the output of the rc equation, this is used for normalization
71
double
pass1_wanted_bits
;
///< bits which should have been outputed by the pass1 code (including complexity init)
72
double
last_qscale
;
73
double
last_qscale_for
[5];
///< last qscale for a specific pict type, used for max_diff & ipb factor stuff
74
int64_t
last_mc_mb_var_sum
;
75
int64_t
last_mb_var_sum
;
76
uint64_t
i_cplx_sum
[5];
77
uint64_t
p_cplx_sum
[5];
78
uint64_t
mv_bits_sum
[5];
79
uint64_t
qscale_sum
[5];
80
int
frame_count
[5];
81
int
last_non_b_pict_type
;
82
83
void
*
non_lavc_opaque
;
///< context for non lavc rc code (for example xvid)
84
float
dry_run_qscale
;
///< for xvid rc
85
int
last_picture_number
;
///< for xvid rc
86
AVExpr
*
rc_eq_eval
;
87
}
RateControlContext
;
88
89
struct
MpegEncContext
;
90
91
/* rate control */
92
int
ff_rate_control_init
(
struct
MpegEncContext
*
s
);
93
float
ff_rate_estimate_qscale
(
struct
MpegEncContext
*
s
,
int
dry_run);
94
void
ff_write_pass1_stats
(
struct
MpegEncContext
*
s
);
95
void
ff_rate_control_uninit
(
struct
MpegEncContext
*
s
);
96
int
ff_vbv_update
(
struct
MpegEncContext
*
s
,
int
frame_size
);
97
void
ff_get_2pass_fcode
(
struct
MpegEncContext
*
s
);
98
99
int
ff_xvid_rate_control_init
(
struct
MpegEncContext
*
s
);
100
void
ff_xvid_rate_control_uninit
(
struct
MpegEncContext
*
s
);
101
float
ff_xvid_rate_estimate_qscale
(
struct
MpegEncContext
*
s
,
int
dry_run);
102
103
#endif
/* AVCODEC_RATECONTROL_H */
Generated on Fri Dec 5 2014 04:42:01 for FFmpeg by
1.8.2