File: mpeg2enc_global.h

package info (click to toggle)
vtk 5.0.2-4
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 51,080 kB
  • ctags: 67,442
  • sloc: cpp: 522,627; ansic: 221,292; tcl: 43,377; python: 14,072; perl: 3,102; java: 1,436; yacc: 1,033; sh: 469; lex: 248; makefile: 181; asm: 154
file content (363 lines) | stat: -rw-r--r-- 14,097 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
/* mpeg2enc_global.h, global variables, function prototypes                          */

/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */

/*
 * Disclaimer of Warranty
 *
 * These software programs are available to the user without any license fee or
 * royalty on an "as is" basis.  The MPEG Software Simulation Group disclaims
 * any and all warranties, whether express, implied, or statuary, including any
 * implied warranties or merchantability or of fitness for a particular
 * purpose.  In no event shall the copyright-holder be liable for any
 * incidental, punitive, or consequential damages of any kind whatsoever
 * arising from the use of these programs.
 *
 * This disclaimer of warranty extends to the user of these programs and user's
 * customers, employees, agents, transferees, successors, and assigns.
 *
 * The MPEG Software Simulation Group does not represent or warrant that the
 * programs furnished hereunder are free of infringement of any third-party
 * patents.
 *
 * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
 * are subject to royalty fees to patent holders.  Many of these patents are
 * general enough such that they are unavoidable regardless of implementation
 * design.
 *
 */
#ifdef __cplusplus
extern "C" {
#endif

#include <vtkmpeg2encode/mpeg2encDllConfig.h>

/*  VTK_MPEG2ENC_EXPORT designates exported functions...
 */
#if defined(_WIN32) && !defined(VTK_MPEG2ENC_STATIC)
 #if defined(vtkMPEG2Encode_EXPORTS)
  #define VTK_MPEG2ENC_EXPORT __declspec( dllexport )
 #else
  #define VTK_MPEG2ENC_EXPORT __declspec( dllimport )
 #endif
#else
 #define VTK_MPEG2ENC_EXPORT
#endif

#include "mpeg2enc.h"

/* picture data arrays */

struct MPEG2_structure 
{
  /* reconstructed frames */
  unsigned char *newrefframe[3], *oldrefframe[3], *auxframe[3];
  /* original frames */
  unsigned char *neworgframe[3], *oldorgframe[3], *auxorgframe[3];
  /* prediction of current frame */
  unsigned char *predframe[3];
  /* 8*8 block data */
  short (*blocks)[64];
  /* intra / non_intra quantization matrices */
  unsigned char intra_q[64], inter_q[64];
  unsigned char chrom_intra_q[64],chrom_inter_q[64];
  /* prediction values for DCT coefficient (0,0) */
  int dc_dct_pred[3];
  /* macroblock side information array */
  struct mbinfo *mbinfo;
  /* motion estimation parameters */
  struct motion_data *motion_data;
  /* clipping (=saturation) table */
  unsigned char *clp;

  /* name strings */
  char id_string[256], tplorg[256], tplref[256];
  char iqname[256], niqname[256];
  char statname[256];
  char errortext[256];

  FILE *outfile, *statfile; /* file descriptors */
  int inputtype; /* format of input frames */

  int quiet; /* suppress warnings */


  /* coding model parameters */

  int N_val; /* number of frames in Group of Pictures */
  int M_val; /* distance between I/P frames */
  int P_val; /* intra slice refresh interval */
  int nframes; /* total number of frames to encode */
  int frame0, tc0; /* number and timecode of first frame */
  int mpeg1; /* ISO/IEC IS 11172-2 sequence */
  int fieldpic; /* use field pictures */

  /* sequence specific data (sequence header) */

  int horizontal_size, vertical_size; /* frame size (pels) */
  int width, height; /* encoded frame size (pels) multiples of 16 or 32 */
  int chrom_width,chrom_height,block_count;
  int mb_width, mb_height; /* frame size (macroblocks) */
  int width2, height2, mb_height2, chrom_width2; /* picture size */
  int aspectratio; /* aspect ratio information (pel or display) */
  int frame_rate_code; /* coded value of frame rate */
  double frame_rate; /* frames per second */
  double bit_rate; /* bits per second */
  int vbv_buffer_size; /* size of VBV buffer (* 16 kbit) */
  int constrparms; /* constrained parameters flag (MPEG-1 only) */
  int load_iquant, load_niquant; /* use non-default quant. matrices */
  int load_ciquant,load_cniquant;


  /* sequence specific data (sequence extension) */

  int profile, level; /* syntax / parameter constraints */
  int prog_seq; /* progressive sequence */
  int chroma_format;
  int low_delay; /* no B pictures, skipped pictures */


  /* sequence specific data (sequence display extension) */

  int video_format; /* component, PAL, NTSC, SECAM or MAC */
  int color_primaries; /* source primary chromaticity coordinates */
  int transfer_characteristics; /* opto-electronic transfer char. (gamma) */
  int matrix_coefficients; /* Eg,Eb,Er / Y,Cb,Cr matrix coefficients */
  int display_horizontal_size, display_vertical_size; /* display size */


  /* picture specific data (picture header) */

  int temp_ref; /* temporal reference */
  int pict_type; /* picture coding type (I, P or B) */
  int vbv_delay; /* video buffering verifier delay (1/90000 seconds) */


  /* picture specific data (picture coding extension) */

  int forw_hor_f_code, forw_vert_f_code;
  int back_hor_f_code, back_vert_f_code; /* motion vector ranges */
  int dc_prec; /* DC coefficient precision for intra coded blocks */
  int pict_struct; /* picture structure (frame, top / bottom field) */
  int topfirst; /* display top field first */
  /* use only frame prediction and frame DCT (I,P,B,current) */
  int frame_pred_dct_tab[3], frame_pred_dct;
  int conceal_tab[3]; /* use concealment motion vectors (I,P,B) */
  int qscale_tab[3], q_scale_type; /* linear/non-linear quantizaton table */
  int intravlc_tab[3], intravlc; /* intra vlc format (I,P,B,current) */
  int altscan_tab[3], altscan; /* alternate scan (I,P,B,current) */
  int repeatfirst; /* repeat first field after second field */
  int prog_frame; /* progressive frame */

  int Xi, Xp, Xb, reaction, d0i, d0p, d0b;
  double avg_act;
  int R_val, T_val, d_val;
  double actsum;
  int Np, Nb, S_val, Q_val;
  int prev_mquant;

  void (*report_error) _ANSI_ARGS_((const char *text));
  void *mpeg2_writer_internal;
  unsigned char* (*get_image_ptr) _ANSI_ARGS_((const char* fname, void *mpeg2_writer_internal));
};

/* prototypes of global functions */

/* conform.c */
VTK_MPEG2ENC_EXPORT void MPEG2_range_checks _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
VTK_MPEG2ENC_EXPORT void MPEG2_profile_and_level_checks _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));

