~ubuntu-branches/ubuntu/gutsy/vtk/gutsy

« back to all changes in this revision

Viewing changes to Utilities/vtkmpeg2encode/mpeg2enc_global.h

  • Committer: Bazaar Package Importer
  • Author(s): Michele Angrisano
  • Date: 2007-06-30 22:39:48 UTC
  • mto: This revision was merged to the branch mainline in revision 8.
  • Revision ID: james.westby@ubuntu.com-20070630223948-6dqehsrip8yk05zb
Tags: upstream-5.0.3
ImportĀ upstreamĀ versionĀ 5.0.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* mpeg2enc_global.h, global variables, function prototypes                          */
2
 
 
3
 
/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
4
 
 
5
 
/*
6
 
 * Disclaimer of Warranty
7
 
 *
8
 
 * These software programs are available to the user without any license fee or
9
 
 * royalty on an "as is" basis.  The MPEG Software Simulation Group disclaims
10
 
 * any and all warranties, whether express, implied, or statuary, including any
11
 
 * implied warranties or merchantability or of fitness for a particular
12
 
 * purpose.  In no event shall the copyright-holder be liable for any
13
 
 * incidental, punitive, or consequential damages of any kind whatsoever
14
 
 * arising from the use of these programs.
15
 
 *
16
 
 * This disclaimer of warranty extends to the user of these programs and user's
17
 
 * customers, employees, agents, transferees, successors, and assigns.
18
 
 *
19
 
 * The MPEG Software Simulation Group does not represent or warrant that the
20
 
 * programs furnished hereunder are free of infringement of any third-party
21
 
 * patents.
22
 
 *
23
 
 * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
24
 
 * are subject to royalty fees to patent holders.  Many of these patents are
25
 
 * general enough such that they are unavoidable regardless of implementation
26
 
 * design.
27
 
 *
28
 
 */
29
 
#ifdef __cplusplus
30
 
