[cvs] / xvidcore / src / encoder.h Repository:
ViewVC logotype

Annotation of /xvidcore/src/encoder.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.27.2.9 - (view) (download)

1 : edgomez 1.10 /*****************************************************************************
2 : Isibaar 1.1 *
3 : edgomez 1.10 * XVID MPEG-4 VIDEO CODEC
4 :     * - Encoder header -
5 : Isibaar 1.1 *
6 : edgomez 1.27 * 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 :     *
15 :     * 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 1.10 * (at your option) any later version.
19 : Isibaar 1.1 *
20 : edgomez 1.10 * This program is distributed in the hope that it will be useful,
21 : edgomez 1.27 * but WITHOUT ANY WARRANTY ; without even the implied warranty of
22 : edgomez 1.10 * 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 1.27 * along with this program ; if not, write to the Free Software
27 : edgomez 1.10 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 :     *
29 : edgomez 1.27 ****************************************************************************/
30 :     /*****************************************************************************
31 :     *
32 :     * History
33 :     *
34 :     * - 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 1.24 *
39 : edgomez 1.27.2.9 * $Id: encoder.h,v 1.27.2.8 2003/05/18 12:33:26 edgomez Exp $
40 : edgomez 1.21 *
41 : edgomez 1.10 ****************************************************************************/
42 : Isibaar 1.1
43 :     #ifndef _ENCODER_H_
44 :     #define _ENCODER_H_
45 :    
46 :     #include "xvid.h"
47 :     #include "portab.h"
48 :     #include "global.h"
49 :    
50 : edgomez 1.10 /*****************************************************************************
51 :     * Constants
52 :     ****************************************************************************/
53 :    
54 :     /*****************************************************************************
55 :     * Types
56 :     ****************************************************************************/
57 : Isibaar 1.1
58 : edgomez 1.10 typedef int bool;
59 : Isibaar 1.1
60 : edgomez 1.10 /*****************************************************************************
61 :     * Structures
62 :     ****************************************************************************/
63 : Isibaar 1.1
64 :     typedef struct
65 :     {
66 : suxen_drol 1.27.2.1 /* --- constants --- */
67 : edgomez 1.8 uint32_t width;
68 :     uint32_t height;
69 : Isibaar 1.1
70 :     uint32_t edged_width;
71 :     uint32_t edged_height;
72 :     uint32_t mb_width;
73 :     uint32_t mb_height;
74 :    
75 : suxen_drol 1.27.2.3 int plugin_flags;
76 :    
77 : suxen_drol 1.6 /* frame rate increment & base */
78 :     uint32_t fincr;
79 :     uint32_t fbase;
80 :    
81 : suxen_drol 1.27.2.7 int profile;
82 :    
83 : suxen_drol 1.27.2.1 xvid_global_t global_flags;
84 : edgomez 1.27 int bquant_ratio;
85 :     int bquant_offset;
86 :     int frame_drop_ratio;
87 :    
88 : suxen_drol 1.27.2.7 int min_quant[3];
89 :     int max_quant[3];
90 :    
91 : suxen_drol 1.27.2.1 #ifdef _SMP
92 :     int num_threads;
93 :     #endif
94 :    
95 :    
96 : edgomez 1.27 int iMaxKeyInterval;
97 :     int max_bframes;
98 :    
99 : suxen_drol 1.27.2.1 /* --- inbetween vop stuff --- */
100 : edgomez 1.8 /* rounding type; alternate 0-1 after each interframe */
101 : Isibaar 1.1 /* 1 <= fixed_code <= 4
102 :     automatically adjusted using motion vector statistics inside
103 : edgomez 1.9 */
104 : Isibaar 1.1
105 : suxen_drol 1.5 /* vars that not "quite" frame independant */
106 :     uint32_t m_rounding_type;
107 :     uint32_t m_fcode;
108 : suxen_drol 1.27.2.1 xvid_vol_t vol_flags;
109 : suxen_drol 1.5
110 : edgomez 1.27 int64_t m_stamp;
111 :     }
112 :     MBParam;
113 :    
114 : suxen_drol 1.6
115 : edgomez 1.27 typedef struct
116 :     {
117 :     int iTextBits;
118 :     int iMvSum;
119 :     int iMvCount;
120 :     int kblks;
121 :     int mblks;
122 :     int ublks;
123 :     int gblks;
124 : edgomez 1.9 }
125 : edgomez 1.27 Statistics;
126 : suxen_drol 1.5
127 :    
128 : suxen_drol 1.27.2.1 /* encoding queue */
129 : suxen_drol 1.5 typedef struct
130 :     {
131 : suxen_drol 1.27.2.1 xvid_enc_frame_t frame;
132 :     unsigned char quant_intra_matrix[64];
133 :     unsigned char quant_inter_matrix[64];
134 :     IMAGE image;
135 :     } QUEUEINFO;
136 : h 1.3
137 : suxen_drol 1.27.2.1
138 :     typedef struct
139 :     {
140 : suxen_drol 1.27.2.3 int frame_num;
141 : suxen_drol 1.27.2.4 int fincr;
142 : suxen_drol 1.27.2.1 xvid_vol_t vol_flags;
143 :     xvid_vop_t vop_flags;
144 :     xvid_motion_t motion_flags;
145 :    
146 :     int coding_type;
147 :     uint32_t quant;
148 : edgomez 1.8 uint32_t rounding_type;
149 :     uint32_t fcode;
150 : suxen_drol 1.5 uint32_t bcode;
151 :    
152 : suxen_drol 1.6 uint32_t seconds;
153 :     uint32_t ticks;
154 : edgomez 1.27 int64_t stamp;
155 : suxen_drol 1.5
156 :     IMAGE image;
157 :    
158 : edgomez 1.9 MACROBLOCK *mbs;
159 : suxen_drol 1.5
160 : edgomez 1.27.2.9 WARPPOINTS warp; /* as in bitstream */
161 :     GMC_DATA gmc_data; /* common data for all MBs */
162 : suxen_drol 1.27.2.1
163 :     int length; /* the encoded size of this frame */
164 : edgomez 1.27
165 :     Statistics sStat;
166 : edgomez 1.9 }
167 :     FRAMEINFO;
168 : Isibaar 1.1
169 :    
170 :     typedef struct
171 :     {
172 : edgomez 1.8 MBParam mbParam;
173 : Isibaar 1.1
174 : edgomez 1.8 int iFrameNum;
175 : Isibaar 1.1 int bitrate;
176 : suxen_drol 1.27.2.7
177 : edgomez 1.27.2.9 /* zones */
178 : suxen_drol 1.27.2.7 unsigned int num_zones;
179 :     xvid_enc_zone_t * zones;
180 : suxen_drol 1.27.2.2
181 : edgomez 1.27.2.9 /* plugins */
182 : suxen_drol 1.27.2.5 unsigned int num_plugins; /* note: we store plugin flags in MBPARAM */
183 : suxen_drol 1.27.2.2 xvid_enc_plugin_t * plugins;
184 :    
185 : edgomez 1.27.2.9 /* dquant */
186 : suxen_drol 1.27.2.2
187 :     int * temp_dquants;
188 : Isibaar 1.1
189 : edgomez 1.27.2.9 /* images */
190 : Isibaar 1.1
191 : edgomez 1.9 FRAMEINFO *current;
192 :     FRAMEINFO *reference;
193 : suxen_drol 1.5
194 : suxen_drol 1.27.2.3 IMAGE sOriginal; /* original image copy for i/p frames */
195 :     IMAGE sOriginal2; /* original image copy for b-frames */
196 : edgomez 1.8 IMAGE vInterH;
197 :     IMAGE vInterV;
198 : edgomez 1.27 IMAGE vInterVf;
199 : edgomez 1.8 IMAGE vInterHV;
200 : edgomez 1.27 IMAGE vInterHVf;
201 :    
202 :     IMAGE vGMC;
203 :    
204 :     /* image queue */
205 :     int queue_head;
206 :     int queue_tail;
207 :     int queue_size;
208 : suxen_drol 1.27.2.1 QUEUEINFO *queue;
209 : edgomez 1.27
210 :     /* bframe buffer */
211 :     int bframenum_head;
212 :     int bframenum_tail;
213 :     int flush_bframes;
214 :    
215 :     FRAMEINFO **bframes;
216 :     IMAGE f_refh;
217 :     IMAGE f_refv;
218 :     IMAGE f_refhv;
219 : suxen_drol 1.27.2.1
220 :     /* closed_gop fixup temporary storage */
221 :     int closed_bframenum; /* == -1 if there is no fixup intended */
222 :     QUEUEINFO closed_qframe; /* qFrame, only valid when >= 0 */
223 : edgomez 1.27
224 :     int m_framenum; /* debug frame num counter; unlike iFrameNum, does not reset at ivop */
225 :    
226 :     float fMvPrevSigma;
227 : Isibaar 1.1 }
228 :     Encoder;
229 :    
230 : edgomez 1.10 /*****************************************************************************
231 :     * Inline functions
232 :     ****************************************************************************/
233 : edgomez 1.9
234 :     static __inline uint8_t
235 :     get_fcode(uint16_t sr)
236 : Isibaar 1.1 {
237 : edgomez 1.8 if (sr <= 16)
238 : Isibaar 1.1 return 1;
239 :    
240 : edgomez 1.9 else if (sr <= 32)
241 : Isibaar 1.1 return 2;
242 :    
243 : edgomez 1.8 else if (sr <= 64)
244 : Isibaar 1.1 return 3;
245 :    
246 : edgomez 1.8 else if (sr <= 128)
247 : Isibaar 1.1 return 4;
248 :    
249 : edgomez 1.8 else if (sr <= 256)
250 : Isibaar 1.1 return 5;
251 :    
252 : edgomez 1.8 else if (sr <= 512)
253 : Isibaar 1.1 return 6;
254 :    
255 : edgomez 1.8 else if (sr <= 1024)
256 : Isibaar 1.1 return 7;
257 :    
258 : edgomez 1.8 else
259 : Isibaar 1.1 return 0;
260 :     }
261 :    
262 : edgomez 1.10
263 :     /*****************************************************************************
264 :     * Prototypes
265 :     ****************************************************************************/
266 :    
267 :     void init_encoder(uint32_t cpu_flags);
268 :    
269 : suxen_drol 1.27.2.6 int enc_create(xvid_enc_create_t * create);
270 : suxen_drol 1.27.2.1 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 1.10
275 :     #endif

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