dec_cavlc.c
上传用户:sunbaby
上传日期:2013-05-31
资源大小:242k
文件大小:85k
源码类别:

mpeg/mp3

开发平台:

Visual C++

  1. /*****************************************************************************
  2. *
  3. *  T264 AVC CODEC
  4. *
  5. *  Copyright(C) 2004-2005 llcc <lcgate1@yahoo.com.cn>
  6. *               2004-2005 visionany <visionany@yahoo.com.cn>
  7. * 2005.3.2 CloudWu<sywu@sohu.com> added support for B-frame MB16x8 and MB8x16,MB8x8 support
  8. *
  9. *  This program is free software ; you can redistribute it and/or modify
  10. *  it under the terms of the GNU General Public License as published by
  11. *  the Free Software Foundation ; either version 2 of the License, or
  12. *  (at your option) any later version.
  13. *
  14. *  This program is distributed in the hope that it will be useful,
  15. *  but WITHOUT ANY WARRANTY ; without even the implied warranty of
  16. *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. *  GNU General Public License for more details.
  18. *
  19. *  You should have received a copy of the GNU General Public License
  20. *  along with this program ; if not, write to the Free Software
  21. *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  22. *
  23. ****************************************************************************/
  24. #include "stdio.h"
  25. #include "T264.h"
  26. #include "bitstream.h"
  27. #include "utility.h"
  28. #ifndef CHIP_DM642
  29. #include "memory.h"
  30. #endif
  31. #include "assert.h"
  32. #include "cavlc.h"
  33. #include "inter.h"
  34. #include "inter_b.h"
  35. #define BLOCK_INDEX_CHROMA_DC   (-1)
  36. #define BLOCK_INDEX_LUMA_DC     (-2)
  37. #define INITINVALIDVEC(vec) vec.refno = -1; vec.x = vec.y = 0;
  38. typedef struct  
  39. {
  40.     uint8_t len;
  41.     uint8_t trailing_ones;
  42.     uint8_t total_coeff;
  43. } vlc_coeff_token_t;
  44. #define VLC(a, b, c) {a, b, c}
  45. #define VLC2(a, b, c) VLC(a, b, c), VLC(a, b, c)
  46. #define VLC4(a, b, c) VLC2(a, b, c), VLC2(a, b, c)
  47. static const uint8_t i16x16_eg_to_cbp[26][3] = 
  48. {
  49.     0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0,
  50.     0, 1, 0, 1, 1, 0, 2, 1, 0, 3, 1, 0, 0, 2, 0, 
  51.     1, 2, 0, 2, 2, 0, 3, 2, 0, 0, 0, 15, 1, 0, 15, 
  52.     2, 0, 15, 3, 0, 15, 0, 1, 15, 1, 1, 15, 2, 1, 15, 
  53.     3, 1, 15, 0, 2, 15, 1, 2, 15, 2, 2, 15, 3, 2, 15
  54. };
  55. static const uint8_t i4x4_eg_to_cbp[48] =
  56. {
  57.     47, 31, 15, 0, 23, 27, 29, 30, 7, 11, 13, 14, 39, 43, 45,
  58.     46, 16, 3, 5, 10, 12, 19, 21, 26, 28, 35, 37, 42, 44, 1,
  59.     2, 4, 8, 17, 18, 20, 24, 6, 9, 22, 25, 32, 33, 34, 36, 40,
  60.     38, 41
  61. };
  62. static const uint8_t inter_eg_to_cbp[48] = 
  63. {
  64.     0, 16, 1, 2, 4, 8, 32, 3, 5, 10, 12, 15, 47, 7, 11, 13, 14,
  65.     6, 9, 31, 35, 37, 42, 44, 33, 34, 36, 40, 39, 43, 45, 46, 17,
  66.     18, 20, 24, 19, 21, 26, 28, 23, 27, 29, 30, 22, 25, 38, 41
  67. };
  68. /* ++ cavlc tables ++ */
  69. static const vlc_coeff_token_t coeff4_0[] = 
  70. {
  71.     VLC(6, 0, 2),   /* 0001 00 */
  72.     VLC(6, 3, 3),   /* 0001 01 */
  73.     VLC(6, 1, 2),   /* 0001 10 */
  74.     VLC(6, 0, 1),   /* 0001 11 */
  75. };
  76. static const vlc_coeff_token_t coeff4_1[] = 
  77. {
  78.     VLC2(7, 3, 4),   /* 0000 000(0) */
  79.     VLC(8, 2, 4),   /* 0000 0010 */
  80.     VLC(8, 1, 4),   /* 0000 0011 */
  81.     VLC2(7, 2, 3),   /* 0000 010(0) */
  82.     VLC2(7, 1, 3),   /* 0000 011(0) */
  83.     VLC4(6, 0, 4),   /* 0000 10(00) */
  84.     VLC4(6, 0, 3),   /* 0000 11(00) */
  85. };
  86. static const vlc_coeff_token_t coeff3_0[] =
  87. {
  88.     VLC(6, 0, 1),    /* 0000 00 */ 
  89.     VLC(6, 1, 1),    /* 0000 01 */ 
  90.     VLC(-1, -1, -1), /* 0000 10 */ 
  91.     VLC(6, 0, 0),    /* 0000 11 */
  92.     VLC(6, 0, 2),    /* 0001 00 */
  93.     VLC(6, 1, 2),    /* 0001 01 */
  94.     VLC(6, 2, 2),    /* 0001 10 */
  95.     VLC(-1, -1, -1), /* 0001 11 */
  96.     VLC(6, 0, 3),    /* 0010 00 */
  97.     VLC(6, 1, 3),    /* 0010 01 */
  98.     VLC(6, 2, 3),    /* 0010 10 */
  99.     VLC(6, 3, 3),    /* 0010 11 */
  100.     VLC(6, 0, 4),    /* 0011 00 */
  101.     VLC(6, 1, 4),    /* 0011 01 */
  102.     VLC(6, 2, 4),    /* 0011 10 */
  103.     VLC(6, 3, 4),    /* 0011 11 */
  104.     VLC(6, 0, 5),    /* 0100 00 */
  105.     VLC(6, 1, 5),    /* 0100 01 */
  106.     VLC(6, 2, 5),    /* 0100 10 */
  107.     VLC(6, 3, 5),    /* 0100 11 */
  108.     VLC(6, 0, 6),    /* 0101 00 */
  109.     VLC(6, 1, 6),    /* 0101 01 */
  110.     VLC(6, 2, 6),    /* 0101 10 */
  111.     VLC(6, 3, 6),    /* 0101 11 */
  112.     VLC(6, 0, 7),    /* 0110 00 */
  113.     VLC(6, 1, 7),    /* 0110 01 */
  114.     VLC(6, 2, 7),    /* 0110 10 */
  115.     VLC(6, 3, 7),    /* 0110 11 */
  116.     VLC(6, 0, 8),
  117.     VLC(6, 1, 8),
  118.     VLC(6, 2, 8),
  119.     VLC(6, 3, 8),
  120.     VLC(6, 0, 9),
  121.     VLC(6, 1, 9),
  122.     VLC(6, 2, 9),
  123.     VLC(6, 3, 9),
  124.     VLC(6, 0, 10),
  125.     VLC(6, 1, 10),
  126.     VLC(6, 2, 10),
  127.     VLC(6, 3, 10),
  128.     VLC(6, 0, 11),
  129.     VLC(6, 1, 11),
  130.     VLC(6, 2, 11),
  131.     VLC(6, 3, 11),
  132.     VLC(6, 0, 12),
  133.     VLC(6, 1, 12),
  134.     VLC(6, 2, 12),
  135.     VLC(6, 3, 12),
  136.     VLC(6, 0, 13),
  137.     VLC(6, 1, 13),
  138.     VLC(6, 2, 13),
  139.     VLC(6, 3, 13),
  140.     VLC(6, 0, 14),
  141.     VLC(6, 1, 14),
  142.     VLC(6, 2, 14),
  143.     VLC(6, 3, 14),
  144.     VLC(6, 0, 15),
  145.     VLC(6, 1, 15),
  146.     VLC(6, 2, 15),
  147.     VLC(6, 3, 15),
  148.     VLC(6, 0, 16),
  149.     VLC(6, 1, 16),
  150.     VLC(6, 2, 16),
  151.     VLC(6, 3, 16)
  152. };
  153. static const vlc_coeff_token_t coeff2_0[] = 
  154. {
  155.     VLC(4, 3, 7),   /* 1000 */
  156.     VLC(4, 3, 6),   /* 1001 */
  157.     VLC(4, 3, 5),   /* 1010 */
  158.     VLC(4, 3, 4),   /* 1011 */
  159.     VLC(4, 3, 3),   /* 1100 */
  160.     VLC(4, 2, 2),   /* 1101 */
  161.     VLC(4, 1, 1),   /* 1110 */
  162.     VLC(4, 0, 0),   /* 1111 */
  163. };
  164. static const vlc_coeff_token_t coeff2_1[] = 
  165. {
  166.     VLC(5, 1, 5),   /* 0100 0 */
  167.     VLC(5, 2, 5),
  168.     VLC(5, 1, 4),
  169.     VLC(5, 2, 4),
  170.     VLC(5, 1, 3),
  171.     VLC(5, 3, 8),
  172.     VLC(5, 2, 3),
  173.     VLC(5, 1, 2),
  174. };
  175. static const vlc_coeff_token_t coeff2_2[] = 
  176. {
  177.     VLC(6, 0, 3),   /* 0010 00 */
  178.     VLC(6, 2, 7),
  179.     VLC(6, 1, 7),
  180.     VLC(6, 0, 2),
  181.     VLC(6, 3, 9),
  182.     VLC(6, 2, 6),
  183.     VLC(6, 1, 6),
  184.     VLC(6, 0, 1),
  185. };
  186. static const vlc_coeff_token_t coeff2_3[] = 
  187. {
  188.     VLC(7, 0, 7),   /* 0001 000 */
  189.     VLC(7, 0, 6),
  190.     VLC(7, 2, 9),
  191.     VLC(7, 0, 5),
  192.     VLC(7, 3, 10),
  193.     VLC(7, 2, 8),
  194.     VLC(7, 1, 8),
  195.     VLC(7, 0, 4),
  196. };
  197. static const vlc_coeff_token_t coeff2_4[] = 
  198. {
  199.     VLC(8, 3, 12),   /* 0000 1000 */
  200.     VLC(8, 2, 11),
  201.     VLC(8, 1, 10),
  202.     VLC(8, 0, 9),
  203.     VLC(8, 3, 11),
  204.     VLC(8, 2, 10),
  205.     VLC(8, 1, 9),
  206.     VLC(8, 0, 8),
  207. };
  208. static const vlc_coeff_token_t coeff2_5[] = 
  209. {
  210.     VLC(9, 0, 12),   /* 0000 0100 0 */
  211.     VLC(9, 2, 13),
  212.     VLC(9, 1, 12),
  213.     VLC(9, 0, 11),
  214.     VLC(9, 3, 13),
  215.     VLC(9, 2, 12),
  216.     VLC(9, 1, 11),
  217.     VLC(9, 0, 10),
  218. };
  219. static const vlc_coeff_token_t coeff2_6[] = 
  220. {
  221.     VLC(-1, -1, -1),   /* 0000 0000 00 */
  222.     VLC(10, 0, 16),    /* 0000 0000 01 */
  223.     VLC(10, 3, 16),    /* 0000 0000 10 */
  224.     VLC(10, 2, 16),    /* 0000 0000 11 */
  225.     VLC(10, 1, 16),    /* 0000 0001 00 */
  226.     VLC(10, 0, 15),    /* 0000 0001 01 */
  227.     VLC(10, 3, 15),    /* 0000 0001 10 */
  228.     VLC(10, 2, 15),    /* 0000 0001 11 */
  229.     VLC(10, 1, 15),    /* 0000 0010 00 */
  230.     VLC(10, 0, 14),
  231.     VLC(10, 3, 14),
  232.     VLC(10, 2, 14),
  233.     VLC(10, 1, 14),
  234.     VLC(10, 0, 13),
  235.     VLC2(9, 1, 13),    /* 0000 0011 1(0) */
  236. };
  237. static const vlc_coeff_token_t coeff1_0[] = 
  238. {
  239.     VLC(4, 3, 4),  /* 0100 */
  240.     VLC(4, 3, 3),  /* 0101 */
  241.     VLC2(3, 2, 2), /* 011(0) */
  242.     VLC4(2, 1, 1), /* 10 */
  243.     VLC4(2, 0, 0), /* 11 */
  244. };
  245. static const vlc_coeff_token_t coeff1_1[] = 
  246. {
  247.     VLC(6, 3, 7),   /* 0001 00 */
  248.     VLC(6, 2, 4),   /* 0001 01 */
  249.     VLC(6, 1, 4),   /* 0001 10 */
  250.     VLC(6, 0, 2),   /* 0001 11 */
  251.     VLC(6, 3, 6),   /* 0010 00 */
  252.     VLC(6, 2, 3),   /* 0010 01 */
  253.     VLC(6, 1, 3),   /* 0010 10 */
  254.     VLC(6, 0, 1),   /* 0010 11*/
  255.     VLC2(5, 3, 5),   /* 0011 0(0)*/
  256.     VLC2(5, 1, 2),   /* 0011 1(0)*/
  257. };
  258. static const vlc_coeff_token_t coeff1_2[] = 
  259. {
  260.     VLC(9, 3, 9),   /* 0000 0010 0 */
  261.     VLC(9, 2, 7),   /* 0000 0010 1 */
  262.     VLC(9, 1, 7),   /* 0000 0011 0 */
  263.     VLC(9, 0, 6),   /* 0000 0011 1 */
  264.     VLC2(8, 0, 5),   /* 0000 0100 */
  265.     VLC2(8, 2, 6),   /* 0000 0101 */
  266.     VLC2(8, 1, 6),   /* 0000 0110 */
  267.     VLC2(8, 0, 4),   /* 0000 0111 */
  268.     VLC4(7, 3, 8),    /* 0000 100 */
  269.     VLC4(7, 2, 5),    /* 0000 101 */
  270.     VLC4(7, 1, 5),    /* 0000 110 */
  271.     VLC4(7, 0, 3),    /* 0000 111 */
  272. };
  273. static const vlc_coeff_token_t coeff1_3[] = 
  274. {
  275.     VLC(11, 3, 11),   /* 0000 0001 000 */
  276.     VLC(11, 2, 9),    /* 0000 0001 001 */
  277.     VLC(11, 1, 9),    /* 0000 0001 010 */
  278.     VLC(11, 0, 8),    /* 0000 0001 011 */
  279.     VLC(11, 3, 10),   /* 0000 0001 100 */
  280.     VLC(11, 2, 8),    /* 0000 0001 101 */
  281.     VLC(11, 1, 8),    /* 0000 0001 110 */
  282.     VLC(11, 0, 7),    /* 0000 0001 111 */
  283. };
  284. static const vlc_coeff_token_t coeff1_4[] = 
  285. {
  286.     VLC(12, 0, 11),   /* 0000 0000 1000 */
  287.     VLC(12, 2, 11),   /* 0000 0000 1001 */
  288.     VLC(12, 1, 11),   /* 0000 0000 1010 */
  289.     VLC(12, 0, 10),   /* 0000 0000 1011 */
  290.     VLC(12, 3, 12),   /* 0000 0000 1100 */
  291.     VLC(12, 2, 10),   /* 0000 0000 1101 */
  292.     VLC(12, 1, 10),   /* 0000 0000 1110 */
  293.     VLC(12, 0, 9),    /* 0000 0000 1111 */
  294. };
  295. static const vlc_coeff_token_t coeff1_5[] = 
  296. {
  297.     VLC(13, 3, 14),   /* 0000 0000 0100 0 */
  298.     VLC(13, 2, 13),   /* 0000 0000 0100 1 */
  299.     VLC(13, 1, 13),   /* 0000 0000 0101 0 */
  300.     VLC(13, 0, 13),   /* 0000 0000 0101 1 */
  301.     VLC(13, 3, 13),   /* 0000 0000 0110 0 */
  302.     VLC(13, 2, 12),   /* 0000 0000 0110 1 */
  303.     VLC(13, 1, 12),   /* 0000 0000 0111 0 */
  304.     VLC(13, 0, 12),   /* 0000 0000 0111 1 */
  305. };
  306. static const vlc_coeff_token_t coeff1_6[] = 
  307. {
  308.     VLC2(-1, -1, -1),  /* 0000 0000 0000 00 */
  309.     VLC2(13, 3, 15),   /* 0000 0000 0000 1(0) */
  310.     VLC(14, 3, 16),   /* 0000 0000 0001 00 */
  311.     VLC(14, 2, 16),   /* 0000 0000 0001 01 */
  312.     VLC(14, 1, 16),   /* 0000 0000 0001 10 */
  313.     VLC(14, 0, 16),   /* 0000 0000 0001 11 */
  314.     VLC(14, 1, 15),   /* 0000 0000 0010 00 */
  315.     VLC(14, 0, 15),   /* 0000 0000 0010 01 */
  316.     VLC(14, 2, 15),   /* 0000 0000 0010 10 */
  317.     VLC(14, 1, 14),   /* 0000 0000 0010 11 */
  318.     VLC2(13, 2, 14),   /* 0000 0000 0011 0(0) */
  319.     VLC2(13, 0, 14),   /* 0000 0000 0011 1(0) */
  320. };
  321. static const vlc_coeff_token_t coeff0_0[] = 
  322. {
  323.     VLC2(-1, -1, -1), /* 0000 0000 0000 000(0) */
  324.     VLC2(15, 1, 13),  /* 0000 0000 0000 001(0) */
  325.     VLC(16, 0, 16),   /* 0000 0000 0000 0100 */
  326.     VLC(16, 2, 16),   
  327.     VLC(16, 1, 16),
  328.     VLC(16, 0, 15),
  329.     VLC(16, 3, 16),
  330.     VLC(16, 2, 15),
  331.     VLC(16, 1, 15),
  332.     VLC(16, 0, 14),
  333.     VLC(16, 3, 15),
  334.     VLC(16, 2, 14),
  335.     VLC(16, 1, 14),
  336.     VLC(16, 0, 13),   /* 0000 0000 0000 1111 */
  337.     VLC2(15, 3, 14),  /* 0000 0000 0001 000(0) */
  338.     VLC2(15, 2, 13),
  339.     VLC2(15, 1, 12),
  340.     VLC2(15, 0, 12),
  341.     VLC2(15, 3, 13),
  342.     VLC2(15, 2, 12),
  343.     VLC2(15, 1, 11),
  344.     VLC2(15, 0, 11),  /* 0000 0000 0001 111(0) */
  345.     VLC4(14, 3, 12),  /* 0000 0000 0010 00(00) */
  346.     VLC4(14, 2, 11),
  347.     VLC4(14, 1, 10),
  348.     VLC4(14, 0, 10),
  349.     VLC4(14, 3, 11),
  350.     VLC4(14, 2, 10),
  351.     VLC4(14, 1, 9),
  352.     VLC4(14, 0, 9),  /* 0000 0000 0011 11(00) */
  353. };
  354. static const vlc_coeff_token_t coeff0_1[] = 
  355. {
  356.     VLC(13, 0, 8),   /* 0000 0000 0100 0 */
  357.     VLC(13, 2, 9),
  358.     VLC(13, 1, 8),
  359.     VLC(13, 0, 7),
  360.     VLC(13, 3, 10),
  361.     VLC(13, 2, 8),
  362.     VLC(13, 1, 7),
  363.     VLC(13, 0, 6),  /* 0000 0000 0111 1 */
  364. };
  365. static const vlc_coeff_token_t coeff0_2[] = 
  366. {
  367.     VLC(11, 3, 9),   /* 0000 0000 100 */
  368.     VLC(11, 2, 7),
  369.     VLC(11, 1, 6),
  370.     VLC(11, 0, 5),   /* 0000 0000 111 */
  371.     VLC2(10, 3, 8),  /* 0000 0001 00(0) */
  372.     VLC2(10, 2, 6),
  373.     VLC2(10, 1, 5),
  374.     VLC2(10, 0, 4),  /* 0000 0001 11(0) */
  375.     VLC4(9, 3, 7),  /* 0000 0010 0(0) */
  376.     VLC4(9, 2, 5),
  377.     VLC4(9, 1, 4),
  378.     VLC4(9, 0, 3),  /* 0000 0011 1(0) */
  379. };
  380. static const vlc_coeff_token_t coeff0_3[] = 
  381. {
  382.     VLC(8, 3, 6),   /* 0000 0100 */
  383.     VLC(8, 2, 4),
  384.     VLC(8, 1, 3),
  385.     VLC(8, 0, 2),
  386.     VLC2(7, 3, 5),  /* 0000 100 */
  387.     VLC2(7, 2, 3),
  388.     VLC4(6, 3, 4),  /* 0000 11 */
  389. };
  390. static const vlc_coeff_token_t coeff0_4[] = 
  391. {
  392.     VLC(6, 1, 2),    /* 0001 00 */
  393.     VLC(6, 0, 1),    /* 0001 01 */
  394.     VLC2(5, 3, 3)    /* 0001 1 */
  395. };
  396. static const vlc_coeff_token_t coeff0_5[] = 
  397. {
  398.     VLC(-1, -1, -1),   /* 000 */
  399.     VLC(3, 2, 2),      /* 001 */
  400.     VLC2(2, 1, 1),     /* 01 */
  401.     VLC4(1, 0, 0)      /* 1 */
  402. };
  403. static const uint8_t prefix_table0[] = 
  404. {
  405.     -1,
  406.     3,
  407.     2, 2,
  408.     1, 1, 1, 1,
  409.     0, 0, 0, 0, 0, 0, 0, 0
  410. };
  411. static const uint8_t prefix_table1[] = 
  412. {
  413.     -1,
  414.     7,
  415.     6, 6,
  416.     5, 5, 5, 5,
  417.     4, 4, 4, 4, 4, 4, 4, 4
  418. };
  419. static const uint8_t prefix_table2[] =
  420. {
  421.     -1,
  422.     11,
  423.     10, 10,
  424.     9, 9, 9, 9,
  425.     8, 8, 8, 8, 8, 8, 8, 8
  426. };
  427. static const uint8_t prefix_table3[] = 
  428. {
  429.     -1,
  430.     15,
  431.     14, 14,
  432.     13, 13, 13, 13,
  433.     12, 12, 12, 12, 12, 12, 12, 12
  434. };
  435. #undef VLC
  436. #undef VLC2
  437. #undef VLC4
  438. #define VLC(a, b) {a, b}
  439. #define VLC2(a, b) VLC(a, b), VLC(a, b)
  440. #define VLC4(a, b) VLC2(a, b), VLC2(a, b)
  441. #define VLC8(a, b) VLC4(a, b), VLC4(a, b)
  442. typedef struct  
  443. {
  444.     uint8_t num;
  445.     uint8_t len;
  446. } zero_count_t;
  447. static const zero_count_t total_zero_table1_0[] = 
  448. {
  449.     VLC(-1, -1),
  450.     VLC(15, 9), /* 0000 0000 1 */
  451.     VLC(14, 9),
  452.     VLC(13, 9), /* 0000 0001 1 */
  453.     VLC2(12, 8),/* 0000 0010 */
  454.     VLC2(11, 8),/* 0000 0011 */
  455.     VLC4(10, 7),/* 0000 010 */
  456.     VLC4(9, 7), /* 0000 011 */
  457.     VLC8(8, 6), /* 0000 10 */
  458.     VLC8(7, 6), /* 0000 11 */
  459. };
  460. static const zero_count_t total_zero_table1_1[] = 
  461. {
  462.     VLC2(-1, -1),
  463.     VLC(6, 5), /* 0001 0 */
  464.     VLC(5, 5), /* 0001 1 */
  465.     VLC2(4, 4),/* 0010 */
  466.     VLC2(3, 4),/* 0011 */
  467.     VLC4(2, 3),/* 010 */
  468.     VLC4(1, 3),/* 011 */
  469.     VLC8(0, 1), /*1 */
  470.     VLC8(0, 1), /*1 */
  471. };
  472. static const zero_count_t total_zero_table2_0[] = 
  473. {
  474.     VLC(14, 6), /* 0000 00 */
  475.     VLC(13, 6),
  476.     VLC(12, 6),
  477.     VLC(11, 6),
  478.     VLC2(10, 5),/* 0001 0 */
  479.     VLC2(9, 5),
  480. };
  481. static const zero_count_t total_zero_table2_1[] = 
  482. {
  483.     VLC2(-1, -1),
  484.     VLC(8, 4), /* 0010 */
  485.     VLC(7, 4), /* 0011 */
  486.     VLC(6, 4),
  487.     VLC(5, 4),
  488.     VLC2(4, 3),/* 011 */
  489.     VLC2(3, 3),/* 100 */
  490.     VLC2(2, 3), /*101 */
  491.     VLC2(1, 3), /*110 */
  492.     VLC2(0, 3), /*111 */
  493. };
  494. static const zero_count_t total_zero_table3_0[] = 
  495. {
  496.     VLC(13, 6), /* 0000 00 */
  497.     VLC(11, 6),
  498.     VLC2(12, 5),/* 0000 1 */
  499.     VLC2(10, 5),/* 0001 0 */
  500.     VLC2(9, 5), /* 0001 1 */
  501. };
  502. static const zero_count_t total_zero_table3_1[] = 
  503. {
  504.     VLC2(-1, -1),
  505.     VLC(8, 4), /* 0010 */
  506.     VLC(5, 4), /* 0011 */
  507.     VLC(4, 4),
  508.     VLC(0, 4),
  509.     VLC2(7, 3),/* 011 */
  510.     VLC2(6, 3),/* 100 */
  511.     VLC2(3, 3), /*101 */
  512.     VLC2(2, 3), /*110 */
  513.     VLC2(1, 3), /*111 */
  514. };
  515. static const zero_count_t total_zero_table6_0[] = 
  516. {
  517.     VLC(10, 6), /* 0000 00 */
  518.     VLC(0, 6),
  519.     VLC2(1, 5),/* 0000 1 */
  520.     VLC4(8, 4),/* 0000 1 */
  521. };
  522. static const zero_count_t total_zero_table6_1[] = 
  523. {
  524.     VLC(-1, -1),
  525.     VLC(9, 3), /* 001 */
  526.     VLC(7, 3), /* 010 */
  527.     VLC(6, 3),
  528.     VLC(5, 3),
  529.     VLC(4, 3),
  530.     VLC(3, 3),
  531.     VLC(2, 3)
  532. };
  533. static const zero_count_t total_zero_table7_0[] = 
  534. {
  535.     VLC(9, 6), /* 0000 00 */
  536.     VLC(0, 6),
  537.     VLC2(1, 5),/* 0000 1 */
  538.     VLC4(7, 4),/* 0001 */
  539. };
  540. static const zero_count_t total_zero_table7_1[] = 
  541. {
  542.     VLC(-1, -1),
  543.     VLC(8, 3), /* 001 */
  544.     VLC(6, 3), /* 010 */
  545.     VLC(4, 3),
  546.     VLC(3, 3),
  547.     VLC(2, 3),
  548.     VLC2(5, 2)
  549. };
  550. static const zero_count_t total_zero_table8_0[] = 
  551. {
  552.     VLC(8, 6), /* 0000 00 */
  553.     VLC(0, 6),
  554.     VLC2(2, 5),/* 0000 1 */
  555.     VLC4(1, 4),/* 0001 */
  556. };
  557. static const zero_count_t total_zero_table8_1[] = 
  558. {
  559.     VLC(-1, -1),
  560.     VLC(7, 3), /* 001 */
  561.     VLC(6, 3), /* 010 */
  562.     VLC(3, 3),
  563.     VLC2(5, 2),
  564.     VLC2(4, 2)
  565. };
  566. static const zero_count_t total_zero_table9_0[] = 
  567. {
  568.     VLC(1, 6), /* 0000 00 */
  569.     VLC(0, 6),
  570.     VLC2(7, 5),/* 0000 1 */
  571.     VLC4(2, 4),/* 0001 */
  572. };
  573. static const zero_count_t total_zero_table9_1[] = 
  574. {
  575.     VLC(-1, -1),
  576.     VLC(5, 3), /* 001 */
  577.     VLC2(6, 2), /* 01 */
  578.     VLC2(4, 2),
  579.     VLC2(3, 2),
  580. };
  581. static const zero_count_t total_zero_table4_0[] = 
  582. {
  583.     VLC(12, 5), /* 0000 0 */
  584.     VLC(11, 5),
  585.     VLC(10, 5), /* 0000 1 */
  586.     VLC(0, 5),  /* 0001 1 */
  587.     VLC2(9, 4), /* 0010 */
  588.     VLC2(7, 4),
  589.     VLC2(3, 4),
  590.     VLC2(2, 4), /* 0101 */
  591.     VLC4(8, 3), /* 011 */
  592. };
  593. static const zero_count_t total_zero_table4_1[] = 
  594. {
  595.     VLC(6, 3),   /* 100 */
  596.     VLC(5, 3),   /* 101 */
  597.     VLC(4, 3),   /* 110 */
  598.     VLC(1, 3)    /* 111 */
  599. };
  600. static const zero_count_t total_zero_table5_0[] = 
  601. {
  602.     VLC(11, 5),  /* 0000 0 */
  603.     VLC(9, 5),
  604.     VLC2(10, 4), /* 0000 1 */
  605.     VLC2(8, 4),  /* 0010 */
  606.     VLC2(2, 4),
  607.     VLC2(1, 4),
  608.     VLC2(0, 4),
  609.     VLC4(7, 3)
  610. };
  611. static const zero_count_t total_zero_table5_1[] = 
  612. {
  613.     VLC(6, 3), /* 100 */
  614.     VLC(5, 3),
  615.     VLC(4, 3),
  616.     VLC(3, 3)
  617. };
  618. static const zero_count_t total_zero_table10_0[] = 
  619. {
  620.     VLC(1, 5), /* 0000 0 */
  621.     VLC(0, 5),
  622.     VLC2(6, 4), /* 0000 1 */
  623. };
  624. static const zero_count_t total_zero_table10_1[] = 
  625. {
  626.     VLC(-1, -1),
  627.     VLC(2, 3), /* 001 */
  628.     VLC2(5, 2), /* 01 */
  629.     VLC2(4, 2),
  630.     VLC2(3, 2),
  631. };
  632. static const zero_count_t total_zero_table11_0[] = 
  633. {
  634.     VLC(0, 4), /* 0000 */
  635.     VLC(1, 4),
  636.     VLC2(2, 3), /* 010 */
  637.     VLC2(3, 3),
  638.     VLC2(5, 3),
  639.     VLC8(4, 1)
  640. };
  641. static const zero_count_t total_zero_table12_0[] = 
  642. {
  643.     VLC(0, 4), /* 0000 */
  644.     VLC(1, 4),
  645.     VLC2(4, 3), /* 010 */
  646.     VLC4(2, 2),
  647.     VLC8(3, 1)
  648. };
  649. static const zero_count_t total_zero_table13_0[] = 
  650. {
  651.     VLC(0, 3), /* 000 */
  652.     VLC(1, 3),
  653.     VLC2(3, 2), /* 01 */
  654.     VLC4(2, 1),
  655. };
  656. static const zero_count_t total_zero_table14_0[] = 
  657. {
  658.     VLC(0, 2), 
  659.     VLC(1, 2),
  660.     VLC2(2, 1),
  661. };
  662. static const zero_count_t total_zero_table_chroma[3][8] = 
  663. {
  664.     {
  665.         VLC(3, 3), 
  666.         VLC(2, 3),
  667.         VLC2(1, 2),
  668.         VLC4(0, 1)
  669.     },
  670.     {
  671.         VLC2(2, 2),
  672.         VLC2(1, 2),
  673.         VLC4(0, 1)
  674.     },
  675.     {
  676.         VLC4(1, 1),
  677.         VLC4(0, 1)
  678.     }
  679. };
  680. static const zero_count_t run_before_table_0[7][8] = 
  681. {
  682.     {
  683.         VLC4(1, 1),
  684.         VLC4(0, 1)
  685.     },
  686.     {
  687.         VLC2(2, 2),
  688.         VLC2(1, 2),
  689.         VLC4(0, 1)
  690.     },
  691.     {
  692.         VLC2(3, 2),
  693.         VLC2(2, 2),
  694.         VLC2(1, 2),
  695.         VLC2(0, 2)
  696.     },
  697.     {
  698.         VLC(4, 3),
  699.         VLC(3, 3),
  700.         VLC2(2, 2),
  701.         VLC2(1, 2),
  702.         VLC2(0, 2)
  703.     },
  704.     {
  705.         VLC(5, 3),
  706.         VLC(4, 3),
  707.         VLC(3, 3),
  708.         VLC(2, 3),
  709.         VLC2(1, 2),
  710.         VLC2(0, 2),
  711.     },
  712.     {
  713.         VLC(1, 3),
  714.         VLC(2, 3),
  715.         VLC(4, 3),
  716.         VLC(3, 3),
  717.         VLC(6, 3),
  718.         VLC(5, 3),
  719.         VLC2(0, 2)
  720.     },
  721.     {
  722.         VLC(-1, -1),
  723.         VLC(6, 3),
  724.         VLC(5, 3),
  725.         VLC(4, 3),
  726.         VLC(3, 3),
  727.         VLC(2, 3),
  728.         VLC(1, 3),
  729.         VLC(0, 3)
  730.     }
  731. };
  732. static const uint8_t run_before_table_1[] =
  733. {
  734.     -1,
  735.     10,
  736.     9, 9,
  737.     8, 8, 8, 8,
  738.     7, 7, 7, 7, 7, 7, 7, 7
  739. };
  740. static const uint8_t run_before_table_2[] =
  741. {
  742.     -1,
  743.     14,
  744.     13, 13,
  745.     12, 12, 12, 12,
  746.     11, 11, 11, 11, 11, 11, 11, 11
  747. };
  748. /* -- cavlc tables -- */
  749. static void __inline
  750. T264_mb_read_cavlc_i4x4_mode(T264_t* t)
  751. {
  752.     int32_t i, j;
  753.     int32_t x, y;
  754.     int8_t* p = t->mb.i4x4_pred_mode_ref;
  755.     for(i = 0 ; i < 16 ; i ++)
  756.     {
  757.         int8_t pred;
  758.         j = luma_index[i];
  759.         pred = T264_mb_predict_intra4x4_mode(t, i);
  760.         /* prev_intra4x4_pred_mode_flag */
  761.         if (eg_read_direct1(t->bs))
  762.         {
  763.             t->mb.mode_i4x4[i] = pred;
  764.         }
  765.         else
  766.         {
  767.             int32_t mode = eg_read_direct(t->bs, 3);
  768.             if (mode < pred)
  769.             {
  770.                 t->mb.mode_i4x4[i] = mode;
  771.             }
  772.             else
  773.             {
  774.                 t->mb.mode_i4x4[i] = mode + 1;
  775.             }
  776.         }
  777.         x = j % 4;
  778.         y = j / 4;
  779.         p[IPM_LUMA + y * 8 + x] = t->mb.mode_i4x4[i];
  780.     }
  781. }
  782. /* nC == -1 */
  783. void
  784. T264dec_mb_read_coff_token_t4(T264_t* t, uint8_t* trailing_ones, uint8_t* total_coff)
  785. {
  786.     int32_t code;
  787.     code = eg_show(t->bs, 8);
  788.     if (code >= 16)
  789.     {
  790.         if (code >= 128)
  791.         {
  792.             /* 1 */
  793.             *trailing_ones = 1;
  794.             *total_coff = 1;
  795.             eg_read_skip(t->bs, 1);
  796.         }
  797.         else if (code >= 64)
  798.         {
  799.             /* 01 */
  800.             *trailing_ones = 0;
  801.             *total_coff = 0;
  802.             eg_read_skip(t->bs, 2);
  803.         }
  804.         else if (code >= 32)
  805.         {
  806.             /* 001 */
  807.             *trailing_ones = 2;
  808.             *total_coff = 2;
  809.             eg_read_skip(t->bs, 3);
  810.         }
  811.         else
  812.         {
  813.             code = (code >> 2) - 4;
  814.             *trailing_ones = coeff4_0[code].trailing_ones;
  815.             *total_coff = coeff4_0[code].total_coeff;
  816.             eg_read_skip(t->bs, 6);
  817.         }
  818.     }
  819.     else
  820.     {
  821.         *trailing_ones = coeff4_1[code].trailing_ones;
  822.         *total_coff = coeff4_1[code].total_coeff;
  823.         eg_read_skip(t->bs, coeff4_1[code].len);
  824.     }
  825. }
  826. /* nC >= 8 */
  827. void
  828. T264dec_mb_read_coff_token_t3(T264_t* t, uint8_t* trailing_ones, uint8_t* total_coff)
  829. {
  830.     int32_t code;
  831.     code = eg_read_direct(t->bs, 6);
  832.     *trailing_ones = coeff3_0[code].trailing_ones;
  833.     *total_coff = coeff3_0[code].total_coeff;
  834. }
  835. /* 8 > nC >= 4 */
  836. void
  837. T264dec_mb_read_coff_token_t2(T264_t* t, uint8_t* trailing_ones, uint8_t* total_coff)
  838. {
  839.     int32_t code;
  840.     const vlc_coeff_token_t* table;
  841.     code = eg_show(t->bs, 10);
  842.     if (code >= 512)
  843.     {
  844.         table = coeff2_0;
  845.         code = (code >> 6) - 8;
  846.     }
  847.     else if (code >= 256)
  848.     {
  849.         table = coeff2_1;
  850.         code = (code >> 5) - 8;
  851.     }
  852.     else if (code >= 128)
  853.     {
  854.         table = coeff2_2;
  855.         code = (code >> 4) - 8;
  856.     }
  857.     else if (code >= 64)
  858.     {
  859.         table = coeff2_3;
  860.         code = (code >> 3) - 8;
  861.     }
  862.     else if (code >= 32)
  863.     {
  864.         table = coeff2_4;
  865.         code = (code >> 2) - 8;
  866.     }
  867.     else if (code >= 16)
  868.     {
  869.         table = coeff2_5;
  870.         code = (code >> 1) - 8;
  871.     }
  872.     else
  873.     {
  874.         table = coeff2_6;
  875.     }
  876.     *trailing_ones = table[code].trailing_ones;
  877.     *total_coff = table[code].total_coeff;
  878.     eg_read_skip(t->bs, table[code].len);
  879. }
  880. /* 4 > nC >= 2 */
  881. void
  882. T264dec_mb_read_coff_token_t1(T264_t* t, uint8_t* trailing_ones, uint8_t* total_coff)
  883. {
  884.     int32_t code;
  885.     const vlc_coeff_token_t* table;
  886.     code = eg_show(t->bs, 14);
  887.     if (code >= 4096)
  888.     {
  889.         table = coeff1_0;
  890.         code = (code >> 10) - 4;
  891.     }
  892.     else if (code >= 1024)
  893.     {
  894.         table = coeff1_1;
  895.         code = (code >> 8) - 4;
  896.     }
  897.     else if (code >= 128)
  898.     {
  899.         table = coeff1_2;
  900.         code = (code >> 5) - 4;
  901.     }
  902.     else if (code >= 64)
  903.     {
  904.         table = coeff1_3;
  905.         code = (code >> 3) - 8;
  906.     }
  907.     else if (code >= 32)
  908.     {
  909.         table = coeff1_4;
  910.         code = (code >> 2) - 8;
  911.     }
  912.     else if (code >= 16)
  913.     {
  914.         table = coeff1_5;
  915.         code = (code >> 1) - 8;
  916.     }
  917.     else
  918.     {
  919.         table = coeff1_6;
  920.     }
  921.     *trailing_ones = table[code].trailing_ones;
  922.     *total_coff = table[code].total_coeff;
  923.     eg_read_skip(t->bs, table[code].len);
  924. }
  925. /* 2 > nC >= 0 */
  926. void
  927. T264dec_mb_read_coff_token_t0(T264_t* t, uint8_t* trailing_ones, uint8_t* total_coff)
  928. {
  929.     int32_t code;
  930.     const vlc_coeff_token_t* table;
  931.     code = eg_show(t->bs, 16);
  932.     if (code >= 8192)
  933.     {
  934.         table = coeff0_5;
  935.         code >>= 13;
  936.     }
  937.     else if (code >= 4096)
  938.     {
  939.         table = coeff0_4;
  940.         code = (code >> 10) - 4;
  941.     }
  942.     else if (code >= 1024)
  943.     {
  944.         table = coeff0_3;
  945.         code = (code >> 8) - 4;
  946.     }
  947.     else if (code >= 128)
  948.     {
  949.         table = coeff0_2;
  950.         code = (code >> 5) - 4;
  951.     }
  952.     else if (code >= 64)
  953.     {
  954.         table = coeff0_1;
  955.         code = (code >> 3) - 8;
  956.     }
  957.     else
  958.     {
  959.         table = coeff0_0;
  960.     }
  961.     *trailing_ones = table[code].trailing_ones;
  962.     *total_coff = table[code].total_coeff;
  963.     eg_read_skip(t->bs, table[code].len);
  964. }
  965. uint8_t
  966. T264dec_mb_read_level_prefix(T264_t* t)
  967. {
  968.     uint8_t prefix;
  969.     int32_t code;
  970.     code = eg_show(t->bs, 16);
  971.     if (code >= 4096)
  972.     {
  973.         prefix = prefix_table0[code >> 12];
  974.     }
  975.     else if (code >= 256)
  976.     {
  977.         prefix = prefix_table1[code >> 8];
  978.     }
  979.     else if (code >= 16)
  980.     {
  981.         prefix = prefix_table2[code >> 4];
  982.     }
  983.     else
  984.     {
  985.         prefix = prefix_table3[code];
  986.     }
  987.     eg_read_skip(t->bs, prefix + 1);
  988.     return prefix;
  989. }
  990. uint8_t
  991. T264dec_mb_read_total_zero1(T264_t* t)
  992. {
  993.     uint8_t total_zero;
  994.     int32_t code;
  995.     code = eg_show(t->bs, 9);
  996.     if (code >= 32)
  997.     {
  998.         code >>= 4;
  999.         total_zero = total_zero_table1_1[code].num;
  1000.         eg_read_skip(t->bs, total_zero_table1_1[code].len);
  1001.     }
  1002.     else
  1003.     {
  1004.         total_zero = total_zero_table1_0[code].num;
  1005.         eg_read_skip(t->bs, total_zero_table1_0[code].len);
  1006.     }
  1007.     assert(total_zero != 255);
  1008.     return total_zero;
  1009. }
  1010. uint8_t
  1011. T264dec_mb_read_total_zero2(T264_t* t)
  1012. {
  1013.     uint8_t total_zero;
  1014.     int32_t code;
  1015.     code = eg_show(t->bs, 6);
  1016.     if (code >= 8)
  1017.     {
  1018.         code >>= 2;
  1019.         total_zero = total_zero_table2_1[code].num;
  1020.         eg_read_skip(t->bs, total_zero_table2_1[code].len);
  1021.     }
  1022.     else
  1023.     {
  1024.         total_zero = total_zero_table2_0[code].num;
  1025.         eg_read_skip(t->bs, total_zero_table2_0[code].len);
  1026.     }
  1027.     assert(total_zero != 255);
  1028.     return total_zero;
  1029. }
  1030. uint8_t
  1031. T264dec_mb_read_total_zero3(T264_t* t)
  1032. {
  1033.     uint8_t total_zero;
  1034.     int32_t code;
  1035.     code = eg_show(t->bs, 6);
  1036.     if (code >= 8)
  1037.     {
  1038.         code >>= 2;
  1039.         total_zero = total_zero_table3_1[code].num;
  1040.         eg_read_skip(t->bs, total_zero_table3_1[code].len);
  1041.     }
  1042.     else
  1043.     {
  1044.         total_zero = total_zero_table3_0[code].num;
  1045.         eg_read_skip(t->bs, total_zero_table3_0[code].len);
  1046.     }
  1047.     assert(total_zero != 255);
  1048.     return total_zero;
  1049. }
  1050. uint8_t
  1051. T264dec_mb_read_total_zero6(T264_t* t)
  1052. {
  1053.     uint8_t total_zero;
  1054.     int32_t code;
  1055.     code = eg_show(t->bs, 6);
  1056.     if (code >= 8)
  1057.     {
  1058.         code >>= 3;
  1059.         total_zero = total_zero_table6_1[code].num;
  1060.         eg_read_skip(t->bs, total_zero_table6_1[code].len);
  1061.     }
  1062.     else
  1063.     {
  1064.         total_zero = total_zero_table6_0[code].num;
  1065.         eg_read_skip(t->bs, total_zero_table6_0[code].len);
  1066.     }
  1067.     assert(total_zero != 255);
  1068.     return total_zero;
  1069. }
  1070. uint8_t
  1071. T264dec_mb_read_total_zero7(T264_t* t)
  1072. {
  1073.     uint8_t total_zero;
  1074.     int32_t code;
  1075.     code = eg_show(t->bs, 6);
  1076.     if (code >= 8)
  1077.     {
  1078.         code >>= 3;
  1079.         total_zero = total_zero_table7_1[code].num;
  1080.         eg_read_skip(t->bs, total_zero_table7_1[code].len);
  1081.     }
  1082.     else
  1083.     {
  1084.         total_zero = total_zero_table7_0[code].num;
  1085.         eg_read_skip(t->bs, total_zero_table7_0[code].len);
  1086.     }
  1087.     assert(total_zero != 255);
  1088.     return total_zero;
  1089. }
  1090. uint8_t
  1091. T264dec_mb_read_total_zero8(T264_t* t)
  1092. {
  1093.     uint8_t total_zero;
  1094.     int32_t code;
  1095.     code = eg_show(t->bs, 6);
  1096.     if (code >= 8)
  1097.     {
  1098.         code >>= 3;
  1099.         total_zero = total_zero_table8_1[code].num;
  1100.         eg_read_skip(t->bs, total_zero_table8_1[code].len);
  1101.     }
  1102.     else
  1103.     {
  1104.         total_zero = total_zero_table8_0[code].num;
  1105.         eg_read_skip(t->bs, total_zero_table8_0[code].len);
  1106.     }
  1107.     assert(total_zero != 255);
  1108.     return total_zero;
  1109. }
  1110. uint8_t
  1111. T264dec_mb_read_total_zero9(T264_t* t)
  1112. {
  1113.     uint8_t total_zero;
  1114.     int32_t code;
  1115.     code = eg_show(t->bs, 6);
  1116.     if (code >= 8)
  1117.     {
  1118.         code >>= 3;
  1119.         total_zero = total_zero_table9_1[code].num;
  1120.         eg_read_skip(t->bs, total_zero_table9_1[code].len);
  1121.     }
  1122.     else
  1123.     {
  1124.         total_zero = total_zero_table9_0[code].num;
  1125.         eg_read_skip(t->bs, total_zero_table9_0[code].len);
  1126.     }
  1127.     assert(total_zero != 255);
  1128.     return total_zero;
  1129. }
  1130. uint8_t
  1131. T264dec_mb_read_total_zero4(T264_t* t)
  1132. {
  1133.     uint8_t total_zero;
  1134.     int32_t code;
  1135.     code = eg_show(t->bs, 5);
  1136.     if (code >= 16)
  1137.     {
  1138.         code = (code >> 2) - 4;
  1139.         total_zero = total_zero_table4_1[code].num;
  1140.         eg_read_skip(t->bs, total_zero_table4_1[code].len);
  1141.     }
  1142.     else
  1143.     {
  1144.         total_zero = total_zero_table4_0[code].num;
  1145.         eg_read_skip(t->bs, total_zero_table4_0[code].len);
  1146.     }
  1147.     assert(total_zero != 255);
  1148.     return total_zero;
  1149. }
  1150. uint8_t
  1151. T264dec_mb_read_total_zero5(T264_t* t)
  1152. {
  1153.     uint8_t total_zero;
  1154.     int32_t code;
  1155.     code = eg_show(t->bs, 5);
  1156.     if (code >= 16)
  1157.     {
  1158.         code = (code >> 2) - 4;
  1159.         total_zero = total_zero_table5_1[code].num;
  1160.         eg_read_skip(t->bs, total_zero_table5_1[code].len);
  1161.     }
  1162.     else
  1163.     {
  1164.         total_zero = total_zero_table5_0[code].num;
  1165.         eg_read_skip(t->bs, total_zero_table5_0[code].len);
  1166.     }
  1167.     assert(total_zero != 255);
  1168.     return total_zero;
  1169. }
  1170. uint8_t
  1171. T264dec_mb_read_total_zero10(T264_t* t)
  1172. {
  1173.     uint8_t total_zero;
  1174.     int32_t code;
  1175.     code = eg_show(t->bs, 5);
  1176.     if (code >= 4)
  1177.     {
  1178.         code >>= 2;
  1179.         total_zero = total_zero_table10_1[code].num;
  1180.         eg_read_skip(t->bs, total_zero_table10_1[code].len);
  1181.     }
  1182.     else
  1183.     {
  1184.         total_zero = total_zero_table10_0[code].num;
  1185.         eg_read_skip(t->bs, total_zero_table10_0[code].len);
  1186.     }
  1187.     assert(total_zero != 255);
  1188.     return total_zero;
  1189. }
  1190. uint8_t
  1191. T264dec_mb_read_total_zero11(T264_t* t)
  1192. {
  1193.     uint8_t total_zero;
  1194.     int32_t code;
  1195.     code = eg_show(t->bs, 4);
  1196.     total_zero = total_zero_table11_0[code].num;
  1197.     eg_read_skip(t->bs, total_zero_table11_0[code].len);
  1198.     assert(total_zero != 255);
  1199.     return total_zero;
  1200. }
  1201. uint8_t
  1202. T264dec_mb_read_total_zero12(T264_t* t)
  1203. {
  1204.     uint8_t total_zero;
  1205.     int32_t code;
  1206.     code = eg_show(t->bs, 4);
  1207.     total_zero = total_zero_table12_0[code].num;
  1208.     eg_read_skip(t->bs, total_zero_table12_0[code].len);
  1209.     return total_zero;
  1210. }
  1211. uint8_t
  1212. T264dec_mb_read_total_zero13(T264_t* t)
  1213. {
  1214.     uint8_t total_zero;
  1215.     int32_t code;
  1216.     code = eg_show(t->bs, 3);
  1217.     total_zero = total_zero_table13_0[code].num;
  1218.     eg_read_skip(t->bs, total_zero_table13_0[code].len);
  1219.     return total_zero;
  1220. }
  1221. uint8_t
  1222. T264dec_mb_read_total_zero14(T264_t* t)
  1223. {
  1224.     uint8_t total_zero;
  1225.     int32_t code;
  1226.     code = eg_show(t->bs, 2);
  1227.     total_zero = total_zero_table14_0[code].num;
  1228.     eg_read_skip(t->bs, total_zero_table14_0[code].len);
  1229.     return total_zero;
  1230. }
  1231. uint8_t
  1232. T264dec_mb_read_total_zero15(T264_t* t)
  1233. {
  1234.     return eg_read_direct1(t->bs);
  1235. }
  1236. uint8_t
  1237. T264dec_mb_read_total_zero_chroma(T264_t* t, uint8_t total_coeff)
  1238. {
  1239.     uint8_t total_zero;
  1240.     int32_t code;
  1241.     code = eg_show(t->bs, 3);
  1242.     total_zero = total_zero_table_chroma[total_coeff - 1][code].num;
  1243.     eg_read_skip(t->bs, total_zero_table_chroma[total_coeff - 1][code].len);
  1244.     assert(total_zero != 255);
  1245.     return total_zero;
  1246. }
  1247. uint8_t
  1248. T264dec_mb_read_run_before(T264_t* t, uint8_t zero_left)
  1249. {
  1250.     int32_t code;
  1251.     uint8_t run_before;
  1252.     assert(zero_left != 255);
  1253.     code = eg_show(t->bs, 3);
  1254.     if (zero_left <= 6)
  1255.     {
  1256.         run_before = run_before_table_0[zero_left - 1][code].num;
  1257.         eg_read_skip(t->bs, run_before_table_0[zero_left - 1][code].len);
  1258.     }
  1259.     else
  1260.     {
  1261.         eg_read_skip(t->bs, 3);
  1262.         if (code > 0)
  1263.         {
  1264.             run_before = run_before_table_0[6][code].num;
  1265.         }
  1266.         else
  1267.         {
  1268.             code = eg_show(t->bs, 4);
  1269.             if (code > 0)
  1270.             {
  1271.                 run_before = run_before_table_1[code];
  1272.                 eg_read_skip(t->bs, run_before - 6);
  1273.             }
  1274.             else
  1275.             {
  1276.                 eg_read_skip(t->bs, 4);
  1277.                 code = eg_show(t->bs, 4);
  1278.                 run_before = run_before_table_2[code];
  1279.                 eg_read_skip(t->bs, run_before - 10);
  1280.             }
  1281.         }
  1282.     }
  1283.     assert(run_before >= 0 && run_before <= 14);
  1284.     return run_before;
  1285. }
  1286. void
  1287. T264dec_mb_read_cavlc_residual(T264_t* t, int32_t idx, int16_t* z, int32_t count)
  1288. {
  1289.     uint8_t trailing_ones, total_coeff;
  1290.     int32_t i, j;
  1291.     int32_t zero_left = 0;
  1292.     int16_t level[16];
  1293.     uint8_t run[16];
  1294.     int32_t x, y;
  1295.     if(idx == BLOCK_INDEX_CHROMA_DC)
  1296.     {
  1297.         T264dec_mb_read_coff_token_t4(t, &trailing_ones, &total_coeff);
  1298.     }
  1299.     else
  1300.     {
  1301.         /* T264_mb_predict_non_zero_code return 0 <-> (16+16+1)>>1 = 16 */
  1302.         int32_t nC = 0;
  1303.         typedef void (*T264dec_mb_read_coff_token_t)(T264_t* t, uint8_t* trailing_ones, uint8_t* total_coff);
  1304.         static const T264dec_mb_read_coff_token_t read_coeff[17] = 
  1305.         {
  1306.             T264dec_mb_read_coff_token_t0, T264dec_mb_read_coff_token_t0,
  1307.             T264dec_mb_read_coff_token_t1, T264dec_mb_read_coff_token_t1,
  1308.             T264dec_mb_read_coff_token_t2, T264dec_mb_read_coff_token_t2,
  1309.             T264dec_mb_read_coff_token_t2, T264dec_mb_read_coff_token_t2,
  1310.             T264dec_mb_read_coff_token_t3, T264dec_mb_read_coff_token_t3,
  1311.             T264dec_mb_read_coff_token_t3, T264dec_mb_read_coff_token_t3,
  1312.             T264dec_mb_read_coff_token_t3, T264dec_mb_read_coff_token_t3,
  1313.             T264dec_mb_read_coff_token_t3, T264dec_mb_read_coff_token_t3,
  1314.             T264dec_mb_read_coff_token_t3
  1315.         };
  1316.         if(idx == BLOCK_INDEX_LUMA_DC)
  1317.         {
  1318.             // predict nC = (nA + nB) / 2;
  1319.             nC = T264_mb_predict_non_zero_code(t, 0);
  1320.             read_coeff[nC](t, &trailing_ones, &total_coeff);
  1321.         }
  1322.         else
  1323.         {
  1324.             // predict nC = (nA + nB) / 2;
  1325.             nC = T264_mb_predict_non_zero_code(t, idx);
  1326.             read_coeff[nC](t, &trailing_ones, &total_coeff);
  1327.             assert(total_coeff != 255);
  1328.             assert(trailing_ones != 255);
  1329.             if (idx < 16)
  1330.             {
  1331.                 x = luma_inverse_x[idx];
  1332.                 y = luma_inverse_y[idx];
  1333.                 t->mb.nnz[luma_index[idx]] = total_coeff;
  1334.                 t->mb.nnz_ref[NNZ_LUMA + y * 8 + x] = total_coeff;
  1335.             }
  1336.             else if (idx < 20)
  1337.             {
  1338.                 t->mb.nnz[idx] = total_coeff;
  1339.                 x = (idx - 16) % 2;
  1340.                 y = (idx - 16) / 2;
  1341.                 t->mb.nnz_ref[NNZ_CHROMA0 + y * 8 + x] = total_coeff;
  1342.             }
  1343.             else
  1344.             {
  1345.                 t->mb.nnz[idx] = total_coeff;
  1346.                 x = (idx - 20) % 2;
  1347.                 y = (idx - 20) / 2;
  1348.                 t->mb.nnz_ref[NNZ_CHROMA1 + y * 8 + x] = total_coeff;
  1349.             }
  1350.         }
  1351.     }
  1352.     if (total_coeff > 0)
  1353.     {
  1354.         uint8_t suffix_length = 0;
  1355.         int32_t level_code;
  1356.         if (total_coeff > 10 && trailing_ones < 3)
  1357.             suffix_length = 1;
  1358.         for(i = 0 ; i < trailing_ones ; i ++)
  1359.         {
  1360.             level[i] = 1 - 2 * eg_read_direct1(t->bs);
  1361.         }
  1362.         for( ; i < total_coeff ; i ++)
  1363.         {
  1364.             uint32_t level_suffixsize;
  1365.             uint32_t level_suffix;
  1366.             uint8_t level_prefix = T264dec_mb_read_level_prefix(t);
  1367.             level_suffixsize = suffix_length;
  1368.             if (suffix_length == 0 && level_prefix == 14)
  1369.                 level_suffixsize = 4;
  1370.             else if (level_prefix == 15)
  1371.                 level_suffixsize = 12;
  1372.             if (level_suffixsize > 0)
  1373.                 level_suffix = eg_read_direct(t->bs, level_suffixsize);
  1374.             else
  1375.                 level_suffix = 0;
  1376.             level_code = (level_prefix << suffix_length) + level_suffix;
  1377.             if (level_prefix == 15 && suffix_length == 0)
  1378.             {
  1379.                 level_code += 15;
  1380.             }
  1381.             if (i == trailing_ones && trailing_ones < 3)
  1382.             {
  1383.                 level_code += 2;
  1384.             }
  1385.             if (level_code % 2 == 0)
  1386.             {
  1387.                 level[i] = (level_code + 2) >> 1;
  1388.             }
  1389.             else
  1390.             {
  1391.                 level[i] = (-level_code - 1) >> 1;
  1392.             }
  1393.             if (suffix_length == 0)
  1394.                 suffix_length = 1;
  1395.             if (ABS(level[i]) > (3 << (suffix_length - 1)) &&
  1396.                 suffix_length < 6)
  1397.             {
  1398.                 suffix_length ++;
  1399.             }
  1400.         }
  1401.         if (total_coeff < count)
  1402.         {
  1403.             typedef uint8_t (*T264dec_mb_read_total_zero_t)(T264_t* t);
  1404.             static T264dec_mb_read_total_zero_t total_zero_f[] =
  1405.             {
  1406.                 T264dec_mb_read_total_zero1, T264dec_mb_read_total_zero2, T264dec_mb_read_total_zero3, T264dec_mb_read_total_zero4,
  1407.                 T264dec_mb_read_total_zero5, T264dec_mb_read_total_zero6, T264dec_mb_read_total_zero7, T264dec_mb_read_total_zero8,
  1408.                 T264dec_mb_read_total_zero9, T264dec_mb_read_total_zero10, T264dec_mb_read_total_zero11, T264dec_mb_read_total_zero12,
  1409.                 T264dec_mb_read_total_zero13, T264dec_mb_read_total_zero14, T264dec_mb_read_total_zero15
  1410.             };
  1411.             if(idx != BLOCK_INDEX_CHROMA_DC)
  1412.                 zero_left = total_zero_f[total_coeff - 1](t);
  1413.             else
  1414.                 zero_left = T264dec_mb_read_total_zero_chroma(t, total_coeff);
  1415.         }
  1416.         for(i = 0 ; i < total_coeff - 1 ; i ++)
  1417.         {
  1418.             if (zero_left > 0)
  1419.             {
  1420.                 run[i] = T264dec_mb_read_run_before(t, zero_left);
  1421.             }
  1422.             else
  1423.             {
  1424.                 run[i] = 0;
  1425.             }
  1426.             zero_left -= run[i];
  1427.         }
  1428.         run[total_coeff - 1] = zero_left;
  1429.         j = -1;
  1430.         for(i = total_coeff - 1 ; i >= 0 ; i --)
  1431.         {
  1432.             j +=run[i] + 1;
  1433.             z[j] = level[i];
  1434.         }
  1435.     }
  1436. }
  1437. static void __inline
  1438. T264dec_mb_read_intra_cavlc(T264_t* t)
  1439. {
  1440.     int32_t i;
  1441.     if (t->mb.mb_part == I_4x4)
  1442.     {
  1443.         int32_t cbp;
  1444.         T264_mb_read_cavlc_i4x4_mode(t);
  1445.         t->mb.mb_mode_uv = eg_read_ue(t->bs);
  1446.         assert(t->mb.mb_mode_uv <= Intra_8x8_DC128);
  1447.         cbp = i4x4_eg_to_cbp[eg_read_ue(t->bs)];
  1448.         t->mb.cbp_y = cbp % 16;
  1449.         t->mb.cbp_c = cbp / 16;
  1450.         if (cbp > 0)
  1451.         {
  1452.             t->mb.mb_qp_delta = eg_read_se(t->bs);
  1453.             for(i = 0 ; i < 16 ; i ++)
  1454.             {
  1455.                 if (t->mb.cbp_y & (1 << (i / 4)))
  1456.                 {
  1457.                     T264dec_mb_read_cavlc_residual(t, i, t->mb.dct_y_z[i], 16);
  1458.                 }
  1459.             }
  1460.         }
  1461.         t->mb.mb_mode = I_4x4;
  1462.     }
  1463.     else
  1464.     {
  1465.         t->mb.mode_i16x16 = i16x16_eg_to_cbp[t->mb.mb_part][0];
  1466.         t->mb.cbp_y = i16x16_eg_to_cbp[t->mb.mb_part][2];
  1467.         t->mb.cbp_c = i16x16_eg_to_cbp[t->mb.mb_part][1];
  1468.         t->mb.mb_mode_uv = eg_read_ue(t->bs);
  1469.         assert(t->mb.mb_mode_uv <= Intra_8x8_DC128);
  1470.         t->mb.mb_qp_delta = eg_read_se(t->bs);
  1471.         // dc luma
  1472.         T264dec_mb_read_cavlc_residual(t, BLOCK_INDEX_LUMA_DC, t->mb.dc4x4_z, 16);
  1473.         if (t->mb.cbp_y != 0)
  1474.         {
  1475.             for(i = 0 ; i < 16 ; i ++)
  1476.             {
  1477.                 if (t->mb.cbp_y & (1 << (i / 4)))
  1478.                 {
  1479.                     T264dec_mb_read_cavlc_residual(t, i, &(t->mb.dct_y_z[i][1]), 15);
  1480.                 }
  1481.                 t->mb.dct_y_z[i][0] = t->mb.dc4x4_z[i];
  1482.             }
  1483.         }
  1484.         t->mb.mb_mode = I_16x16;
  1485.     }
  1486. }
  1487. void __inline
  1488. mb_get_directMB16x16_mv(T264_t* t)
  1489. {
  1490.     T264_get_direct_mv(t, t->mb.vec);
  1491. }
  1492. void
  1493. T264dec_mb_read_cavlc(T264_t* t)
  1494. {
  1495.     int32_t mb_type;
  1496.     int32_t i, j;
  1497.     if (t->slice_type != SLICE_I)
  1498.     {
  1499.         if (t->skip == -1)
  1500.         {
  1501.             t->skip = eg_read_ue(t->bs);
  1502.         }
  1503.         if (t->skip -- > 0)
  1504.         {
  1505.             /* skip mb block, return */
  1506.             if (t->slice_type == SLICE_P)
  1507.             {
  1508.                 T264_predict_mv_skip(t, 0, &t->mb.vec[0][0]);
  1509.                 copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 4, 4);
  1510.                 t->mb.mb_mode = P_MODE;     /* decode as MB_16x16 */
  1511.                 t->mb.mb_part = MB_16x16;
  1512.                 return;
  1513.             }
  1514.             else if (t->slice_type == SLICE_B)
  1515.             {
  1516. T264_get_direct_mv(t,t->mb.vec);
  1517.                 t->mb.mb_mode = B_MODE;     /* decode as MB_16x16 */                
  1518.                 t->mb.mb_part = MB_16x16;
  1519.                 t->mb.is_copy = 1;
  1520.                 return;                
  1521.             }
  1522.             else
  1523.             {
  1524.                 assert(0);
  1525.             }
  1526.         }
  1527.     }
  1528.     mb_type = eg_read_ue(t->bs);
  1529.     if (t->slice_type == SLICE_P)
  1530.     {
  1531.         T264_vector_t vec, vec1;
  1532.         t->mb.mb_part = mb_type;
  1533.         mb_type = -1;   /* ugly way: prevent break to i slice code */
  1534.         vec.refno = 0;
  1535.         vec1.refno = 0;
  1536.         t->mb.mb_mode = P_MODE;
  1537.         switch (t->mb.mb_part) 
  1538.         {
  1539.         case MB_16x16:
  1540.             if (t->refl0_num - 1 > 0)
  1541.             {
  1542.                 vec.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1543.             }
  1544.             T264_predict_mv(t, 0, 0, 4, &vec);
  1545.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vec.x;
  1546.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vec.y;
  1547.             t->mb.vec[0][0].refno = vec.refno;
  1548.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 4, 4);
  1549.             break;
  1550.         case MB_16x8:
  1551.             if (t->refl0_num - 1 > 0)
  1552.             {
  1553.                 vec.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1554.                 vec1.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1555.             }
  1556.             T264_predict_mv(t, 0, 0, 4, &vec);
  1557.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vec.x;
  1558.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vec.y;
  1559.             t->mb.vec[0][0].refno = vec.refno;
  1560.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);
  1561.             t->mb.vec_ref[VEC_LUMA + 8].vec[0] = t->mb.vec[0][0];
  1562.             T264_predict_mv(t, 0, 8, 4, &vec1);
  1563.             t->mb.vec[0][8].x = eg_read_se(t->bs) + vec1.x;
  1564.             t->mb.vec[0][8].y = eg_read_se(t->bs) + vec1.y;
  1565.             t->mb.vec[0][8].refno = vec1.refno;
  1566.             copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);
  1567.             break;
  1568.         case MB_8x16:
  1569.             if (t->refl0_num - 1 > 0)
  1570.             {
  1571.                 vec.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1572.                 vec1.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1573.             }
  1574.             T264_predict_mv(t, 0, 0, 2, &vec);
  1575.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vec.x;
  1576.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vec.y;
  1577.             t->mb.vec[0][0].refno = vec.refno;
  1578.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 2, 4, 4);
  1579.             t->mb.vec_ref[VEC_LUMA + 1].vec[0] = t->mb.vec[0][0];
  1580.             T264_predict_mv(t, 0, luma_index[4], 2, &vec1);
  1581.             t->mb.vec[0][luma_index[4]].x = eg_read_se(t->bs) + vec1.x;
  1582.             t->mb.vec[0][luma_index[4]].y = eg_read_se(t->bs) + vec1.y;
  1583.             t->mb.vec[0][luma_index[4]].refno = vec1.refno;
  1584.             copy_nvec(&t->mb.vec[0][2], &t->mb.vec[0][2], 2, 4, 4);
  1585.             break;
  1586.         case MB_8x8:
  1587.         case MB_8x8ref0:
  1588.             t->mb.submb_part[luma_index[4 * 0]] = eg_read_ue(t->bs);
  1589.             t->mb.submb_part[luma_index[4 * 1]] = eg_read_ue(t->bs);
  1590.             t->mb.submb_part[luma_index[4 * 2]] = eg_read_ue(t->bs);
  1591.             t->mb.submb_part[luma_index[4 * 3]] = eg_read_ue(t->bs);
  1592.             if (t->mb.mb_part != MB_8x8ref0 && t->refl0_num - 1 > 0)
  1593.             {
  1594.                 t->mb.vec[0][0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  1595.                 t->mb.vec[0][luma_index[4]].refno = eg_read_te(t->bs, t->refl0_num - 1);
  1596.                 t->mb.vec[0][luma_index[8]].refno = eg_read_te(t->bs, t->refl0_num - 1);
  1597.                 t->mb.vec[0][luma_index[12]].refno = eg_read_te(t->bs, t->refl0_num - 1);
  1598.             }
  1599.             else
  1600.             {
  1601.                 t->mb.vec[0][0].refno = 0;
  1602.                 t->mb.vec[0][luma_index[4]].refno = 0;
  1603.                 t->mb.vec[0][luma_index[8]].refno = 0;
  1604.                 t->mb.vec[0][luma_index[12]].refno = 0;
  1605.             }
  1606.             for(i = 0 ; i < 4 ; i ++)
  1607.             {
  1608.                 switch(t->mb.submb_part[luma_index[4 * i]]) 
  1609.                 {
  1610.                 case 0: /* P_L0_8x8 */
  1611.                     t->mb.submb_part[luma_index[4 * i]] = MB_8x8;
  1612.                     vec = t->mb.vec[0][luma_index[4 * i]];
  1613.                     T264_predict_mv(t, 0, luma_index[4 * i], 2, &vec);
  1614.                     t->mb.vec[0][luma_index[4 * i]].x = eg_read_se(t->bs) + vec.x;
  1615.                     t->mb.vec[0][luma_index[4 * i]].y = eg_read_se(t->bs) + vec.y;
  1616.                     t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 1] = 
  1617.                     t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 4] = 
  1618.                     t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 5] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 0];
  1619.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[0] =
  1620.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[0] =
  1621.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[0] =
  1622.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[0] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 0];
  1623.                     break;
  1624.                 case MB_8x4 - 4:    /* P_L0_8x4 */
  1625.                     t->mb.submb_part[luma_index[4 * i]] = MB_8x4;
  1626.                     vec.refno = t->mb.vec[0][luma_index[4 * i]].refno;
  1627.                     T264_predict_mv(t, 0, luma_index[4 * i], 2, &vec);
  1628.                     t->mb.vec[0][luma_index[4 * i]].x = eg_read_se(t->bs) + vec.x;
  1629.                     t->mb.vec[0][luma_index[4 * i]].y = eg_read_se(t->bs) + vec.y;
  1630.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[0] =
  1631.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[0] =
  1632.                     t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 1] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 0];
  1633.                     T264_predict_mv(t, 0, luma_index[4 * i + 2], 2, &vec);
  1634.                     t->mb.vec[0][luma_index[4 * i + 2]].x = eg_read_se(t->bs) + vec.x;
  1635.                     t->mb.vec[0][luma_index[4 * i + 2]].y = eg_read_se(t->bs) + vec.y;
  1636.                     t->mb.vec[0][luma_index[4 * i + 2]].refno = vec.refno;
  1637.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[0] =
  1638.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[0] = 
  1639.                     t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 5] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 4];
  1640.                     break;
  1641.                 case MB_4x8 - 4:    /* P_L0_4x8 */
  1642.                     t->mb.submb_part[luma_index[4 * i]] = MB_4x8;
  1643.                     vec.refno = t->mb.vec[0][luma_index[4 * i]].refno;
  1644.                     T264_predict_mv(t, 0, luma_index[4 * i], 1, &vec);
  1645.                     t->mb.vec[0][luma_index[4 * i]].x = eg_read_se(t->bs) + vec.x;
  1646.                     t->mb.vec[0][luma_index[4 * i]].y = eg_read_se(t->bs) + vec.y;
  1647.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[0] =
  1648.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[0] =
  1649.                     t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 4] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 0];
  1650.                     T264_predict_mv(t, 0, luma_index[4 * i + 1], 1, &vec);
  1651.                     t->mb.vec[0][luma_index[4 * i + 1]].x = eg_read_se(t->bs) + vec.x;
  1652.                     t->mb.vec[0][luma_index[4 * i + 1]].y = eg_read_se(t->bs) + vec.y;
  1653.                     t->mb.vec[0][luma_index[4 * i + 1]].refno = vec.refno;
  1654.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[0] =
  1655.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[0] =
  1656.                     t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 5] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 1];
  1657.                     break;
  1658.                 case MB_4x4 - 4:        /* P_L0_4x4 */
  1659.                     t->mb.submb_part[luma_index[4 * i]] = MB_4x4;
  1660.                     vec = t->mb.vec[0][luma_index[4 * i]];
  1661.                     T264_predict_mv(t, 0, luma_index[4 * i], 1, &vec);
  1662.                     t->mb.vec[0][luma_index[4 * i]].x = eg_read_se(t->bs) + vec.x;
  1663.                     t->mb.vec[0][luma_index[4 * i]].y = eg_read_se(t->bs) + vec.y;
  1664.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[0] = t->mb.vec[0][luma_index[4 * i]];
  1665.                     T264_predict_mv(t, 0, luma_index[4 * i + 1], 1, &vec);
  1666.                     t->mb.vec[0][luma_index[4 * i + 1]].x = eg_read_se(t->bs) + vec.x;
  1667.                     t->mb.vec[0][luma_index[4 * i + 1]].y = eg_read_se(t->bs) + vec.y;
  1668.                     t->mb.vec[0][luma_index[4 * i + 1]].refno = vec.refno;
  1669.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[0] = t->mb.vec[0][luma_index[4 * i + 1]];
  1670.                     T264_predict_mv(t, 0, luma_index[4 * i + 2], 1, &vec);
  1671.                     t->mb.vec[0][luma_index[4 * i + 2]].x = eg_read_se(t->bs) + vec.x;
  1672.                     t->mb.vec[0][luma_index[4 * i + 2]].y = eg_read_se(t->bs) + vec.y;
  1673.                     t->mb.vec[0][luma_index[4 * i + 2]].refno = vec.refno;
  1674.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[0] = t->mb.vec[0][luma_index[4 * i + 2]];
  1675.                     T264_predict_mv(t, 0, luma_index[4 * i + 3], 1, &vec);
  1676.                     t->mb.vec[0][luma_index[4 * i + 3]].x = eg_read_se(t->bs) + vec.x;
  1677.                     t->mb.vec[0][luma_index[4 * i + 3]].y = eg_read_se(t->bs) + vec.y;
  1678.                     t->mb.vec[0][luma_index[4 * i + 3]].refno = vec.refno;
  1679.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[0] = t->mb.vec[0][luma_index[4 * i + 3]];
  1680.                     break;
  1681.                 }
  1682.             }
  1683.             break;
  1684.         default:
  1685.             t->mb.mb_part -= 5;
  1686.             T264dec_mb_read_intra_cavlc(t);
  1687.             /* save ref */
  1688.             memset(t->mb.submb_part, -1, sizeof(t->mb.submb_part));
  1689.             t->mb.mb_part = -1;
  1690.             for(i = 0 ; i < 2 ; i ++)
  1691.             {
  1692.                 for(j = 0 ; j < 16 ; j ++)
  1693.                 {
  1694.                     INITINVALIDVEC(t->mb.vec[i][j]);
  1695.                 }
  1696.             }
  1697.             break;
  1698.         }
  1699.        INITINVALIDVEC(t->mb.vec[1][0]);
  1700.        copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 4, 4);
  1701.     }
  1702.     else if (t->slice_type == SLICE_B)
  1703.     {
  1704.         T264_vector_t vecPred0, vecPred1;
  1705. T264_vector_t vec1[2]; //save the mv info of second Partition
  1706.         vecPred0.refno = 0; //default reference index
  1707.         vecPred1.refno = 0;
  1708. vec1[0].refno = vec1[1].refno = 0;
  1709. t->mb.mb_part = mb_type;
  1710.         t->mb.mb_mode = B_MODE;
  1711. t->mb.mb_part2[0] = mb_type;
  1712. t->mb.mb_part2[1] = mb_type;
  1713.         switch (mb_type) 
  1714.         {
  1715.         case 0: //B_Direct_16x16
  1716.             mb_get_directMB16x16_mv(t);
  1717. t->mb.mb_part = MB_16x16;
  1718.             t->mb.is_copy = 1;
  1719. break;
  1720.         case 1: //B_L0_16x16
  1721. t->mb.mb_part = MB_16x16;
  1722.             if (t->refl0_num - 1 > 0)
  1723.             {
  1724.                 vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1725.             }
  1726.             T264_predict_mv(t, 0, 0, 4, &vecPred0);
  1727.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  1728.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  1729.             t->mb.vec[0][0].refno = vecPred0.refno;
  1730.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 4, 4);
  1731.             INITINVALIDVEC(t->mb.vec[1][0]);
  1732.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 4, 4);
  1733.             break;
  1734.         case 2: //B_L1_16x16
  1735. t->mb.mb_part = MB_16x16;
  1736. if (t->refl1_num - 1 > 0)
  1737.             {
  1738.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  1739.             }
  1740.             T264_predict_mv(t, 1, 0, 4, &vecPred1);
  1741.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  1742.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  1743.             t->mb.vec[1][0].refno = vecPred1.refno;
  1744.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 4, 4);
  1745.             INITINVALIDVEC(t->mb.vec[0][0]);
  1746.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 4, 4);
  1747.             break;
  1748.         case 3: //B_Bi_16x16
  1749. t->mb.mb_part = MB_16x16;
  1750.             if (t->refl0_num - 1 > 0)
  1751.             {
  1752.                 vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1753.             }
  1754. if (t->refl1_num - 1 > 0)
  1755.             {
  1756.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  1757.             }
  1758.             T264_predict_mv(t, 0, 0, 4, &vecPred0);
  1759.             T264_predict_mv(t, 1, 0, 4, &vecPred1);
  1760.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  1761.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  1762.             t->mb.vec[0][0].refno = vecPred0.refno;
  1763.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  1764.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  1765.             t->mb.vec[1][0].refno = vecPred1.refno;
  1766.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 4, 4);
  1767.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 4, 4);
  1768.             break;
  1769. case 4: //B_L0_L0_16x8
  1770. t->mb.mb_part = MB_16x8;
  1771.             if (t->refl0_num - 1 > 0)
  1772.             {
  1773.                 vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1774.                 vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  1775.             }
  1776.             T264_predict_mv(t, 0, 0, 4, &vecPred0);
  1777.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  1778.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  1779.             t->mb.vec[0][0].refno = vecPred0.refno;
  1780.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);
  1781.             t->mb.vec_ref[VEC_LUMA + 8].vec[0] = t->mb.vec[0][0];
  1782.             T264_predict_mv(t, 0, 8, 4, &vec1[0]);
  1783.             t->mb.vec[0][8].x = eg_read_se(t->bs) + vec1[0].x;
  1784.             t->mb.vec[0][8].y = eg_read_se(t->bs) + vec1[0].y;
  1785.             t->mb.vec[0][8].refno = vec1[0].refno;
  1786.             copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);
  1787.             INITINVALIDVEC(t->mb.vec[1][0]);
  1788.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 4, 4);
  1789. break;
  1790.         case 5: //B_L0_L0_8x16
  1791. t->mb.mb_part = MB_8x16;
  1792.             if (t->refl0_num - 1 > 0)
  1793.             {
  1794.                 vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1795.                 vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  1796.             }
  1797.             T264_predict_mv(t, 0, 0, 2, &vecPred0);
  1798.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  1799.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  1800.             t->mb.vec[0][0].refno = vecPred0.refno;
  1801.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 2, 4, 4);
  1802.             t->mb.vec_ref[VEC_LUMA + 1].vec[0] = t->mb.vec[0][0];
  1803.             T264_predict_mv(t, 0, luma_index[4], 2, &vec1[0]);
  1804.             t->mb.vec[0][luma_index[4]].x = eg_read_se(t->bs) + vec1[0].x;
  1805.             t->mb.vec[0][luma_index[4]].y = eg_read_se(t->bs) + vec1[0].y;
  1806.             t->mb.vec[0][luma_index[4]].refno = vec1[0].refno;
  1807.             copy_nvec(&t->mb.vec[0][2], &t->mb.vec[0][2], 2, 4, 4);
  1808. INITINVALIDVEC(t->mb.vec[1][0]);
  1809.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 4, 4);
  1810.             break;
  1811. case 6: //B_L1_L1_16x8
  1812. t->mb.mb_part = MB_16x8;
  1813.             if (t->refl1_num - 1 > 0)
  1814.             {
  1815.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  1816.                 vec1[1].refno = eg_read_te(t->bs, t->refl1_num - 1);
  1817.             }
  1818.             T264_predict_mv(t, 1, 0, 4, &vecPred1);
  1819.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  1820.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  1821.             t->mb.vec[1][0].refno = vecPred1.refno;
  1822.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 2, 4);
  1823.             t->mb.vec_ref[VEC_LUMA + 8].vec[1] = t->mb.vec[1][0];
  1824.             T264_predict_mv(t, 1, 8, 4, &vec1[1]);
  1825.             t->mb.vec[1][8].x = eg_read_se(t->bs) + vec1[1].x;
  1826.             t->mb.vec[1][8].y = eg_read_se(t->bs) + vec1[1].y;
  1827.             t->mb.vec[1][8].refno = vec1[1].refno;
  1828.             copy_nvec(&t->mb.vec[1][8], &t->mb.vec[1][8], 4, 2, 4);
  1829.             INITINVALIDVEC(t->mb.vec[0][0]);
  1830.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 4, 4);
  1831. break;
  1832.         case 7: //B_L1_L1_8x16
  1833. t->mb.mb_part = MB_8x16;
  1834.             if (t->refl1_num - 1 > 0)
  1835.             {
  1836.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  1837.                 vec1[1].refno = eg_read_te(t->bs, t->refl1_num - 1);
  1838.             }
  1839.             T264_predict_mv(t, 1, 0, 2, &vecPred1);
  1840.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  1841.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  1842.             t->mb.vec[1][0].refno = vecPred1.refno;
  1843.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 2, 4, 4);
  1844.             t->mb.vec_ref[VEC_LUMA + 1].vec[1] = t->mb.vec[1][0];
  1845.             T264_predict_mv(t, 1, luma_index[4], 2, &vec1[1]);
  1846.             t->mb.vec[1][luma_index[4]].x = eg_read_se(t->bs) + vec1[1].x;
  1847.             t->mb.vec[1][luma_index[4]].y = eg_read_se(t->bs) + vec1[1].y;
  1848.             t->mb.vec[1][luma_index[4]].refno = vec1[1].refno;
  1849.             copy_nvec(&t->mb.vec[1][2], &t->mb.vec[1][2], 2, 4, 4);
  1850. INITINVALIDVEC(t->mb.vec[0][0]);
  1851.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 4, 4);
  1852.             break;
  1853. case 8://B_L0_L1_16x8
  1854. t->mb.mb_part = MB_16x8;
  1855. if (t->refl0_num - 1 > 0)
  1856.             {
  1857.                 vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1858.             }
  1859. if (t->refl1_num - 1 > 0)
  1860.             {
  1861.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  1862.             }
  1863.             T264_predict_mv(t, 0, 0, 4, &vecPred0);
  1864.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  1865.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  1866.             t->mb.vec[0][0].refno = vecPred0.refno;
  1867.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);
  1868.             INITINVALIDVEC(t->mb.vec[0][8]);
  1869.             copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);
  1870.             INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 8].vec[1]);
  1871.             INITINVALIDVEC(t->mb.vec[1][0]);
  1872.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 2, 4);
  1873.             T264_predict_mv(t, 1, 8, 4, &vecPred1);
  1874.             t->mb.vec[1][8].x = eg_read_se(t->bs) + vecPred1.x;
  1875.             t->mb.vec[1][8].y = eg_read_se(t->bs) + vecPred1.y;
  1876.             t->mb.vec[1][8].refno = vecPred1.refno;
  1877.             copy_nvec(&t->mb.vec[1][8], &t->mb.vec[1][8], 4, 2, 4);
  1878. break;
  1879.         case 9: //B_L0_L1_8x16
  1880. t->mb.mb_part = MB_8x16;
  1881.             if (t->refl0_num - 1 > 0)
  1882.             {
  1883.                 vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1884.             }
  1885. if (t->refl1_num - 1 > 0)
  1886.             {
  1887.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  1888.             }
  1889.             T264_predict_mv(t, 0, 0, 2, &vecPred0);
  1890.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  1891.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  1892.             t->mb.vec[0][0].refno = vecPred0.refno;
  1893.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 2, 4, 4);
  1894. INITINVALIDVEC(t->mb.vec[0][2]);
  1895.             copy_nvec(&t->mb.vec[0][2], &t->mb.vec[0][2], 2, 4, 4);
  1896. INITINVALIDVEC(t->mb.vec[1][0]);
  1897.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 2, 4, 4);
  1898. INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 1].vec[1]);
  1899.             T264_predict_mv(t, 1, luma_index[4], 2, &vecPred1);
  1900.             t->mb.vec[1][luma_index[4]].x = eg_read_se(t->bs) + vecPred1.x;
  1901.             t->mb.vec[1][luma_index[4]].y = eg_read_se(t->bs) + vecPred1.y;
  1902.             t->mb.vec[1][luma_index[4]].refno = vecPred1.refno;
  1903.             copy_nvec(&t->mb.vec[1][2], &t->mb.vec[1][2], 2, 4, 4);
  1904.             break;
  1905. case 10: //B_L1_L0_16x8:
  1906. t->mb.mb_part = MB_16x8;
  1907. if (t->refl0_num - 1 > 0)
  1908.             {
  1909.                 vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  1910.             }
  1911. if (t->refl1_num - 1 > 0)
  1912.             {
  1913.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  1914.             }
  1915.             INITINVALIDVEC(t->mb.vec[0][0]);
  1916.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);
  1917. INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 8].vec[0]);
  1918.             T264_predict_mv(t, 0, 8, 4, &vec1[0]);
  1919.             t->mb.vec[0][8].x = eg_read_se(t->bs) + vec1[0].x;
  1920.             t->mb.vec[0][8].y = eg_read_se(t->bs) + vec1[0].y;
  1921.             t->mb.vec[0][8].refno = vecPred1.refno;
  1922.             copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);
  1923.             T264_predict_mv(t, 1, 0, 4, &vecPred1);
  1924.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  1925.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  1926.             t->mb.vec[1][0].refno = vecPred1.refno;
  1927.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 2, 4);
  1928.             INITINVALIDVEC(t->mb.vec[1][8]);
  1929.             copy_nvec(&t->mb.vec[1][8], &t->mb.vec[1][8], 4, 2, 4);
  1930. break;
  1931. case 11://B_L1_L0_8x16
  1932. t->mb.mb_part = MB_8x16;
  1933. if (t->refl0_num - 1 > 0)
  1934.             {
  1935.                 vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  1936.             }
  1937. if (t->refl1_num - 1 > 0)
  1938.             {
  1939.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  1940.             }
  1941. INITINVALIDVEC(t->mb.vec[0][0]);
  1942.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 2, 4, 4);            
  1943. INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 1].vec[0]);
  1944. T264_predict_mv(t, 0, luma_index[4], 2, &vec1[0]);
  1945.             t->mb.vec[0][luma_index[4]].x = eg_read_se(t->bs) + vec1[0].x;
  1946.             t->mb.vec[0][luma_index[4]].y = eg_read_se(t->bs) + vec1[0].y;
  1947.             t->mb.vec[0][luma_index[4]].refno = vec1[0].refno;
  1948.             copy_nvec(&t->mb.vec[0][2], &t->mb.vec[0][2], 2, 4, 4);
  1949.             T264_predict_mv(t, 1, 0, 2, &vecPred1);
  1950.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  1951.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  1952.             t->mb.vec[1][0].refno = vecPred1.refno;
  1953.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 2, 4, 4);
  1954. INITINVALIDVEC(t->mb.vec[1][2]);
  1955.             copy_nvec(&t->mb.vec[1][2], &t->mb.vec[1][2], 2, 4, 4);
  1956.             break;
  1957. case 12: //B_L0_Bi_16x8
  1958. t->mb.mb_part = MB_16x8;
  1959. if (t->refl0_num - 1 > 0)
  1960.             {
  1961.                 vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1962. vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  1963.             }
  1964. if (t->refl1_num - 1 > 0)
  1965.             {
  1966.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  1967.             }
  1968.             T264_predict_mv(t, 0, 0, 4, &vecPred0);
  1969.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  1970.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  1971.             t->mb.vec[0][0].refno = vecPred0.refno;
  1972.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);
  1973.             t->mb.vec_ref[VEC_LUMA + 8].vec[0] = t->mb.vec[0][0];
  1974.             T264_predict_mv(t, 0, 8, 4, &vec1[0]);
  1975. t->mb.vec[0][8].x = eg_read_se(t->bs) + vec1[0].x;
  1976.             t->mb.vec[0][8].y = eg_read_se(t->bs) + vec1[0].y;
  1977.             t->mb.vec[0][8].refno = vec1[0].refno;
  1978.             copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);
  1979.             INITINVALIDVEC(t->mb.vec[1][0]);
  1980.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 2, 4);
  1981. INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 8].vec[1]);
  1982.             T264_predict_mv(t, 1, 8, 4, &vecPred1);
  1983.             t->mb.vec[1][8].x = eg_read_se(t->bs) + vecPred1.x;
  1984.             t->mb.vec[1][8].y = eg_read_se(t->bs) + vecPred1.y;
  1985.             t->mb.vec[1][8].refno = vecPred1.refno;
  1986.             copy_nvec(&t->mb.vec[1][8], &t->mb.vec[1][8], 4, 2, 4);
  1987. break;
  1988. case 13://B_L0_Bi_8x16
  1989. t->mb.mb_part = MB_8x16;
  1990. if (t->refl0_num - 1 > 0)
  1991.             {
  1992.                 vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
  1993. vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  1994.             }
  1995. if (t->refl1_num - 1 > 0)
  1996.             {
  1997.                 vec1[1].refno = eg_read_te(t->bs, t->refl1_num - 1);
  1998.             }
  1999.             T264_predict_mv(t, 0, 0, 2, &vecPred0);
  2000.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  2001.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  2002.             t->mb.vec[0][0].refno = vecPred0.refno;
  2003.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 2, 4, 4);
  2004.             t->mb.vec_ref[VEC_LUMA + 1].vec[0] = t->mb.vec[0][0];
  2005.             T264_predict_mv(t, 0, luma_index[4], 2, &vec1[0]);
  2006.             t->mb.vec[0][luma_index[4]].x = eg_read_se(t->bs) + vec1[0].x;
  2007.             t->mb.vec[0][luma_index[4]].y = eg_read_se(t->bs) + vec1[0].y;
  2008.             t->mb.vec[0][luma_index[4]].refno = vec1[0].refno;
  2009.             copy_nvec(&t->mb.vec[0][2], &t->mb.vec[0][2], 2, 4, 4);
  2010. INITINVALIDVEC(t->mb.vec[1][0]);
  2011.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 2, 4, 4);
  2012. INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 1].vec[1]);
  2013.             T264_predict_mv(t, 1, luma_index[4], 2, &vec1[1]);
  2014.             t->mb.vec[1][luma_index[4]].x = eg_read_se(t->bs) + vec1[1].x;
  2015.             t->mb.vec[1][luma_index[4]].y = eg_read_se(t->bs) + vec1[1].y;
  2016.             t->mb.vec[1][luma_index[4]].refno = vec1[1].refno;
  2017.             copy_nvec(&t->mb.vec[1][2], &t->mb.vec[1][2], 2, 4, 4);
  2018.             break;
  2019. case 14://B_L1_Bi_16x8
  2020. t->mb.mb_part = MB_16x8;
  2021. if (t->refl0_num - 1 > 0)
  2022.             {
  2023. vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  2024.             }
  2025. if (t->refl1_num - 1 > 0)
  2026.             {
  2027.                 vecPred1.refno = eg_read_te(t->bs, t->refl0_num - 1);
  2028.                 vec1[1].refno = eg_read_te(t->bs, t->refl1_num - 1);
  2029.             }
  2030.             INITINVALIDVEC(t->mb.vec[0][0]);
  2031.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);
  2032.             INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 8].vec[0]);
  2033.             T264_predict_mv(t, 0, 8, 4, &vec1[0]);
  2034. t->mb.vec[0][8].x = eg_read_se(t->bs) + vec1[0].x;
  2035.             t->mb.vec[0][8].y = eg_read_se(t->bs) + vec1[0].y;
  2036.             t->mb.vec[0][8].refno = vec1[0].refno;
  2037.             copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);
  2038.             T264_predict_mv(t, 1, 0, 4, &vecPred1);
  2039.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  2040.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  2041.             t->mb.vec[1][0].refno = vecPred1.refno;
  2042.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 2, 4);
  2043.             t->mb.vec_ref[VEC_LUMA + 8].vec[1] = t->mb.vec[1][0];
  2044.             T264_predict_mv(t, 1, 8, 4, &vec1[1]);
  2045.             t->mb.vec[1][8].x = eg_read_se(t->bs) + vec1[1].x;
  2046.             t->mb.vec[1][8].y = eg_read_se(t->bs) + vec1[1].y;
  2047.             t->mb.vec[1][8].refno = vec1[1].refno;
  2048.             copy_nvec(&t->mb.vec[1][8], &t->mb.vec[1][8], 4, 2, 4);
  2049. break;
  2050. case 15: //B_L1_Bi_8x16
  2051. t->mb.mb_part = MB_8x16;
  2052. if (t->refl0_num - 1 > 0)
  2053.             {
  2054.                 vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  2055.             }
  2056. if (t->refl1_num - 1 > 0)
  2057.             {
  2058.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2059.                 vec1[1].refno = eg_read_te(t->bs, t->refl0_num - 1);
  2060.             }
  2061. INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 1].vec[0]);
  2062. INITINVALIDVEC(t->mb.vec[0][0]);
  2063.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 2, 4, 4);
  2064.             T264_predict_mv(t, 0, luma_index[4], 2, &vec1[0]);
  2065.             t->mb.vec[0][luma_index[4]].x = eg_read_se(t->bs) + vec1[0].x;
  2066.             t->mb.vec[0][luma_index[4]].y = eg_read_se(t->bs) + vec1[0].y;
  2067.             t->mb.vec[0][luma_index[4]].refno = vec1[0].refno;
  2068.             copy_nvec(&t->mb.vec[0][2], &t->mb.vec[0][2], 2, 4, 4);
  2069.             T264_predict_mv(t, 1, 0, 2, &vecPred1);
  2070.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  2071.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  2072.             t->mb.vec[1][0].refno = vecPred1.refno;
  2073.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 2, 4, 4);
  2074.             t->mb.vec_ref[VEC_LUMA + 1].vec[1] = t->mb.vec[1][0];
  2075.             T264_predict_mv(t, 1, luma_index[4], 2, &vec1[1]);
  2076.             t->mb.vec[1][luma_index[4]].x = eg_read_se(t->bs) + vec1[1].x;
  2077.             t->mb.vec[1][luma_index[4]].y = eg_read_se(t->bs) + vec1[1].y;
  2078.             t->mb.vec[1][luma_index[4]].refno = vec1[1].refno;
  2079.             copy_nvec(&t->mb.vec[1][2], &t->mb.vec[1][2], 2, 4, 4);
  2080.             break;
  2081. case 16: //B_Bi_L0_16x8
  2082. t->mb.mb_part = MB_16x8;
  2083. if (t->refl0_num - 1 > 0)
  2084.             {
  2085.                 vecPred0.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2086.                 vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  2087.             }
  2088. if (t->refl1_num - 1 > 0)
  2089.             {
  2090.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2091.             }
  2092. T264_predict_mv(t, 0, 0, 4, &vecPred0);
  2093.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  2094.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  2095.             t->mb.vec[0][0].refno = vecPred0.refno;
  2096.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);
  2097.             t->mb.vec_ref[VEC_LUMA + 8].vec[0] = t->mb.vec[0][0];
  2098.             T264_predict_mv(t, 0, 8, 4, &vec1[0]);
  2099.             t->mb.vec[0][8].x = eg_read_se(t->bs) + vec1[0].x;
  2100.             t->mb.vec[0][8].y = eg_read_se(t->bs) + vec1[0].y;
  2101.             t->mb.vec[0][8].refno = vecPred1.refno;
  2102.             copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);
  2103.             T264_predict_mv(t, 1, 0, 4, &vecPred1);
  2104.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  2105.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  2106.             t->mb.vec[1][0].refno = vecPred1.refno;
  2107.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 2, 4);
  2108.             t->mb.vec_ref[VEC_LUMA + 8].vec[1] = t->mb.vec[1][0];
  2109.             INITINVALIDVEC(t->mb.vec[1][8]);
  2110.             copy_nvec(&t->mb.vec[1][8], &t->mb.vec[1][8], 4, 2, 4);
  2111. break;
  2112. case 17: //B_Bi_L0_8x16
  2113. t->mb.mb_part = MB_8x16;
  2114. if (t->refl0_num - 1 > 0)
  2115.             {
  2116.                 vecPred0.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2117.                 vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  2118.             }
  2119. if (t->refl1_num - 1 > 0)
  2120.             {
  2121.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2122.             }
  2123. T264_predict_mv(t, 0, 0, 2, &vecPred0);
  2124.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  2125.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  2126.             t->mb.vec[0][0].refno = vecPred0.refno;
  2127.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 2, 4, 4);
  2128.             t->mb.vec_ref[VEC_LUMA + 1].vec[0] = t->mb.vec[0][0];
  2129. T264_predict_mv(t, 0, 2, 2, &vec1[0]);
  2130.             t->mb.vec[0][2].x = eg_read_se(t->bs) + vec1[0].x;
  2131.             t->mb.vec[0][2].y = eg_read_se(t->bs) + vec1[0].y;
  2132.             t->mb.vec[0][2].refno = vecPred1.refno;
  2133.             copy_nvec(&t->mb.vec[0][2], &t->mb.vec[0][2], 2, 4, 4);
  2134.             T264_predict_mv(t, 1, 0, 2, &vecPred1);
  2135.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  2136.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  2137.             t->mb.vec[1][0].refno = vecPred1.refno;
  2138.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 2, 4, 4);
  2139.             t->mb.vec_ref[VEC_LUMA + 1].vec[1] = t->mb.vec[1][0];
  2140.             INITINVALIDVEC(t->mb.vec[1][2]);
  2141.             copy_nvec(&t->mb.vec[1][2], &t->mb.vec[1][2], 2, 4, 4);
  2142. break;
  2143. case 18://B_Bi_L1_16x8
  2144. t->mb.mb_part = MB_16x8;
  2145. if (t->refl0_num - 1 > 0)
  2146.             {
  2147.                 vecPred0.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2148.             }
  2149. if (t->refl1_num - 1 > 0)
  2150.             {
  2151.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2152.                 vec1[1].refno = eg_read_te(t->bs, t->refl0_num - 1);
  2153.             }
  2154. T264_predict_mv(t, 0, 0, 4, &vecPred0);
  2155.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  2156.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  2157.             t->mb.vec[0][0].refno = vecPred0.refno;
  2158.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);
  2159.             t->mb.vec_ref[VEC_LUMA + 8].vec[0] = t->mb.vec[0][0];
  2160.             T264_predict_mv(t, 1, 0, 4, &vecPred1);
  2161.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  2162.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  2163.             t->mb.vec[1][0].refno = vecPred1.refno;
  2164.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 2, 4);
  2165.             t->mb.vec_ref[VEC_LUMA + 8].vec[1] = t->mb.vec[1][0];
  2166.             T264_predict_mv(t, 1, 8, 4, &vec1[1]);
  2167.             t->mb.vec[1][8].x = eg_read_se(t->bs) + vec1[1].x;
  2168.             t->mb.vec[1][8].y = eg_read_se(t->bs) + vec1[1].y;
  2169.             t->mb.vec[1][8].refno = vecPred1.refno;
  2170.             copy_nvec(&t->mb.vec[1][8], &t->mb.vec[1][8], 4, 2, 4);
  2171.             INITINVALIDVEC(t->mb.vec[0][8]);
  2172.             copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);
  2173. break;
  2174. case 19://B_Bi_L1_8x16
  2175. t->mb.mb_part = MB_8x16;
  2176. if (t->refl0_num - 1 > 0)
  2177.             {
  2178.                 vecPred0.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2179.             }
  2180. if (t->refl1_num - 1 > 0)
  2181.             {
  2182.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2183.                 vec1[1].refno = eg_read_te(t->bs, t->refl0_num - 1);
  2184.             }
  2185. T264_predict_mv(t, 0, 0, 2, &vecPred0);
  2186.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  2187.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  2188.             t->mb.vec[0][0].refno = vecPred0.refno;
  2189.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 2, 4, 4);
  2190.             t->mb.vec_ref[VEC_LUMA + 1].vec[0] = t->mb.vec[0][0];
  2191.             T264_predict_mv(t, 1, 0, 2, &vecPred1);
  2192.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  2193.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  2194.             t->mb.vec[1][0].refno = vecPred1.refno;
  2195.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 2, 4, 4);
  2196.             t->mb.vec_ref[VEC_LUMA + 1].vec[1] = t->mb.vec[1][0];
  2197.             T264_predict_mv(t, 1, luma_index[4], 2, &vec1[1]);
  2198.             t->mb.vec[1][2].x = eg_read_se(t->bs) + vec1[1].x;
  2199.             t->mb.vec[1][2].y = eg_read_se(t->bs) + vec1[1].y;
  2200.             t->mb.vec[1][2].refno = vec1[1].refno;
  2201.             copy_nvec(&t->mb.vec[1][2], &t->mb.vec[1][2], 2, 4, 4);
  2202.             INITINVALIDVEC(t->mb.vec[0][2]);
  2203.             copy_nvec(&t->mb.vec[0][2], &t->mb.vec[0][2], 2, 4, 4);
  2204. break;
  2205. case 20: //B_Bi_Bi_16x8
  2206. t->mb.mb_part = MB_16x8;
  2207. if (t->refl0_num - 1 > 0)
  2208.             {
  2209.                 vecPred0.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2210.                 vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  2211.             }
  2212. if (t->refl1_num - 1 > 0)
  2213.             {
  2214.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2215.                 vec1[1].refno = eg_read_te(t->bs, t->refl0_num - 1);
  2216.             }
  2217. T264_predict_mv(t, 0, 0, 4, &vecPred0);
  2218.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  2219.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  2220.             t->mb.vec[0][0].refno = vecPred0.refno;
  2221.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);
  2222.             t->mb.vec_ref[VEC_LUMA + 8].vec[0] = t->mb.vec[0][0];
  2223.             T264_predict_mv(t, 0, 8, 4, &vec1[0]);
  2224.             t->mb.vec[0][8].x = eg_read_se(t->bs) + vec1[0].x;
  2225.             t->mb.vec[0][8].y = eg_read_se(t->bs) + vec1[0].y;
  2226.             t->mb.vec[0][8].refno = vec1[0].refno;
  2227.             copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);
  2228.             T264_predict_mv(t, 1, 0, 4, &vecPred1);
  2229.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  2230.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  2231.             t->mb.vec[1][0].refno = vecPred1.refno;
  2232.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 2, 4);
  2233.             t->mb.vec_ref[VEC_LUMA + 8].vec[1] = t->mb.vec[1][0];
  2234.             T264_predict_mv(t, 1, 8, 4, &vec1[1]);
  2235.             t->mb.vec[1][8].x = eg_read_se(t->bs) + vec1[1].x;
  2236.             t->mb.vec[1][8].y = eg_read_se(t->bs) + vec1[1].y;
  2237.             t->mb.vec[1][8].refno = vecPred1.refno;
  2238.             copy_nvec(&t->mb.vec[1][8], &t->mb.vec[1][8], 4, 2, 4);
  2239. break;
  2240. case 21://B_Bi_Bi_8x16
  2241. t->mb.mb_part = MB_8x16;
  2242. if (t->refl0_num - 1 > 0)
  2243.             {
  2244.                 vecPred0.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2245.                 vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
  2246.             }
  2247. if (t->refl1_num - 1 > 0)
  2248.             {
  2249.                 vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
  2250.                 vec1[1].refno = eg_read_te(t->bs, t->refl0_num - 1);
  2251.             }
  2252. T264_predict_mv(t, 0, 0, 2, &vecPred0);
  2253.             t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
  2254.             t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
  2255.             t->mb.vec[0][0].refno = vecPred0.refno;
  2256.             copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 2, 4, 4);
  2257.             t->mb.vec_ref[VEC_LUMA + 1].vec[0] = t->mb.vec[0][0];
  2258.             T264_predict_mv(t, 0, 2, 2, &vec1[0]);
  2259.             t->mb.vec[0][2].x = eg_read_se(t->bs) + vec1[0].x;
  2260.             t->mb.vec[0][2].y = eg_read_se(t->bs) + vec1[0].y;
  2261.             t->mb.vec[0][2].refno = vec1[1].refno;
  2262.             copy_nvec(&t->mb.vec[0][2], &t->mb.vec[0][2], 2, 4, 4);
  2263.             T264_predict_mv(t, 1, 0, 2, &vecPred1);
  2264.             t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
  2265.             t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
  2266.             t->mb.vec[1][0].refno = vecPred1.refno;
  2267.             copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 2, 4, 4);
  2268.             t->mb.vec_ref[VEC_LUMA + 1].vec[1] = t->mb.vec[1][0];
  2269.             T264_predict_mv(t, 1, 2, 2, &vec1[1]);
  2270.             t->mb.vec[1][2].x = eg_read_se(t->bs) + vec1[1].x;
  2271.             t->mb.vec[1][2].y = eg_read_se(t->bs) + vec1[1].y;
  2272.             t->mb.vec[1][2].refno = vec1[1].refno;
  2273.             copy_nvec(&t->mb.vec[1][2], &t->mb.vec[1][2], 2, 4, 4);
  2274. break;
  2275. case 22: //B_8x8
  2276. t->mb.submb_part[luma_index[4 * 0]] = eg_read_ue(t->bs);
  2277.             t->mb.submb_part[luma_index[4 * 1]] = eg_read_ue(t->bs);
  2278.             t->mb.submb_part[luma_index[4 * 2]] = eg_read_ue(t->bs);
  2279.             t->mb.submb_part[luma_index[4 * 3]] = eg_read_ue(t->bs);
  2280. t->mb.mb_part = MB_8x8;
  2281. if (t->refl0_num - 1 > 0)
  2282. {
  2283. for(i = 0;i < 4; ++i)
  2284. if(t->mb.submb_part[luma_index[4 * i]] != B_DIRECT_8x8 - 100)
  2285. {
  2286. if (t->mb.submb_part[luma_index[4 * i]] != B_L1_8x8)
  2287. {
  2288. t->mb.vec[0][luma_index[4 * i]].refno = eg_read_te(t->bs, t->refl0_num - 1);
  2289. }
  2290. }
  2291. }else
  2292. {
  2293. t->mb.vec[0][luma_index[0]].refno = 0;
  2294. t->mb.vec[0][luma_index[4]].refno = 0;
  2295. t->mb.vec[0][luma_index[8]].refno = 0;
  2296. t->mb.vec[0][luma_index[12]].refno = 0;
  2297. }
  2298. if (t->refl1_num - 1 > 0)
  2299. {
  2300. for(i = 0;i < 4; ++i)
  2301. if(t->mb.submb_part[luma_index[4 * i]] != B_DIRECT_8x8 - 100)
  2302. {
  2303. if (t->mb.submb_part[luma_index[4 * i]] != B_L0_8x8)
  2304. {
  2305. t->mb.vec[1][luma_index[4 * i]].refno = eg_read_te(t->bs, t->refl1_num - 1);
  2306. }
  2307. }
  2308. }else
  2309. {
  2310. t->mb.vec[1][luma_index[0]].refno = 0;
  2311. t->mb.vec[1][luma_index[4]].refno = 0;
  2312. t->mb.vec[1][luma_index[8]].refno = 0;
  2313. t->mb.vec[1][luma_index[12]].refno = 0;
  2314. }
  2315. for(i = 0 ; i < 4 ; i ++)
  2316.             {
  2317.                 switch(t->mb.submb_part[luma_index[4 * i]]) 
  2318.                 {
  2319. case B_DIRECT_8x8 - 100:
  2320. // submb_get_direct8x8_mv(t,i);
  2321. assert(0);
  2322. break;
  2323. case B_L1_8x8 - 100:
  2324. INITINVALIDVEC(t->mb.vec[0][luma_index[4 * i]]);
  2325. copy_nvec(&t->mb.vec[0][luma_index[4 * i]], &t->mb.vec[0][luma_index[4 * i]], 2, 2, 4);
  2326. t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[0] =
  2327.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[0] =
  2328.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[0] =
  2329.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[0] = t->mb.vec[0][luma_index[4 * i]];
  2330. break;
  2331. case B_L0_8x8 - 100:
  2332. case B_Bi_8x8 - 100:
  2333.                     vec1[0] = t->mb.vec[0][luma_index[4 * i]];
  2334.                     T264_predict_mv(t, 0, luma_index[4 * i], 2, &vec1[0]);
  2335.                     t->mb.vec[0][luma_index[4 * i]].x = eg_read_se(t->bs) + vec1[0].x;
  2336.                     t->mb.vec[0][luma_index[4 * i]].y = eg_read_se(t->bs) + vec1[0].y;
  2337.                     t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 1] = 
  2338.                     t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 4] = 
  2339.                     t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 5] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 0];
  2340.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[0] =
  2341.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[0] =
  2342.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[0] =
  2343.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[0] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 0];
  2344. break;
  2345. default : //other mode are not supported
  2346. assert(0);
  2347. break;
  2348. }
  2349. }
  2350. //for list1 mvd
  2351. for(i = 0 ; i < 4 ; i ++)
  2352.             {
  2353.                 switch(t->mb.submb_part[luma_index[4 * i]]) 
  2354.                 {
  2355. case B_DIRECT_8x8 - 100: //will do at list0
  2356.    t->mb.submb_part[luma_index[4 * i]] = MB_8x8;
  2357. break;
  2358. case B_L0_8x8 - 100:
  2359.    t->mb.submb_part[luma_index[4 * i]] = MB_8x8;
  2360. INITINVALIDVEC(t->mb.vec[1][luma_index[4 * i]]);
  2361. copy_nvec(&t->mb.vec[1][luma_index[4 * i]], &t->mb.vec[1][luma_index[4 * i]], 2, 2, 4);
  2362. t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[1] =
  2363.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[1] =
  2364.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[1] =
  2365.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[1] = t->mb.vec[1][luma_index[4 * i]];
  2366. break;
  2367. case B_L1_8x8 - 100:
  2368. case B_Bi_8x8 - 100:
  2369.                 t->mb.submb_part[luma_index[4 * i]] = MB_8x8;
  2370.                     vec1[1] = t->mb.vec[1][luma_index[4 * i]];
  2371.                     T264_predict_mv(t, 1, luma_index[4 * i], 2, &vec1[1]);
  2372.                     t->mb.vec[1][luma_index[4 * i]].x = eg_read_se(t->bs) + vec1[1].x;
  2373.                     t->mb.vec[1][luma_index[4 * i]].y = eg_read_se(t->bs) + vec1[1].y;
  2374.                     t->mb.vec[1][i / 2 * 8 + i % 2 * 2 + 1] = 
  2375.                     t->mb.vec[1][i / 2 * 8 + i % 2 * 2 + 4] = 
  2376.                     t->mb.vec[1][i / 2 * 8 + i % 2 * 2 + 5] = t->mb.vec[1][i / 2 * 8 + i % 2 * 2 + 0];
  2377.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[1] =
  2378.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[1] =
  2379.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[1] =
  2380.                     t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[1] = t->mb.vec[1][i / 2 * 8 + i % 2 * 2 + 0];
  2381. break;
  2382. default : //other mode are not supported
  2383. assert(0);
  2384. break;
  2385. }
  2386. }
  2387. break;
  2388.         default:
  2389.             t->mb.mb_part = mb_type - 23;
  2390.             T264dec_mb_read_intra_cavlc(t);
  2391.             /* save ref */
  2392.             memset(t->mb.submb_part, -1, sizeof(t->mb.submb_part));
  2393.             t->mb.mb_part = -1;
  2394.             for(i = 0 ; i < 2 ; i ++)
  2395.             {
  2396.                 for(j = 0 ; j < 16 ; j ++)
  2397.                 {
  2398.                     INITINVALIDVEC(t->mb.vec[i][j]);
  2399.                 }
  2400.             }
  2401.             break;
  2402.         }
  2403.     }
  2404.     else
  2405.     {
  2406.         t->mb.mb_part = mb_type;
  2407.         T264dec_mb_read_intra_cavlc(t);
  2408.     }
  2409.     if (t->mb.mb_mode != I_16x16 && t->mb.mb_mode != I_4x4)
  2410.     {
  2411.         int32_t cbp;
  2412.         cbp = inter_eg_to_cbp[eg_read_ue(t->bs)];
  2413.         t->mb.cbp_y = cbp % 16;
  2414.         t->mb.cbp_c = cbp / 16;
  2415.         if (cbp > 0)
  2416.         {
  2417.             t->mb.mb_qp_delta = eg_read_se(t->bs);
  2418.             for(i = 0 ; i < 16 ; i ++)
  2419.             {
  2420.                 if (t->mb.cbp_y & (1 << (i / 4)))
  2421.                 {
  2422.                     T264dec_mb_read_cavlc_residual(t, i, t->mb.dct_y_z[i], 16);
  2423.                 }
  2424.             }
  2425.         }
  2426.     }
  2427.     if (t->mb.cbp_c != 0)
  2428.     {
  2429.         T264dec_mb_read_cavlc_residual(t, BLOCK_INDEX_CHROMA_DC, t->mb.dc2x2_z[0], 4);
  2430.         T264dec_mb_read_cavlc_residual(t, BLOCK_INDEX_CHROMA_DC, t->mb.dc2x2_z[1], 4);
  2431.         if (t->mb.cbp_c & 0x2)
  2432.         {
  2433.             for(i = 0 ; i < 4 ; i ++)
  2434.             {
  2435.                 T264dec_mb_read_cavlc_residual(t, 16 + i, &(t->mb.dct_uv_z[0][i % 4][1]), 15);
  2436.                 t->mb.dct_uv_z[0][i][0] = t->mb.dc2x2_z[0][i];
  2437.             }
  2438.             for(i = 0 ; i < 4 ; i ++)
  2439.             {
  2440.                 T264dec_mb_read_cavlc_residual(t, 20 + i, &(t->mb.dct_uv_z[1][i % 4][1]), 15);
  2441.                 t->mb.dct_uv_z[1][i][0] = t->mb.dc2x2_z[1][i];
  2442.             }
  2443.         }
  2444.         else
  2445.         {
  2446.             for(i = 0 ; i < 4 ; i ++)
  2447.             {
  2448.                 t->mb.dct_uv_z[0][i][0] = t->mb.dc2x2_z[0][i];
  2449.                 t->mb.dct_uv_z[1][i][0] = t->mb.dc2x2_z[1][i];
  2450.             }
  2451.         }
  2452.     }
  2453. }