Mercurial > libavcodec.hg
annotate mpegvideo.h @ 625:bb6a69f9d409 libavcodec
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
per context DCT selection
author | michaelni |
---|---|
date | Thu, 29 Aug 2002 23:55:32 +0000 |
parents | 4f3d4a07d374 |
children | f596db4aa871 |
rev | line source |
---|---|
0 | 1 /* |
2 * Generic DCT based hybrid video encoder | |
429 | 3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard. |
0 | 4 * |
429 | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Lesser General Public | |
7 * License as published by the Free Software Foundation; either | |
8 * version 2 of the License, or (at your option) any later version. | |
0 | 9 * |
429 | 10 * This library is distributed in the hope that it will be useful, |
0 | 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
429 | 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 * Lesser General Public License for more details. | |
0 | 14 * |
429 | 15 * You should have received a copy of the GNU Lesser General Public |
16 * License along with this library; if not, write to the Free Software | |
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
0 | 18 */ |
19 | |
440
000aeeac27a2
* started to cleanup name clashes for onetime compilation
kabi
parents:
429
diff
changeset
|
20 #ifndef AVCODEC_MPEGVIDEO_H |
000aeeac27a2
* started to cleanup name clashes for onetime compilation
kabi
parents:
429
diff
changeset
|
21 #define AVCODEC_MPEGVIDEO_H |
000aeeac27a2
* started to cleanup name clashes for onetime compilation
kabi
parents:
429
diff
changeset
|
22 |
333 | 23 #define FRAME_SKIPED 100 // return value for header parsers if frame is not coded |
24 | |
0 | 25 enum OutputFormat { |
26 FMT_MPEG1, | |
27 FMT_H263, | |
324 | 28 FMT_MJPEG, |
0 | 29 }; |
30 | |
31 #define MPEG_BUF_SIZE (16 * 1024) | |
32 | |
220 | 33 #define QMAT_SHIFT_MMX 19 |
34 #define QMAT_SHIFT 25 | |
35 | |
277
5cb2978e701f
new motion estimation (epzs) not complete yet but allready pretty good :)
michaelni
parents:
268
diff
changeset
|
36 #define MAX_FCODE 7 |
5cb2978e701f
new motion estimation (epzs) not complete yet but allready pretty good :)
michaelni
parents:
268
diff
changeset
|
37 #define MAX_MV 2048 |
324 | 38 #define REORDER_BUFFER_SIZE (FF_MAX_B_FRAMES+2) |
277
5cb2978e701f
new motion estimation (epzs) not complete yet but allready pretty good :)
michaelni
parents:
268
diff
changeset
|
39 |
456 | 40 #define ME_MAP_SIZE 64 |
41 #define ME_MAP_SHIFT 3 | |
42 #define ME_MAP_MV_BITS 11 | |
43 | |
500 | 44 /* run length table */ |
45 #define MAX_RUN 64 | |
46 #define MAX_LEVEL 64 | |
47 | |
268 | 48 typedef struct Predictor{ |
49 double coeff; | |
50 double count; | |
51 double decay; | |
52 } Predictor; | |
53 | |
329 | 54 typedef struct RateControlEntry{ |
55 int pict_type; | |
56 int qscale; | |
57 int mv_bits; | |
58 int i_tex_bits; | |
59 int p_tex_bits; | |
60 int misc_bits; | |
429 | 61 UINT64 expected_bits; |
329 | 62 int new_pict_type; |
63 float new_qscale; | |
612 | 64 int mc_mb_var_sum; |
65 int mb_var_sum; | |
66 int i_count; | |
67 int f_code; | |
68 int b_code; | |
329 | 69 }RateControlEntry; |
70 | |
71 typedef struct RateControlContext{ | |
72 FILE *stats_file; | |
612 | 73 int num_entries; /* number of RateControlEntries */ |
329 | 74 RateControlEntry *entry; |
612 | 75 int buffer_index; /* amount of bits in the video/audio buffer */ |
76 Predictor pred[5]; | |
77 double short_term_qsum; /* sum of recent qscales */ | |
78 double short_term_qcount; /* count of recent qscales */ | |
79 double pass1_bits; /* bits outputted by the pass1 code (including complexity init) */ | |
80 double pass1_wanted_bits; /* bits which should have been outputed by the pass1 code (including complexity init) */ | |
81 double last_qscale; | |
82 double last_qscale_for[5]; /* last qscale for a specific pict type */ | |
83 double next_non_b_qscale; | |
84 double next_p_qscale; | |
85 int last_mc_mb_var_sum; | |
86 int last_mb_var_sum; | |
87 UINT64 i_cplx_sum[5]; | |
88 UINT64 p_cplx_sum[5]; | |
89 UINT64 mv_bits_sum[5]; | |
90 UINT64 qscale_sum[5]; | |
91 int frame_count[5]; | |
329 | 92 }RateControlContext; |
93 | |
324 | 94 typedef struct ReorderBuffer{ |
95 UINT8 *picture[3]; | |
96 int pict_type; | |
97 int qscale; | |
98 int force_type; | |
99 int picture_number; | |
100 int picture_in_gop_number; | |
101 } ReorderBuffer; | |
102 | |
0 | 103 typedef struct MpegEncContext { |
71 | 104 struct AVCodecContext *avctx; |
0 | 105 /* the following parameters must be initialized before encoding */ |
106 int width, height; /* picture size. must be a multiple of 16 */ | |
107 int gop_size; | |
108 int frame_rate; /* number of frames per second */ | |
109 int intra_only; /* if true, only intra pictures are generated */ | |
110 int bit_rate; /* wanted bit rate */ | |
268 | 111 int bit_rate_tolerance; /* amount of +- bits (>0)*/ |
0 | 112 enum OutputFormat out_format; /* output format */ |
344 | 113 int h263_pred; /* use mpeg4/h263 ac/dc predictions */ |
114 | |
115 /* the following codec id fields are deprecated in favor of codec_id */ | |
0 | 116 int h263_plus; /* h263 plus headers */ |
117 int h263_rv10; /* use RV10 variation for H263 */ | |
344 | 118 int h263_msmpeg4; /* generate MSMPEG4 compatible stream (deprecated, use msmpeg4_version instead)*/ |
0 | 119 int h263_intel; /* use I263 intel h263 header */ |
344 | 120 |
121 int codec_id; /* see CODEC_ID_xxx */ | |
0 | 122 int fixed_qscale; /* fixed qscale if non zero */ |
268 | 123 float qcompress; /* amount of qscale change between easy & hard scenes (0.0-1.0) */ |
124 float qblur; /* amount of qscale smoothing over time (0.0-1.0) */ | |
125 int qmin; /* min qscale */ | |
126 int qmax; /* max qscale */ | |
127 int max_qdiff; /* max qscale difference between frames */ | |
7
1d3ac9654178
added skip macroblock optimization (big perf win on black regions for example)
glantau
parents:
0
diff
changeset
|
128 int encoding; /* true if we are encoding (vs decoding) */ |
294 | 129 int flags; /* AVCodecContext.flags (HQ, MV4, ...) */ |
324 | 130 int force_input_type;/* 0= no force, otherwise I_TYPE, P_TYPE, ... */ |
131 int max_b_frames; /* max number of b-frames for encoding */ | |
329 | 132 int b_frame_strategy; |
456 | 133 int luma_elim_threshold; |
134 int chroma_elim_threshold; | |
135 int strict_std_compliance; /* strictly follow the std (MPEG4, ...) */ | |
411
5c8b3a717929
workaround dc_scale bug in old ffmpeg msmpeg4v3 encoder (set workaround_bugs=1 for this)
michaelni
parents:
376
diff
changeset
|
136 int workaround_bugs; /* workaround bugs in encoders which cannot be detected automatically */ |
0 | 137 /* the following fields are managed internally by the encoder */ |
138 | |
139 /* bit output */ | |
140 PutBitContext pb; | |
141 | |
142 /* sequence parameters */ | |
143 int context_initialized; | |
324 | 144 int input_picture_number; |
145 int input_picture_in_gop_number; /* 0-> first pic in gop, ... */ | |
0 | 146 int picture_number; |
147 int fake_picture_number; /* picture number at the bitstream frame rate */ | |
277
5cb2978e701f
new motion estimation (epzs) not complete yet but allready pretty good :)
michaelni
parents:
268
diff
changeset
|
148 int gop_picture_number; /* index of the first picture of a GOP based on fake_pic_num & mpeg1 specific */ |
5cb2978e701f
new motion estimation (epzs) not complete yet but allready pretty good :)
michaelni
parents:
268
diff
changeset
|
149 int picture_in_gop_number; /* 0-> first pic in gop, ... */ |
324 | 150 int b_frames_since_non_b; /* used for encoding, relative to not yet reordered input */ |
151 int mb_width, mb_height; /* number of MBs horizontally & vertically */ | |
582
5132a4ee50cd
different edge positions fixed with edge emu / dr1
michaelni
parents:
556
diff
changeset
|
152 int h_edge_pos, v_edge_pos;/* horizontal / vertical position of the right/bottom edge (pixel replicateion)*/ |
233
3f5b72726118
- More work on preliminary bit rate control, just to be able to get an
pulento
parents:
232
diff
changeset
|
153 int mb_num; /* number of MBs of a picture */ |
0 | 154 int linesize; /* line size, in bytes, may be different from width */ |
556 | 155 int uvlinesize; /* line size, for chroma in bytes, may be different from width */ |
0 | 156 UINT8 *new_picture[3]; /* picture to be compressed */ |
324 | 157 UINT8 *picture_buffer[REORDER_BUFFER_SIZE][3]; /* internal buffers used for reordering of input pictures */ |
158 int picture_buffer_index; | |
159 ReorderBuffer coded_order[REORDER_BUFFER_SIZE]; | |
160 UINT8 *last_picture[3]; /* previous picture */ | |
0 | 161 UINT8 *last_picture_base[3]; /* real start of the picture */ |
324 | 162 UINT8 *next_picture[3]; /* previous picture (for bidir pred) */ |
0 | 163 UINT8 *next_picture_base[3]; /* real start of the picture */ |
324 | 164 UINT8 *aux_picture[3]; /* aux picture (for B frames only) */ |
165 UINT8 *aux_picture_base[3]; /* real start of the picture */ | |
166 UINT8 *current_picture[3]; /* buffer to store the decompressed current picture */ | |
553 | 167 void *last_dr_opaque; |
168 void *next_dr_opaque; | |
556 | 169 int ip_buffer_count; /* number of buffers, currently only >2 if dr1 is used */ |
341 | 170 int num_available_buffers; /* is 0 at the start & after seeking, after the first I frame its 1 after next I/P 2 */ |
324 | 171 int last_dc[3]; /* last DC values for MPEG1 */ |
172 INT16 *dc_val[3]; /* used for mpeg4 DC prediction, all 3 arrays must be continuous */ | |
0 | 173 int y_dc_scale, c_dc_scale; |
500 | 174 UINT8 *y_dc_scale_table; /* qscale -> y_dc_scale table */ |
175 UINT8 *c_dc_scale_table; /* qscale -> c_dc_scale table */ | |
324 | 176 UINT8 *coded_block; /* used for coded block pattern prediction (msmpeg4v3, wmv1)*/ |
177 INT16 (*ac_val[3])[16]; /* used for for mpeg4 AC prediction, all 3 arrays must be continuous */ | |
0 | 178 int ac_pred; |
7
1d3ac9654178
added skip macroblock optimization (big perf win on black regions for example)
glantau
parents:
0
diff
changeset
|
179 int mb_skiped; /* MUST BE SET only during DECODING */ |
324 | 180 UINT8 *mbskip_table; /* used to avoid copy if macroblock skipped (for black regions for example) |
181 and used for b-frame encoding & decoding (contains skip table of next P Frame) */ | |
182 UINT8 *mbintra_table; /* used to avoid setting {ac, dc, cbp}-pred stuff to zero on inter MB decoding */ | |
456 | 183 UINT8 *cbp_table; /* used to store cbp, ac_pred for partitioned decoding */ |
184 UINT8 *pred_dir_table; /* used to store pred_dir for partitioned decoding */ | |
185 INT8 *qscale_table; /* used to store qscale for partitioned decoding (& postprocessing FIXME export) */ | |
553 | 186 UINT8 *edge_emu_buffer; |
0 | 187 |
324 | 188 int input_qscale; /* qscale prior to reordering of frames */ |
189 int input_pict_type; /* pict_type prior to reordering of frames */ | |
190 int force_type; /* 0= no force, otherwise I_TYPE, P_TYPE, ... */ | |
191 int qscale; /* QP */ | |
192 int pict_type; /* I_TYPE, P_TYPE, B_TYPE, ... */ | |
612 | 193 int last_pict_type; |
329 | 194 int last_non_b_pict_type; /* used for mpeg4 gmc b-frames & ratecontrol */ |
0 | 195 int frame_rate_index; |
196 /* motion compensation */ | |
197 int unrestricted_mv; | |
198 int h263_long_vectors; /* use horrible h263v1 long vector mode */ | |
199 | |
324 | 200 int f_code; /* forward MV resolution */ |
201 int b_code; /* backward MV resolution for B Frames (mpeg4) */ | |
202 INT16 (*motion_val)[2]; /* used for MV prediction (4MV per MB) */ | |
203 INT16 (*p_mv_table)[2]; /* MV table (1MV per MB) p-frame encoding */ | |
204 INT16 (*b_forw_mv_table)[2]; /* MV table (1MV per MB) forward mode b-frame encoding */ | |
205 INT16 (*b_back_mv_table)[2]; /* MV table (1MV per MB) backward mode b-frame encoding */ | |
206 INT16 (*b_bidir_forw_mv_table)[2]; /* MV table (1MV per MB) bidir mode b-frame encoding */ | |
207 INT16 (*b_bidir_back_mv_table)[2]; /* MV table (1MV per MB) bidir mode b-frame encoding */ | |
208 INT16 (*b_direct_forw_mv_table)[2];/* MV table (1MV per MB) direct mode b-frame encoding */ | |
209 INT16 (*b_direct_back_mv_table)[2];/* MV table (1MV per MB) direct mode b-frame encoding */ | |
210 INT16 (*b_direct_mv_table)[2]; /* MV table (1MV per MB) direct mode b-frame encoding */ | |
327 | 211 int me_method; /* ME algorithm */ |
212 uint8_t *me_scratchpad; /* data area for the me algo, so that the ME doesnt need to malloc/free */ | |
456 | 213 uint32_t *me_map; /* map to avoid duplicate evaluations */ |
214 uint16_t *me_score_map; /* map to store the SADs */ | |
215 int me_map_generation; | |
216 int skip_me; /* set if ME is skiped for the current MB */ | |
608 | 217 int scene_change_score; |
0 | 218 int mv_dir; |
219 #define MV_DIR_BACKWARD 1 | |
220 #define MV_DIR_FORWARD 2 | |
262 | 221 #define MV_DIRECT 4 // bidirectional mode where the difference equals the MV of the last P/S/I-Frame (mpeg4) |
0 | 222 int mv_type; |
223 #define MV_TYPE_16X16 0 /* 1 vector for the whole mb */ | |
277
5cb2978e701f
new motion estimation (epzs) not complete yet but allready pretty good :)
michaelni
parents:
268
diff
changeset
|
224 #define MV_TYPE_8X8 1 /* 4 vectors (h263, mpeg4 4MV) */ |
0 | 225 #define MV_TYPE_16X8 2 /* 2 vectors, one per 16x8 block */ |
226 #define MV_TYPE_FIELD 3 /* 2 vectors, one per field */ | |
227 #define MV_TYPE_DMV 4 /* 2 vectors, special mpeg2 Dual Prime Vectors */ | |
228 /* motion vectors for a macroblock | |
229 first coordinate : 0 = forward 1 = backward | |
230 second " : depend on type | |
231 third " : 0 = x, 1 = y | |
232 */ | |
233 int mv[2][4][2]; | |
234 int field_select[2][2]; | |
324 | 235 int last_mv[2][2][2]; /* last MV, used for MV prediction in MPEG1 & B-frame MPEG4 */ |
277
5cb2978e701f
new motion estimation (epzs) not complete yet but allready pretty good :)
michaelni
parents:
268
diff
changeset
|
236 UINT16 (*mv_penalty)[MAX_MV*2+1]; /* amount of bits needed to encode a MV, used for ME */ |
5cb2978e701f
new motion estimation (epzs) not complete yet but allready pretty good :)
michaelni
parents:
268
diff
changeset
|
237 UINT8 *fcode_tab; /* smallest fcode needed for each MV */ |
0 | 238 |
239 int has_b_frames; | |
327 | 240 int no_rounding; /* apply no rounding to motion compensation (MPEG4, msmpeg4, ...) |
241 for b-frames rounding mode is allways 0 */ | |
0 | 242 |
345 | 243 int hurry_up; /* when set to 1 during decoding, b frames will be skiped |
244 when set to 2 idct/dequant will be skipped too */ | |
245 | |
0 | 246 /* macroblock layer */ |
247 int mb_x, mb_y; | |
248 int mb_incr; | |
249 int mb_intra; | |
456 | 250 UINT16 *mb_var; /* Table for MB variances */ |
251 UINT16 *mc_mb_var; /* Table for motion compensated MB variances */ | |
252 UINT8 *mb_type; /* Table for MB type */ | |
294 | 253 #define MB_TYPE_INTRA 0x01 |
254 #define MB_TYPE_INTER 0x02 | |
255 #define MB_TYPE_INTER4V 0x04 | |
256 #define MB_TYPE_SKIPED 0x08 | |
456 | 257 #define MB_TYPE_GMC 0x10 |
258 | |
294 | 259 #define MB_TYPE_DIRECT 0x10 |
260 #define MB_TYPE_FORWARD 0x20 | |
324 | 261 #define MB_TYPE_BACKWARD 0x40 |
294 | 262 #define MB_TYPE_BIDIR 0x80 |
266 | 263 |
324 | 264 int block_index[6]; /* index to current MB in block based arrays with edges*/ |
266 | 265 int block_wrap[6]; |
266 | |
0 | 267 /* matrix transmitted in the bitstream */ |
268 UINT16 intra_matrix[64]; | |
269 UINT16 chroma_intra_matrix[64]; | |
344 | 270 UINT16 inter_matrix[64]; |
271 UINT16 chroma_inter_matrix[64]; | |
272 #define QUANT_BIAS_SHIFT 4 | |
273 int intra_quant_bias; /* bias for the quantizer */ | |
274 int inter_quant_bias; /* bias for the quantizer */ | |
275 int min_qcoeff; /* minimum encodable coefficient */ | |
276 int max_qcoeff; /* maximum encodable coefficient */ | |
0 | 277 /* precomputed matrix (combine qscale and DCT renorm) */ |
344 | 278 int q_intra_matrix[32][64]; |
279 int q_inter_matrix[32][64]; | |
220 | 280 /* identical to the above but for MMX & these are not permutated */ |
344 | 281 UINT16 __align8 q_intra_matrix16[32][64]; |
282 UINT16 __align8 q_inter_matrix16[32][64]; | |
283 UINT16 __align8 q_intra_matrix16_bias[32][64]; | |
284 UINT16 __align8 q_inter_matrix16_bias[32][64]; | |
0 | 285 int block_last_index[6]; /* last non zero coefficient in block */ |
286 | |
287 void *opaque; /* private data for the user */ | |
288 | |
289 /* bit rate control */ | |
324 | 290 int I_frame_bits; //FIXME used in mpeg12 ... |
456 | 291 int mb_var_sum; /* sum of MB variance for current frame */ |
292 int mc_mb_var_sum; /* motion compensated MB variance for current frame */ | |
64 | 293 INT64 wanted_bits; |
294 INT64 total_bits; | |
329 | 295 int frame_bits; /* bits used for the current frame */ |
612 | 296 RateControlContext rc_context; // contains stuff only accessed in ratecontrol.c |
268 | 297 |
286 | 298 /* statistics, used for 2-pass encoding */ |
299 int mv_bits; | |
300 int header_bits; | |
301 int i_tex_bits; | |
302 int p_tex_bits; | |
303 int i_count; | |
304 int p_count; | |
305 int skip_count; | |
306 int misc_bits; // cbp, mb_type | |
307 int last_bits; //temp var used for calculating the above vars | |
456 | 308 |
309 /* error concealment / resync */ | |
310 int resync_mb_x; /* x position of last resync marker */ | |
311 int resync_mb_y; /* y position of last resync marker */ | |
312 int mb_num_left; /* number of MBs left in this video packet */ | |
313 GetBitContext next_resync_gb; /* starts at the next resync marker */ | |
314 int next_resync_qscale; /* qscale of next resync marker */ | |
315 int next_resync_pos; /* bitstream position of next resync marker */ | |
316 #define DECODING_AC_LOST -1 | |
317 #define DECODING_ACDC_LOST -2 | |
318 #define DECODING_DESYNC -3 | |
319 int decoding_error; | |
320 int next_p_frame_damaged; /* set if the next p frame is damaged, to avoid showing trashed b frames */ | |
321 int error_resilience; | |
286 | 322 |
154
f914f710b8d0
- Fixed a bug on H.263 MV prediction for MB on GOBs limits.
pulento
parents:
151
diff
changeset
|
323 /* H.263 specific */ |
f914f710b8d0
- Fixed a bug on H.263 MV prediction for MB on GOBs limits.
pulento
parents:
151
diff
changeset
|
324 int gob_number; |
162 | 325 int gob_index; |
248
56ee684c48bb
- H.263+ decoder support for Advanded INTRA Coding (buggy)
pulento
parents:
243
diff
changeset
|
326 |
79
82e579c37bc3
Moved some H.263+ variables to MpegEncContext to be thread-safe.
pulento
parents:
71
diff
changeset
|
327 /* H.263+ specific */ |
82e579c37bc3
Moved some H.263+ variables to MpegEncContext to be thread-safe.
pulento
parents:
71
diff
changeset
|
328 int umvplus; |
82e579c37bc3
Moved some H.263+ variables to MpegEncContext to be thread-safe.
pulento
parents:
71
diff
changeset
|
329 int umvplus_dec; |
248
56ee684c48bb
- H.263+ decoder support for Advanded INTRA Coding (buggy)
pulento
parents:
243
diff
changeset
|
330 int h263_aic; /* Advanded INTRA Coding (AIC) */ |
56ee684c48bb
- H.263+ decoder support for Advanded INTRA Coding (buggy)
pulento
parents:
243
diff
changeset
|
331 int h263_aic_dir; /* AIC direction: 0 = left, 1 = top */ |
79
82e579c37bc3
Moved some H.263+ variables to MpegEncContext to be thread-safe.
pulento
parents:
71
diff
changeset
|
332 |
0 | 333 /* mpeg4 specific */ |
262 | 334 int time_increment_resolution; |
324 | 335 int time_increment_bits; /* number of bits to represent the fractional part of time */ |
336 int last_time_base; | |
337 int time_base; /* time in seconds of last I,P,S Frame */ | |
429 | 338 INT64 time; /* time of current frame */ |
339 INT64 last_non_b_time; | |
340 UINT16 pp_time; /* time distance between the last 2 p,s,i frames */ | |
341 UINT16 bp_time; /* time distance between the last b and p,s,i frame */ | |
64 | 342 int shape; |
343 int vol_sprite_usage; | |
253
4448dd55d415
parsing more of the mpeg4 header & print some "not supported" stuff
michaelni
parents:
248
diff
changeset
|
344 int sprite_width; |
4448dd55d415
parsing more of the mpeg4 header & print some "not supported" stuff
michaelni
parents:
248
diff
changeset
|
345 int sprite_height; |
4448dd55d415
parsing more of the mpeg4 header & print some "not supported" stuff
michaelni
parents:
248
diff
changeset
|
346 int sprite_left; |
4448dd55d415
parsing more of the mpeg4 header & print some "not supported" stuff
michaelni
parents:
248
diff
changeset
|
347 int sprite_top; |
4448dd55d415
parsing more of the mpeg4 header & print some "not supported" stuff
michaelni
parents:
248
diff
changeset
|
348 int sprite_brightness_change; |
254
b4fed8b24e3a
gmc bitstream decoding support (the real motion compensation isnt implemnted yet)
michaelni
parents:
253
diff
changeset
|
349 int num_sprite_warping_points; |
255 | 350 int real_sprite_warping_points; |
254
b4fed8b24e3a
gmc bitstream decoding support (the real motion compensation isnt implemnted yet)
michaelni
parents:
253
diff
changeset
|
351 int sprite_offset[2][2]; |
b4fed8b24e3a
gmc bitstream decoding support (the real motion compensation isnt implemnted yet)
michaelni
parents:
253
diff
changeset
|
352 int sprite_delta[2][2][2]; |
b4fed8b24e3a
gmc bitstream decoding support (the real motion compensation isnt implemnted yet)
michaelni
parents:
253
diff
changeset
|
353 int sprite_shift[2][2]; |
b4fed8b24e3a
gmc bitstream decoding support (the real motion compensation isnt implemnted yet)
michaelni
parents:
253
diff
changeset
|
354 int mcsel; |
64 | 355 int quant_precision; |
324 | 356 int quarter_sample; /* 1->qpel, 0->half pel ME/MC */ |
253
4448dd55d415
parsing more of the mpeg4 header & print some "not supported" stuff
michaelni
parents:
248
diff
changeset
|
357 int scalability; |
556 | 358 int hierachy_type; |
359 int enhancement_type; | |
253
4448dd55d415
parsing more of the mpeg4 header & print some "not supported" stuff
michaelni
parents:
248
diff
changeset
|
360 int new_pred; |
4448dd55d415
parsing more of the mpeg4 header & print some "not supported" stuff
michaelni
parents:
248
diff
changeset
|
361 int reduced_res_vop; |
4448dd55d415
parsing more of the mpeg4 header & print some "not supported" stuff
michaelni
parents:
248
diff
changeset
|
362 int aspect_ratio_info; |
618 | 363 int aspected_width; |
364 int aspected_height; | |
253
4448dd55d415
parsing more of the mpeg4 header & print some "not supported" stuff
michaelni
parents:
248
diff
changeset
|
365 int sprite_warping_accuracy; |
4448dd55d415
parsing more of the mpeg4 header & print some "not supported" stuff
michaelni
parents:
248
diff
changeset
|
366 int low_latency_sprite; |
456 | 367 int data_partitioning; |
368 int rvlc; /* reversible vlc */ | |
369 int resync_marker; /* could this stream contain resync markers*/ | |
336 | 370 int low_delay; /* no reordering needed / has no b-frames */ |
371 int vo_type; | |
365
fdeec2834c79
there are divx5? encoded files without a userdata section but with b-frames :(
michaelni
parents:
347
diff
changeset
|
372 int vol_control_parameters; /* does the stream contain the low_delay flag, used to workaround buggy encoders */ |
456 | 373 PutBitContext tex_pb; /* used for data partitioned VOPs */ |
374 PutBitContext pb2; /* used for data partitioned VOPs */ | |
375 #define PB_BUFFER_SIZE 1024*256 | |
376 uint8_t *tex_pb_buffer; | |
377 uint8_t *pb2_buffer; | |
591 | 378 int mpeg_quant; |
598 | 379 INT8 *non_b_mv4_table; |
255 | 380 |
381 /* divx specific, used to workaround (many) bugs in divx5 */ | |
382 int divx_version; | |
383 int divx_build; | |
333 | 384 #define BITSTREAM_BUFFER_SIZE 1024*256 |
429 | 385 UINT8 *bitstream_buffer; //Divx 5.01 puts several frames in a single one, this is used to reorder them |
333 | 386 int bitstream_buffer_size; |
387 | |
0 | 388 /* RV10 specific */ |
389 int rv10_version; /* RV10 version: 0 or 3 */ | |
390 int rv10_first_dc_coded[3]; | |
391 | |
392 /* MJPEG specific */ | |
393 struct MJpegContext *mjpeg_ctx; | |
229 | 394 int mjpeg_vsample[3]; /* vertical sampling factors, default = {2, 1, 1} */ |
395 int mjpeg_hsample[3]; /* horizontal sampling factors, default = {2, 1, 1} */ | |
396 int mjpeg_write_tables; /* do we want to have quantisation- and | |
397 huffmantables in the jpeg file ? */ | |
370
0eca28d16cbd
clamp intra matrix to 8bit for mjpeg (workaround for qscale>=25)
al3x
parents:
365
diff
changeset
|
398 int mjpeg_data_only_frames; /* frames only with SOI, SOS and EOI markers */ |
0 | 399 |
400 /* MSMPEG4 specific */ | |
401 int mv_table_index; | |
402 int rl_table_index; | |
403 int rl_chroma_table_index; | |
404 int dc_table_index; | |
405 int use_skip_mb_code; | |
406 int slice_height; /* in macroblocks */ | |
290 | 407 int first_slice_line; /* used in mpeg4 too to handle resync markers */ |
208 | 408 int flipflop_rounding; |
500 | 409 int msmpeg4_version; /* 0=not msmpeg4, 1=mp41, 2=mp42, 3=mp43/divx3 4=wmv1/7 5=wmv2/8*/ |
410 int per_mb_rl_table; | |
411 int esc3_level_length; | |
412 int esc3_run_length; | |
413 UINT8 *inter_scantable; | |
414 UINT8 *intra_scantable; | |
415 UINT8 *intra_v_scantable; | |
416 UINT8 *intra_h_scantable; | |
417 /* [mb_intra][isChroma][level][run][last] */ | |
418 int ac_stats[2][2][MAX_LEVEL+1][MAX_RUN+1][2]; | |
519 | 419 int inter_intra_pred; |
500 | 420 |
0 | 421 /* decompression specific */ |
422 GetBitContext gb; | |
423 | |
424 /* MPEG2 specific - I wish I had not to support this mess. */ | |
425 int progressive_sequence; | |
426 int mpeg_f_code[2][2]; | |
427 int picture_structure; | |
428 /* picture type */ | |
429 #define PICT_TOP_FIELD 1 | |
430 #define PICT_BOTTOM_FIELD 2 | |
431 #define PICT_FRAME 3 | |
432 | |
433 int intra_dc_precision; | |
434 int frame_pred_frame_dct; | |
435 int top_field_first; | |
436 int concealment_motion_vectors; | |
437 int q_scale_type; | |
438 int intra_vlc_format; | |
439 int alternate_scan; | |
440 int repeat_first_field; | |
441 int chroma_420_type; | |
442 int progressive_frame; | |
443 int mpeg2; | |
444 int full_pel[2]; | |
445 int interlaced_dct; | |
446 int last_qscale; | |
447 int first_slice; | |
162 | 448 |
449 /* RTP specific */ | |
231 | 450 /* These are explained on avcodec.h */ |
162 | 451 int rtp_mode; |
452 int rtp_payload_size; | |
231 | 453 void (*rtp_callback)(void *data, int size, int packet_number); |
162 | 454 UINT8 *ptr_lastgob; |
455 UINT8 *ptr_last_mb_line; | |
456 UINT32 mb_line_avgsize; | |
457 | |
294 | 458 DCTELEM (*block)[64]; /* points to one of the following blocks */ |
327 | 459 DCTELEM blocks[2][6][64] __align8; // for HQ mode we need to keep the best block |
325 | 460 void (*dct_unquantize_mpeg1)(struct MpegEncContext *s, |
461 DCTELEM *block, int n, int qscale); | |
462 void (*dct_unquantize_mpeg2)(struct MpegEncContext *s, | |
312 | 463 DCTELEM *block, int n, int qscale); |
464 void (*dct_unquantize_h263)(struct MpegEncContext *s, | |
465 DCTELEM *block, int n, int qscale); | |
466 void (*dct_unquantize)(struct MpegEncContext *s, // unquantizer to use (mpeg4 can use both) | |
13
174ef88f619a
use block[] in structure to have it aligned on 8 bytes for mmx optimizations - dct_unquantize is always a function pointer - added specialized dct_unquantize_h263
glantau
parents:
7
diff
changeset
|
467 DCTELEM *block, int n, int qscale); |
625
bb6a69f9d409
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
618
diff
changeset
|
468 int (*dct_quantize)(struct MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow); |
bb6a69f9d409
slow but accurate integer dct from IJG (should be ok with the LGPL as the old DCT is the fast integer DCT from IJG)
michaelni
parents:
618
diff
changeset
|
469 void (*fdct)(DCTELEM *block); |
0 | 470 } MpegEncContext; |
471 | |
472 int MPV_common_init(MpegEncContext *s); | |
473 void MPV_common_end(MpegEncContext *s); | |
474 void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64]); | |
553 | 475 void MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx); |
0 | 476 void MPV_frame_end(MpegEncContext *s); |
13
174ef88f619a
use block[] in structure to have it aligned on 8 bytes for mmx optimizations - dct_unquantize is always a function pointer - added specialized dct_unquantize_h263
glantau
parents:
7
diff
changeset
|
477 #ifdef HAVE_MMX |
174ef88f619a
use block[] in structure to have it aligned on 8 bytes for mmx optimizations - dct_unquantize is always a function pointer - added specialized dct_unquantize_h263
glantau
parents:
7
diff
changeset
|
478 void MPV_common_init_mmx(MpegEncContext *s); |
174ef88f619a
use block[] in structure to have it aligned on 8 bytes for mmx optimizations - dct_unquantize is always a function pointer - added specialized dct_unquantize_h263
glantau
parents:
7
diff
changeset
|
479 #endif |
514
c9f724e3a797
Update and activate dct_unquantize_h263_mvi. Thanks to M«©ns Rullg«©rd
mellum
parents:
500
diff
changeset
|
480 #ifdef ARCH_ALPHA |
c9f724e3a797
Update and activate dct_unquantize_h263_mvi. Thanks to M«©ns Rullg«©rd
mellum
parents:
500
diff
changeset
|
481 void MPV_common_init_axp(MpegEncContext *s); |
c9f724e3a797
Update and activate dct_unquantize_h263_mvi. Thanks to M«©ns Rullg«©rd
mellum
parents:
500
diff
changeset
|
482 #endif |
473
1ca0876f99bc
added missing externs (we were lucky that commons are used)
bellard
parents:
456
diff
changeset
|
483 extern void (*draw_edges)(UINT8 *buf, int wrap, int width, int height, int w); |
456 | 484 void ff_conceal_past_errors(MpegEncContext *s, int conceal_all); |
485 void ff_copy_bits(PutBitContext *pb, UINT8 *src, int length); | |
486 void ff_clean_intra_table_entries(MpegEncContext *s); | |
0 | 487 |
488 /* motion_est.c */ | |
324 | 489 void ff_estimate_p_frame_motion(MpegEncContext * s, |
490 int mb_x, int mb_y); | |
491 void ff_estimate_b_frame_motion(MpegEncContext * s, | |
492 int mb_x, int mb_y); | |
493 int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type); | |
494 void ff_fix_long_p_mvs(MpegEncContext * s); | |
495 void ff_fix_long_b_mvs(MpegEncContext * s, int16_t (*mv_table)[2], int f_code, int type); | |
0 | 496 |
497 /* mpeg12.c */ | |
533
3c07cf9595de
adding ff prefix to avoid global name conficts with xvid (patch by Marko Kreen <marko at l-t.ee>)
michaelni
parents:
519
diff
changeset
|
498 extern INT16 ff_mpeg1_default_intra_matrix[64]; |
3c07cf9595de
adding ff prefix to avoid global name conficts with xvid (patch by Marko Kreen <marko at l-t.ee>)
michaelni
parents:
519
diff
changeset
|
499 extern INT16 ff_mpeg1_default_non_intra_matrix[64]; |
500 | 500 extern UINT8 ff_mpeg1_dc_scale_table[128]; |
0 | 501 |
502 void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number); | |
503 void mpeg1_encode_mb(MpegEncContext *s, | |
504 DCTELEM block[6][64], | |
505 int motion_x, int motion_y); | |
500 | 506 void ff_mpeg1_encode_init(MpegEncContext *s); |
0 | 507 |
508 /* h263enc.c */ | |
509 typedef struct RLTable { | |
510 int n; /* number of entries of table_vlc minus 1 */ | |
511 int last; /* number of values for last = 0 */ | |
512 const UINT16 (*table_vlc)[2]; | |
513 const INT8 *table_run; | |
514 const INT8 *table_level; | |
515 UINT8 *index_run[2]; /* encoding only */ | |
516 INT8 *max_level[2]; /* encoding & decoding */ | |
517 INT8 *max_run[2]; /* encoding & decoding */ | |
542 | 518 VLC vlc; /* decoding only deprected FIXME remove*/ |
519 RL_VLC_ELEM *rl_vlc[32]; /* decoding only */ | |
0 | 520 } RLTable; |
521 | |
522 void init_rl(RLTable *rl); | |
523 void init_vlc_rl(RLTable *rl); | |
524 | |
243 | 525 static inline int get_rl_index(const RLTable *rl, int last, int run, int level) |
0 | 526 { |
527 int index; | |
528 index = rl->index_run[last][run]; | |
529 if (index >= rl->n) | |
530 return rl->n; | |
531 if (level > rl->max_level[last][run]) | |
532 return rl->n; | |
533 return index + level - 1; | |
534 } | |
535 | |
500 | 536 extern UINT8 ff_mpeg4_y_dc_scale_table[32]; |
537 extern UINT8 ff_mpeg4_c_dc_scale_table[32]; | |
599 | 538 extern INT16 ff_mpeg4_default_intra_matrix[64]; |
539 extern INT16 ff_mpeg4_default_non_intra_matrix[64]; | |
540 | |
0 | 541 void h263_encode_mb(MpegEncContext *s, |
542 DCTELEM block[6][64], | |
543 int motion_x, int motion_y); | |
265
4e9e728021d8
use ac prediction in mpeg4 encoding (5% smaller intra-blocks/keyframes)
michaelni
parents:
262
diff
changeset
|
544 void mpeg4_encode_mb(MpegEncContext *s, |
4e9e728021d8
use ac prediction in mpeg4 encoding (5% smaller intra-blocks/keyframes)
michaelni
parents:
262
diff
changeset
|
545 DCTELEM block[6][64], |
4e9e728021d8
use ac prediction in mpeg4 encoding (5% smaller intra-blocks/keyframes)
michaelni
parents:
262
diff
changeset
|
546 int motion_x, int motion_y); |
0 | 547 void h263_encode_picture_header(MpegEncContext *s, int picture_number); |
162 | 548 int h263_encode_gob_header(MpegEncContext * s, int mb_line); |
0 | 549 INT16 *h263_pred_motion(MpegEncContext * s, int block, |
550 int *px, int *py); | |
551 void mpeg4_pred_ac(MpegEncContext * s, INT16 *block, int n, | |
552 int dir); | |
327 | 553 void ff_set_mpeg4_time(MpegEncContext * s, int picture_number); |
0 | 554 void mpeg4_encode_picture_header(MpegEncContext *s, int picture_number); |
277
5cb2978e701f
new motion estimation (epzs) not complete yet but allready pretty good :)
michaelni
parents:
268
diff
changeset
|
555 void h263_encode_init(MpegEncContext *s); |
0 | 556 |
557 void h263_decode_init_vlc(MpegEncContext *s); | |
558 int h263_decode_picture_header(MpegEncContext *s); | |
162 | 559 int h263_decode_gob_header(MpegEncContext *s); |
0 | 560 int mpeg4_decode_picture_header(MpegEncContext * s); |
561 int intel_h263_decode_picture_header(MpegEncContext *s); | |
562 int h263_decode_mb(MpegEncContext *s, | |
563 DCTELEM block[6][64]); | |
564 int h263_get_picture_format(int width, int height); | |
456 | 565 int ff_mpeg4_decode_video_packet_header(MpegEncContext *s); |
566 int ff_mpeg4_resync(MpegEncContext *s); | |
567 void ff_mpeg4_encode_video_packet_header(MpegEncContext *s); | |
568 void ff_mpeg4_clean_buffers(MpegEncContext *s); | |
569 void ff_mpeg4_stuffing(PutBitContext * pbc); | |
570 void ff_mpeg4_init_partitions(MpegEncContext *s); | |
571 void ff_mpeg4_merge_partitions(MpegEncContext *s); | |
500 | 572 extern inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr, int *dir_ptr); |
0 | 573 |
574 /* rv10.c */ | |
575 void rv10_encode_picture_header(MpegEncContext *s, int picture_number); | |
576 int rv_decode_dc(MpegEncContext *s, int n); | |
577 | |
578 /* msmpeg4.c */ | |
579 void msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number); | |
208 | 580 void msmpeg4_encode_ext_header(MpegEncContext * s); |
0 | 581 void msmpeg4_encode_mb(MpegEncContext * s, |
582 DCTELEM block[6][64], | |
583 int motion_x, int motion_y); | |
584 int msmpeg4_decode_picture_header(MpegEncContext * s); | |
208 | 585 int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size); |
0 | 586 int msmpeg4_decode_mb(MpegEncContext *s, |
587 DCTELEM block[6][64]); | |
500 | 588 int ff_msmpeg4_decode_init(MpegEncContext *s); |
589 void ff_msmpeg4_encode_init(MpegEncContext *s); | |
0 | 590 |
591 /* mjpegenc.c */ | |
592 | |
593 int mjpeg_init(MpegEncContext *s); | |
594 void mjpeg_close(MpegEncContext *s); | |
595 void mjpeg_encode_mb(MpegEncContext *s, | |
596 DCTELEM block[6][64]); | |
597 void mjpeg_picture_header(MpegEncContext *s); | |
598 void mjpeg_picture_trailer(MpegEncContext *s); | |
329 | 599 |
600 /* rate control */ | |
601 int ff_rate_control_init(MpegEncContext *s); | |
602 int ff_rate_estimate_qscale(MpegEncContext *s); | |
603 int ff_rate_estimate_qscale_pass2(MpegEncContext *s); | |
604 void ff_write_pass1_stats(MpegEncContext *s); | |
605 void ff_rate_control_uninit(MpegEncContext *s); | |
612 | 606 double ff_eval(char *s, double *const_value, char **const_name, |
607 double (**func1)(void *, double), char **func1_name, | |
608 double (**func2)(void *, double, double), char **func2_name, | |
609 void *opaque); | |
610 | |
329 | 611 |
440
000aeeac27a2
* started to cleanup name clashes for onetime compilation
kabi
parents:
429
diff
changeset
|
612 #endif /* AVCODEC_MPEGVIDEO_H */ |