wmv1 support
[libav.git] / libavcodec / mpegvideo.h
CommitLineData
de6d9b64
FB
1/*
2 * Generic DCT based hybrid video encoder
ff4ec49e 3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard.
de6d9b64 4 *
ff4ec49e
FB
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.
de6d9b64 9 *
ff4ec49e 10 * This library is distributed in the hope that it will be useful,
de6d9b64 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ff4ec49e
FB
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
de6d9b64 14 *
ff4ec49e
FB
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
de6d9b64
FB
18 */
19
cd4af68a
ZK
20#ifndef AVCODEC_MPEGVIDEO_H
21#define AVCODEC_MPEGVIDEO_H
22
eec1c6b9
MN
23#define FRAME_SKIPED 100 // return value for header parsers if frame is not coded
24
de6d9b64
FB
25enum OutputFormat {
26 FMT_MPEG1,
27 FMT_H263,
9dbcbd92 28 FMT_MJPEG,
de6d9b64
FB
29};
30
31#define MPEG_BUF_SIZE (16 * 1024)
32
2f349de2
MN
33#define QMAT_SHIFT_MMX 19
34#define QMAT_SHIFT 25
35
45870f57
MN
36#define MAX_FCODE 7
37#define MAX_MV 2048
9dbcbd92 38#define REORDER_BUFFER_SIZE (FF_MAX_B_FRAMES+2)
45870f57 39
7f2fe444
MN
40#define ME_MAP_SIZE 64
41#define ME_MAP_SHIFT 3
42#define ME_MAP_MV_BITS 11
43
9cdd6a24
MN
44typedef struct Predictor{
45 double coeff;
46 double count;
47 double decay;
48} Predictor;
49
8b4c7dbc
MN
50typedef struct RateControlEntry{
51 int pict_type;
52 int qscale;
53 int mv_bits;
54 int i_tex_bits;
55 int p_tex_bits;
56 int misc_bits;
ff4ec49e 57 UINT64 expected_bits;
8b4c7dbc
MN
58 int new_pict_type;
59 float new_qscale;
60}RateControlEntry;
61
62typedef struct RateControlContext{
63 FILE *stats_file;
64 int num_entries;
65 RateControlEntry *entry;
66}RateControlContext;
67
9dbcbd92
MN
68typedef struct ReorderBuffer{
69 UINT8 *picture[3];
70 int pict_type;
71 int qscale;
72 int force_type;
73 int picture_number;
74 int picture_in_gop_number;
75} ReorderBuffer;
76
de6d9b64 77typedef struct MpegEncContext {
58f26ba9 78 struct AVCodecContext *avctx;
de6d9b64
FB
79 /* the following parameters must be initialized before encoding */
80 int width, height; /* picture size. must be a multiple of 16 */
81 int gop_size;
82 int frame_rate; /* number of frames per second */
83 int intra_only; /* if true, only intra pictures are generated */
84 int bit_rate; /* wanted bit rate */
9cdd6a24 85 int bit_rate_tolerance; /* amount of +- bits (>0)*/
de6d9b64 86 enum OutputFormat out_format; /* output format */
d7e9533a
MN
87 int h263_pred; /* use mpeg4/h263 ac/dc predictions */
88
89/* the following codec id fields are deprecated in favor of codec_id */
de6d9b64
FB
90 int h263_plus; /* h263 plus headers */
91 int h263_rv10; /* use RV10 variation for H263 */
d7e9533a 92 int h263_msmpeg4; /* generate MSMPEG4 compatible stream (deprecated, use msmpeg4_version instead)*/
de6d9b64 93 int h263_intel; /* use I263 intel h263 header */
d7e9533a
MN
94
95 int codec_id; /* see CODEC_ID_xxx */
de6d9b64 96 int fixed_qscale; /* fixed qscale if non zero */
9cdd6a24
MN
97 float qcompress; /* amount of qscale change between easy & hard scenes (0.0-1.0) */
98 float qblur; /* amount of qscale smoothing over time (0.0-1.0) */
99 int qmin; /* min qscale */
100 int qmax; /* max qscale */
101 int max_qdiff; /* max qscale difference between frames */
3bb4e23a 102 int encoding; /* true if we are encoding (vs decoding) */
ba6802de 103 int flags; /* AVCodecContext.flags (HQ, MV4, ...) */
9dbcbd92
MN
104 int force_input_type;/* 0= no force, otherwise I_TYPE, P_TYPE, ... */
105 int max_b_frames; /* max number of b-frames for encoding */
8b4c7dbc 106 float b_quant_factor;/* qscale factor between ips and b frames */
7f2fe444 107 float b_quant_offset;/* qscale offset between ips and b frames */
8b4c7dbc
MN
108 int rc_strategy;
109 int b_frame_strategy;
7f2fe444
MN
110 int luma_elim_threshold;
111 int chroma_elim_threshold;
112 int strict_std_compliance; /* strictly follow the std (MPEG4, ...) */
92ba5ffb 113 int workaround_bugs; /* workaround bugs in encoders which cannot be detected automatically */
de6d9b64
FB
114 /* the following fields are managed internally by the encoder */
115
116 /* bit output */
117 PutBitContext pb;
118
119 /* sequence parameters */
120 int context_initialized;
9dbcbd92
MN
121 int input_picture_number;
122 int input_picture_in_gop_number; /* 0-> first pic in gop, ... */
de6d9b64
FB
123 int picture_number;
124 int fake_picture_number; /* picture number at the bitstream frame rate */
45870f57
MN
125 int gop_picture_number; /* index of the first picture of a GOP based on fake_pic_num & mpeg1 specific */
126 int picture_in_gop_number; /* 0-> first pic in gop, ... */
9dbcbd92
MN
127 int b_frames_since_non_b; /* used for encoding, relative to not yet reordered input */
128 int mb_width, mb_height; /* number of MBs horizontally & vertically */
e03c341e 129 int mb_num; /* number of MBs of a picture */
de6d9b64
FB
130 int linesize; /* line size, in bytes, may be different from width */
131 UINT8 *new_picture[3]; /* picture to be compressed */
9dbcbd92
MN
132 UINT8 *picture_buffer[REORDER_BUFFER_SIZE][3]; /* internal buffers used for reordering of input pictures */
133 int picture_buffer_index;
134 ReorderBuffer coded_order[REORDER_BUFFER_SIZE];
135 UINT8 *last_picture[3]; /* previous picture */
de6d9b64 136 UINT8 *last_picture_base[3]; /* real start of the picture */
9dbcbd92 137 UINT8 *next_picture[3]; /* previous picture (for bidir pred) */
de6d9b64 138 UINT8 *next_picture_base[3]; /* real start of the picture */
9dbcbd92
MN
139 UINT8 *aux_picture[3]; /* aux picture (for B frames only) */
140 UINT8 *aux_picture_base[3]; /* real start of the picture */
141 UINT8 *current_picture[3]; /* buffer to store the decompressed current picture */
1c2a8c7f 142 int num_available_buffers; /* is 0 at the start & after seeking, after the first I frame its 1 after next I/P 2 */
9dbcbd92
MN
143 int last_dc[3]; /* last DC values for MPEG1 */
144 INT16 *dc_val[3]; /* used for mpeg4 DC prediction, all 3 arrays must be continuous */
de6d9b64 145 int y_dc_scale, c_dc_scale;
9dbcbd92
MN
146 UINT8 *coded_block; /* used for coded block pattern prediction (msmpeg4v3, wmv1)*/
147 INT16 (*ac_val[3])[16]; /* used for for mpeg4 AC prediction, all 3 arrays must be continuous */
de6d9b64 148 int ac_pred;
3bb4e23a 149 int mb_skiped; /* MUST BE SET only during DECODING */
9dbcbd92
MN
150 UINT8 *mbskip_table; /* used to avoid copy if macroblock skipped (for black regions for example)
151 and used for b-frame encoding & decoding (contains skip table of next P Frame) */
152 UINT8 *mbintra_table; /* used to avoid setting {ac, dc, cbp}-pred stuff to zero on inter MB decoding */
7f2fe444
MN
153 UINT8 *cbp_table; /* used to store cbp, ac_pred for partitioned decoding */
154 UINT8 *pred_dir_table; /* used to store pred_dir for partitioned decoding */
155 INT8 *qscale_table; /* used to store qscale for partitioned decoding (& postprocessing FIXME export) */
de6d9b64 156
9dbcbd92
MN
157 int input_qscale; /* qscale prior to reordering of frames */
158 int input_pict_type; /* pict_type prior to reordering of frames */
159 int force_type; /* 0= no force, otherwise I_TYPE, P_TYPE, ... */
160 int qscale; /* QP */
8b4c7dbc 161 int last_non_b_qscale; /* QP of last non b frame used for b frame qscale*/
9dbcbd92 162 int pict_type; /* I_TYPE, P_TYPE, B_TYPE, ... */
8b4c7dbc 163 int last_non_b_pict_type; /* used for mpeg4 gmc b-frames & ratecontrol */
de6d9b64
FB
164 int frame_rate_index;
165 /* motion compensation */
166 int unrestricted_mv;
167 int h263_long_vectors; /* use horrible h263v1 long vector mode */
168
9dbcbd92
MN
169 int f_code; /* forward MV resolution */
170 int b_code; /* backward MV resolution for B Frames (mpeg4) */
171 INT16 (*motion_val)[2]; /* used for MV prediction (4MV per MB) */
172 INT16 (*p_mv_table)[2]; /* MV table (1MV per MB) p-frame encoding */
9dbcbd92
MN
173 INT16 (*b_forw_mv_table)[2]; /* MV table (1MV per MB) forward mode b-frame encoding */
174 INT16 (*b_back_mv_table)[2]; /* MV table (1MV per MB) backward mode b-frame encoding */
175 INT16 (*b_bidir_forw_mv_table)[2]; /* MV table (1MV per MB) bidir mode b-frame encoding */
176 INT16 (*b_bidir_back_mv_table)[2]; /* MV table (1MV per MB) bidir mode b-frame encoding */
177 INT16 (*b_direct_forw_mv_table)[2];/* MV table (1MV per MB) direct mode b-frame encoding */
178 INT16 (*b_direct_back_mv_table)[2];/* MV table (1MV per MB) direct mode b-frame encoding */
179 INT16 (*b_direct_mv_table)[2]; /* MV table (1MV per MB) direct mode b-frame encoding */
91029be7
MN
180 int me_method; /* ME algorithm */
181 uint8_t *me_scratchpad; /* data area for the me algo, so that the ME doesnt need to malloc/free */
7f2fe444
MN
182 uint32_t *me_map; /* map to avoid duplicate evaluations */
183 uint16_t *me_score_map; /* map to store the SADs */
184 int me_map_generation;
185 int skip_me; /* set if ME is skiped for the current MB */
de6d9b64
FB
186 int mv_dir;
187#define MV_DIR_BACKWARD 1
188#define MV_DIR_FORWARD 2
6f91bcd1 189#define MV_DIRECT 4 // bidirectional mode where the difference equals the MV of the last P/S/I-Frame (mpeg4)
de6d9b64
FB
190 int mv_type;
191#define MV_TYPE_16X16 0 /* 1 vector for the whole mb */
45870f57 192#define MV_TYPE_8X8 1 /* 4 vectors (h263, mpeg4 4MV) */
de6d9b64
FB
193#define MV_TYPE_16X8 2 /* 2 vectors, one per 16x8 block */
194#define MV_TYPE_FIELD 3 /* 2 vectors, one per field */
195#define MV_TYPE_DMV 4 /* 2 vectors, special mpeg2 Dual Prime Vectors */
196 /* motion vectors for a macroblock
197 first coordinate : 0 = forward 1 = backward
198 second " : depend on type
199 third " : 0 = x, 1 = y
200 */
201 int mv[2][4][2];
202 int field_select[2][2];
9dbcbd92 203 int last_mv[2][2][2]; /* last MV, used for MV prediction in MPEG1 & B-frame MPEG4 */
45870f57
MN
204 UINT16 (*mv_penalty)[MAX_MV*2+1]; /* amount of bits needed to encode a MV, used for ME */
205 UINT8 *fcode_tab; /* smallest fcode needed for each MV */
de6d9b64
FB
206
207 int has_b_frames;
91029be7
MN
208 int no_rounding; /* apply no rounding to motion compensation (MPEG4, msmpeg4, ...)
209 for b-frames rounding mode is allways 0 */
de6d9b64 210
2417652e
MN
211 int hurry_up; /* when set to 1 during decoding, b frames will be skiped
212 when set to 2 idct/dequant will be skipped too */
213
de6d9b64
FB
214 /* macroblock layer */
215 int mb_x, mb_y;
216 int mb_incr;
217 int mb_intra;
7f2fe444
MN
218 UINT16 *mb_var; /* Table for MB variances */
219 UINT16 *mc_mb_var; /* Table for motion compensated MB variances */
220 UINT8 *mb_type; /* Table for MB type */
ba6802de
MN
221#define MB_TYPE_INTRA 0x01
222#define MB_TYPE_INTER 0x02
223#define MB_TYPE_INTER4V 0x04
224#define MB_TYPE_SKIPED 0x08
7f2fe444
MN
225#define MB_TYPE_GMC 0x10
226
ba6802de
MN
227#define MB_TYPE_DIRECT 0x10
228#define MB_TYPE_FORWARD 0x20
9dbcbd92 229#define MB_TYPE_BACKWARD 0x40
ba6802de 230#define MB_TYPE_BIDIR 0x80
4278e7a6 231
9dbcbd92 232 int block_index[6]; /* index to current MB in block based arrays with edges*/
4278e7a6
MN
233 int block_wrap[6];
234
de6d9b64
FB
235 /* matrix transmitted in the bitstream */
236 UINT16 intra_matrix[64];
237 UINT16 chroma_intra_matrix[64];
d7e9533a
MN
238 UINT16 inter_matrix[64];
239 UINT16 chroma_inter_matrix[64];
240#define QUANT_BIAS_SHIFT 4
241 int intra_quant_bias; /* bias for the quantizer */
242 int inter_quant_bias; /* bias for the quantizer */
243 int min_qcoeff; /* minimum encodable coefficient */
244 int max_qcoeff; /* maximum encodable coefficient */
de6d9b64 245 /* precomputed matrix (combine qscale and DCT renorm) */
d7e9533a
MN
246 int q_intra_matrix[32][64];
247 int q_inter_matrix[32][64];
2f349de2 248 /* identical to the above but for MMX & these are not permutated */
d7e9533a
MN
249 UINT16 __align8 q_intra_matrix16[32][64];
250 UINT16 __align8 q_inter_matrix16[32][64];
251 UINT16 __align8 q_intra_matrix16_bias[32][64];
252 UINT16 __align8 q_inter_matrix16_bias[32][64];
de6d9b64
FB
253 int block_last_index[6]; /* last non zero coefficient in block */
254
255 void *opaque; /* private data for the user */
256
257 /* bit rate control */
9dbcbd92 258 int I_frame_bits; //FIXME used in mpeg12 ...
7f2fe444
MN
259 int mb_var_sum; /* sum of MB variance for current frame */
260 int mc_mb_var_sum; /* motion compensated MB variance for current frame */
8b4c7dbc 261 int last_non_b_mc_mb_var;/* motion compensated MB variance for last non b frame */
1a565432
FB
262 INT64 wanted_bits;
263 INT64 total_bits;
8b4c7dbc
MN
264 int frame_bits; /* bits used for the current frame */
265 int pb_frame_bits; /* bits of the last b...bp group */
9cdd6a24
MN
266 Predictor i_pred;
267 Predictor p_pred;
268 double qsum; /* sum of qscales */
269 double qcount; /* count of qscales */
270 double short_term_qsum; /* sum of recent qscales */
271 double short_term_qcount; /* count of recent qscales */
8b4c7dbc 272 RateControlContext rc_context;
9cdd6a24 273
098eefe1
MN
274 /* statistics, used for 2-pass encoding */
275 int mv_bits;
276 int header_bits;
277 int i_tex_bits;
278 int p_tex_bits;
279 int i_count;
280 int p_count;
281 int skip_count;
282 int misc_bits; // cbp, mb_type
283 int last_bits; //temp var used for calculating the above vars
7f2fe444
MN
284
285 /* error concealment / resync */
286 int resync_mb_x; /* x position of last resync marker */
287 int resync_mb_y; /* y position of last resync marker */
288 int mb_num_left; /* number of MBs left in this video packet */
289 GetBitContext next_resync_gb; /* starts at the next resync marker */
290 int next_resync_qscale; /* qscale of next resync marker */
291 int next_resync_pos; /* bitstream position of next resync marker */
292#define DECODING_AC_LOST -1
293#define DECODING_ACDC_LOST -2
294#define DECODING_DESYNC -3
295 int decoding_error;
296 int next_p_frame_damaged; /* set if the next p frame is damaged, to avoid showing trashed b frames */
297 int error_resilience;
098eefe1 298
102d3908
J
299 /* H.263 specific */
300 int gob_number;
644d98a4 301 int gob_index;
d140623f 302
544286b3
J
303 /* H.263+ specific */
304 int umvplus;
305 int umvplus_dec;
d140623f
J
306 int h263_aic; /* Advanded INTRA Coding (AIC) */
307 int h263_aic_dir; /* AIC direction: 0 = left, 1 = top */
544286b3 308
de6d9b64 309 /* mpeg4 specific */
6f91bcd1 310 int time_increment_resolution;
9dbcbd92
MN
311 int time_increment_bits; /* number of bits to represent the fractional part of time */
312 int last_time_base;
313 int time_base; /* time in seconds of last I,P,S Frame */
ff4ec49e
FB
314 INT64 time; /* time of current frame */
315 INT64 last_non_b_time;
316 UINT16 pp_time; /* time distance between the last 2 p,s,i frames */
317 UINT16 bp_time; /* time distance between the last b and p,s,i frame */
1a565432
FB
318 int shape;
319 int vol_sprite_usage;
cc9ba006
MN
320 int sprite_width;
321 int sprite_height;
322 int sprite_left;
323 int sprite_top;
324 int sprite_brightness_change;
73c8e514 325 int num_sprite_warping_points;
44eb4951 326 int real_sprite_warping_points;
73c8e514
MN
327 int sprite_offset[2][2];
328 int sprite_delta[2][2][2];
329 int sprite_shift[2][2];
330 int mcsel;
1a565432 331 int quant_precision;
9dbcbd92 332 int quarter_sample; /* 1->qpel, 0->half pel ME/MC */
cc9ba006
MN
333 int scalability;
334 int new_pred;
335 int reduced_res_vop;
336 int aspect_ratio_info;
337 int sprite_warping_accuracy;
338 int low_latency_sprite;
7f2fe444
MN
339 int data_partitioning;
340 int rvlc; /* reversible vlc */
341 int resync_marker; /* could this stream contain resync markers*/
1ff662cc
MN
342 int low_delay; /* no reordering needed / has no b-frames */
343 int vo_type;
7aaf3b98 344 int vol_control_parameters; /* does the stream contain the low_delay flag, used to workaround buggy encoders */
7f2fe444
MN
345 PutBitContext tex_pb; /* used for data partitioned VOPs */
346 PutBitContext pb2; /* used for data partitioned VOPs */
347#define PB_BUFFER_SIZE 1024*256
348 uint8_t *tex_pb_buffer;
349 uint8_t *pb2_buffer;
44eb4951
MN
350
351 /* divx specific, used to workaround (many) bugs in divx5 */
352 int divx_version;
353 int divx_build;
eec1c6b9 354#define BITSTREAM_BUFFER_SIZE 1024*256
ff4ec49e 355 UINT8 *bitstream_buffer; //Divx 5.01 puts several frames in a single one, this is used to reorder them
eec1c6b9
MN
356 int bitstream_buffer_size;
357
de6d9b64
FB
358 /* RV10 specific */
359 int rv10_version; /* RV10 version: 0 or 3 */
360 int rv10_first_dc_coded[3];
361
362 /* MJPEG specific */
363 struct MJpegContext *mjpeg_ctx;
80e103d0
A
364 int mjpeg_vsample[3]; /* vertical sampling factors, default = {2, 1, 1} */
365 int mjpeg_hsample[3]; /* horizontal sampling factors, default = {2, 1, 1} */
366 int mjpeg_write_tables; /* do we want to have quantisation- and
367 huffmantables in the jpeg file ? */
a69b930c 368 int mjpeg_data_only_frames; /* frames only with SOI, SOS and EOI markers */
de6d9b64
FB
369
370 /* MSMPEG4 specific */
371 int mv_table_index;
372 int rl_table_index;
373 int rl_chroma_table_index;
374 int dc_table_index;
375 int use_skip_mb_code;
376 int slice_height; /* in macroblocks */
49092244 377 int first_slice_line; /* used in mpeg4 too to handle resync markers */
ae40484c 378 int flipflop_rounding;
d7e9533a 379 int msmpeg4_version; /* 0=not msmpeg4, 1=mp41, 2=mp42, 3=mp43/divx3 */
de6d9b64
FB
380 /* decompression specific */
381 GetBitContext gb;
382
383 /* MPEG2 specific - I wish I had not to support this mess. */
384 int progressive_sequence;
385 int mpeg_f_code[2][2];
386 int picture_structure;
387/* picture type */
388#define PICT_TOP_FIELD 1
389#define PICT_BOTTOM_FIELD 2
390#define PICT_FRAME 3
391
392 int intra_dc_precision;
393 int frame_pred_frame_dct;
394 int top_field_first;
395 int concealment_motion_vectors;
396 int q_scale_type;
397 int intra_vlc_format;
398 int alternate_scan;
399 int repeat_first_field;
400 int chroma_420_type;
401 int progressive_frame;
402 int mpeg2;
403 int full_pel[2];
404 int interlaced_dct;
405 int last_qscale;
406 int first_slice;
644d98a4
J
407
408 /* RTP specific */
81401c1f 409 /* These are explained on avcodec.h */
644d98a4
J
410 int rtp_mode;
411 int rtp_payload_size;
81401c1f 412 void (*rtp_callback)(void *data, int size, int packet_number);
644d98a4
J
413 UINT8 *ptr_lastgob;
414 UINT8 *ptr_last_mb_line;
415 UINT32 mb_line_avgsize;
416
ba6802de 417 DCTELEM (*block)[64]; /* points to one of the following blocks */
91029be7 418 DCTELEM blocks[2][6][64] __align8; // for HQ mode we need to keep the best block
9dbf1ddd
MN
419 void (*dct_unquantize_mpeg1)(struct MpegEncContext *s,
420 DCTELEM *block, int n, int qscale);
421 void (*dct_unquantize_mpeg2)(struct MpegEncContext *s,
3bf43d42
MN
422 DCTELEM *block, int n, int qscale);
423 void (*dct_unquantize_h263)(struct MpegEncContext *s,
424 DCTELEM *block, int n, int qscale);
425 void (*dct_unquantize)(struct MpegEncContext *s, // unquantizer to use (mpeg4 can use both)
21af69f7 426 DCTELEM *block, int n, int qscale);
de6d9b64
FB
427} MpegEncContext;
428
de6d9b64
FB
429int MPV_common_init(MpegEncContext *s);
430void MPV_common_end(MpegEncContext *s);
431void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64]);
432void MPV_frame_start(MpegEncContext *s);
433void MPV_frame_end(MpegEncContext *s);
21af69f7
FB
434#ifdef HAVE_MMX
435void MPV_common_init_mmx(MpegEncContext *s);
436#endif
c3aea5c4
FB
437extern int (*dct_quantize)(MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow);
438extern void (*draw_edges)(UINT8 *buf, int wrap, int width, int height, int w);
7f2fe444
MN
439void ff_conceal_past_errors(MpegEncContext *s, int conceal_all);
440void ff_copy_bits(PutBitContext *pb, UINT8 *src, int length);
441void ff_clean_intra_table_entries(MpegEncContext *s);
de6d9b64
FB
442
443/* motion_est.c */
9dbcbd92
MN
444void ff_estimate_p_frame_motion(MpegEncContext * s,
445 int mb_x, int mb_y);
446void ff_estimate_b_frame_motion(MpegEncContext * s,
447 int mb_x, int mb_y);
448int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type);
449void ff_fix_long_p_mvs(MpegEncContext * s);
450void ff_fix_long_b_mvs(MpegEncContext * s, int16_t (*mv_table)[2], int f_code, int type);
de6d9b64
FB
451
452/* mpeg12.c */
3c054a1c
FB
453extern INT16 default_intra_matrix[64];
454extern INT16 default_non_intra_matrix[64];
de6d9b64
FB
455
456void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number);
457void mpeg1_encode_mb(MpegEncContext *s,
458 DCTELEM block[6][64],
459 int motion_x, int motion_y);
11ce8834 460void mpeg1_encode_init(MpegEncContext *s);
de6d9b64
FB
461
462/* h263enc.c */
463
464/* run length table */
465#define MAX_RUN 64
466#define MAX_LEVEL 64
467
468typedef struct RLTable {
469 int n; /* number of entries of table_vlc minus 1 */
470 int last; /* number of values for last = 0 */
471 const UINT16 (*table_vlc)[2];
472 const INT8 *table_run;
473 const INT8 *table_level;
474 UINT8 *index_run[2]; /* encoding only */
475 INT8 *max_level[2]; /* encoding & decoding */
476 INT8 *max_run[2]; /* encoding & decoding */
477 VLC vlc; /* decoding only */
478} RLTable;
479
480void init_rl(RLTable *rl);
481void init_vlc_rl(RLTable *rl);
482
3232bc88 483static inline int get_rl_index(const RLTable *rl, int last, int run, int level)
de6d9b64
FB
484{
485 int index;
486 index = rl->index_run[last][run];
487 if (index >= rl->n)
488 return rl->n;
489 if (level > rl->max_level[last][run])
490 return rl->n;
491 return index + level - 1;
492}
493
494void h263_encode_mb(MpegEncContext *s,
495 DCTELEM block[6][64],
496 int motion_x, int motion_y);
d6231b9e
MN
497void mpeg4_encode_mb(MpegEncContext *s,
498 DCTELEM block[6][64],
499 int motion_x, int motion_y);
de6d9b64 500void h263_encode_picture_header(MpegEncContext *s, int picture_number);
644d98a4 501int h263_encode_gob_header(MpegEncContext * s, int mb_line);
de6d9b64
FB
502void h263_dc_scale(MpegEncContext *s);
503INT16 *h263_pred_motion(MpegEncContext * s, int block,
504 int *px, int *py);
505void mpeg4_pred_ac(MpegEncContext * s, INT16 *block, int n,
506 int dir);
91029be7 507void ff_set_mpeg4_time(MpegEncContext * s, int picture_number);
de6d9b64 508void mpeg4_encode_picture_header(MpegEncContext *s, int picture_number);
45870f57 509void h263_encode_init(MpegEncContext *s);
de6d9b64
FB
510
511void h263_decode_init_vlc(MpegEncContext *s);
512int h263_decode_picture_header(MpegEncContext *s);
644d98a4 513int h263_decode_gob_header(MpegEncContext *s);
de6d9b64
FB
514int mpeg4_decode_picture_header(MpegEncContext * s);
515int intel_h263_decode_picture_header(MpegEncContext *s);
516int h263_decode_mb(MpegEncContext *s,
517 DCTELEM block[6][64]);
518int h263_get_picture_format(int width, int height);
7f2fe444
MN
519int ff_mpeg4_decode_video_packet_header(MpegEncContext *s);
520int ff_mpeg4_resync(MpegEncContext *s);
521void ff_mpeg4_encode_video_packet_header(MpegEncContext *s);
522void ff_mpeg4_clean_buffers(MpegEncContext *s);
523void ff_mpeg4_stuffing(PutBitContext * pbc);
524void ff_mpeg4_init_partitions(MpegEncContext *s);
525void ff_mpeg4_merge_partitions(MpegEncContext *s);
de6d9b64
FB
526
527/* rv10.c */
528void rv10_encode_picture_header(MpegEncContext *s, int picture_number);
529int rv_decode_dc(MpegEncContext *s, int n);
530
531/* msmpeg4.c */
532void msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number);
ae40484c 533void msmpeg4_encode_ext_header(MpegEncContext * s);
de6d9b64
FB
534void msmpeg4_encode_mb(MpegEncContext * s,
535 DCTELEM block[6][64],
536 int motion_x, int motion_y);
de6d9b64 537int msmpeg4_decode_picture_header(MpegEncContext * s);
ae40484c 538int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size);
de6d9b64
FB
539int msmpeg4_decode_mb(MpegEncContext *s,
540 DCTELEM block[6][64]);
541int msmpeg4_decode_init_vlc(MpegEncContext *s);
92ba5ffb 542void ff_old_msmpeg4_dc_scale(MpegEncContext *s);
de6d9b64
FB
543
544/* mjpegenc.c */
545
546int mjpeg_init(MpegEncContext *s);
547void mjpeg_close(MpegEncContext *s);
548void mjpeg_encode_mb(MpegEncContext *s,
549 DCTELEM block[6][64]);
550void mjpeg_picture_header(MpegEncContext *s);
551void mjpeg_picture_trailer(MpegEncContext *s);
8b4c7dbc
MN
552
553/* rate control */
554int ff_rate_control_init(MpegEncContext *s);
555int ff_rate_estimate_qscale(MpegEncContext *s);
556int ff_rate_estimate_qscale_pass2(MpegEncContext *s);
557void ff_write_pass1_stats(MpegEncContext *s);
558void ff_rate_control_uninit(MpegEncContext *s);
559
cd4af68a 560#endif /* AVCODEC_MPEGVIDEO_H */