/* fdctref.c */
VTK_MPEG2ENC_EXPORT void MPEG2_init_fdct _ANSI_ARGS_((void));
void MPEG2_fdct _ANSI_ARGS_((short *block));

/* idct.c */
void MPEG2_idct _ANSI_ARGS_((short *block));
VTK_MPEG2ENC_EXPORT void MPEG2_init_idct _ANSI_ARGS_((void));

/* motion.c */
void MPEG2_motion_estimation _ANSI_ARGS_((unsigned char *oldorg, unsigned char *neworg,
  unsigned char *oldref, unsigned char *newref, unsigned char *cur,
  unsigned char *curref, int sxf, int syf, int sxb, int syb,
  struct mbinfo *mbi, int secondfield, int ipflag, struct MPEG2_structure *mpeg2_struct));

/* predict.c */
void MPEG2_predict _ANSI_ARGS_((unsigned char *reff[], unsigned char *refb[],
  unsigned char *cur[3], int secondfield, struct mbinfo *mbi, struct MPEG2_structure *mpeg2_struct));

/* putbits.c */
VTK_MPEG2ENC_EXPORT void MPEG2_initbits _ANSI_ARGS_((void));
void MPEG2_putbits _ANSI_ARGS_((int val, int n,struct MPEG2_structure *mpeg2_struct));
void MPEG2_alignbits _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
int MPEG2_bitcount _ANSI_ARGS_((void));

