~ubuntu-dev/mplayer/ubuntu-feisty

« back to all changes in this revision

Viewing changes to xvid_vbr.h

  • Committer: Reinhard Tartler
  • Date: 2006-07-08 08:45:33 UTC
  • Revision ID: siretart@tauware.de-20060708084533-dbc155bde7122e78
imported mplayer_0.99+1.0pre7try2+cvs20060117

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/******************************************************************************
 
2
 *
 
3
 *   XviD VBR Library
 
4
 *   
 
5
 *   Copyright (C) 2002 Edouard Gomez <ed.gomez@wanadoo.fr>
 
6
 *
 
7
 *   The curve treatment algorithm is based on work done by Foxer <email?> and
 
8
 *   Dirk Knop <dknop@gwdg.de> for the XviD vfw dynamic library.
 
9
 *
 
10
 *  This program is free software; you can redistribute it and/or modify
 
11
 *  it under the terms of the GNU General Public License as published by
 
12
 *  the Free Software Foundation; either version 2 of the License, or
 
13
 *  (at your option) any later version.
 
14
 *
 
15
 *  This program is distributed in the hope that it will be useful,
 
16
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
17
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
18
 *  GNU General Public License for more details.
 
19
 *
 
20
 *  You should have received a copy of the GNU General Public License
 
21
 *  along with this program; if not, write to the Free Software
 
22
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
23
 *
 
24
 *****************************************************************************/
 
25
 
 
26
#ifndef __XVID_VBR_H__
 
27
#define __XVID_VBR_H__
 
28
 
 
29
#define VBR_VERSION 0
 
30
 
 
31
/******************************************************************************
 
32
 * Function types used in the vbr controler
 
33
 *****************************************************************************/
 
34
 
 
35
typedef int (vbr_init_function)(void *state);
 
36
typedef vbr_init_function *vbr_init_function_ptr;
 
37
 
 
38
typedef int (vbr_get_quant_function)(void *state);
 
39
typedef vbr_get_quant_function *vbr_get_quant_function_ptr;
 
40
 
 
41
typedef int (vbr_get_intra_function)(void *state);
 
42
typedef vbr_get_intra_function *vbr_get_intra_function_ptr;
 
43
 
 
44
typedef int (vbr_update_function)(void *state,
 
45
                                  int quant,
 
46
                                  int intra,
 
47
                                  int header_bytes,
 
48
                                  int total_bytes,
 
49
                                  int kblocks,
 
50
                                  int mblocks,
 
51
                                  int ublocks);
 
52
typedef vbr_update_function *vbr_update_function_ptr;
 
53
 
 
54
typedef int (vbr_finish_function)(void *state);
 
55
typedef vbr_finish_function *vbr_finish_function_ptr;
 
56
 
 
57
/******************************************************************************
 
58
 * The VBR CONTROLER structure - the spin of the library
 
59
 *****************************************************************************/
 
60
 
 
61
typedef struct _vbr_control_t
 
