[svn] / branches / dev-api-4 / xvidcore / src / encoder.h Repository:
ViewVC logotype

Annotation of /branches/dev-api-4/xvidcore/src/encoder.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 920 - (view) (download)

1 : edgomez 202 /*****************************************************************************
2 : Isibaar 3 *
3 : edgomez 202 * XVID MPEG-4 VIDEO CODEC
4 :     * - Encoder header -
5 : Isibaar 3 *
6 : edgomez 851 * This program is an implementation of a part of one or more MPEG-4
7 :     * Video tools as specified in ISO/IEC 14496-2 standard. Those intending
8 :     * to use this software module in hardware or software products are
9 :     * advised that its use may infringe existing patents or copyrights, and
10 :     * any such use would be at such party's own risk. The original
11 :     * developer of this software module and his/her company, and subsequent
12 :     * editors and their companies, will have no liability for use of this
13 :     * software or modifications or derivatives thereof.
14 : edgomez 399 *
15 : edgomez 851 * This program is free software ; you can redistribute it and/or modify
16 :     * it under the terms of the GNU General Public License as published by
17 :     * the Free Software Foundation ; either version 2 of the License, or
18 : edgomez 202 * (at your option) any later version.
19 : Isibaar 3 *
20 : edgomez 202 * This program is distributed in the hope that it will be useful,
21 : edgomez 851 * but WITHOUT ANY WARRANTY ; without even the implied warranty of
22 : edgomez 202 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 :     * GNU General Public License for more details.
24 :     *
25 :     * You should have received a copy of the GNU General Public License
26 : edgomez 851 * along with this program ; if not, write to the Free Software
27 : edgomez 202 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 :     *
29 : edgomez 851 ****************************************************************************/
30 :     /*****************************************************************************
31 : edgomez 404 *
32 : edgomez 851 * History
33 : edgomez 648 *
34 : edgomez 851 * - 13.06.2002 Added legal header
35 :     * - 22.08.2001 Added support for EXT_MODE encoding mode
36 :     * support for EXTENDED API
37 :     * - 22.08.2001 fixed bug in iDQtab
38 : edgomez 648 *
39 : suxen_drol 920 * $Id: encoder.h,v 1.27.2.3 2003-03-15 14:32:56 suxen_drol Exp $
40 : edgomez 648 *
41 : edgomez 202 ****************************************************************************/
42 : Isibaar 3
43 :     #ifndef _ENCODER_H_
44 :     #define _ENCODER_H_
45 :    
46 :     #include "xvid.h"
47 :     #include "portab.h"
48 :     #include "global.h"
49 : edgomez 188 #include "utils/ratecontrol.h"
50 : Isibaar 3
51 : edgomez 202 /*****************************************************************************
52 :     * Constants
53 :     ****************************************************************************/
54 :    
55 :     /* Quatization type */
56 : Isibaar 3 #define H263_QUANT 0
57 :     #define MPEG4_QUANT 1
58 :    
59 : edgomez 202 /* Indicates no quantizer changes in INTRA_Q/INTER_Q modes */
60 :     #define NO_CHANGE 64
61 : Isibaar 3
62 : edgomez 202 /*****************************************************************************
63 :     * Types
64 :     ****************************************************************************/
65 : Isibaar 3
66 : edgomez 202 typedef int bool;
67 : Isibaar 3
68 : edgomez 202 /*****************************************************************************
69 :     * Structures
70 :     ****************************************************************************/
71 : Isibaar 3
72 :     typedef struct
73 :     {
74 : suxen_drol 890 /* --- constants --- */
75 : edgomez 188 uint32_t width;
76 :     uint32_t height;
77 : Isibaar 3
78 :     uint32_t edged_width;
79 :     uint32_t edged_height;
80 :     uint32_t mb_width;
81 :     uint32_t mb_height;
82 :    
83 : suxen_drol 920 int plugin_flags;
84 :    
85 : suxen_drol 152 /* frame rate increment & base */
86 :     uint32_t fincr;
87 :     uint32_t fbase;
88 :    
89 : suxen_drol 890 xvid_global_t global_flags;
90 : edgomez 851 int bquant_ratio;
91 :     int bquant_offset;
92 :     int frame_drop_ratio;
93 :    
94 : suxen_drol 890 #ifdef _SMP
95 :     int num_threads;
96 :     #endif
97 :    
98 :    
99 : edgomez 851 int iMaxKeyInterval;
100 :     int max_bframes;
101 :    
102 : suxen_drol 890 /* --- inbetween vop stuff --- */
103 : edgomez 188 /* rounding type; alternate 0-1 after each interframe */
104 : Isibaar 3 /* 1 <= fixed_code <= 4
105 :     automatically adjusted using motion vector statistics inside
106 : edgomez 195 */
107 : Isibaar 3
108 : suxen_drol 136 /* vars that not "quite" frame independant */
109 :     uint32_t m_rounding_type;
110 :     uint32_t m_fcode;
111 : suxen_drol 890 xvid_vol_t vol_flags;
112 : suxen_drol 136
113 : edgomez 851 int64_t m_stamp;
114 : edgomez 195 }
115 :     MBParam;
116 : suxen_drol 136
117 :    
118 :     typedef struct
119 :     {
120 : edgomez 851 int iTextBits;
121 :     int iMvSum;
122 :     int iMvCount;
123 :     int kblks;
124 :     int mblks;
125 :     int ublks;
126 :     int gblks;
127 :     }
128 :     Statistics;
129 :    
130 :    
131 : suxen_drol 890 /* encoding queue */
132 : edgomez 851 typedef struct
133 :     {
134 : suxen_drol 890 xvid_enc_frame_t frame;
135 :     unsigned char quant_intra_matrix[64];
136 :     unsigned char quant_inter_matrix[64];
137 :     IMAGE image;
138 :     } QUEUEINFO;
139 :    
140 :    
141 :     typedef struct
142 :     {
143 : suxen_drol 920 int frame_num;
144 : suxen_drol 890 xvid_vol_t vol_flags;
145 :     xvid_vop_t vop_flags;
146 :     xvid_motion_t motion_flags;
147 :    
148 :     int coding_type;
149 : edgomez 188 uint32_t quant;
150 :     uint32_t rounding_type;
151 :     uint32_t fcode;
152 : suxen_drol 136 uint32_t bcode;
153 : Isibaar 3
154 : suxen_drol 152 uint32_t seconds;
155 :     uint32_t ticks;
156 : edgomez 851 int64_t stamp;
157 : suxen_drol 136
158 :     IMAGE image;
159 :    
160 : edgomez 195 MACROBLOCK *mbs;
161 : suxen_drol 136
162 : edgomez 851 WARPPOINTS warp; // as in bitstream
163 :     GMC_DATA gmc_data; // common data for all MBs
164 : suxen_drol 890
165 :     int length; /* the encoded size of this frame */
166 : edgomez 851
167 :     Statistics sStat;
168 : edgomez 195 }
169 :     FRAMEINFO;
170 : suxen_drol 136
171 : Isibaar 3
172 :     typedef struct
173 :     {
174 : edgomez 188 MBParam mbParam;
175 : Isibaar 3
176 : edgomez 188 int iFrameNum;
177 : Isibaar 3 int bitrate;
178 :    
179 : suxen_drol 919 // plugins
180 : suxen_drol 920 int num_plugins; /* note: we store plugin flags in MBPARAM */
181 : suxen_drol 919 xvid_enc_plugin_t * plugins;
182 :    
183 :     // dquant
184 :    
185 :     int * temp_dquants;
186 :    
187 : edgomez 851 // images
188 : Isibaar 3
189 : edgomez 195 FRAMEINFO *current;
190 :     FRAMEINFO *reference;
191 : suxen_drol 136
192 : suxen_drol 920 IMAGE sOriginal; /* original image copy for i/p frames */
193 :     IMAGE sOriginal2; /* original image copy for b-frames */
194 : edgomez 188 IMAGE vInterH;
195 :     IMAGE vInterV;
196 : edgomez 851 IMAGE vInterVf;
197 : edgomez 188 IMAGE vInterHV;
198 : edgomez 851 IMAGE vInterHVf;
199 : Isibaar 3
200 : edgomez 851 IMAGE vGMC;
201 :    
202 :     /* image queue */
203 :     int queue_head;
204 :     int queue_tail;
205 :     int queue_size;
206 : suxen_drol 890 QUEUEINFO *queue;
207 : edgomez 851
208 :     /* bframe buffer */
209 :     int bframenum_head;
210 :     int bframenum_tail;
211 :     int flush_bframes;
212 :    
213 :     FRAMEINFO **bframes;
214 :     IMAGE f_refh;
215 :     IMAGE f_refv;
216 :     IMAGE f_refhv;
217 :    
218 : suxen_drol 890 /* closed_gop fixup temporary storage */
219 :     int closed_bframenum; /* == -1 if there is no fixup intended */
220 :     QUEUEINFO closed_qframe; /* qFrame, only valid when >= 0 */
221 :    
222 : edgomez 851 int m_framenum; /* debug frame num counter; unlike iFrameNum, does not reset at ivop */
223 :    
224 : edgomez 188 RateControl rate_control;
225 : edgomez 851
226 :     float fMvPrevSigma;
227 : Isibaar 3 }
228 :     Encoder;
229 :    
230 : edgomez 202 /*****************************************************************************
231 :     * Inline functions
232 :     ****************************************************************************/
233 : Isibaar 3
234 : edgomez 195 static __inline uint8_t
235 :     get_fcode(uint16_t sr)
236 : Isibaar 3 {
237 : edgomez 188 if (sr <= 16)
238 : Isibaar 3 return 1;
239 :    
240 : edgomez 195 else if (sr <= 32)
241 : Isibaar 3 return 2;
242 :    
243 : edgomez 188 else if (sr <= 64)
244 : Isibaar 3 return 3;
245 :    
246 : edgomez 188 else if (sr <= 128)
247 : Isibaar 3 return 4;
248 :    
249 : edgomez 188 else if (sr <= 256)
250 : Isibaar 3 return 5;
251 :    
252 : edgomez 188 else if (sr <= 512)
253 : Isibaar 3 return 6;
254 :    
255 : edgomez 188 else if (sr <= 1024)
256 : Isibaar 3 return 7;
257 :    
258 : edgomez 188 else
259 : Isibaar 3 return 0;
260 :     }
261 :    
262 : edgomez 202
263 :     /*****************************************************************************
264 :     * Prototypes
265 :     ****************************************************************************/
266 :    
267 :     void init_encoder(uint32_t cpu_flags);
268 :    
269 : suxen_drol 890 int enc_create(xvid_enc_create_t * create, xvid_enc_rc_t * rc);
270 :     int enc_destroy(Encoder * pEnc);
271 :     int enc_encode(Encoder * pEnc,
272 :     xvid_enc_frame_t * pFrame,
273 :     xvid_enc_stats_t * stats);
274 : edgomez 202
275 :     #endif

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4