/* puthdr.c */
VTK_MPEG2ENC_EXPORT void MPEG2_putseqhdr _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
VTK_MPEG2ENC_EXPORT void MPEG2_putseqext _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
VTK_MPEG2ENC_EXPORT void MPEG2_putseqdispext _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
VTK_MPEG2ENC_EXPORT void MPEG2_putuserdata _ANSI_ARGS_((char *userdata,struct MPEG2_structure *mpeg2_struct));
void MPEG2_putgophdr _ANSI_ARGS_((int frame, int closed_gop, struct MPEG2_structure *mpeg2_struct));
void MPEG2_putpicthdr _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
void MPEG2_putpictcodext _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
VTK_MPEG2ENC_EXPORT void MPEG2_putseqend _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));

/* putmpg.c */
void MPEG2_putintrablk _ANSI_ARGS_((short *blk, int cc,struct MPEG2_structure *mpeg2_struct));
void MPEG2_putnonintrablk _ANSI_ARGS_((short *blk,struct MPEG2_structure *mpeg2_struct));
void MPEG2_putmv _ANSI_ARGS_((int dmv, int f_code,struct MPEG2_structure *mpeg2_struct));

/* putpic.c */
void MPEG2_putpict _ANSI_ARGS_((unsigned char *frame,struct MPEG2_structure *mpeg2_struct));

/* putseq.c */
VTK_MPEG2ENC_EXPORT int MPEG2_putseq_one _ANSI_ARGS_((int cframe, int max,struct MPEG2_structure *mpeg2_struct));

/* putvlc.c */
void MPEG2_putDClum _ANSI_ARGS_((int val,struct MPEG2_structure *mpeg2_struct));
void MPEG2_putDCchrom _ANSI_ARGS_((int val,struct MPEG2_structure *mpeg2_struct));
void MPEG2_putACfirst _ANSI_ARGS_((int run, int val,struct MPEG2_structure *mpeg2_struct));
void MPEG2_putAC _ANSI_ARGS_((int run, int signed_level, int vlcformat,struct MPEG2_structure *mpeg2_struct));
void MPEG2_putaddrinc _ANSI_ARGS_((int addrinc,struct MPEG2_structure *mpeg2_struct));
void MPEG2_putmbtype _ANSI_ARGS_((int pict_type, int mb_type,struct MPEG2_structure *mpeg2_struct));
void MPEG2_putmotioncode _ANSI_ARGS_((int motion_code,struct MPEG2_structure *mpeg2_struct));
void MPEG2_putdmv _ANSI_ARGS_((int dmv,struct MPEG2_structure *mpeg2_struct));
void MPEG2_putcbp _ANSI_ARGS_((int cbp,struct MPEG2_structure *mpeg2_struct));

/* quantize.c */
int MPEG2_quant_intra _ANSI_ARGS_((short *src, short *dst, int dc_prec,
  unsigned char *quant_mat, int mquant,struct MPEG2_structure *mpeg2_struct));
int MPEG2_quant_non_intra _ANSI_ARGS_((short *src, short *dst,
  unsigned char *quant_mat, int mquant,struct MPEG2_structure *mpeg2_struct));
void MPEG2_iquant_intra _ANSI_ARGS_((short *src, short *dst, int dc_prec,
  unsigned char *quant_mat, int mquant,struct MPEG2_structure *mpeg2_struct));
void MPEG2_iquant_non_intra _ANSI_ARGS_((short *src, short *dst,
  unsigned char *quant_mat, int mquant,struct MPEG2_structure *mpeg2_struct));

/* ratectl.c */
VTK_MPEG2ENC_EXPORT void MPEG2_rc_init_seq _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
void MPEG2_rc_init_GOP _ANSI_ARGS_((int np, int nb,struct MPEG2_structure *mpeg2_struct));
void MPEG2_rc_init_pict _ANSI_ARGS_((unsigned char *frame,struct MPEG2_structure *mpeg2_struct));
void MPEG2_rc_update_pict _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
int MPEG2_rc_start_mb _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));
int MPEG2_rc_calc_mquant _ANSI_ARGS_((int j,struct MPEG2_structure *mpeg2_struct));
void MPEG2_vbv_end_of_picture _ANSI_ARGS_((void));
void MPEG2_calc_vbv_delay _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));

