global.h
上传用户:hhs829
上传日期:2022-06-17
资源大小:586k
文件大小:30k
源码类别:

DirextX编程

开发平台:

Visual C++

  1. /* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
  2. /*
  3.  * Disclaimer of Warranty
  4.  *
  5.  * These software programs are available to the user without any license fee or
  6.  * royalty on an "as is" basis.  The MPEG Software Simulation Group disclaims
  7.  * any and all warranties, whether express, implied, or statuary, including any
  8.  * implied warranties or merchantability or of fitness for a particular
  9.  * purpose.  In no event shall the copyright-holder be liable for any
  10.  * incidental, punitive, or consequential damages of any kind whatsoever
  11.  * arising from the use of these programs.
  12.  *
  13.  * This disclaimer of warranty extends to the user of these programs and user's
  14.  * customers, employees, agents, transferees, successors, and assigns.
  15.  *
  16.  * The MPEG Software Simulation Group does not represent or warrant that the
  17.  * programs furnished hereunder are free of infringement of any third-party
  18.  * patents.
  19.  *
  20.  * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
  21.  * are subject to royalty fees to patent holders.  Many of these patents are
  22.  * general enough such that they are unavoidable regardless of implementation
  23.  * design.
  24.  *
  25.  */
  26. #include <windows.h>
  27. //#include <commctrl.h>
  28. #include <stdio.h>
  29. //#include <ddraw.h>
  30. //#include <vfw.h>
  31. //#include <winreg.h>
  32. //#include <direct.h>
  33. #include <io.h>
  34. //#include <fcntl.h>
  35. //#include "resource.h"
  36. /* code definition */
  37. #define PICTURE_START_CODE 0x100
  38. #define SLICE_START_CODE_MIN 0x101
  39. #define SLICE_START_CODE_MAX 0x1AF
  40. #define USER_DATA_START_CODE 0x1B2
  41. #define SEQUENCE_HEADER_CODE 0x1B3
  42. #define EXTENSION_START_CODE 0x1B5
  43. #define SEQUENCE_END_CODE 0x1B7
  44. #define GROUP_START_CODE 0x1B8
  45. #define SYSTEM_END_CODE 0x1B9
  46. #define PACK_START_CODE 0x1BA
  47. #define SYSTEM_START_CODE 0x1BB
  48. #define VIDEO_ELEMENTARY_STREAM 0x1E0
  49. #define PRIVATE_STREAM_1 0x1BD
  50. #define PRIVATE_STREAM_2 0x1BF
  51. #define AUDIO_ELEMENTARY_STREAM_0 0x1C0
  52. #define AUDIO_ELEMENTARY_STREAM_1 0x1C1
  53. #define AUDIO_ELEMENTARY_STREAM_2 0x1C2
  54. #define AUDIO_ELEMENTARY_STREAM_3 0x1C3
  55. #define AUDIO_ELEMENTARY_STREAM_4 0x1C4
  56. #define AUDIO_ELEMENTARY_STREAM_5 0x1C5
  57. #define AUDIO_ELEMENTARY_STREAM_6 0x1C6
  58. #define AUDIO_ELEMENTARY_STREAM_7 0x1C7
  59. #define SUB_SUB 0x20
  60. #define SUB_AC3 0x80
  61. #define SUB_PCM 0xA0
  62. /* extension start code IDs */
  63. #define SEQUENCE_EXTENSION_ID 1
  64. #define SEQUENCE_DISPLAY_EXTENSION_ID 2
  65. #define QUANT_MATRIX_EXTENSION_ID 3
  66. #define COPYRIGHT_EXTENSION_ID 4
  67. #define PICTURE_DISPLAY_EXTENSION_ID 7
  68. #define PICTURE_CODING_EXTENSION_ID 8
  69. #define ZIG_ZAG 0
  70. #define MB_WEIGHT 32
  71. #define MB_CLASS4 64
  72. #define I_TYPE 1
  73. #define P_TYPE 2
  74. #define B_TYPE 3
  75. #define MACROBLOCK_INTRA 1
  76. #define MACROBLOCK_PATTERN 2
  77. #define MACROBLOCK_MOTION_BACKWARD 4
  78. #define MACROBLOCK_MOTION_FORWARD 8
  79. #define MACROBLOCK_QUANT 16
  80. #define TOP_FIELD 1
  81. #define BOTTOM_FIELD 2
  82. #define FRAME_PICTURE 3
  83. #define MC_FIELD 1
  84. #define MC_FRAME 2
  85. #define MC_16X8 2
  86. #define MC_DMV 3
  87. #define MV_FIELD 0
  88. #define MV_FRAME 1
  89. #define CHROMA420 1
  90. #define CHROMA422 2
  91. #define CHROMA444 3
  92. #define BUFFER_SIZE 2048
  93. #define MAX_FILE_NUMBER 256
  94. #define STORE_RGB24 1
  95. #define STORE_YUY2 2
  96. #define IDCT_MMX 1
  97. #define IDCT_FPU 2
  98. #define IDCT_REF 3
  99. #define LOCATE_INIT 0
  100. #define LOCATE_FORWARD 1
  101. #define LOCATE_BACKWARD -1
  102. #define LOCATE_SCROLL 2
  103. #define LOCATE_RIP 3
  104. #define CHANNEL 8
  105. #define TRACK_NONE 15 // DANGEROUS!
  106. #define TRACK_1 0
  107. #define TRACK_2 1
  108. #define TRACK_3 2
  109. #define TRACK_4 3
  110. #define TRACK_5 4
  111. #define TRACK_6 5
  112. #define TRACK_7 6
  113. #define TRACK_8 7
  114. #define FORMAT_AUTO 0
  115. #define FORMAT_AC3 1
  116. #define FORMAT_MPA 2
  117. #define FORMAT_LPCM 3
  118. #define AUDIO_DEMUXALL 0
  119. #define AUDIO_DEMUXONE 1
  120. #define AUDIO_DECODE 2
  121. #define FO_NONE 0
  122. #define FO_FILM 1
  123. #define FO_SWAP 2
  124. #define SRC_NONE 0
  125. #define SRC_LOW 1
  126. #define SRC_MID 2
  127. #define SRC_HIGH 3
  128. #define SRC_UHIGH 4
  129. #define NORM_NONE 0
  130. #define NORM_DYNAMIC 1
  131. #define NORM_MAXIMUM 2
  132. #define TRACK_PITCH 500
  133. #define CRITICAL_ERROR_LEVEL 50
  134. // Added by luqiming
  135. #define ERROR_FLUSH       200
  136. BOOL    gIsPictureDecoding;
  137. BOOL    gIsEOS;    // Indicating no more data will be received
  138. typedef struct {
  139. int type;
  140. // int file;
  141. // __int64 lba;
  142. int pf;
  143. int trf;
  144. } D2VData;
  145. D2VData d2v_backward, d2v_forward, d2v_current;
  146. //int CH[CHANNEL];
  147. //short Sound_Max;
  148. typedef struct {
  149. FILE *file;
  150. char filename[_MAX_PATH];
  151. int rip;
  152. int size;
  153. int delay;
  154. unsigned int mode;
  155. unsigned int rate;
  156. } AC3Stream;
  157. AC3Stream ac3[CHANNEL];
  158. typedef struct {
  159. FILE *file;
  160. int rip;
  161. int delay;
  162. } MPAStream;
  163. MPAStream mpa[CHANNEL];
  164. struct PCMStream {
  165. FILE *file;
  166. char filename[_MAX_PATH];
  167. int rip;
  168. int size;
  169. int delay;
  170. } pcm;
  171. struct PROCESS {
  172. __int64 length[MAX_FILE_NUMBER];
  173. __int64 total;
  174. __int64 run;
  175. __int64 start;
  176. __int64 end;
  177. int trackleft;
  178. int trackright;
  179. int locate;
  180. int startfile;
  181. __int64 startloc;
  182. int endfile;
  183. __int64 endloc;
  184. int file;
  185. __int64 lba;
  186. int leftfile;
  187. __int64 leftlba;
  188. int rightfile;
  189. __int64 rightlba;
  190. unsigned int op;
  191. unsigned int ed;
  192. unsigned int elapsed;
  193. unsigned int remain;
  194. float percent;
  195. } process;
  196. struct CPU {
  197. BOOL mmx;
  198. BOOL amd;
  199. BOOL sse;
  200. } cpu;
  201. /* decoder operation control flags */
  202. //int AVI_Flag;
  203. int Check_Flag;
  204. //int D2V_Flag;
  205. //int DDOverlay_Flag;
  206. //int Display_Flag;
  207. int Fault_Flag;
  208. //int File_Flag;
  209. //int File_Limit;
  210. int FO_Flag;  // Field operation
  211. int iDCT_Flag;
  212. int Luminance_Flag;
  213. //int Pause_Flag;
  214. int Rip_Flag;
  215. int Scale_Flag;
  216. //int Statistics_Flag;
  217. int Stop_Flag;
  218. int Store_Flag;  // Store RGB24 or YUY2
  219. int SystemStream_Flag;
  220. BITMAPINFOHEADER birgb;
  221. LPBITMAPINFOHEADER lpbirgb
  222. #ifdef GLOBAL
  223. = &birgb
  224. #endif
  225. ;
  226. BITMAPINFOHEADER biyuv;
  227. LPBITMAPINFOHEADER lpbiyuv
  228. #ifdef GLOBAL
  229. = &biyuv
  230. #endif
  231. ;
  232. /* Global Value */
  233. /*
  234. FILE *D2VFile;
  235. HWND hWnd, hDlg, hTrack, hLeftButton, hLeftArrow, hRightArrow, hRightButton;
  236. char szInput[_MAX_PATH], szOutput[_MAX_PATH], szBuffer[_MAX_PATH], szBlank[1];
  237. */
  238. unsigned char *backward_reference_frame[3], *forward_reference_frame[3];
  239. unsigned char *auxframe[3], *current_frame[3];
  240. unsigned char *u422, *v422, *u444, *v444, *rgb24, *yuy2, *lum;
  241. __int64 YUVRGB_Scale, YUVRGB_Offset, LumOffsetMask, LumGainMask;
  242. unsigned int hwidth, hwidthd8, dwidth, qwidth, hheightd2, qheightd2, nwidth;
  243. int VideoPTS, AudioPTS;
  244. int Edge_Width, Edge_Height;
  245. unsigned short VOB_ID, CELL_ID;
  246. unsigned int Frame_Number;
  247. int Coded_Picture_Width, Coded_Picture_Height, Chroma_Width, Chroma_Height;
  248. int block_count, Second_Field;
  249. int horizontal_size, vertical_size, mb_width, mb_height;
  250. float frame_rate, Frame_Rate;
  251. int Video_Type, FILM_Purity, NTSC_Purity, Bitrate_Meter;
  252. //int Infile[MAX_FILE_NUMBER];
  253. //char Infilename[MAX_FILE_NUMBER][_MAX_PATH];
  254. int intra_quantizer_matrix[64];
  255. int non_intra_quantizer_matrix[64];
  256. int chroma_intra_quantizer_matrix[64];
  257. int chroma_non_intra_quantizer_matrix[64];
  258. int load_intra_quantizer_matrix;
  259. int load_non_intra_quantizer_matrix;
  260. int load_chroma_intra_quantizer_matrix;
  261. int load_chroma_non_intra_quantizer_matrix;
  262. int q_scale_type;
  263. int alternate_scan;
  264. int quantizer_scale;
  265. short *block[8]
  266. #ifdef GLOBAL
  267. =
  268. {
  269. 0, 0, 0, 0, 0, 0, 0, 0
  270. }
  271. #endif
  272. ;
  273. short *p_block[8]
  274. #ifdef GLOBAL
  275. =
  276. {
  277. 0, 0, 0, 0, 0, 0, 0, 0
  278. }
  279. #endif
  280. ;
  281. /* ISO/IEC 13818-2 section 6.2.2.1:  sequence_header() */
  282. int frame_rate_code;
  283. int aspect_ratio_information;
  284. /* ISO/IEC 13818-2 section 6.2.2.3:  sequence_extension() */
  285. int progressive_sequence;
  286. int chroma_format;
  287. /* ISO/IEC 13818-2 section 6.2.3: picture_header() */
  288. int picture_coding_type;
  289. int temporal_reference;
  290. /* ISO/IEC 13818-2 section 6.2.3.1: picture_coding_extension() header */
  291. int f_code[2][2];
  292. int picture_structure;
  293. int frame_pred_frame_dct;
  294. int progressive_frame;
  295. int concealment_motion_vectors;
  296. int intra_dc_precision;
  297. int top_field_first;
  298. int repeat_first_field;
  299. int intra_vlc_format;
  300. /* gethdr.c */
  301. int Get_Hdr(void);
  302. void next_start_code(void);
  303. void sequence_header(void);
  304. int slice_header(void);
  305. /* getpic.c */
  306. int Decode_Picture(void);
  307. /* gui.cpp */
  308. //void ThreadKill(void);
  309. //void CheckDirectDraw(void);
  310. //void ResizeWindow(int width, int height);
  311. /* idct */
  312. void MMX_IDCT(short *block);
  313. void Initialize_FPU_IDCT(void);
  314. void FPU_IDCT(short *block);
  315. void Initialize_REF_IDCT(void);
  316. void REF_IDCT(short *block);
  317. /* motion.c */
  318. void motion_vectors(int PMV[2][2][2], int dmvector[2], int motion_vertical_field_select[2][2], 
  319. int s, int motion_vector_count, int mv_format, int h_r_size, int v_r_size, int dmv, int mvscale);
  320. void Dual_Prime_Arithmetic(int DMV[][2], int *dmvector, int mvx, int mvy);
  321. /* mpeg2dec.c */
  322. //DWORD WINAPI MPEG2Dec(PVOID pvoid);
  323. /* norm.c */
  324. //void Normalize(FILE *WaveIn, int WaveInPos, char *filename, FILE *WaveOut, int WaveOutPos, int size);
  325. /* store.c */
  326. void Write_Frame(unsigned char *src[], D2VData d2v, DWORD frame);
  327. //void FinalDecodedOut(unsigned char * outBuffer);
  328. int DetectVideoType(int frame, int rff);
  329. /* wavefs44.c */
  330. /*
  331. void InitialSRC(void);
  332. void Wavefs44(FILE *file, int size, unsigned char *buffer);
  333. void EndSRC(FILE *file);
  334. void Wavefs44File(int delay, int now, int total);
  335. void EndWAV(FILE *file, int size);
  336. void DownWAV(FILE *file);
  337. BOOL CheckWAV(void);*/
  338. unsigned char WAVHeader[44]
  339. #ifdef GLOBAL
  340. =
  341. {
  342. 0x52, 0x49, 0x46, 0x46, 0x00, 0x00, 0x00, 0x00,
  343. 0x57, 0x41, 0x56, 0x45, 0x66, 0x6d, 0x74, 0x20,
  344. 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00,
  345. 0x80, 0xbb, 0x00, 0x00, 0x00, 0xee, 0x02, 0x00,
  346. 0x04, 0x00, 0x10, 0x00, 0x64, 0x61, 0x74, 0x61,
  347. 0x00, 0x00, 0x00, 0x00
  348. }
  349. #endif
  350. ;
  351. char *NormType[3]
  352. #ifdef GLOBAL
  353. =
  354. {
  355. "", " drc", " max"
  356. }
  357. #endif
  358. ;
  359. char *AC3Mode[8]
  360. #ifdef GLOBAL
  361. =
  362. {
  363. "1+1", "1/0", "2/0", "3/0", "2/1", "3/1", "2/2", "3/2"
  364. }
  365. #endif
  366. ;
  367. int AC3Rate[32]
  368. #ifdef GLOBAL
  369. =
  370. {
  371. 32, 40, 48, 56, 64, 80, 96, 112, 128, 160,
  372. 192, 224, 256, 320, 384, 448, 512, 576, 640,
  373. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  374. }
  375. #endif
  376. ;
  377. unsigned char AC3Flush[768]
  378. #ifdef GLOBAL
  379. =
  380. {
  381. 0x0b, 0x77, 0xe3, 0x7a, 0x14, 0x40, 0x4b, 0x73, 
  382. 0xf7, 0x2e, 0x0e, 0xff, 0xeb, 0xc7, 0x08, 0x08, 
  383. 0x28, 0x60, 0x64, 0x1a, 0xc7, 0xcf, 0x9f, 0x3e, 
  384. 0x7c, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0x3e, 0x7c, 
  385. 0xf9, 0xf3, 0xef, 0xf9, 0xd5, 0xf3, 0xe7, 0xcf, 
  386. 0x9f, 0x3e, 0x7c, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 
  387. 0x3e, 0x7c, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0x3e, 
  388. 0x7c, 0xf9, 0xf3, 0xef, 0xfe, 0x75, 0x7c, 0xf9, 
  389. 0xf3, 0xe7, 0xcf, 0x9f, 0x3e, 0x7c, 0xf9, 0xf3, 
  390. 0xe7, 0xcf, 0x9f, 0x3e, 0x7c, 0xf9, 0xf3, 0xe7, 
  391. 0xcf, 0x9f, 0x3e, 0x7c, 0xfb, 0xca, 0x0f, 0xff, 
  392. 0x3e, 0x7c, 0x80, 0x88, 0x40, 0x03, 0xbc, 0x5d, 
  393. 0x48, 0xbf, 0x8b, 0xfc, 0x05, 0x98, 0xb9, 0xae, 
  394. 0x4f, 0x0b, 0x31, 0x8f, 0xf0, 0xd2, 0xa0, 0x3c, 
  395. 0xb6, 0xeb, 0xb0, 0x90, 0xac, 0xd1, 0x8f, 0x67, 
  396. 0xdf, 0x40, 0xe8, 0x5e, 0x5a, 0x1e, 0x35, 0xa6, 
  397. 0x00, 0x02, 0x7a, 0x00, 0xd6, 0x9e, 0x40, 0xa3, 
  398. 0xad, 0xe5, 0x64, 0x60, 0x7a, 0x24, 0x55, 0xce, 
  399. 0x2b, 0x0c, 0x83, 0x1c, 0xb2, 0x4d, 0x5e, 0x7c, 
  400. 0xfd, 0x97, 0x56, 0x1d, 0xfe, 0x9a, 0xdb, 0x2e, 
  401. 0xa3, 0x07, 0x5d, 0xe1, 0xdd, 0x8c, 0x4c, 0x65, 
  402. 0x9d, 0xda, 0x17, 0xe9, 0xd1, 0xa1, 0x30, 0x9f, 
  403. 0x6b, 0x91, 0x06, 0xb6, 0x59, 0x5b, 0x09, 0x5e, 
  404. 0x8d, 0xad, 0xa9, 0xc6, 0xf5, 0x38, 0x56, 0x20, 
  405. 0x82, 0xac, 0x80, 0x9b, 0x25, 0xb9, 0x97, 0x66, 
  406. 0xcc, 0x10, 0x0b, 0xb3, 0x69, 0x5f, 0x4c, 0xb1, 
  407. 0xea, 0x57, 0xca, 0x8f, 0x41, 0xa8, 0xf5, 0x7f, 
  408. 0x5c, 0x02, 0x3d, 0xb0, 0x2d, 0x15, 0x12, 0x51, 
  409. 0xa2, 0x92, 0xe4, 0x94, 0xac, 0x27, 0x23, 0xa8, 
  410. 0x3c, 0x85, 0x3e, 0xbc, 0x40, 0x5c, 0xa7, 0x02, 
  411. 0xaa, 0x5c, 0xcd, 0xa9, 0x68, 0x36, 0x20, 0xe1, 
  412. 0x6c, 0x98, 0x10, 0xd9, 0xa4, 0x78, 0xd6, 0x99, 
  413. 0x13, 0x88, 0x21, 0x01, 0xe0, 0x00, 0x9d, 0x80, 
  414. 0x0c, 0xc3, 0x70, 0xc0, 0x6d, 0xe1, 0xf3, 0x9d, 
  415. 0x35, 0x3b, 0x8a, 0x7a, 0xce, 0xec, 0x81, 0x96, 
  416. 0x26, 0x90, 0xe5, 0x2a, 0x68, 0x84, 0x40, 0xb4, 
  417. 0x00, 0xe3, 0x20, 0xae, 0xdb, 0x49, 0x10, 0xd7, 
  418. 0x24, 0x12, 0x5d, 0x28, 0x47, 0x5a, 0xd1, 0xde, 
  419. 0xf0, 0xbe, 0xba, 0xf6, 0xcc, 0x19, 0x63, 0xeb, 
  420. 0xc5, 0xc7, 0x99, 0x7a, 0x49, 0xe5, 0x27, 0x1d, 
  421. 0xc4, 0x4d, 0xd9, 0x12, 0xe0, 0xdd, 0xfb, 0x14, 
  422. 0xcb, 0xb1, 0x19, 0xa0, 0x30, 0xa3, 0x80, 0x70, 
  423. 0xfb, 0xd1, 0x7b, 0x02, 0x99, 0x96, 0x56, 0x51, 
  424. 0xf5, 0x4e, 0x9d, 0xda, 0x3b, 0x56, 0x1d, 0x57, 
  425. 0xd7, 0x88, 0xe1, 0x46, 0xb6, 0x02, 0xf5, 0xa2, 
  426. 0xc2, 0xe0, 0x25, 0xe8, 0x2a, 0x3c, 0xbe, 0x92, 
  427. 0x97, 0x74, 0x4b, 0x9e, 0xb6, 0xe3, 0x18, 0x87, 
  428. 0xb4, 0xa5, 0x72, 0x0a, 0x3c, 0x9e, 0x35, 0xa6, 
  429. 0x43, 0xe2, 0x08, 0x40, 0x7e, 0x00, 0x27, 0x60, 
  430. 0x05, 0xb8, 0xf8, 0x6e, 0xc4, 0xee, 0x72, 0xa6, 
  431. 0xed, 0xef, 0xf0, 0x22, 0x97, 0xb0, 0x9f, 0xfc, 
  432. 0xd9, 0x53, 0x41, 0x20, 0xa9, 0xca, 0xf2, 0x99, 
  433. 0x10, 0x0a, 0xc3, 0x61, 0x03, 0x15, 0xa2, 0x73, 
  434. 0x89, 0xfe, 0x8e, 0xeb, 0x9b, 0xa8, 0x87, 0x94, 
  435. 0x3f, 0x26, 0x9b, 0xa8, 0x6b, 0x7b, 0xa9, 0xf3, 
  436. 0x37, 0x9a, 0xd1, 0x9f, 0x8a, 0x87, 0x11, 0x98, 
  437. 0x6b, 0x33, 0x58, 0xd8, 0xd0, 0xc2, 0xb6, 0x7b, 
  438. 0xd2, 0x28, 0x29, 0x5c, 0x76, 0x56, 0xa0, 0x95, 
  439. 0x94, 0x51, 0x2b, 0x12, 0x43, 0x2a, 0xc7, 0xed, 
  440. 0x89, 0xc6, 0x76, 0x12, 0x5f, 0x37, 0x24, 0x8b, 
  441. 0xca, 0x7f, 0xf2, 0x54, 0xb2, 0x83, 0xde, 0x68, 
  442. 0x3e, 0x65, 0xb7, 0xd1, 0x45, 0x18, 0xbd, 0x8a, 
  443. 0xed, 0x9f, 0xce, 0x90, 0x1e, 0xed, 0xd9, 0xeb, 
  444. 0xe0, 0x06, 0x0e, 0x89, 0x37, 0xf7, 0x8d, 0x69, 
  445. 0x80, 0x00, 0x9e, 0x80, 0x2d, 0x2e, 0x0c, 0x76, 
  446. 0x82, 0x3f, 0x12, 0x20, 0xe3, 0xa9, 0xa2, 0x3a, 
  447. 0x5d, 0x69, 0x28, 0x9f, 0x3b, 0x7a, 0x11, 0x2b, 
  448. 0x09, 0x58, 0x07, 0xfa, 0x53, 0xff, 0x78, 0xe8, 
  449. 0xe6, 0xac, 0x10, 0x12, 0x8d, 0x59, 0xf9, 0xd3, 
  450. 0x94, 0x85, 0x21, 0x87, 0xc8, 0x29, 0x73, 0x8b, 
  451. 0x73, 0x83, 0x1b, 0xfa, 0x23, 0x8d, 0xc6, 0x70, 
  452. 0x23, 0xc6, 0x1f, 0x09, 0x40, 0x27, 0x52, 0x61, 
  453. 0xc4, 0xed, 0xcb, 0x95, 0xbd, 0xd5, 0xf7, 0x00, 
  454. 0x76, 0xda, 0xc0, 0xfe, 0xbc, 0x79, 0x54, 0xec, 
  455. 0x1a, 0x2c, 0xdf, 0x64, 0xdc, 0x31, 0xcb, 0xc4, 
  456. 0xce, 0x03, 0xc6, 0xa8, 0x3c, 0x9f, 0x3b, 0xaa, 
  457. 0xb3, 0x7f, 0xd6, 0xe8, 0x7e, 0x21, 0x84, 0xbd, 
  458. 0x69, 0x40, 0xf0, 0x45, 0x80, 0xd9, 0x06, 0x5d, 
  459. 0x10, 0x66, 0xf2, 0x9f, 0xe4, 0x65, 0xa1, 0x29, 
  460. 0xc8, 0x91, 0xfd, 0xd7, 0x08, 0xde, 0x35, 0xa6, 
  461. 0x00, 0x02, 0x78, 0x00, 0x9c, 0xd4, 0x0e, 0xc6, 
  462. 0x86, 0xc9, 0x2d, 0x3a, 0xf6, 0x87, 0x28, 0xae, 
  463. 0xda, 0xbe, 0x71, 0x54, 0x24, 0x1e, 0x77, 0x5b, 
  464. 0xc2, 0x58, 0xaa, 0xf3, 0xa6, 0x1a, 0x7a, 0x4b, 
  465. 0xbe, 0x15, 0x57, 0x95, 0xfb, 0xf9, 0xb1, 0x00, 
  466. 0x4e, 0x76, 0xf8, 0xbb, 0xa5, 0x3d, 0x9c, 0xf8, 
  467. 0xf2, 0xfc, 0x0d, 0xe6, 0x23, 0x64, 0xbb, 0xb4, 
  468. 0x2a, 0x25, 0x16, 0x94, 0xf5, 0xef, 0x8e, 0xb5, 
  469. 0x76, 0x72, 0x93, 0x46, 0x9b, 0x5f, 0x95, 0x79, 
  470. 0x55, 0x64, 0x04, 0x7d, 0x95, 0x32, 0x4f, 0x81, 
  471. 0x49, 0x79, 0xe8, 0xb7, 0x63, 0xe9, 0x3e, 0x4e, 
  472. 0xd1, 0x33, 0xc1, 0x76, 0x85, 0x05, 0xe1, 0x5e, 
  473. 0x6d, 0x10, 0x0e, 0x38, 0x7a, 0x04, 0xb8, 0x33, 
  474. 0x9d, 0x91, 0x4f, 0x7e, 0xc4, 0x68, 0x43, 0x4b, 
  475. 0xe1, 0x37, 0x04, 0xc9, 0xe2, 0xaf, 0x02, 0x27, 
  476. 0xb9, 0x80, 0xad, 0x78, 0xd6, 0x80, 0xea, 0x1e
  477. }
  478. #endif
  479. ;
  480. /* default intra quantization matrix */
  481. unsigned char default_intra_quantizer_matrix[64]
  482. #ifdef GLOBAL
  483. =
  484. {
  485. 8, 16, 19, 22, 26, 27, 29, 34,
  486. 16, 16, 22, 24, 27, 29, 34, 37,
  487. 19, 22, 26, 27, 29, 34, 34, 38,
  488. 22, 22, 26, 27, 29, 34, 37, 40,
  489. 22, 26, 27, 29, 32, 35, 40, 48,
  490. 26, 27, 29, 32, 35, 40, 48, 58,
  491. 26, 27, 29, 34, 38, 46, 56, 69,
  492. 27, 29, 35, 38, 46, 56, 69, 83
  493. }
  494. #endif
  495. ;
  496. /* zig-zag and alternate scan patterns */
  497. unsigned char scan[2][64]
  498. #ifdef GLOBAL
  499. =
  500. {
  501. { // Zig-Zag scan pattern
  502. 0,  1,  8, 16,  9,  2,  3, 10,
  503.    17, 24, 32, 25, 18, 11,  4,  5,
  504.    12, 19, 26, 33, 40, 48, 41, 34,
  505.    27, 20, 13,  6,  7, 14, 21, 28,
  506.    35, 42, 49, 56, 57, 50, 43, 36,
  507.    29, 22, 15, 23, 30, 37, 44, 51,
  508.    58, 59, 52, 45, 38, 31, 39, 46,
  509.    53, 60, 61, 54, 47, 55, 62, 63
  510. }
  511. ,
  512. { // Alternate scan pattern
  513. 0,  8, 16, 24,  1,  9,  2, 10,
  514.    17, 25, 32, 40, 48, 56, 57, 49,
  515.    41, 33, 26, 18,  3, 11, 4,  12,
  516.    19, 27, 34, 42, 50, 58, 35, 43,
  517.    51, 59, 20, 28,  5, 13,  6, 14,
  518.    21, 29, 36, 44, 52, 60, 37, 45,
  519.    53, 61, 22, 30,  7, 15, 23, 31,
  520.    38, 46, 54, 62, 39, 47, 55, 63
  521. }
  522. }
  523. #endif
  524. ;
  525. /* non-linear quantization coefficient table */
  526. unsigned char Non_Linear_quantizer_scale[32]
  527. #ifdef GLOBAL
  528. =
  529. {
  530. 0, 1, 2, 3, 4, 5, 6, 7,
  531. 8, 10, 12, 14, 16, 18, 20, 22,
  532. 24, 28, 32, 36, 40, 44, 48, 52,
  533. 56, 64, 72, 80, 88, 96, 104, 112
  534. }
  535. #endif
  536. ;
  537. #define ERROR_VALUE (-1)
  538. typedef struct {
  539. char run, level, len;
  540. } DCTtab;
  541. typedef struct {
  542. char val, len;
  543. } VLCtab;
  544. /* Table B-10, motion_code, codes 0001 ... 01xx */
  545. VLCtab MVtab0[8]
  546. #ifdef GLOBAL
  547. =
  548. {
  549. {ERROR_VALUE,0}, {3,3}, {2,2}, {2,2}, {1,1}, {1,1}, {1,1}, {1,1}
  550. }
  551. #endif
  552. ;
  553. /* Table B-10, motion_code, codes 0000011 ... 000011x */
  554. VLCtab MVtab1[8]
  555. #ifdef GLOBAL
  556. =
  557. {
  558. {ERROR_VALUE,0}, {ERROR_VALUE,0}, {ERROR_VALUE,0}, {7,6}, {6,6}, {5,6}, {4,5}, {4,5}
  559. }
  560. #endif
  561. ;
  562. /* Table B-10, motion_code, codes 0000001100 ... 000001011x */
  563. VLCtab MVtab2[12]
  564. #ifdef GLOBAL
  565. =
  566. {
  567. {16,9}, {15,9}, {14,9}, {13,9},
  568. {12,9}, {11,9}, {10,8}, {10,8},
  569. {9,8},  {9,8},  {8,8},  {8,8}
  570. }
  571. #endif
  572. ;
  573. /* Table B-9, coded_block_pattern, codes 01000 ... 111xx */
  574. VLCtab CBPtab0[32]
  575. #ifdef GLOBAL
  576. =
  577. {
  578. {ERROR_VALUE,0}, {ERROR_VALUE,0}, {ERROR_VALUE,0}, {ERROR_VALUE,0},
  579. {ERROR_VALUE,0}, {ERROR_VALUE,0}, {ERROR_VALUE,0}, {ERROR_VALUE,0},
  580. {62,5}, {2,5},  {61,5}, {1,5},  {56,5}, {52,5}, {44,5}, {28,5},
  581. {40,5}, {20,5}, {48,5}, {12,5}, {32,4}, {32,4}, {16,4}, {16,4},
  582. {8,4},  {8,4},  {4,4},  {4,4},  {60,3}, {60,3}, {60,3}, {60,3}
  583. }
  584. #endif
  585. ;
  586. /* Table B-9, coded_block_pattern, codes 00000100 ... 001111xx */
  587. VLCtab CBPtab1[64]
  588. #ifdef GLOBAL
  589. =
  590. {
  591. {ERROR_VALUE,0}, {ERROR_VALUE,0}, {ERROR_VALUE,0}, {ERROR_VALUE,0},
  592. {58,8}, {54,8}, {46,8}, {30,8},
  593. {57,8}, {53,8}, {45,8}, {29,8}, {38,8}, {26,8}, {37,8}, {25,8},
  594. {43,8}, {23,8}, {51,8}, {15,8}, {42,8}, {22,8}, {50,8}, {14,8},
  595. {41,8}, {21,8}, {49,8}, {13,8}, {35,8}, {19,8}, {11,8}, {7,8},
  596. {34,7}, {34,7}, {18,7}, {18,7}, {10,7}, {10,7}, {6,7},  {6,7},
  597. {33,7}, {33,7}, {17,7}, {17,7}, {9,7},  {9,7},  {5,7},  {5,7},
  598. {63,6}, {63,6}, {63,6}, {63,6}, {3,6},  {3,6},  {3,6},  {3,6},
  599. {36,6}, {36,6}, {36,6}, {36,6}, {24,6}, {24,6}, {24,6}, {24,6}
  600. }
  601. #endif
  602. ;
  603. /* Table B-9, coded_block_pattern, codes 000000001 ... 000000111 */
  604. VLCtab CBPtab2[8]
  605. #ifdef GLOBAL
  606. =
  607. {
  608. {ERROR_VALUE,0}, {0,9}, {39,9}, {27,9}, {59,9}, {55,9}, {47,9}, {31,9}
  609. }
  610. #endif
  611. ;
  612. /* Table B-1, macroblock_address_increment, codes 00010 ... 011xx */
  613. VLCtab MBAtab1[16]
  614. #ifdef GLOBAL
  615. =
  616. {
  617. {ERROR_VALUE,0}, {ERROR_VALUE,0}, {7,5}, {6,5}, {5,4}, {5,4}, {4,4},
  618. {4,4}, {3,3}, {3,3}, {3,3}, {3,3}, {2,3}, {2,3}, {2,3}, {2,3}
  619. }
  620. #endif
  621. ;
  622. /* Table B-1, macroblock_address_increment, codes 00000011000 ... 0000111xxxx */
  623. VLCtab MBAtab2[104]
  624. #ifdef GLOBAL
  625. =
  626. {
  627. {33,11}, {32,11}, {31,11}, {30,11}, {29,11}, {28,11}, {27,11}, {26,11},
  628. {25,11}, {24,11}, {23,11}, {22,11}, {21,10}, {21,10}, {20,10}, {20,10},
  629. {19,10}, {19,10}, {18,10}, {18,10}, {17,10}, {17,10}, {16,10}, {16,10},
  630. {15,8},  {15,8},  {15,8},  {15,8},  {15,8},  {15,8},  {15,8},  {15,8},
  631. {14,8},  {14,8},  {14,8},  {14,8},  {14,8},  {14,8},  {14,8},  {14,8},
  632. {13,8},  {13,8},  {13,8},  {13,8},  {13,8},  {13,8},  {13,8},  {13,8},
  633. {12,8},  {12,8},  {12,8},  {12,8},  {12,8},  {12,8},  {12,8},  {12,8},
  634. {11,8},  {11,8},  {11,8},  {11,8},  {11,8},  {11,8},  {11,8},  {11,8},
  635. {10,8},  {10,8},  {10,8},  {10,8},  {10,8},  {10,8},  {10,8},  {10,8},
  636. {9,7},   {9,7},   {9,7},   {9,7},   {9,7},   {9,7},   {9,7},   {9,7},
  637. {9,7},   {9,7},   {9,7},   {9,7},   {9,7},   {9,7},   {9,7},   {9,7},
  638. {8,7},   {8,7},   {8,7},   {8,7},   {8,7},   {8,7},   {8,7},   {8,7},
  639. {8,7},   {8,7},   {8,7},   {8,7},   {8,7},   {8,7},   {8,7},   {8,7}
  640. }
  641. #endif
  642. ;
  643. /* Table B-12, dct_dc_size_luminance, codes 00xxx ... 11110 */
  644. VLCtab DClumtab0[32]
  645. #ifdef GLOBAL
  646. =
  647. {
  648. {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2},
  649. {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2},
  650. {0, 3}, {0, 3}, {0, 3}, {0, 3}, {3, 3}, {3, 3}, {3, 3}, {3, 3},
  651. {4, 3}, {4, 3}, {4, 3}, {4, 3}, {5, 4}, {5, 4}, {6, 5}, {ERROR_VALUE, 0}
  652. }
  653. #endif
  654. ;
  655. /* Table B-12, dct_dc_size_luminance, codes 111110xxx ... 111111111 */
  656. VLCtab DClumtab1[16]
  657. #ifdef GLOBAL
  658. =
  659. {
  660. {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6},
  661. {8, 7}, {8, 7}, {8, 7}, {8, 7}, {9, 8}, {9, 8}, {10,9}, {11,9}
  662. }
  663. #endif
  664. ;
  665. /* Table B-13, dct_dc_size_chrominance, codes 00xxx ... 11110 */
  666. VLCtab DCchromtab0[32]
  667. #ifdef GLOBAL
  668. =
  669. {
  670. {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2},
  671. {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2},
  672. {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2},
  673. {3, 3}, {3, 3}, {3, 3}, {3, 3}, {4, 4}, {4, 4}, {5, 5}, {ERROR_VALUE, 0}
  674. }
  675. #endif
  676. ;
  677. /* Table B-13, dct_dc_size_chrominance, codes 111110xxxx ... 1111111111 */
  678. VLCtab DCchromtab1[32]
  679. #ifdef GLOBAL
  680. =
  681. {
  682. {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6},
  683. {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6},
  684. {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7},
  685. {8, 8}, {8, 8}, {8, 8}, {8, 8}, {9, 9}, {9, 9}, {10,10}, {11,10}
  686. }
  687. #endif
  688. ;
  689. /* Table B-14, DCT coefficients table zero,
  690.  * codes 0100 ... 1xxx (used for first (DC) coefficient)
  691.  */
  692. DCTtab DCTtabfirst[12]
  693. #ifdef GLOBAL
  694. =
  695. {
  696. {0,2,4}, {2,1,4}, {1,1,3}, {1,1,3},
  697. {0,1,1}, {0,1,1}, {0,1,1}, {0,1,1},
  698. {0,1,1}, {0,1,1}, {0,1,1}, {0,1,1}
  699. }
  700. #endif
  701. ;
  702. /* Table B-14, DCT coefficients table zero,
  703.  * codes 0100 ... 1xxx (used for all other coefficients)
  704.  */
  705. DCTtab DCTtabnext[12]
  706. #ifdef GLOBAL
  707. =
  708. {
  709. {0,2,4},  {2,1,4},  {1,1,3},  {1,1,3},
  710. {64,0,2}, {64,0,2}, {64,0,2}, {64,0,2}, /* EOB */
  711. {0,1,2},  {0,1,2},  {0,1,2},  {0,1,2}
  712. }
  713. #endif
  714. ;
  715. /* Table B-14, DCT coefficients table zero,
  716.  * codes 000001xx ... 00111xxx
  717.  */
  718. DCTtab DCTtab0[60]
  719. #ifdef GLOBAL
  720. =
  721. {
  722. {65,0,6}, {65,0,6}, {65,0,6}, {65,0,6}, /* Escape */
  723. {2,2,7}, {2,2,7}, {9,1,7}, {9,1,7},
  724. {0,4,7}, {0,4,7}, {8,1,7}, {8,1,7},
  725. {7,1,6}, {7,1,6}, {7,1,6}, {7,1,6},
  726. {6,1,6}, {6,1,6}, {6,1,6}, {6,1,6},
  727. {1,2,6}, {1,2,6}, {1,2,6}, {1,2,6},
  728. {5,1,6}, {5,1,6}, {5,1,6}, {5,1,6},
  729. {13,1,8}, {0,6,8}, {12,1,8}, {11,1,8},
  730. {3,2,8}, {1,3,8}, {0,5,8}, {10,1,8},
  731. {0,3,5}, {0,3,5}, {0,3,5}, {0,3,5},
  732. {0,3,5}, {0,3,5}, {0,3,5}, {0,3,5},
  733. {4,1,5}, {4,1,5}, {4,1,5}, {4,1,5},
  734. {4,1,5}, {4,1,5}, {4,1,5}, {4,1,5},
  735. {3,1,5}, {3,1,5}, {3,1,5}, {3,1,5},
  736. {3,1,5}, {3,1,5}, {3,1,5}, {3,1,5}
  737. }
  738. #endif
  739. ;
  740. /* Table B-15, DCT coefficients table one,
  741.  * codes 000001xx ... 11111111
  742. */
  743. DCTtab DCTtab0a[252]
  744. #ifdef GLOBAL
  745. =
  746. {
  747. {65,0,6}, {65,0,6}, {65,0,6}, {65,0,6}, /* Escape */
  748. {7,1,7}, {7,1,7}, {8,1,7}, {8,1,7},
  749. {6,1,7}, {6,1,7}, {2,2,7}, {2,2,7},
  750. {0,7,6}, {0,7,6}, {0,7,6}, {0,7,6},
  751. {0,6,6}, {0,6,6}, {0,6,6}, {0,6,6},
  752. {4,1,6}, {4,1,6}, {4,1,6}, {4,1,6},
  753. {5,1,6}, {5,1,6}, {5,1,6}, {5,1,6},
  754. {1,5,8}, {11,1,8}, {0,11,8}, {0,10,8},
  755. {13,1,8}, {12,1,8}, {3,2,8}, {1,4,8},
  756. {2,1,5}, {2,1,5}, {2,1,5}, {2,1,5},
  757. {2,1,5}, {2,1,5}, {2,1,5}, {2,1,5},
  758. {1,2,5}, {1,2,5}, {1,2,5}, {1,2,5},
  759. {1,2,5}, {1,2,5}, {1,2,5}, {1,2,5},
  760. {3,1,5}, {3,1,5}, {3,1,5}, {3,1,5},
  761. {3,1,5}, {3,1,5}, {3,1,5}, {3,1,5},
  762. {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
  763. {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
  764. {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
  765. {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
  766. {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
  767. {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
  768. {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
  769. {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
  770. {64,0,4}, {64,0,4}, {64,0,4}, {64,0,4}, /* EOB */
  771. {64,0,4}, {64,0,4}, {64,0,4}, {64,0,4},
  772. {64,0,4}, {64,0,4}, {64,0,4}, {64,0,4},
  773. {64,0,4}, {64,0,4}, {64,0,4}, {64,0,4},
  774. {0,3,4}, {0,3,4}, {0,3,4}, {0,3,4},
  775. {0,3,4}, {0,3,4}, {0,3,4}, {0,3,4},
  776. {0,3,4}, {0,3,4}, {0,3,4}, {0,3,4},
  777. {0,3,4}, {0,3,4}, {0,3,4}, {0,3,4},
  778. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  779. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  780. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  781. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  782. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  783. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  784. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  785. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  786. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  787. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  788. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  789. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  790. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  791. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  792. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  793. {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
  794. {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
  795. {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
  796. {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
  797. {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
  798. {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
  799. {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
  800. {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
  801. {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
  802. {0,4,5}, {0,4,5}, {0,4,5}, {0,4,5},
  803. {0,4,5}, {0,4,5}, {0,4,5}, {0,4,5},
  804. {0,5,5}, {0,5,5}, {0,5,5}, {0,5,5},
  805. {0,5,5}, {0,5,5}, {0,5,5}, {0,5,5},
  806. {9,1,7}, {9,1,7}, {1,3,7}, {1,3,7},
  807. {10,1,7}, {10,1,7}, {0,8,7}, {0,8,7},
  808. {0,9,7}, {0,9,7}, {0,12,8}, {0,13,8},
  809. {2,3,8}, {4,2,8}, {0,14,8}, {0,15,8}
  810. }
  811. #endif
  812. ;
  813. /* Table B-14, DCT coefficients table zero,
  814.  * codes 0000001000 ... 0000001111
  815.  */
  816. DCTtab DCTtab1[8]
  817. #ifdef GLOBAL
  818. =
  819. {
  820. {16,1,10}, {5,2,10}, {0,7,10}, {2,3,10},
  821. {1,4,10}, {15,1,10}, {14,1,10}, {4,2,10}
  822. }
  823. #endif
  824. ;
  825. /* Table B-15, DCT coefficients table one,
  826.  * codes 000000100x ... 000000111x
  827.  */
  828. DCTtab DCTtab1a[8]
  829. #ifdef GLOBAL
  830. =
  831. {
  832. {5,2,9}, {5,2,9}, {14,1,9}, {14,1,9},
  833. {2,4,10}, {16,1,10}, {15,1,9}, {15,1,9}
  834. }
  835. #endif
  836. ;
  837. /* Table B-14/15, DCT coefficients table zero / one,
  838.  * codes 000000010000 ... 000000011111
  839.  */
  840. DCTtab DCTtab2[16]
  841. #ifdef GLOBAL
  842. =
  843. {
  844. {0,11,12}, {8,2,12}, {4,3,12}, {0,10,12},
  845. {2,4,12}, {7,2,12}, {21,1,12}, {20,1,12},
  846. {0,9,12}, {19,1,12}, {18,1,12}, {1,5,12},
  847. {3,3,12}, {0,8,12}, {6,2,12}, {17,1,12}
  848. }
  849. #endif
  850. ;
  851. /* Table B-14/15, DCT coefficients table zero / one,
  852.  * codes 0000000010000 ... 0000000011111
  853.  */
  854. DCTtab DCTtab3[16]
  855. #ifdef GLOBAL
  856. =
  857. {
  858. {10,2,13}, {9,2,13}, {5,3,13}, {3,4,13},
  859. {2,5,13}, {1,7,13}, {1,6,13}, {0,15,13},
  860. {0,14,13}, {0,13,13}, {0,12,13}, {26,1,13},
  861. {25,1,13}, {24,1,13}, {23,1,13}, {22,1,13}
  862. }
  863. #endif
  864. ;
  865. /* Table B-14/15, DCT coefficients table zero / one,
  866.  * codes 00000000010000 ... 00000000011111
  867.  */
  868. DCTtab DCTtab4[16]
  869. #ifdef GLOBAL
  870. =
  871. {
  872. {0,31,14}, {0,30,14}, {0,29,14}, {0,28,14},
  873. {0,27,14}, {0,26,14}, {0,25,14}, {0,24,14},
  874. {0,23,14}, {0,22,14}, {0,21,14}, {0,20,14},
  875. {0,19,14}, {0,18,14}, {0,17,14}, {0,16,14}
  876. }
  877. #endif
  878. ;
  879. /* Table B-14/15, DCT coefficients table zero / one,
  880.  * codes 000000000010000 ... 000000000011111
  881.  */
  882. DCTtab DCTtab5[16]
  883. #ifdef GLOBAL
  884. =
  885. {
  886. {0,40,15}, {0,39,15}, {0,38,15}, {0,37,15},
  887. {0,36,15}, {0,35,15}, {0,34,15}, {0,33,15},
  888. {0,32,15}, {1,14,15}, {1,13,15}, {1,12,15},
  889. {1,11,15}, {1,10,15}, {1,9,15}, {1,8,15}
  890. }
  891. #endif
  892. ;
  893. /* Table B-14/15, DCT coefficients table zero / one,
  894.  * codes 0000000000010000 ... 0000000000011111
  895.  */
  896. DCTtab DCTtab6[16]
  897. #ifdef GLOBAL
  898. =
  899. {
  900. {1,18,16}, {1,17,16}, {1,16,16}, {1,15,16},
  901. {6,3,16}, {16,2,16}, {15,2,16}, {14,2,16},
  902. {13,2,16}, {12,2,16}, {11,2,16}, {31,1,16},
  903. {30,1,16}, {29,1,16}, {28,1,16}, {27,1,16}
  904. }
  905. #endif
  906. ;
  907. /* Table B-3, macroblock_type in P-pictures, codes 001..1xx */
  908. VLCtab PMBtab0[8]
  909. #ifdef GLOBAL
  910. =
  911. {
  912. {ERROR_VALUE,0},
  913. {MACROBLOCK_MOTION_FORWARD,3},
  914. {MACROBLOCK_PATTERN,2}, {MACROBLOCK_PATTERN,2},
  915. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,1}, 
  916. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,1},
  917. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,1}, 
  918. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,1}
  919. }
  920. #endif
  921. ;
  922. /* Table B-3, macroblock_type in P-pictures, codes 000001..00011x */
  923. VLCtab PMBtab1[8]
  924. #ifdef GLOBAL
  925. =
  926. {
  927. {ERROR_VALUE,0},
  928. {MACROBLOCK_QUANT|MACROBLOCK_INTRA,6},
  929. {MACROBLOCK_QUANT|MACROBLOCK_PATTERN,5}, {MACROBLOCK_QUANT|MACROBLOCK_PATTERN,5},
  930. {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,5}, {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,5},
  931. {MACROBLOCK_INTRA,5}, {MACROBLOCK_INTRA,5}
  932. }
  933. #endif
  934. ;
  935. /* Table B-4, macroblock_type in B-pictures, codes 0010..11xx */
  936. VLCtab BMBtab0[16]
  937. #ifdef GLOBAL
  938. =
  939. {
  940. {ERROR_VALUE,0}, 
  941. {ERROR_VALUE,0},
  942. {MACROBLOCK_MOTION_FORWARD,4},
  943. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,4},
  944. {MACROBLOCK_MOTION_BACKWARD,3}, 
  945. {MACROBLOCK_MOTION_BACKWARD,3},
  946. {MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,3}, 
  947. {MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,3},
  948. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD,2}, 
  949. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD,2},
  950. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD,2}, 
  951. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD,2},
  952. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,2},
  953. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,2},
  954. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,2},
  955. {MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,2}
  956. }
  957. #endif
  958. ;
  959. /* Table B-4, macroblock_type in B-pictures, codes 000001..00011x */
  960. VLCtab BMBtab1[8]
  961. #ifdef GLOBAL
  962. =
  963. {
  964. {ERROR_VALUE,0},
  965. {MACROBLOCK_QUANT|MACROBLOCK_INTRA,6},
  966. {MACROBLOCK_QUANT|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,6},
  967. {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_PATTERN,6},
  968. {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,5},
  969. {MACROBLOCK_QUANT|MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD|MACROBLOCK_PATTERN,5},
  970. {MACROBLOCK_INTRA,5}, 
  971. {MACROBLOCK_INTRA,5}
  972. }
  973. #endif
  974. ;