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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1 /*
986e461dc072 Initial revision
glantau
parents:
diff changeset
2 * Generic DCT based hybrid video encoder
429
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
4 *
429
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
5 * This library is free software; you can redistribute it and/or
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
7 * License as published by the Free Software Foundation; either
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
8 * version 2 of the License, or (at your option) any later version.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
9 *
429
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
10 * This library is distributed in the hope that it will be useful,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
429
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
13 * Lesser General Public License for more details.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
14 *
429
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
16 * License along with this library; if not, write to the Free Software
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
18 */
986e461dc072 Initial revision
glantau
parents:
diff changeset
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
8aa87f1dfc52 divx 5.01 support
michaelni
parents: 329
diff changeset
23 #define FRAME_SKIPED 100 // return value for header parsers if frame is not coded
8aa87f1dfc52 divx 5.01 support
michaelni
parents: 329
diff changeset
24
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
25 enum OutputFormat {
986e461dc072 Initial revision
glantau
parents:
diff changeset
26 FMT_MPEG1,
986e461dc072 Initial revision
glantau
parents:
diff changeset
27 FMT_H263,
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
28 FMT_MJPEG,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
29 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
30
986e461dc072 Initial revision
glantau
parents:
diff changeset
31 #define MPEG_BUF_SIZE (16 * 1024)
986e461dc072 Initial revision
glantau
parents:
diff changeset
32
220
0b234715e205 (commit by michael)
arpi_esp
parents: 208
diff changeset
33 #define QMAT_SHIFT_MMX 19
0b234715e205 (commit by michael)
arpi_esp
parents: 208
diff changeset
34 #define QMAT_SHIFT 25
0b234715e205 (commit by michael)
arpi_esp
parents: 208
diff changeset
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
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
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
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
40 #define ME_MAP_SIZE 64
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
41 #define ME_MAP_SHIFT 3
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
42 #define ME_MAP_MV_BITS 11
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
43
500
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
44 /* run length table */
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
45 #define MAX_RUN 64
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
46 #define MAX_LEVEL 64
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
47
268
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
48 typedef struct Predictor{
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
49 double coeff;
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
50 double count;
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
51 double decay;
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
52 } Predictor;
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
53
329
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
54 typedef struct RateControlEntry{
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
55 int pict_type;
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
56 int qscale;
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
57 int mv_bits;
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
58 int i_tex_bits;
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
59 int p_tex_bits;
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
60 int misc_bits;
429
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
61 UINT64 expected_bits;
329
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
62 int new_pict_type;
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
63 float new_qscale;
612
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
64 int mc_mb_var_sum;
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
65 int mb_var_sum;
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
66 int i_count;
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
67 int f_code;
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
68 int b_code;
329
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
69 }RateControlEntry;
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
70
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
71 typedef struct RateControlContext{
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
72 FILE *stats_file;
612
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
73 int num_entries; /* number of RateControlEntries */
329
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
74 RateControlEntry *entry;
612
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
75 int buffer_index; /* amount of bits in the video/audio buffer */
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
76 Predictor pred[5];
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
77 double short_term_qsum; /* sum of recent qscales */
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
78 double short_term_qcount; /* count of recent qscales */
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
79 double pass1_bits; /* bits outputted by the pass1 code (including complexity init) */
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
80 double pass1_wanted_bits; /* bits which should have been outputed by the pass1 code (including complexity init) */
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
81 double last_qscale;
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
82 double last_qscale_for[5]; /* last qscale for a specific pict type */
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
83 double next_non_b_qscale;
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
84 double next_p_qscale;
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
85 int last_mc_mb_var_sum;
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
86 int last_mb_var_sum;
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
87 UINT64 i_cplx_sum[5];
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
88 UINT64 p_cplx_sum[5];
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
89 UINT64 mv_bits_sum[5];
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
90 UINT64 qscale_sum[5];
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
91 int frame_count[5];
329
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
92 }RateControlContext;
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
93
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
94 typedef struct ReorderBuffer{
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
95 UINT8 *picture[3];
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
96 int pict_type;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
97 int qscale;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
98 int force_type;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
99 int picture_number;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
100 int picture_in_gop_number;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
101 } ReorderBuffer;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
102
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
103 typedef struct MpegEncContext {
71
79be2c581c01 changed opendivx to mpeg4
glantau
parents: 64
diff changeset
104 struct AVCodecContext *avctx;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
105 /* the following parameters must be initialized before encoding */
986e461dc072 Initial revision
glantau
parents:
diff changeset
106 int width, height; /* picture size. must be a multiple of 16 */
986e461dc072 Initial revision
glantau
parents:
diff changeset
107 int gop_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
108 int frame_rate; /* number of frames per second */
986e461dc072 Initial revision
glantau
parents:
diff changeset
109 int intra_only; /* if true, only intra pictures are generated */
986e461dc072 Initial revision
glantau
parents:
diff changeset
110 int bit_rate; /* wanted bit rate */
268
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
111 int bit_rate_tolerance; /* amount of +- bits (>0)*/
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
112 enum OutputFormat out_format; /* output format */
344
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
113 int h263_pred; /* use mpeg4/h263 ac/dc predictions */
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
114
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
115 /* the following codec id fields are deprecated in favor of codec_id */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
116 int h263_plus; /* h263 plus headers */
986e461dc072 Initial revision
glantau
parents:
diff changeset
117 int h263_rv10; /* use RV10 variation for H263 */
344
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
118 int h263_msmpeg4; /* generate MSMPEG4 compatible stream (deprecated, use msmpeg4_version instead)*/
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
119 int h263_intel; /* use I263 intel h263 header */
344
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
120
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
121 int codec_id; /* see CODEC_ID_xxx */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
122 int fixed_qscale; /* fixed qscale if non zero */
268
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
123 float qcompress; /* amount of qscale change between easy & hard scenes (0.0-1.0) */
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
124 float qblur; /* amount of qscale smoothing over time (0.0-1.0) */
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
125 int qmin; /* min qscale */
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
126 int qmax; /* max qscale */
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
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
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 290
diff changeset
129 int flags; /* AVCodecContext.flags (HQ, MV4, ...) */
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
130 int force_input_type;/* 0= no force, otherwise I_TYPE, P_TYPE, ... */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
131 int max_b_frames; /* max number of b-frames for encoding */
329
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
132 int b_frame_strategy;
456
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
133 int luma_elim_threshold;
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
134 int chroma_elim_threshold;
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
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
986e461dc072 Initial revision
glantau
parents:
diff changeset
137 /* the following fields are managed internally by the encoder */
986e461dc072 Initial revision
glantau
parents:
diff changeset
138
986e461dc072 Initial revision
glantau
parents:
diff changeset
139 /* bit output */
986e461dc072 Initial revision
glantau
parents:
diff changeset
140 PutBitContext pb;
986e461dc072 Initial revision
glantau
parents:
diff changeset
141
986e461dc072 Initial revision
glantau
parents:
diff changeset
142 /* sequence parameters */
986e461dc072 Initial revision
glantau
parents:
diff changeset
143 int context_initialized;
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
144 int input_picture_number;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
145 int input_picture_in_gop_number; /* 0-> first pic in gop, ... */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
146 int picture_number;
986e461dc072 Initial revision
glantau
parents:
diff changeset
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
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
150 int b_frames_since_non_b; /* used for encoding, relative to not yet reordered input */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
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
986e461dc072 Initial revision
glantau
parents:
diff changeset
154 int linesize; /* line size, in bytes, may be different from width */
556
762c67fd4078 uvlinesize
michaelni
parents: 553
diff changeset
155 int uvlinesize; /* line size, for chroma in bytes, may be different from width */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
156 UINT8 *new_picture[3]; /* picture to be compressed */
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
157 UINT8 *picture_buffer[REORDER_BUFFER_SIZE][3]; /* internal buffers used for reordering of input pictures */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
158 int picture_buffer_index;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
159 ReorderBuffer coded_order[REORDER_BUFFER_SIZE];
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
160 UINT8 *last_picture[3]; /* previous picture */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
161 UINT8 *last_picture_base[3]; /* real start of the picture */
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
162 UINT8 *next_picture[3]; /* previous picture (for bidir pred) */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
163 UINT8 *next_picture_base[3]; /* real start of the picture */
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
164 UINT8 *aux_picture[3]; /* aux picture (for B frames only) */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
165 UINT8 *aux_picture_base[3]; /* real start of the picture */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
166 UINT8 *current_picture[3]; /* buffer to store the decompressed current picture */
553
18ad513d92fe direct rendering method 1 support
michaelni
parents: 542
diff changeset
167 void *last_dr_opaque;
18ad513d92fe direct rendering method 1 support
michaelni
parents: 542
diff changeset
168 void *next_dr_opaque;
556
762c67fd4078 uvlinesize
michaelni
parents: 553
diff changeset
169 int ip_buffer_count; /* number of buffers, currently only >2 if dr1 is used */
341
bf26081c373c avcodec_flush_buffers()
michaelni
parents: 336
diff changeset
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
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
171 int last_dc[3]; /* last DC values for MPEG1 */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
172 INT16 *dc_val[3]; /* used for mpeg4 DC prediction, all 3 arrays must be continuous */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
173 int y_dc_scale, c_dc_scale;
500
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
174 UINT8 *y_dc_scale_table; /* qscale -> y_dc_scale table */
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
175 UINT8 *c_dc_scale_table; /* qscale -> c_dc_scale table */
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
176 UINT8 *coded_block; /* used for coded block pattern prediction (msmpeg4v3, wmv1)*/
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
177 INT16 (*ac_val[3])[16]; /* used for for mpeg4 AC prediction, all 3 arrays must be continuous */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
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
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
180 UINT8 *mbskip_table; /* used to avoid copy if macroblock skipped (for black regions for example)
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
181 and used for b-frame encoding & decoding (contains skip table of next P Frame) */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
182 UINT8 *mbintra_table; /* used to avoid setting {ac, dc, cbp}-pred stuff to zero on inter MB decoding */
456
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
183 UINT8 *cbp_table; /* used to store cbp, ac_pred for partitioned decoding */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
184 UINT8 *pred_dir_table; /* used to store pred_dir for partitioned decoding */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
185 INT8 *qscale_table; /* used to store qscale for partitioned decoding (& postprocessing FIXME export) */
553
18ad513d92fe direct rendering method 1 support
michaelni
parents: 542
diff changeset
186 UINT8 *edge_emu_buffer;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
187
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
188 int input_qscale; /* qscale prior to reordering of frames */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
189 int input_pict_type; /* pict_type prior to reordering of frames */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
190 int force_type; /* 0= no force, otherwise I_TYPE, P_TYPE, ... */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
191 int qscale; /* QP */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
192 int pict_type; /* I_TYPE, P_TYPE, B_TYPE, ... */
612
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
193 int last_pict_type;
329
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
194 int last_non_b_pict_type; /* used for mpeg4 gmc b-frames & ratecontrol */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
195 int frame_rate_index;
986e461dc072 Initial revision
glantau
parents:
diff changeset
196 /* motion compensation */
986e461dc072 Initial revision
glantau
parents:
diff changeset
197 int unrestricted_mv;
986e461dc072 Initial revision
glantau
parents:
diff changeset
198 int h263_long_vectors; /* use horrible h263v1 long vector mode */
986e461dc072 Initial revision
glantau
parents:
diff changeset
199
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
200 int f_code; /* forward MV resolution */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
201 int b_code; /* backward MV resolution for B Frames (mpeg4) */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
202 INT16 (*motion_val)[2]; /* used for MV prediction (4MV per MB) */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
203 INT16 (*p_mv_table)[2]; /* MV table (1MV per MB) p-frame encoding */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
204 INT16 (*b_forw_mv_table)[2]; /* MV table (1MV per MB) forward mode b-frame encoding */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
205 INT16 (*b_back_mv_table)[2]; /* MV table (1MV per MB) backward mode b-frame encoding */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
206 INT16 (*b_bidir_forw_mv_table)[2]; /* MV table (1MV per MB) bidir mode b-frame encoding */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
207 INT16 (*b_bidir_back_mv_table)[2]; /* MV table (1MV per MB) bidir mode b-frame encoding */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
208 INT16 (*b_direct_forw_mv_table)[2];/* MV table (1MV per MB) direct mode b-frame encoding */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
209 INT16 (*b_direct_back_mv_table)[2];/* MV table (1MV per MB) direct mode b-frame encoding */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
210 INT16 (*b_direct_mv_table)[2]; /* MV table (1MV per MB) direct mode b-frame encoding */
327
d359db02fc90 much better ME for b frames (a bit slow though)
michaelni
parents: 325
diff changeset
211 int me_method; /* ME algorithm */
d359db02fc90 much better ME for b frames (a bit slow though)
michaelni
parents: 325
diff changeset
212 uint8_t *me_scratchpad; /* data area for the me algo, so that the ME doesnt need to malloc/free */
456
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
213 uint32_t *me_map; /* map to avoid duplicate evaluations */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
214 uint16_t *me_score_map; /* map to store the SADs */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
215 int me_map_generation;
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
216 int skip_me; /* set if ME is skiped for the current MB */
608
98e39397636b better scene change detection
michaelni
parents: 599
diff changeset
217 int scene_change_score;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
218 int mv_dir;
986e461dc072 Initial revision
glantau
parents:
diff changeset
219 #define MV_DIR_BACKWARD 1
986e461dc072 Initial revision
glantau
parents:
diff changeset
220 #define MV_DIR_FORWARD 2
262
7d941b8c4e84 mpeg4 b-frames :)
michaelni
parents: 255
diff changeset
221 #define MV_DIRECT 4 // bidirectional mode where the difference equals the MV of the last P/S/I-Frame (mpeg4)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
222 int mv_type;
986e461dc072 Initial revision
glantau
parents:
diff changeset
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
986e461dc072 Initial revision
glantau
parents:
diff changeset
225 #define MV_TYPE_16X8 2 /* 2 vectors, one per 16x8 block */
986e461dc072 Initial revision
glantau
parents:
diff changeset
226 #define MV_TYPE_FIELD 3 /* 2 vectors, one per field */
986e461dc072 Initial revision
glantau
parents:
diff changeset
227 #define MV_TYPE_DMV 4 /* 2 vectors, special mpeg2 Dual Prime Vectors */
986e461dc072 Initial revision
glantau
parents:
diff changeset
228 /* motion vectors for a macroblock
986e461dc072 Initial revision
glantau
parents:
diff changeset
229 first coordinate : 0 = forward 1 = backward
986e461dc072 Initial revision
glantau
parents:
diff changeset
230 second " : depend on type
986e461dc072 Initial revision
glantau
parents:
diff changeset
231 third " : 0 = x, 1 = y
986e461dc072 Initial revision
glantau
parents:
diff changeset
232 */
986e461dc072 Initial revision
glantau
parents:
diff changeset
233 int mv[2][4][2];
986e461dc072 Initial revision
glantau
parents:
diff changeset
234 int field_select[2][2];
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
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
986e461dc072 Initial revision
glantau
parents:
diff changeset
238
986e461dc072 Initial revision
glantau
parents:
diff changeset
239 int has_b_frames;
327
d359db02fc90 much better ME for b frames (a bit slow though)
michaelni
parents: 325
diff changeset
240 int no_rounding; /* apply no rounding to motion compensation (MPEG4, msmpeg4, ...)
d359db02fc90 much better ME for b frames (a bit slow though)
michaelni
parents: 325
diff changeset
241 for b-frames rounding mode is allways 0 */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
242
345
e05b357a398a export mbskip_table for direct rendering
michaelni
parents: 344
diff changeset
243 int hurry_up; /* when set to 1 during decoding, b frames will be skiped
e05b357a398a export mbskip_table for direct rendering
michaelni
parents: 344
diff changeset
244 when set to 2 idct/dequant will be skipped too */
e05b357a398a export mbskip_table for direct rendering
michaelni
parents: 344
diff changeset
245
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
246 /* macroblock layer */
986e461dc072 Initial revision
glantau
parents:
diff changeset
247 int mb_x, mb_y;
986e461dc072 Initial revision
glantau
parents:
diff changeset
248 int mb_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
249 int mb_intra;
456
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
250 UINT16 *mb_var; /* Table for MB variances */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
251 UINT16 *mc_mb_var; /* Table for motion compensated MB variances */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
252 UINT8 *mb_type; /* Table for MB type */
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 290
diff changeset
253 #define MB_TYPE_INTRA 0x01
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 290
diff changeset
254 #define MB_TYPE_INTER 0x02
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 290
diff changeset
255 #define MB_TYPE_INTER4V 0x04
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 290
diff changeset
256 #define MB_TYPE_SKIPED 0x08
456
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
257 #define MB_TYPE_GMC 0x10
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
258
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 290
diff changeset
259 #define MB_TYPE_DIRECT 0x10
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 290
diff changeset
260 #define MB_TYPE_FORWARD 0x20
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
261 #define MB_TYPE_BACKWARD 0x40
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 290
diff changeset
262 #define MB_TYPE_BIDIR 0x80
266
252444e5259b optimization
michaelni
parents: 265
diff changeset
263
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
264 int block_index[6]; /* index to current MB in block based arrays with edges*/
266
252444e5259b optimization
michaelni
parents: 265
diff changeset
265 int block_wrap[6];
252444e5259b optimization
michaelni
parents: 265
diff changeset
266
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
267 /* matrix transmitted in the bitstream */
986e461dc072 Initial revision
glantau
parents:
diff changeset
268 UINT16 intra_matrix[64];
986e461dc072 Initial revision
glantau
parents:
diff changeset
269 UINT16 chroma_intra_matrix[64];
344
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
270 UINT16 inter_matrix[64];
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
271 UINT16 chroma_inter_matrix[64];
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
272 #define QUANT_BIAS_SHIFT 4
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
273 int intra_quant_bias; /* bias for the quantizer */
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
274 int inter_quant_bias; /* bias for the quantizer */
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
275 int min_qcoeff; /* minimum encodable coefficient */
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
276 int max_qcoeff; /* maximum encodable coefficient */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
277 /* precomputed matrix (combine qscale and DCT renorm) */
344
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
278 int q_intra_matrix[32][64];
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
279 int q_inter_matrix[32][64];
220
0b234715e205 (commit by michael)
arpi_esp
parents: 208
diff changeset
280 /* identical to the above but for MMX & these are not permutated */
344
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
281 UINT16 __align8 q_intra_matrix16[32][64];
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
282 UINT16 __align8 q_inter_matrix16[32][64];
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
283 UINT16 __align8 q_intra_matrix16_bias[32][64];
9f6071a87e17 fixed msmpeg4 infinite loop if buggy stream
michaelni
parents: 341
diff changeset
284 UINT16 __align8 q_inter_matrix16_bias[32][64];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
285 int block_last_index[6]; /* last non zero coefficient in block */
986e461dc072 Initial revision
glantau
parents:
diff changeset
286
986e461dc072 Initial revision
glantau
parents:
diff changeset
287 void *opaque; /* private data for the user */
986e461dc072 Initial revision
glantau
parents:
diff changeset
288
986e461dc072 Initial revision
glantau
parents:
diff changeset
289 /* bit rate control */
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
290 int I_frame_bits; //FIXME used in mpeg12 ...
456
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
291 int mb_var_sum; /* sum of MB variance for current frame */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
292 int mc_mb_var_sum; /* motion compensated MB variance for current frame */
64
5aa6292a1660 win32 fixes
glantau
parents: 41
diff changeset
293 INT64 wanted_bits;
5aa6292a1660 win32 fixes
glantau
parents: 41
diff changeset
294 INT64 total_bits;
329
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
295 int frame_bits; /* bits used for the current frame */
612
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
296 RateControlContext rc_context; // contains stuff only accessed in ratecontrol.c
268
09ae29b27ed9 hopefully better bitrate controll
michaelni
parents: 266
diff changeset
297
286
91f7c38f5f37 statistics for 2-pass encoding
michaelni
parents: 281
diff changeset
298 /* statistics, used for 2-pass encoding */
91f7c38f5f37 statistics for 2-pass encoding
michaelni
parents: 281
diff changeset
299 int mv_bits;
91f7c38f5f37 statistics for 2-pass encoding
michaelni
parents: 281
diff changeset
300 int header_bits;
91f7c38f5f37 statistics for 2-pass encoding
michaelni
parents: 281
diff changeset
301 int i_tex_bits;
91f7c38f5f37 statistics for 2-pass encoding
michaelni
parents: 281
diff changeset
302 int p_tex_bits;
91f7c38f5f37 statistics for 2-pass encoding
michaelni
parents: 281
diff changeset
303 int i_count;
91f7c38f5f37 statistics for 2-pass encoding
michaelni
parents: 281
diff changeset
304 int p_count;
91f7c38f5f37 statistics for 2-pass encoding
michaelni
parents: 281
diff changeset
305 int skip_count;
91f7c38f5f37 statistics for 2-pass encoding
michaelni
parents: 281
diff changeset
306 int misc_bits; // cbp, mb_type
91f7c38f5f37 statistics for 2-pass encoding
michaelni
parents: 281
diff changeset
307 int last_bits; //temp var used for calculating the above vars
456
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
308
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
309 /* error concealment / resync */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
310 int resync_mb_x; /* x position of last resync marker */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
311 int resync_mb_y; /* y position of last resync marker */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
312 int mb_num_left; /* number of MBs left in this video packet */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
313 GetBitContext next_resync_gb; /* starts at the next resync marker */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
314 int next_resync_qscale; /* qscale of next resync marker */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
315 int next_resync_pos; /* bitstream position of next resync marker */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
316 #define DECODING_AC_LOST -1
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
317 #define DECODING_ACDC_LOST -2
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
318 #define DECODING_DESYNC -3
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
319 int decoding_error;
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
320 int next_p_frame_damaged; /* set if the next p frame is damaged, to avoid showing trashed b frames */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
321 int error_resilience;
286
91f7c38f5f37 statistics for 2-pass encoding
michaelni
parents: 281
diff changeset
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
de80712db90b - Preliminary RTP friendly mode for H.263.
pulento
parents: 154
diff changeset
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
986e461dc072 Initial revision
glantau
parents:
diff changeset
333 /* mpeg4 specific */
262
7d941b8c4e84 mpeg4 b-frames :)
michaelni
parents: 255
diff changeset
334 int time_increment_resolution;
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
335 int time_increment_bits; /* number of bits to represent the fractional part of time */
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
336 int last_time_base;
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
337 int time_base; /* time in seconds of last I,P,S Frame */
429
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
338 INT64 time; /* time of current frame */
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
339 INT64 last_non_b_time;
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
340 UINT16 pp_time; /* time distance between the last 2 p,s,i frames */
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
341 UINT16 bp_time; /* time distance between the last b and p,s,i frame */
64
5aa6292a1660 win32 fixes
glantau
parents: 41
diff changeset
342 int shape;
5aa6292a1660 win32 fixes
glantau
parents: 41
diff changeset
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
db20b987c32d divx5-gmc support
michaelni
parents: 254
diff changeset
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
5aa6292a1660 win32 fixes
glantau
parents: 41
diff changeset
355 int quant_precision;
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
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
762c67fd4078 uvlinesize
michaelni
parents: 553
diff changeset
358 int hierachy_type;
762c67fd4078 uvlinesize
michaelni
parents: 553
diff changeset
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
4f3d4a07d374 added aspected_width/height for EXTENDED_PAR
al3x
parents: 612
diff changeset
363 int aspected_width;
4f3d4a07d374 added aspected_width/height for EXTENDED_PAR
al3x
parents: 612
diff changeset
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
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
367 int data_partitioning;
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
368 int rvlc; /* reversible vlc */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
369 int resync_marker; /* could this stream contain resync markers*/
336
c56b45669214 export delay info
michaelni
parents: 333
diff changeset
370 int low_delay; /* no reordering needed / has no b-frames */
c56b45669214 export delay info
michaelni
parents: 333
diff changeset
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
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
373 PutBitContext tex_pb; /* used for data partitioned VOPs */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
374 PutBitContext pb2; /* used for data partitioned VOPs */
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
375 #define PB_BUFFER_SIZE 1024*256
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
376 uint8_t *tex_pb_buffer;
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
377 uint8_t *pb2_buffer;
591
d3f374218030 fixing mpeg4 mpeg quantizers
michaelni
parents: 582
diff changeset
378 int mpeg_quant;
598
0c950f816d61 4mv + bframe decoding bugfix
michaelni
parents: 591
diff changeset
379 INT8 *non_b_mv4_table;
255
db20b987c32d divx5-gmc support
michaelni
parents: 254
diff changeset
380
db20b987c32d divx5-gmc support
michaelni
parents: 254
diff changeset
381 /* divx specific, used to workaround (many) bugs in divx5 */
db20b987c32d divx5-gmc support
michaelni
parents: 254
diff changeset
382 int divx_version;
db20b987c32d divx5-gmc support
michaelni
parents: 254
diff changeset
383 int divx_build;
333
8aa87f1dfc52 divx 5.01 support
michaelni
parents: 329
diff changeset
384 #define BITSTREAM_BUFFER_SIZE 1024*256
429
718a22dc121f license/copyright change
glantau
parents: 411
diff changeset
385 UINT8 *bitstream_buffer; //Divx 5.01 puts several frames in a single one, this is used to reorder them
333
8aa87f1dfc52 divx 5.01 support
michaelni
parents: 329
diff changeset
386 int bitstream_buffer_size;
8aa87f1dfc52 divx 5.01 support
michaelni
parents: 329
diff changeset
387
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
388 /* RV10 specific */
986e461dc072 Initial revision
glantau
parents:
diff changeset
389 int rv10_version; /* RV10 version: 0 or 3 */
986e461dc072 Initial revision
glantau
parents:
diff changeset
390 int rv10_first_dc_coded[3];
986e461dc072 Initial revision
glantau
parents:
diff changeset
391
986e461dc072 Initial revision
glantau
parents:
diff changeset
392 /* MJPEG specific */
986e461dc072 Initial revision
glantau
parents:
diff changeset
393 struct MJpegContext *mjpeg_ctx;
229
f418b5c5ff67 PATCH by Rik Snel <rsnel@cube.dyndns.org>
arpi_esp
parents: 220
diff changeset
394 int mjpeg_vsample[3]; /* vertical sampling factors, default = {2, 1, 1} */
f418b5c5ff67 PATCH by Rik Snel <rsnel@cube.dyndns.org>
arpi_esp
parents: 220
diff changeset
395 int mjpeg_hsample[3]; /* horizontal sampling factors, default = {2, 1, 1} */
f418b5c5ff67 PATCH by Rik Snel <rsnel@cube.dyndns.org>
arpi_esp
parents: 220
diff changeset
396 int mjpeg_write_tables; /* do we want to have quantisation- and
f418b5c5ff67 PATCH by Rik Snel <rsnel@cube.dyndns.org>
arpi_esp
parents: 220
diff changeset
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
986e461dc072 Initial revision
glantau
parents:
diff changeset
399
986e461dc072 Initial revision
glantau
parents:
diff changeset
400 /* MSMPEG4 specific */
986e461dc072 Initial revision
glantau
parents:
diff changeset
401 int mv_table_index;
986e461dc072 Initial revision
glantau
parents:
diff changeset
402 int rl_table_index;
986e461dc072 Initial revision
glantau
parents:
diff changeset
403 int rl_chroma_table_index;
986e461dc072 Initial revision
glantau
parents:
diff changeset
404 int dc_table_index;
986e461dc072 Initial revision
glantau
parents:
diff changeset
405 int use_skip_mb_code;
986e461dc072 Initial revision
glantau
parents:
diff changeset
406 int slice_height; /* in macroblocks */
290
2899263586cd resync marker support, needed for some mp4 files
michaelni
parents: 288
diff changeset
407 int first_slice_line; /* used in mpeg4 too to handle resync markers */
208
2eb04d6be309 (commit by michael)
arpi_esp
parents: 191
diff changeset
408 int flipflop_rounding;
500
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
409 int msmpeg4_version; /* 0=not msmpeg4, 1=mp41, 2=mp42, 3=mp43/divx3 4=wmv1/7 5=wmv2/8*/
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
410 int per_mb_rl_table;
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
411 int esc3_level_length;
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
412 int esc3_run_length;
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
413 UINT8 *inter_scantable;
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
414 UINT8 *intra_scantable;
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
415 UINT8 *intra_v_scantable;
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
416 UINT8 *intra_h_scantable;
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
417 /* [mb_intra][isChroma][level][run][last] */
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
418 int ac_stats[2][2][MAX_LEVEL+1][MAX_RUN+1][2];
519
55b4e2248a45 wmv1 slice_height != mb_height support
michaelni
parents: 514
diff changeset
419 int inter_intra_pred;
500
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
420
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
421 /* decompression specific */
986e461dc072 Initial revision
glantau
parents:
diff changeset
422 GetBitContext gb;
986e461dc072 Initial revision
glantau
parents:
diff changeset
423
986e461dc072 Initial revision
glantau
parents:
diff changeset
424 /* MPEG2 specific - I wish I had not to support this mess. */
986e461dc072 Initial revision
glantau
parents:
diff changeset
425 int progressive_sequence;
986e461dc072 Initial revision
glantau
parents:
diff changeset
426 int mpeg_f_code[2][2];
986e461dc072 Initial revision
glantau
parents:
diff changeset
427 int picture_structure;
986e461dc072 Initial revision
glantau
parents:
diff changeset
428 /* picture type */
986e461dc072 Initial revision
glantau
parents:
diff changeset
429 #define PICT_TOP_FIELD 1
986e461dc072 Initial revision
glantau
parents:
diff changeset
430 #define PICT_BOTTOM_FIELD 2
986e461dc072 Initial revision
glantau
parents:
diff changeset
431 #define PICT_FRAME 3
986e461dc072 Initial revision
glantau
parents:
diff changeset
432
986e461dc072 Initial revision
glantau
parents:
diff changeset
433 int intra_dc_precision;
986e461dc072 Initial revision
glantau
parents:
diff changeset
434 int frame_pred_frame_dct;
986e461dc072 Initial revision
glantau
parents:
diff changeset
435 int top_field_first;
986e461dc072 Initial revision
glantau
parents:
diff changeset
436 int concealment_motion_vectors;
986e461dc072 Initial revision
glantau
parents:
diff changeset
437 int q_scale_type;
986e461dc072 Initial revision
glantau
parents:
diff changeset
438 int intra_vlc_format;
986e461dc072 Initial revision
glantau
parents:
diff changeset
439 int alternate_scan;
986e461dc072 Initial revision
glantau
parents:
diff changeset
440 int repeat_first_field;
986e461dc072 Initial revision
glantau
parents:
diff changeset
441 int chroma_420_type;
986e461dc072 Initial revision
glantau
parents:
diff changeset
442 int progressive_frame;
986e461dc072 Initial revision
glantau
parents:
diff changeset
443 int mpeg2;
986e461dc072 Initial revision
glantau
parents:
diff changeset
444 int full_pel[2];
986e461dc072 Initial revision
glantau
parents:
diff changeset
445 int interlaced_dct;
986e461dc072 Initial revision
glantau
parents:
diff changeset
446 int last_qscale;
986e461dc072 Initial revision
glantau
parents:
diff changeset
447 int first_slice;
162
de80712db90b - Preliminary RTP friendly mode for H.263.
pulento
parents: 154
diff changeset
448
de80712db90b - Preliminary RTP friendly mode for H.263.
pulento
parents: 154
diff changeset
449 /* RTP specific */
231
840cd25bf259 - Fixes on RTP and GOB headers for H.263.
pulento
parents: 229
diff changeset
450 /* These are explained on avcodec.h */
162
de80712db90b - Preliminary RTP friendly mode for H.263.
pulento
parents: 154
diff changeset
451 int rtp_mode;
de80712db90b - Preliminary RTP friendly mode for H.263.
pulento
parents: 154
diff changeset
452 int rtp_payload_size;
231
840cd25bf259 - Fixes on RTP and GOB headers for H.263.
pulento
parents: 229
diff changeset
453 void (*rtp_callback)(void *data, int size, int packet_number);
162
de80712db90b - Preliminary RTP friendly mode for H.263.
pulento
parents: 154
diff changeset
454 UINT8 *ptr_lastgob;
de80712db90b - Preliminary RTP friendly mode for H.263.
pulento
parents: 154
diff changeset
455 UINT8 *ptr_last_mb_line;
de80712db90b - Preliminary RTP friendly mode for H.263.
pulento
parents: 154
diff changeset
456 UINT32 mb_line_avgsize;
de80712db90b - Preliminary RTP friendly mode for H.263.
pulento
parents: 154
diff changeset
457
294
944632089814 4MV motion estimation (not finished yet)
michaelni
parents: 290
diff changeset
458 DCTELEM (*block)[64]; /* points to one of the following blocks */
327
d359db02fc90 much better ME for b frames (a bit slow though)
michaelni
parents: 325
diff changeset
459 DCTELEM blocks[2][6][64] __align8; // for HQ mode we need to keep the best block
325
15efd80cf51e mpeg2/mpeg4 dequantizer support (c & mmx)
michaelni
parents: 324
diff changeset
460 void (*dct_unquantize_mpeg1)(struct MpegEncContext *s,
15efd80cf51e mpeg2/mpeg4 dequantizer support (c & mmx)
michaelni
parents: 324
diff changeset
461 DCTELEM *block, int n, int qscale);
15efd80cf51e mpeg2/mpeg4 dequantizer support (c & mmx)
michaelni
parents: 324
diff changeset
462 void (*dct_unquantize_mpeg2)(struct MpegEncContext *s,
312
8cf5507e6ca5 mpeg4 mpeg quantizer support
michaelni
parents: 307
diff changeset
463 DCTELEM *block, int n, int qscale);
8cf5507e6ca5 mpeg4 mpeg quantizer support
michaelni
parents: 307
diff changeset
464 void (*dct_unquantize_h263)(struct MpegEncContext *s,
8cf5507e6ca5 mpeg4 mpeg quantizer support
michaelni
parents: 307
diff changeset
465 DCTELEM *block, int n, int qscale);
8cf5507e6ca5 mpeg4 mpeg quantizer support
michaelni
parents: 307
diff changeset
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
986e461dc072 Initial revision
glantau
parents:
diff changeset
470 } MpegEncContext;
986e461dc072 Initial revision
glantau
parents:
diff changeset
471
986e461dc072 Initial revision
glantau
parents:
diff changeset
472 int MPV_common_init(MpegEncContext *s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
473 void MPV_common_end(MpegEncContext *s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
474 void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64]);
553
18ad513d92fe direct rendering method 1 support
michaelni
parents: 542
diff changeset
475 void MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
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
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
484 void ff_conceal_past_errors(MpegEncContext *s, int conceal_all);
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
485 void ff_copy_bits(PutBitContext *pb, UINT8 *src, int length);
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
486 void ff_clean_intra_table_entries(MpegEncContext *s);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
487
986e461dc072 Initial revision
glantau
parents:
diff changeset
488 /* motion_est.c */
324
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
489 void ff_estimate_p_frame_motion(MpegEncContext * s,
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
490 int mb_x, int mb_y);
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
491 void ff_estimate_b_frame_motion(MpegEncContext * s,
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
492 int mb_x, int mb_y);
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
493 int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type);
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
494 void ff_fix_long_p_mvs(MpegEncContext * s);
9c6f056f0e41 fixed mpeg4 time stuff on encoding
michaelni
parents: 320
diff changeset
495 void ff_fix_long_b_mvs(MpegEncContext * s, int16_t (*mv_table)[2], int f_code, int type);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
496
986e461dc072 Initial revision
glantau
parents:
diff changeset
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
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
500 extern UINT8 ff_mpeg1_dc_scale_table[128];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
501
986e461dc072 Initial revision
glantau
parents:
diff changeset
502 void mpeg1_encode_picture_header(MpegEncContext *s, int picture_number);
986e461dc072 Initial revision
glantau
parents:
diff changeset
503 void mpeg1_encode_mb(MpegEncContext *s,
986e461dc072 Initial revision
glantau
parents:
diff changeset
504 DCTELEM block[6][64],
986e461dc072 Initial revision
glantau
parents:
diff changeset
505 int motion_x, int motion_y);
500
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
506 void ff_mpeg1_encode_init(MpegEncContext *s);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
507
986e461dc072 Initial revision
glantau
parents:
diff changeset
508 /* h263enc.c */
986e461dc072 Initial revision
glantau
parents:
diff changeset
509 typedef struct RLTable {
986e461dc072 Initial revision
glantau
parents:
diff changeset
510 int n; /* number of entries of table_vlc minus 1 */
986e461dc072 Initial revision
glantau
parents:
diff changeset
511 int last; /* number of values for last = 0 */
986e461dc072 Initial revision
glantau
parents:
diff changeset
512 const UINT16 (*table_vlc)[2];
986e461dc072 Initial revision
glantau
parents:
diff changeset
513 const INT8 *table_run;
986e461dc072 Initial revision
glantau
parents:
diff changeset
514 const INT8 *table_level;
986e461dc072 Initial revision
glantau
parents:
diff changeset
515 UINT8 *index_run[2]; /* encoding only */
986e461dc072 Initial revision
glantau
parents:
diff changeset
516 INT8 *max_level[2]; /* encoding & decoding */
986e461dc072 Initial revision
glantau
parents:
diff changeset
517 INT8 *max_run[2]; /* encoding & decoding */
542
d55978a3c369 rl vlc decoding optimizations
michaelni
parents: 533
diff changeset
518 VLC vlc; /* decoding only deprected FIXME remove*/
d55978a3c369 rl vlc decoding optimizations
michaelni
parents: 533
diff changeset
519 RL_VLC_ELEM *rl_vlc[32]; /* decoding only */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
520 } RLTable;
986e461dc072 Initial revision
glantau
parents:
diff changeset
521
986e461dc072 Initial revision
glantau
parents:
diff changeset
522 void init_rl(RLTable *rl);
986e461dc072 Initial revision
glantau
parents:
diff changeset
523 void init_vlc_rl(RLTable *rl);
986e461dc072 Initial revision
glantau
parents:
diff changeset
524
243
a6519f773064 * using static instead of extern
kabi
parents: 239
diff changeset
525 static inline int get_rl_index(const RLTable *rl, int last, int run, int level)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
526 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
527 int index;
986e461dc072 Initial revision
glantau
parents:
diff changeset
528 index = rl->index_run[last][run];
986e461dc072 Initial revision
glantau
parents:
diff changeset
529 if (index >= rl->n)
986e461dc072 Initial revision
glantau
parents:
diff changeset
530 return rl->n;
986e461dc072 Initial revision
glantau
parents:
diff changeset
531 if (level > rl->max_level[last][run])
986e461dc072 Initial revision
glantau
parents:
diff changeset
532 return rl->n;
986e461dc072 Initial revision
glantau
parents:
diff changeset
533 return index + level - 1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
534 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
535
500
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
536 extern UINT8 ff_mpeg4_y_dc_scale_table[32];
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
537 extern UINT8 ff_mpeg4_c_dc_scale_table[32];
599
b1a191202f96 mpeg4 mpeg quantizer encoding
michaelni
parents: 598
diff changeset
538 extern INT16 ff_mpeg4_default_intra_matrix[64];
b1a191202f96 mpeg4 mpeg quantizer encoding
michaelni
parents: 598
diff changeset
539 extern INT16 ff_mpeg4_default_non_intra_matrix[64];
b1a191202f96 mpeg4 mpeg quantizer encoding
michaelni
parents: 598
diff changeset
540
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
541 void h263_encode_mb(MpegEncContext *s,
986e461dc072 Initial revision
glantau
parents:
diff changeset
542 DCTELEM block[6][64],
986e461dc072 Initial revision
glantau
parents:
diff changeset
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
986e461dc072 Initial revision
glantau
parents:
diff changeset
547 void h263_encode_picture_header(MpegEncContext *s, int picture_number);
162
de80712db90b - Preliminary RTP friendly mode for H.263.
pulento
parents: 154
diff changeset
548 int h263_encode_gob_header(MpegEncContext * s, int mb_line);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
549 INT16 *h263_pred_motion(MpegEncContext * s, int block,
986e461dc072 Initial revision
glantau
parents:
diff changeset
550 int *px, int *py);
986e461dc072 Initial revision
glantau
parents:
diff changeset
551 void mpeg4_pred_ac(MpegEncContext * s, INT16 *block, int n,
986e461dc072 Initial revision
glantau
parents:
diff changeset
552 int dir);
327
d359db02fc90 much better ME for b frames (a bit slow though)
michaelni
parents: 325
diff changeset
553 void ff_set_mpeg4_time(MpegEncContext * s, int picture_number);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
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
986e461dc072 Initial revision
glantau
parents:
diff changeset
556
986e461dc072 Initial revision
glantau
parents:
diff changeset
557 void h263_decode_init_vlc(MpegEncContext *s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
558 int h263_decode_picture_header(MpegEncContext *s);
162
de80712db90b - Preliminary RTP friendly mode for H.263.
pulento
parents: 154
diff changeset
559 int h263_decode_gob_header(MpegEncContext *s);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
560 int mpeg4_decode_picture_header(MpegEncContext * s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
561 int intel_h263_decode_picture_header(MpegEncContext *s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
562 int h263_decode_mb(MpegEncContext *s,
986e461dc072 Initial revision
glantau
parents:
diff changeset
563 DCTELEM block[6][64]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
564 int h263_get_picture_format(int width, int height);
456
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
565 int ff_mpeg4_decode_video_packet_header(MpegEncContext *s);
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
566 int ff_mpeg4_resync(MpegEncContext *s);
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
567 void ff_mpeg4_encode_video_packet_header(MpegEncContext *s);
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
568 void ff_mpeg4_clean_buffers(MpegEncContext *s);
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
569 void ff_mpeg4_stuffing(PutBitContext * pbc);
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
570 void ff_mpeg4_init_partitions(MpegEncContext *s);
c006ee838856 single coefficient elimination
michaelni
parents: 440
diff changeset
571 void ff_mpeg4_merge_partitions(MpegEncContext *s);
500
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
572 extern inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr, int *dir_ptr);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
573
986e461dc072 Initial revision
glantau
parents:
diff changeset
574 /* rv10.c */
986e461dc072 Initial revision
glantau
parents:
diff changeset
575 void rv10_encode_picture_header(MpegEncContext *s, int picture_number);
986e461dc072 Initial revision
glantau
parents:
diff changeset
576 int rv_decode_dc(MpegEncContext *s, int n);
986e461dc072 Initial revision
glantau
parents:
diff changeset
577
986e461dc072 Initial revision
glantau
parents:
diff changeset
578 /* msmpeg4.c */
986e461dc072 Initial revision
glantau
parents:
diff changeset
579 void msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number);
208
2eb04d6be309 (commit by michael)
arpi_esp
parents: 191
diff changeset
580 void msmpeg4_encode_ext_header(MpegEncContext * s);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
581 void msmpeg4_encode_mb(MpegEncContext * s,
986e461dc072 Initial revision
glantau
parents:
diff changeset
582 DCTELEM block[6][64],
986e461dc072 Initial revision
glantau
parents:
diff changeset
583 int motion_x, int motion_y);
986e461dc072 Initial revision
glantau
parents:
diff changeset
584 int msmpeg4_decode_picture_header(MpegEncContext * s);
208
2eb04d6be309 (commit by michael)
arpi_esp
parents: 191
diff changeset
585 int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
586 int msmpeg4_decode_mb(MpegEncContext *s,
986e461dc072 Initial revision
glantau
parents:
diff changeset
587 DCTELEM block[6][64]);
500
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
588 int ff_msmpeg4_decode_init(MpegEncContext *s);
460bc2ba363e wmv1 support
michaelni
parents: 473
diff changeset
589 void ff_msmpeg4_encode_init(MpegEncContext *s);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
590
986e461dc072 Initial revision
glantau
parents:
diff changeset
591 /* mjpegenc.c */
986e461dc072 Initial revision
glantau
parents:
diff changeset
592
986e461dc072 Initial revision
glantau
parents:
diff changeset
593 int mjpeg_init(MpegEncContext *s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
594 void mjpeg_close(MpegEncContext *s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
595 void mjpeg_encode_mb(MpegEncContext *s,
986e461dc072 Initial revision
glantau
parents:
diff changeset
596 DCTELEM block[6][64]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
597 void mjpeg_picture_header(MpegEncContext *s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
598 void mjpeg_picture_trailer(MpegEncContext *s);
329
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
599
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
600 /* rate control */
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
601 int ff_rate_control_init(MpegEncContext *s);
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
602 int ff_rate_estimate_qscale(MpegEncContext *s);
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
603 int ff_rate_estimate_qscale_pass2(MpegEncContext *s);
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
604 void ff_write_pass1_stats(MpegEncContext *s);
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
605 void ff_rate_control_uninit(MpegEncContext *s);
612
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
606 double ff_eval(char *s, double *const_value, char **const_name,
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
607 double (**func1)(void *, double), char **func1_name,
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
608 double (**func2)(void *, double, double), char **func2_name,
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
609 void *opaque);
c0005de2be59 new ratecontrol code
michaelni
parents: 608
diff changeset
610
329
5cc47d0ba53e fixed ratecontrol & b-frames
michaelni
parents: 327
diff changeset
611
440
000aeeac27a2 * started to cleanup name clashes for onetime compilation
kabi
parents: 429
diff changeset
612 #endif /* AVCODEC_MPEGVIDEO_H */