/* readpic.c */
void MPEG2_readframe _ANSI_ARGS_((char *fname, unsigned char *frame[],struct MPEG2_structure *mpeg2_struct));

/* stats.c */
void MPEG2_calcSNR _ANSI_ARGS_((unsigned char *org[3], unsigned char *rec[3],struct MPEG2_structure *mpeg2_struct));
void MPEG2_stats _ANSI_ARGS_((struct MPEG2_structure *mpeg2_struct));

/* transfrm.c */
void MPEG2_transform _ANSI_ARGS_((unsigned char *pred[], unsigned char *cur[],
  struct mbinfo *mbi, short blocks[][64],struct MPEG2_structure *mpeg2_struct));
void MPEG2_itransform _ANSI_ARGS_((unsigned char *pred[], unsigned char *cur[],
  struct mbinfo *mbi, short blocks[][64],struct MPEG2_structure *mpeg2_struct));
void MPEG2_dct_type_estimation _ANSI_ARGS_((unsigned char *pred, unsigned char *cur,
  struct mbinfo *mbi,struct MPEG2_structure *mpeg2_struct));

/* writepic.c */
void MPEG2_writeframe _ANSI_ARGS_((char *fname, unsigned char *frame[],struct MPEG2_structure *mpeg2_struct));


/* global variables */

/* GLOBAL_DEF is defined in exactly one file (putpic.c)
 */
#ifdef GLOBAL_DEF
 #define MPEG2ENC_EXTERN
#else
 #define MPEG2ENC_EXTERN extern
#endif

VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN char MPEG2_version[]
#ifdef GLOBAL_DEF
  ="mpeg2encode V1.2, 96/07/19"
#endif
;

VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN char MPEG2_author[]
#ifdef GLOBAL_DEF
  ="(C) 1996, MPEG Software Simulation Group"
#endif
;

/* zig-zag scan */
VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN unsigned char MPEG2_zig_zag_scan[64]
#ifdef GLOBAL_DEF
=
{
  0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,
  12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,
  35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,
  58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63
}
#endif
;

/* alternate scan */
VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN unsigned char MPEG2_alternate_scan[64]
#ifdef GLOBAL_DEF
=
{
  0,8,16,24,1,9,2,10,17,25,32,40,48,56,57,49,
  41,33,26,18,3,11,4,12,19,27,34,42,50,58,35,43,
  51,59,20,28,5,13,6,14,21,29,36,44,52,60,37,45,
  53,61,22,30,7,15,23,31,38,46,54,62,39,47,55,63
}
#endif
;

/* default intra quantization matrix */
VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN unsigned char MPEG2_default_intra_quantizer_matrix[64]
#ifdef GLOBAL_DEF
=
{
   8, 16, 19, 22, 26, 27, 29, 34,
  16, 16, 22, 24, 27, 29, 34, 37,
  19, 22, 26, 27, 29, 34, 34, 38,
  22, 22, 26, 27, 29, 34, 37, 40,
  22, 26, 27, 29, 32, 35, 40, 48,
  26, 27, 29, 32, 35, 40, 48, 58,
  26, 27, 29, 34, 38, 46, 56, 69,
  27, 29, 35, 38, 46, 56, 69, 83
}
#endif
;

/* non-linear quantization coefficient table */
VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN unsigned char MPEG2_non_linear_mquant_table[32]
#ifdef GLOBAL_DEF
=
{
   0, 1, 2, 3, 4, 5, 6, 7,
   8,10,12,14,16,18,20,22,
  24,28,32,36,40,44,48,52,
  56,64,72,80,88,96,104,112
}
#endif
;

/* non-linear mquant table for mapping from scale to code
 * since reconstruction levels are not bijective with the index map,
 * it is up to the designer to determine most of the quantization levels
 */

VTK_MPEG2ENC_EXPORT MPEG2ENC_EXTERN unsigned char MPEG2_map_non_linear_mquant[113] 
#ifdef GLOBAL_DEF
=
{
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,
16,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,
22,22,23,23,23,23,24,24,24,24,24,24,24,25,25,25,25,25,25,25,26,26,
26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,29,
29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,31,31,31,31,31
}
#endif
;

#ifdef __cplusplus
}
#endif