extern "C" {
31
 
#endif
32
 
 
33
 
#include <vtkmpeg2encode/mpeg2encDllConfig.h>
34
 
 
35
 
/*  VTK_MPEG2ENC_EXPORT designates exported functions...
36
 
 */
37
 
#if defined(_WIN32) && !defined(VTK_MPEG2ENC_STATIC)
38
 
 #if defined(vtkMPEG2Encode_EXPORTS)
39
 
  #define VTK_MPEG2ENC_EXPORT __declspec( dllexport )
40
 
 #else
41
 
  #define VTK_MPEG2ENC_EXPORT __declspec( dllimport )
42
 
 #endif
43
 
#else
44
 
 #define VTK_MPEG2ENC_EXPORT
45
 
#endif
46
 
 
47
 
#include "mpeg2enc.h"
48
 
 
49
 
/* picture data arrays */
50
 
 
51
 
struct MPEG2_structure 
52
 
{
53
 
  /* reconstructed frames */
54
 
  unsigned char *newrefframe[3], *oldrefframe[3], *auxframe[3];
55
 
  /* original frames */
56
 
  unsigned char *neworgframe[3], *oldorgframe[3], *auxorgframe[3];
57
 
  /* prediction of current frame */
58
 
  unsigned char *predframe[3];
59
 
  /* 8*8 block data */
60
 
  short (*blocks)[64];
61
 
  /* intra / non_intra quantization matrices */
62
 
  unsigned char intra_q[64], inter_q[64];
63
 
  unsigned char chrom_intra_q[64],chrom_inter_q[64];
64
 
  /* prediction values for DCT coefficient (0,0) */
65
 
  int dc_dct_pred[3];
66
 
  /* macroblock side information array */
67
 
  struct mbinfo *mbinfo;
68
 
  /* motion estimation parameters */
69
 
  struct motion_data *motion_data;
70
 
  /* clipping (=saturation) table */
71
 
  unsigned char *clp;
72
 
 
73
 
  /* name strings */
74
 
  char id_string[256], tplorg[256], tplref[256];
75
 
  char iqname[256], niqname[256];
76
 
  char statname[256];
77
 
  char errortext[256];
78
 
 
79
 
  FILE *outfile, *statfile; /* file descriptors */
80
 
  int inputtype; /* format of input frames */
81
 
 
82
 
  int quiet; /* suppress warnings */
83
 
 
84
 
 
85
 
  /* coding model parameters */
86
 
 
87
 
  int N_val; /* number of frames in Group of Pictures */
88
 
  int M_val; /* distance between I/P frames */
89
 
  int P_val; /* intra slice refresh interval */
90
 
  int nframes; /* total number of frames to encode */
91
 
  int frame0, tc0; /* number and timecode of first frame */
92
 
  int mpeg1; /* ISO/IEC IS 11172-2 sequence */
93
 
  int fieldpic; /* use field pictures */
94
 
 
95
 
  /* sequence specific data (sequence header) */
96
 
 
97
 
  int horizontal_size, vertical_size; /* frame size (pels) */
98
 
  int width, height; /* encoded frame size (pels) multiples of 16 or 32 */
99
 
  int chrom_width,chrom_height,block_count;
100
 
  int mb_width, mb_height; /* frame size (macroblocks) */
101
 
  int width2, height2, mb_height2, chrom_width2; /* picture size */
102
 
  int aspectratio; /* aspect ratio information (pel or display) */
103
 
  int frame_rate_code; /* coded value of frame rate */
104
 
  double frame_rate; /* frames per second */
105
 
  double bit_rate; /* bits per second */
106
 
  int vbv_buffer_size; /* size of VBV buffer (* 16 kbit) */
107
 
  int constrparms; /* constrained parameters flag (MPEG-1 only) */
108
 
  int load_iquant, load_niquant; /* use non-default quant. matrices */
109
 
  int load_ciquant,load_cniquant;
110
 
 
111
 
 
112
 
  /* sequence specific data (sequence extension) */
113
 
 
114
 
  int profile, level; /* syntax / parameter constraints */
115
 
  int prog_seq; /* progressive sequence */
116
 
  int chroma_format;
117
 
  int low_delay; /* no B pictures, skipped pictures */
118
 
 
119
 
 
120
 
  /* sequence specific data (sequence display extension) */
121
 
 
122
 
  int video_format; /* component, PAL, NTSC, SECAM or MAC */
123
 
  int color_primaries; /* source primary chromaticity coordinates */
124
 
  int transfer_characteristics; /* opto-electronic transfer char. (gamma) */
125
 
  int matrix_coefficients; /* Eg,Eb,Er / Y,Cb,Cr matrix coefficients */
126
 
  int display_horizontal_size, display_vertical_size; /* display size */
127
 
 
128
 
 
129
 
  /* picture specific data (picture header) */
130
 
 
131
 
  int temp_ref; /* temporal reference */
132
 
  int pict_type; /* picture coding type (I, P or B) */
133
 
  int vbv_delay; /* video buffering verifier delay (1/90000 seconds) */
134
 
 
135
 
 
136
 
  /* picture specific data (picture coding extension) */
137
 
 
138
 
  int forw_hor_f_code, forw_vert_f_code;
139
 
  int back_hor_f_code, back_vert_f_code; /* motion vector ranges */
140
 
  int dc_prec; /* DC coefficient precision for intra coded blocks */
141
 
  int pict_struct; /* picture structure (frame, top / bottom field) */
142
 
  int topfirst; /* display top field first */
143
 
  /* use only frame prediction and frame DCT (I,P,B,current) */
144
 
  int frame_pred_dct_tab[3], frame_pred_dct;
145
 
  int conceal_tab[3]; /* use concealment motion vectors (I,P,B) */
146
 
  int qscale_tab[3], q_scale_type; /* linear/non-linear quantizaton table */
147
 
  int intravlc_tab[3], intravlc; /* intra vlc format (I,P,B,current) */
148
 
  int altscan_tab[3], altscan; /* alternate scan (I,P,B,current) */
149
 
  int repeatfirst; /* repeat first field after second field */
150
 
  int prog_frame; /* progressive frame */
151
 
 
152
 
  int Xi, Xp, Xb, reaction, d0i, d0p, d0b;
153
 
  double avg_act;
154
 
  int R_val, T_val, d_val;
155
 
  double actsum;
156
 
  int Np, Nb, S_val, Q_val;
157
 
  int prev_mquant;
158
 
 
159
 
  void (*report_error) _ANSI_ARGS_((const char *text));
160
 
  void *mpeg2_writer_internal;
161
 
  unsigned char* (*get_image_ptr) _ANSI_ARGS_((const char* fname, void *mpeg2_writer_internal));
162
 
};
163
 
 
164
 
/* prototypes of global functions */
165
 
 
166
 
/* conform.c */
167
 
VTK_MPEG2ENC_EXPORT void MPEG2_range_checks _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
168
 
VTK_MPEG2ENC_EXPORT void MPEG2_profile_and_level_checks _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
169
 
 
170
 
/* fdctref.c */
171
 
VTK_MPEG2ENC_EXPORT void MPEG2_init_fdct _ANSI_ARGS_((void));
172
 
void MPEG2_fdct _ANSI_ARGS_((short *block));
173
 
 
174
 
/* idct.c */
175
 
void MPEG2_idct _ANSI_ARGS_((short *block));
176
 
VTK_MPEG2ENC_EXPORT void MPEG2_init_idct _ANSI_ARGS_((void));
177
 
 
178
 
/* motion.c */
179
 
void MPEG2_motion_estimation _ANSI_ARGS_((unsigned char *oldorg, unsigned char *neworg,
180
 
  unsigned char *oldref, unsigned char *newref, unsigned char *cur,
181
 
  unsigned char *curref, int sxf, int syf, int sxb, int syb,
182
 
  struct mbinfo *mbi, int secondfield, int ipflag, struct MPEG2_structure *mpeg2_struct));
183
 
 
184
 
/* predict.c */
185
 
void MPEG2_predict _ANSI_ARGS_((unsigned char *reff[], unsigned char *refb[],
186
 
  unsigned char *cur[3], int secondfield, struct mbinfo *mbi, struct MPEG2_structure *mpeg2_struct));
187
 
 
188
 
/* putbits.c */
189
 
VTK_MPEG2ENC_EXPORT void MPEG2_initbits _ANSI_ARGS_((void));
190
 
void MPEG2_putbits _ANSI_ARGS_((int val, int n,struct MPEG2_structure *mpeg2_struct));
191
 
void MPEG2_alignbits _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
192
 
int MPEG2_bitcount _ANSI_ARGS_((void));
193
 
 
194
 
/* puthdr.c */
195
 
VTK_MPEG2ENC_EXPORT void MPEG2_putseqhdr _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
196
 
VTK_MPEG2ENC_EXPORT void MPEG2_putseqext _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
197
 
VTK_MPEG2ENC_EXPORT void MPEG2_putseqdispext _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
198
 
VTK_MPEG2ENC_EXPORT void MPEG2_putuserdata _ANSI_ARGS_((char *userdata,struct MPEG2_structure *mpeg2_struct));
199
 
void MPEG2_putgophdr _ANSI_ARGS_((int frame, int closed_gop, struct MPEG2_structure *mpeg2_struct));
200
 
void MPEG2_putpicthdr _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
201
 
void MPEG2_putpictcodext _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
202
 
VTK_MPEG2ENC_EXPORT void MPEG2_putseqend _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
203
 
 
204
 
/* putmpg.c */
205
 
void MPEG2_putintrablk _ANSI_ARGS_((short *blk, int cc,struct MPEG2_structure *mpeg2_struct));
206
 
void MPEG2_putnonintrablk _ANSI_ARGS_((short *blk,struct MPEG2_structure *mpeg2_struct));
207
 
void MPEG2_putmv _ANSI_ARGS_((int dmv, int f_code,struct MPEG2_structure *mpeg2_struct));
208
 
 
209
 
/* putpic.c */
210
 
void MPEG2_putpict _ANSI_ARGS_((unsigned char *frame,struct MPEG2_structure *mpeg2_struct));
211
 
 
212
 
/* putseq.c */
213
 
VTK_MPEG2ENC_EXPORT int MPEG2_putseq_one _ANSI_ARGS_((int cframe, int max,struct MPEG2_structure *mpeg2_struct));
214
 
 
215
 
/* putvlc.c */
216
 
void MPEG2_putDClum _ANSI_ARGS_((int val,struct MPEG2_structure *mpeg2_struct));
217
 
void MPEG2_putDCchrom _ANSI_ARGS_((int val,struct MPEG2_structure *mpeg2_struct));
218
 
void MPEG2_putACfirst _ANSI_ARGS_((int run, int val,struct MPEG2_structure *mpeg2_struct));
219
 
void MPEG2_putAC _ANSI_ARGS_((int run, int signed_level, int vlcformat,struct MPEG2_structure *mpeg2_struct));
220
 
void MPEG2_putaddrinc _ANSI_ARGS_((int addrinc,struct MPEG2_structure *mpeg2_struct));
221
 
void MPEG2_putmbtype _ANSI_ARGS_((int pict_type, int mb_type,struct MPEG2_structure *mpeg2_struct));
222
 
void MPEG2_putmotioncode _ANSI_ARGS_((int motion_code,struct MPEG2_structure *mpeg2_struct));
223
 
void MPEG2_putdmv _ANSI_ARGS_((int dmv,struct MPEG2_structure *mpeg2_struct));
224
 
void MPEG2_putcbp _ANSI_ARGS_((int cbp,struct MPEG2_structure *mpeg2_struct));
225
 
 
226
 
/* quantize.c */
227
 
int MPEG2_quant_intra _ANSI_ARGS_((short *src, short *dst, int dc_prec,
228
 
  unsigned char *quant_mat, int mquant,struct MPEG2_structure *mpeg2_struct));
229
 
int MPEG2_quant_non_intra _ANSI_ARGS_((short *src, short *dst,
230
 
  unsigned char *quant_mat, int mquant,struct MPEG2_structure *mpeg2_struct));
231
 
void MPEG2_iquant_intra _ANSI_ARGS_((short *src, short *dst, int dc_prec,
232
 
  unsigned char *quant_mat, int mquant,struct MPEG2_structure *mpeg2_struct));
233
 
void MPEG2_iquant_non_intra _ANSI_ARGS_((short *src, short *dst,
234
 
  unsigned char *quant_mat, int mquant,struct MPEG2_structure *mpeg2_struct));
235
 
 
236
 
/* ratectl.c */
237
 
VTK_MPEG2ENC_EXPORT void MPEG2_rc_init_seq _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
238
 
void MPEG2_rc_init_GOP _ANSI_ARGS_((int np, int nb,struct MPEG2_structure *mpeg2_struct));
239
 
void MPEG2_rc_init_pict _ANSI_ARGS_((unsigned char *frame,struct MPEG2_structure *mpeg2_struct));
240
 
void MPEG2_rc_update_pict _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
241
 
int MPEG2_rc_start_mb _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
242
 
int MPEG2_rc_calc_mquant _ANSI_ARGS_((int j,struct MPEG2_structure *mpeg2_struct));
243
 
void MPEG2_vbv_end_of_picture _ANSI_ARGS_((void));
244
 
void MPEG2_calc_vbv_delay _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
245
 
 
246
 
/* readpic.c */
247
 
void MPEG2_readframe _ANSI_ARGS_((char *fname, unsigned char *frame[],struct MPEG2_structure *mpeg2_struct));
248
 
 
249
 
/* stats.c */
250
 
void MPEG2_calcSNR _ANSI_ARGS_((unsigned char *org[3], unsigned char *rec[3],struct MPEG2_structure *mpeg2_struct));
251
 
void MPEG2_stats _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
252
 
 
253
 
/* transfrm.c */
254
 
void MPEG2_transform _ANSI_ARGS_((unsigned char *pred[], unsigned char *cur[],
255
 
  struct mbinfo *mbi, short blocks[][64],struct MPEG2_structure *mpeg2_struct));
256
 
void MPEG2_itransform _ANSI_ARGS_((unsigned char *pred[], unsigned char *cur[],
257
 
  struct mbinfo *mbi, short blocks[][64],struct MPEG2_structure *mpeg2_struct));
258
 
void MPEG2_dct_type_estimation _ANSI_ARGS_((unsigned char *pred, unsigned char *cur,
259
 
  struct mbinfo *mbi,struct MPEG2_structure *mpeg2_struct));
260
 
 
261
 
/* writepic.c */
262
 
void MPEG2_writeframe _ANSI_ARGS_((char *fname, unsigned char *frame[],struct MPEG2_structure *mpeg2_struct));
263
 
 
264
 
 
265
 
/* global variables */
266
 
 
267
 
/* GLOBAL_DEF is defined in exactly one file (putpic.c)
268
 
 */
269
 
#ifdef GLOBAL_DEF
270
 
 #define MPEG2ENC_EXTERN
271
 
#else
272
 
 #define MPEG2ENC_EXTERN extern
273
 
#endif
274
 
 
275
 
VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN char MPEG2_version[]
276
 
#ifdef GLOBAL_DEF
277
 
  ="mpeg2encode V1.2, 96/07/19"
278
 
#endif
279
 
;
280
 
 
281
 
VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN char MPEG2_author[]
282
 
#ifdef GLOBAL_DEF
283
 
  ="(C) 1996, MPEG Software Simulation Group"
284
 
#endif
285
 
;
286
 
 
287
 
/* zig-zag scan */
288
 
VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN unsigned char MPEG2_zig_zag_scan[64]
289
 
#ifdef GLOBAL_DEF
290
 
=
291
 
{
292
 
  0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,
293
 
  12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,
294
 
  35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,
295
 
  58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63
296
 
}
297
 
#endif
298
 
;
299
 
 
300
 
/* alternate scan */
301
 
VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN unsigned char MPEG2_alternate_scan[64]
302
 
#ifdef GLOBAL_DEF
303
 
=
304
 
{
305
 
  0,8,16,24,1,9,2,10,17,25,32,40,48,56,57,49,
306
 
  41,33,26,18,3,11,4,12,19,27,34,42,50,58,35,43,
307
 
  51,59,20,28,5,13,6,14,21,29,36,44,52,60,37,45,
308
 
  53,61,22,30,7,15,23,31,38,46,54,62,39,47,55,63
309
 
}
310
 
#endif
311
 
;
312
 
 
313
 
/* default intra quantization matrix */
314
 
VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN unsigned char MPEG2_default_intra_quantizer_matrix[64]
315
 
#ifdef GLOBAL_DEF
316
 
=
317
 
{
318
 
   8, 16, 19, 22, 26, 27, 29, 34,
319
 
  16, 16, 22, 24, 27, 29, 34, 37,
320
 
  19, 22, 26, 27, 29, 34, 34, 38,
321
 
  22, 22, 26, 27, 29, 34, 37, 40,
322
 
  22, 26, 27, 29, 32, 35, 40, 48,
323
 
  26, 27, 29, 32, 35, 40, 48, 58,
324
 
  26, 27, 29, 34, 38, 46, 56, 69,
325
 
  27, 29, 35, 38, 46, 56, 69, 83
326
 
}
327
 
#endif
328
 
;
329
 
 
330
 
/* non-linear quantization coefficient table */
331
 
VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN unsigned char MPEG2_non_linear_mquant_table[32]
332
 
#ifdef GLOBAL_DEF
333
 
=
334
 
{
335
 
   0, 1, 2, 3, 4, 5, 6, 7,
336
 
   8,10,12,14,16,18,20,22,
337
 
  24,28,32,36,40,44,48,52,
338
 
  56,64,72,80,88,96,104,112
339
 
}
340
 
#endif
341
 
;
342
 
 
343
 
/* non-linear mquant table for mapping from scale to code
344
 
 * since reconstruction levels are not bijective with the index map,
345
 
 * it is up to the designer to determine most of the quantization levels
346
 
 */
347
 
 
348
 
VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN unsigned char MPEG2_map_non_linear_mquant[113] 
349
 
#ifdef GLOBAL_DEF
350
 
=
351
 
{
352
 
0,1,2,3,4,5,6,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,
353
 
16,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,
354
 
22,22,23,23,23,23,24,24,24,24,24,24,24,25,25,25,25,25,25,25,26,26,
355
 
26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,29,
356
 
29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,31,31,31,31,31
357
 
}
358
 
#endif
359
 
;
360
 
 
361
 
#ifdef __cplusplus
362
 
}
363
 
#endif