mp4_tables.c
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:9k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include "portab.h"
  5. #include "mp4_vars.h"
  6. extern unsigned int zig_zag_scan[64];
  7. extern unsigned int alternate_horizontal_scan[64];
  8. extern unsigned int alternate_vertical_scan[64];
  9. extern unsigned int intra_quant_matrix[64];
  10. extern unsigned int nonintra_quant_matrix[64];
  11. extern unsigned int msk[33];
  12. extern int roundtab[16];
  13. extern int saiAcLeftIndex[8];
  14. extern int DQtab[4];
  15. extern tab_type MCBPCtabIntra[32];
  16. extern tab_type MCBPCtabInter[256];
  17. extern tab_type CBPYtab[48];
  18. extern tab_type MVtab0[14];
  19. extern tab_type MVtab1[96];
  20. extern tab_type MVtab2[124];
  21. extern tab_type tableB16_1[112];
  22. extern tab_type tableB16_2[96];
  23. extern tab_type tableB16_3[120];
  24. extern tab_type tableB17_1[112];
  25. extern tab_type tableB17_2[96];
  26. extern tab_type tableB17_3[120];
  27. void save_tables(MP4_TABLES * tables) 
  28. {
  29. memcpy(tables->zig_zag_scan, zig_zag_scan, sizeof(zig_zag_scan));
  30. memcpy(tables->alternate_vertical_scan, alternate_vertical_scan, sizeof(alternate_vertical_scan));
  31. memcpy(tables->alternate_horizontal_scan, alternate_horizontal_scan, sizeof(alternate_horizontal_scan));
  32. memcpy(tables->intra_quant_matrix, intra_quant_matrix, sizeof(intra_quant_matrix));
  33. memcpy(tables->nonintra_quant_matrix, nonintra_quant_matrix, sizeof(nonintra_quant_matrix));
  34. memcpy(tables->msk, msk, sizeof(msk));
  35. memcpy(tables->roundtab, roundtab, sizeof(roundtab));
  36. memcpy(tables->saiAcLeftIndex, saiAcLeftIndex, sizeof( saiAcLeftIndex));
  37. memcpy(tables->DQtab, DQtab, sizeof( DQtab));
  38. memcpy(tables->MCBPCtabIntra, MCBPCtabIntra, sizeof( MCBPCtabIntra));
  39. memcpy(tables->MCBPCtabInter, MCBPCtabInter, sizeof( MCBPCtabInter));
  40. memcpy(tables->CBPYtab, CBPYtab, sizeof( CBPYtab));
  41. memcpy(tables->MVtab0, MVtab0, sizeof( MVtab0));
  42. memcpy(tables->MVtab1, MVtab1, sizeof( MVtab1));
  43. memcpy(tables->MVtab2, MVtab2, sizeof( MVtab2));
  44. memcpy(tables->tableB16_1, tableB16_1, sizeof( tableB16_1));
  45. memcpy(tables->tableB16_2, tableB16_2, sizeof( tableB16_2));
  46. memcpy(tables->tableB16_3, tableB16_3, sizeof( tableB16_3));
  47. memcpy(tables->tableB17_1, tableB17_1, sizeof( tableB17_1));
  48. memcpy(tables->tableB17_2, tableB17_2, sizeof( tableB17_2));
  49. memcpy(tables->tableB17_3, tableB17_3, sizeof( tableB17_3));
  50. }
  51. unsigned int zig_zag_scan[64] =
  52. {
  53.   0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5,
  54.   12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28,
  55.   35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51,
  56.   58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63
  57. };
  58. unsigned int alternate_horizontal_scan[64] =
  59. {
  60.    0,  1,  2,  3,  8,  9, 16, 17, 
  61. 10, 11,  4,  5,  6,  7, 15, 14,
  62.   13, 12, 19, 18, 24, 25, 32, 33, 
  63. 26, 27, 20, 21, 22, 23, 28, 29,
  64.   30, 31, 34, 35, 40, 41, 48, 49, 
  65. 42, 43, 36, 37, 38, 39, 44, 45,
  66.   46, 47, 50, 51, 56, 57, 58, 59, 
  67. 52, 53, 54, 55, 60, 61, 62, 63
  68. };
  69. unsigned int alternate_vertical_scan[64] =
  70. {
  71.    0,  8, 16, 24,  1,  9,  2, 10, 
  72. 17, 25, 32, 40, 48, 56, 57, 49,
  73.   41, 33, 26, 18,  3, 11,  4, 12, 
  74. 19, 27, 34, 42, 50, 58, 35, 43,
  75.   51, 59, 20, 28,  5, 13,  6, 14, 
  76. 21, 29, 36, 44, 52, 60, 37, 45,
  77.   53, 61, 22, 30,  7, 15, 23, 31, 
  78. 38, 46, 54, 62, 39, 47, 55, 63
  79. };
  80. unsigned int intra_quant_matrix[64] = 
  81. {
  82.  8,17,18,19,21,23,25,27,
  83. 17,18,19,21,23,25,27,28,
  84. 20,21,22,23,24,26,28,30,
  85. 21,22,23,24,26,28,30,32,
  86. 22,23,24,26,28,30,32,35,
  87. 23,24,26,28,30,32,35,38,
  88. 25,26,28,30,32,35,38,41,
  89. 27,28,30,32,35,38,41,45
  90. };
  91. unsigned int nonintra_quant_matrix[64] =
  92. {
  93. 16,17,18,19,20,21,22,23,
  94. 17,18,19,20,21,22,23,24,
  95. 18,19,20,21,22,23,24,25,
  96. 19,20,21,22,23,24,26,27,
  97. 20,21,22,23,25,26,27,28,
  98. 21,22,23,24,26,27,28,30,
  99. 22,23,24,26,27,28,30,31,
  100. 23,24,25,27,28,30,31,33
  101. };
  102. unsigned int msk[33] =
  103. {
  104.   0x00000000, 0x00000001, 0x00000003, 0x00000007,
  105.   0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,
  106.   0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff,
  107.   0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff,
  108.   0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff,
  109.   0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff,
  110.   0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff,
  111.   0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff,
  112.   0xffffffff
  113. };
  114. int roundtab[16] = {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2};
  115. int saiAcLeftIndex[8] = 
  116. {
  117. 0, 8,16,24,32,40,48,56
  118. };
  119. int DQtab[4] = {
  120. -1, -2, 1, 2
  121. };
  122. tab_type MCBPCtabIntra[32] = {
  123. {-1,0},
  124. {20,6}, {36,6}, {52,6}, {4,4}, {4,4}, {4,4}, 
  125. {4,4}, {19,3}, {19,3}, {19,3}, {19,3}, {19,3}, 
  126. {19,3}, {19,3}, {19,3}, {35,3}, {35,3}, {35,3}, 
  127. {35,3}, {35,3}, {35,3}, {35,3}, {35,3}, {51,3}, 
  128. {51,3}, {51,3}, {51,3}, {51,3}, {51,3}, {51,3}, 
  129. {51,3},
  130. };
  131. tab_type MCBPCtabInter[256] = {
  132. {-1,0}, 
  133. {255,9}, {52,9}, {36,9}, {20,9}, {49,9}, {35,8}, {35,8}, {19,8}, {19,8},
  134. {50,8}, {50,8}, {51,7}, {51,7}, {51,7}, {51,7}, {34,7}, {34,7}, {34,7},
  135. {34,7}, {18,7}, {18,7}, {18,7}, {18,7}, {33,7}, {33,7}, {33,7}, {33,7}, 
  136. {17,7}, {17,7}, {17,7}, {17,7}, {4,6}, {4,6}, {4,6}, {4,6}, {4,6}, 
  137. {4,6}, {4,6}, {4,6}, {48,6}, {48,6}, {48,6}, {48,6}, {48,6}, {48,6}, 
  138. {48,6}, {48,6}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, 
  139. {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, 
  140. {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, 
  141. {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, 
  142. {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, 
  143. {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {16,4}, {16,4}, {16,4}, {16,4}, 
  144. {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, 
  145. {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, 
  146. {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, 
  147. {16,4}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, 
  148. {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, 
  149. {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, 
  150. {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, 
  151. {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, 
  152. {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, 
  153. {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, 
  154. {2,3}, {2,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, 
  155. {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, 
  156. {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, 
  157. {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, 
  158. {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, 
  159. {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, 
  160. {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, 
  161. {1,3}, {1,3}, {1,3}, 
  162. };
  163. tab_type CBPYtab[48] = 
  164. {-1,0}, {-1,0}, {6,6},  {9,6},  {8,5},  {8,5},  {4,5},  {4,5},
  165. {2,5},  {2,5},  {1,5},  {1,5},  {0,4},  {0,4},  {0,4},  {0,4}, 
  166.   {12,4}, {12,4}, {12,4}, {12,4}, {10,4}, {10,4}, {10,4}, {10,4},
  167.   {14,4}, {14,4}, {14,4}, {14,4}, {5,4},  {5,4},  {5,4},  {5,4},
  168.   {13,4}, {13,4}, {13,4}, {13,4}, {3,4},  {3,4},  {3,4},  {3,4}, 
  169.   {11,4}, {11,4}, {11,4}, {11,4}, {7,4},  {7,4},  {7,4},  {7,4}, 
  170. };
  171. tab_type MVtab0[14] =
  172. {
  173. {3,4}, {-3,4}, {2,3}, {2,3}, {-2,3}, {-2,3}, {1,2}, {1,2}, {1,2}, {1,2},
  174. {-1,2}, {-1,2}, {-1,2}, {-1,2}
  175. };
  176. tab_type MVtab1[96] = 
  177. {
  178. {12,10}, {-12,10}, {11,10}, {-11,10}, {10,9}, {10,9}, {-10,9}, {-10,9},
  179. {9,9}, {9,9}, {-9,9}, {-9,9}, {8,9}, {8,9}, {-8,9}, {-8,9}, {7,7}, {7,7},
  180. {7,7}, {7,7}, {7,7}, {7,7}, {7,7}, {7,7}, {-7,7}, {-7,7}, {-7,7}, {-7,7},
  181. {-7,7}, {-7,7}, {-7,7}, {-7,7}, {6,7}, {6,7}, {6,7}, {6,7}, {6,7}, {6,7},
  182. {6,7}, {6,7}, {-6,7}, {-6,7}, {-6,7}, {-6,7}, {-6,7}, {-6,7}, {-6,7},
  183. {-6,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {-5,7},
  184. {-5,7}, {-5,7}, {-5,7}, {-5,7}, {-5,7}, {-5,7}, {-5,7}, {4,6}, {4,6}, {4,6},
  185. {4,6}, {4,6}, {4,6}, {4,6}, {4,6}, {4,6}, {4,6}, {4,6}, {4,6}, {4,6}, {4,6},
  186. {4,6}, {4,6}, {-4,6}, {-4,6}, {-4,6}, {-4,6}, {-4,6}, {-4,6}, {-4,6},
  187. {-4,6}, {-4,6}, {-4,6}, {-4,6}, {-4,6}, {-4,6}, {-4,6}, {-4,6}, {-4,6}
  188. };
  189. tab_type MVtab2[124] = 
  190. {
  191. {32,12}, {-32,12}, {31,12}, {-31,12}, {30,11}, {30,11}, {-30,11}, {-30,11},
  192. {29,11}, {29,11}, {-29,11}, {-29,11}, {28,11}, {28,11}, {-28,11}, {-28,11},
  193. {27,11}, {27,11}, {-27,11}, {-27,11}, {26,11}, {26,11}, {-26,11}, {-26,11},
  194. {25,11}, {25,11}, {-25,11}, {-25,11}, {24,10}, {24,10}, {24,10}, {24,10},
  195. {-24,10}, {-24,10}, {-24,10}, {-24,10}, {23,10}, {23,10}, {23,10}, {23,10},
  196. {-23,10}, {-23,10}, {-23,10}, {-23,10}, {22,10}, {22,10}, {22,10}, {22,10},
  197. {-22,10}, {-22,10}, {-22,10}, {-22,10}, {21,10}, {21,10}, {21,10}, {21,10},
  198. {-21,10}, {-21,10}, {-21,10}, {-21,10}, {20,10}, {20,10}, {20,10}, {20,10},
  199. {-20,10}, {-20,10}, {-20,10}, {-20,10}, {19,10}, {19,10}, {19,10}, {19,10},
  200. {-19,10}, {-19,10}, {-19,10}, {-19,10}, {18,10}, {18,10}, {18,10}, {18,10},
  201. {-18,10}, {-18,10}, {-18,10}, {-18,10}, {17,10}, {17,10}, {17,10}, {17,10},
  202. {-17,10}, {-17,10}, {-17,10}, {-17,10}, {16,10}, {16,10}, {16,10}, {16,10},
  203. {-16,10}, {-16,10}, {-16,10}, {-16,10}, {15,10}, {15,10}, {15,10}, {15,10},
  204. {-15,10}, {-15,10}, {-15,10}, {-15,10}, {14,10}, {14,10}, {14,10}, {14,10},
  205. {-14,10}, {-14,10}, {-14,10}, {-14,10}, {13,10}, {13,10}, {13,10}, {13,10},
  206. {-13,10}, {-13,10}, {-13,10}, {-13,10}
  207. };