62
{
 
63
 
 
64
        /* All modes - specifies what VBR algorithm has to be used */
 
65
        int mode;
 
66
 
 
67
        /* All modes - specifies what fps the movie uses */
 
68
        float fps;
 
69
 
 
70
        /* All modes */
 
71
        int debug;
 
72
 
 
73
        /*
 
74
         * For VBR_MODE_2PASS_1/2 - specifies from/to what file the vbr
 
75
         * controller has to write/read stats
 
76
         */
 
77
        char *filename;
 
78
 
 
79
        /* For VBR_MODE_2PASS_2 - Target size */
 
80
        int desired_bitrate;
 
81
 
 
82
        /* For VBR_MODE_2PASS_2 - Credits parameters */
 
83
        int credits_mode;
 
84
        int credits_start;
 
85
        int credits_start_begin;
 
86
        int credits_start_end;
 
87
        int credits_end;
 
88
        int credits_end_begin;
 
89
        int credits_end_end;
 
90
        int credits_quant_ratio;
 
91
        int credits_fixed_quant;
 
92
        int credits_quant_i;
 
93
        int credits_quant_p;
 
94
        int credits_start_size;
 
95
        int credits_end_size;
 
96
 
 
97
        /* For VBR_MODE_2PASS_2 - keyframe parameters */
 
98
        int keyframe_boost;
 
99
        int kftreshold;
 
100
        int kfreduction;
 
101
        int min_key_interval;
 
102
        int max_key_interval;
 
103
 
 
104
        /* For VBR_MODE_2PASS_2 - Normal curve */
 
105
        int curve_compression_high;
 
106
        int curve_compression_low;
 
107
 
 
108
        /* For VBR_MODE_2PASS_2 - Alternate curve parameters */
 
109
        int use_alt_curve;
 
110
        int alt_curve_type;
 
111
        int alt_curve_low_dist;
 
112
        int alt_curve_high_dist;
 
113
        int alt_curve_min_rel_qual;
 
114
        int alt_curve_use_auto;
 
115
        int alt_curve_auto_str;
 
116
        int alt_curve_use_auto_bonus_bias;
 
117
        int alt_curve_bonus_bias;
 
118
        int bitrate_payback_method;
 
119
        int bitrate_payback_delay;
 
120
        int max_iquant;
 
121
        int min_iquant;
 
122
        int max_pquant;
 
123
        int min_pquant;
 
124
        int twopass_max_bitrate;
 
125
        int twopass_max_overflow_improvement;
 
126
        int twopass_max_overflow_degradation;
 
127
 
 
128
        /*
 
129
         * For VBR_MODE_FIXED_QUANT - the quantizer that has to be used for all
 
130
         * frames
 
131
         */
 
132
        int fixed_quant;
 
133
 
 
134
        /* ----------- Internal data - Do not modify ----------- */
 
135
        void *debug_file;
 
136
        void *pass1_file;
 
137
 
 
138
        long long desired_size;
 
139
 
 
140
        int cur_frame;
 
141
        int nb_frames;
 
142
        int nb_keyframes;
 
143
 
 
144
        int *keyframe_locations;
 
145
        int last_keyframe;
 
146
 
 
147
        double credits_start_curve;
 
148
        double credits_end_curve;
 
149
        double movie_curve;
 
150
        double average_frame;
 
151
        double alt_curve_low;
 
152
        double alt_curve_low_diff;
 
153
        double alt_curve_high;
 
154
        double alt_curve_high_diff;
 
155
        double alt_curve_mid_qual;
 
156
        double alt_curve_qual_dev;
 
157
        double curve_bias_bonus;
 
158
        double curve_comp_scale;
 
159
        double curve_comp_error;
 
160
 
 
161
        int pass1_quant;
 
162
        int pass1_intra;
 
163
        int pass1_bytes;
 
164
 
 
165
        int bytes1;
 
166
        int bytes2;
 
167
        int desired_bytes2;
 
168
        int max_framesize;
 
169
        int last_quant;
 
170
        int quant_count[32];
 
171
        double quant_error[32];
 
172
 
 
173
        int overflow;
 
174
        int KFoverflow;
 
175
        int KFoverflow_partial;
 
176
        int KF_idx;
 
177
 
 
178
        int debug_quant_count[32];
 
179
 
 
180
        /* ----------- Internal data - do not modify ----------- */
 
181
        vbr_init_function_ptr      init;
 
182
        vbr_get_quant_function_ptr getquant;
 
183
        vbr_get_intra_function_ptr getintra;    
 
184
        vbr_update_function_ptr    update;
 
185
        vbr_finish_function_ptr    finish;
 
186
 
 
187
}vbr_control_t;
 
188
 
 
189
/******************************************************************************
 
190
 * Constants
 
191
 *****************************************************************************/
 
192
 
 
193
/* Constants for the mode member */
 
194
#define VBR_MODE_1PASS       0x01
 
195
#define VBR_MODE_2PASS_1     0x02
 
196
#define VBR_MODE_2PASS_2     0x04
 
197
#define VBR_MODE_FIXED_QUANT 0x08
 
198
 
 
199
/* Constants for the credits mode */
 
200
#define VBR_CREDITS_MODE_RATE  0x01
 
201
#define VBR_CREDITS_MODE_QUANT 0x02
 
202
#define VBR_CREDITS_MODE_SIZE  0x04
 
203
 
 
204
/* Alternate curve treatment types */
 
205
#define VBR_ALT_CURVE_SOFT      0x01
 
206
#define VBR_ALT_CURVE_LINEAR    0x02
 
207
#define VBR_ALT_CURVE_AGGRESIVE 0x04
 
208
 
 
209
/* Payback modes */
 
210
#define VBR_PAYBACK_BIAS            0x01
 
211
#define VBR_PAYBACK_PROPORTIONAL    0x02
 
212
 
 
213
/******************************************************************************
 
214
 * VBR API
 
215
 *****************************************************************************/
 
216
 
 
217
extern int vbrSetDefaults(vbr_control_t *state);
 
218
extern int vbrInit(vbr_control_t *state);
 
219
extern int vbrGetQuant(vbr_control_t *state);
 
220
extern int vbrGetIntra(vbr_control_t *state);
 
221
extern int vbrUpdate(vbr_control_t *state,
 
222
                     int quant,
 
223
                     int intra,
 
224
                     int header_bytes,
 
225
                     int total_bytes,
 
226
                     int kblocks,
 
227
                     int mblocks,
 
228
                     int ublocks);
 
229
extern int vbrFinish(vbr_control_t *state);
 
230
 
 
231
#endif