comparison h264data.h @ 2755:975074f04b95 libavcodec

decode H.264 with 8x8 transform. deblocking is still incorrect with 8x8+cavlc
author lorenm
date Thu, 02 Jun 2005 21:15:20 +0000
parents e0bf024629cf
children a1f71e17054c
comparison
equal deleted inserted replaced
2754:a49f140179e9 2755:975074f04b95
304 static const uint8_t chroma_dc_scan[4]={ 304 static const uint8_t chroma_dc_scan[4]={
305 (0+0*2)*16, (1+0*2)*16, 305 (0+0*2)*16, (1+0*2)*16,
306 (0+1*2)*16, (1+1*2)*16, //FIXME 306 (0+1*2)*16, (1+1*2)*16, //FIXME
307 }; 307 };
308 308
309 static const uint8_t zigzag_scan8x8[64]={
310 0+0*8, 1+0*8, 0+1*8, 0+2*8,
311 1+1*8, 2+0*8, 3+0*8, 2+1*8,
312 1+2*8, 0+3*8, 0+4*8, 1+3*8,
313 2+2*8, 3+1*8, 4+0*8, 5+0*8,
314 4+1*8, 3+2*8, 2+3*8, 1+4*8,
315 0+5*8, 0+6*8, 1+5*8, 2+4*8,
316 3+3*8, 4+2*8, 5+1*8, 6+0*8,
317 7+0*8, 6+1*8, 5+2*8, 4+3*8,
318 3+4*8, 2+5*8, 1+6*8, 0+7*8,
319 1+7*8, 2+6*8, 3+5*8, 4+4*8,
320 5+3*8, 6+2*8, 7+1*8, 7+2*8,
321 6+3*8, 5+4*8, 4+5*8, 3+6*8,
322 2+7*8, 3+7*8, 4+6*8, 5+5*8,
323 6+4*8, 7+3*8, 7+4*8, 6+5*8,
324 5+6*8, 4+7*8, 5+7*8, 6+6*8,
325 7+5*8, 7+6*8, 6+7*8, 7+7*8,
326 };
327
328 // zigzag_scan8x8_cavlc[i] = zigzag_scan8x8[(i/4) + 16*(i%4)]
329 static const uint8_t zigzag_scan8x8_cavlc[64]={
330 0+0*8, 1+1*8, 1+2*8, 2+2*8,
331 4+1*8, 0+5*8, 3+3*8, 7+0*8,
332 3+4*8, 1+7*8, 5+3*8, 6+3*8,
333 2+7*8, 6+4*8, 5+6*8, 7+5*8,
334 1+0*8, 2+0*8, 0+3*8, 3+1*8,
335 3+2*8, 0+6*8, 4+2*8, 6+1*8,
336 2+5*8, 2+6*8, 6+2*8, 5+4*8,
337 3+7*8, 7+3*8, 4+7*8, 7+6*8,
338 0+1*8, 3+0*8, 0+4*8, 4+0*8,
339 2+3*8, 1+5*8, 5+1*8, 5+2*8,
340 1+6*8, 3+5*8, 7+1*8, 4+5*8,
341 4+6*8, 7+4*8, 5+7*8, 6+7*8,
342 0+2*8, 2+1*8, 1+3*8, 5+0*8,
343 1+4*8, 2+4*8, 6+0*8, 4+3*8,
344 0+7*8, 4+4*8, 7+2*8, 3+6*8,
345 5+5*8, 6+5*8, 6+6*8, 7+7*8,
346 };
347
309 #define MB_TYPE_REF0 MB_TYPE_ACPRED //dirty but it fits in 16bit 348 #define MB_TYPE_REF0 MB_TYPE_ACPRED //dirty but it fits in 16bit
349 #define MB_TYPE_8x8DCT 0x01000000
310 #define IS_REF0(a) ((a)&MB_TYPE_REF0) 350 #define IS_REF0(a) ((a)&MB_TYPE_REF0)
351 #define IS_8x8DCT(a) ((a)&MB_TYPE_8x8DCT)
352
311 353
312 typedef struct IMbInfo{ 354 typedef struct IMbInfo{
313 uint16_t type; 355 uint16_t type;
314 uint8_t pred_mode; 356 uint8_t pred_mode;
315 uint8_t cbp; 357 uint8_t cbp;
470 {3584,4608,3584,4608, 4608,5888,4608,5888, 3584,4608,3584,4608, 4608,5888,4608,5888, }, 512 {3584,4608,3584,4608, 4608,5888,4608,5888, 3584,4608,3584,4608, 4608,5888,4608,5888, },
471 //{4096,5120,4096,5120, 5120,6400,5120,6400, 4096,5120,4096,5120, 5120,6400,5120,6400, }, 513 //{4096,5120,4096,5120, 5120,6400,5120,6400, 4096,5120,4096,5120, 5120,6400,5120,6400, },
472 //{4608,5888,4608,5888, 5888,7424,5888,7424, 4608,5888,4608,5888, 5888,7424,5888,7424, }, 514 //{4608,5888,4608,5888, 5888,7424,5888,7424, 4608,5888,4608,5888, 5888,7424,5888,7424, },
473 }; 515 };
474 516
517 static const int dequant8_coeff_init_scan[16] = {
518 0,3,4,3, 3,1,5,1, 4,5,2,5, 3,1,5,1
519 };
520 static const int dequant8_coeff_init[6][6]={
521 {20,18,32,19,25,24},
522 {22,19,35,21,28,26},
523 {26,23,42,24,33,31},
524 {28,25,45,26,35,33},
525 {32,28,51,30,40,38},
526 {36,32,58,34,46,43},
527 };
528
475 #define QUANT_SHIFT 22 529 #define QUANT_SHIFT 22
476 530
477 static const int quant_coeff[52][16]={ 531 static const int quant_coeff[52][16]={
478 { 419430,258111,419430,258111,258111,167772,258111,167772,419430,258111,419430,258111,258111,167772,258111,167772,}, 532 { 419430,258111,419430,258111,258111,167772,258111,167772,419430,258111,419430,258111,258111,167772,258111,167772,},
479 { 381300,239675,381300,239675,239675,149131,239675,149131,381300,239675,381300,239675,239675,149131,239675,149131,}, 533 { 381300,239675,381300,239675,239675,149131,239675,149131,381300,239675,381300,239675,239675,149131,239675,149131,},
559 { 9,12,18 }, {10,13,20 }, {11,15,23 }, {13,17,25 } 613 { 9,12,18 }, {10,13,20 }, {11,15,23 }, {13,17,25 }
560 }; 614 };
561 615
562 /* Cabac pre state table */ 616 /* Cabac pre state table */
563 617
564 static const int cabac_context_init_I[399][2] = 618 static const int cabac_context_init_I[460][2] =
565 { 619 {
566 /* 0 - 10 */ 620 /* 0 - 10 */
567 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 }, 621 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
568 { 2, 54 }, { 3, 74 }, { -28,127 }, { -23, 104 }, 622 { 2, 54 }, { 3, 74 }, { -28,127 }, { -23, 104 },
569 { -6, 53 }, { -1, 54 }, { 7, 51 }, 623 { -6, 53 }, { -1, 54 }, { 7, 51 },
705 { 33, 0 }, { 38, 2 }, { 33, 13 }, { 23, 35 }, 759 { 33, 0 }, { 38, 2 }, { 33, 13 }, { 23, 35 },
706 { 13, 58 }, { 29, -3 }, { 26, 0 }, { 22, 30 }, 760 { 13, 58 }, { 29, -3 }, { 26, 0 }, { 22, 30 },
707 { 31, -7 }, { 35, -15 }, { 34, -3 }, { 34, 3 }, 761 { 31, -7 }, { 35, -15 }, { 34, -3 }, { 34, 3 },
708 { 36, -1 }, { 34, 5 }, { 32, 11 }, { 35, 5 }, 762 { 36, -1 }, { 34, 5 }, { 32, 11 }, { 35, 5 },
709 { 34, 12 }, { 39, 11 }, { 30, 29 }, { 34, 26 }, 763 { 34, 12 }, { 39, 11 }, { 30, 29 }, { 34, 26 },
710 { 29, 39 }, { 19, 66 } 764 { 29, 39 }, { 19, 66 },
711 }; 765
712 766 /* 399 -> 435 */
713 static const int cabac_context_init_PB[3][399][2] = 767 { 31, 21 }, { 31, 31 }, { 25, 50 },
768 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 },
769 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 },
770 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 },
771 { -23, 68 }, { -24, 50 }, { -11, 74 }, { 23, -13 },
772 { 26, -13 }, { 40, -15 }, { 49, -14 }, { 44, 3 },
773 { 45, 6 }, { 44, 34 }, { 33, 54 }, { 19, 82 },
774 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 },
775 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 },
776 { 0, 68 }, { -9, 92 },
777
778 /* 436 -> 459 */
779 { -14, 106 }, { -13, 97 }, { -15, 90 }, { -12, 90 },
780 { -18, 88 }, { -10, 73 }, { -9, 79 }, { -14, 86 },
781 { -10, 73 }, { -10, 70 }, { -10, 69 }, { -5, 66 },
782 { -9, 64 }, { -5, 58 }, { 2, 59 }, { 21, -10 },
783 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 },
784 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 }
785 };
786
787 static const int cabac_context_init_PB[3][460][2] =
714 { 788 {
715 /* i_cabac_init_idc == 0 */ 789 /* i_cabac_init_idc == 0 */
716 { 790 {
717 /* 0 - 10 */ 791 /* 0 - 10 */
718 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 }, 792 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 },
845 { 23, 20 }, { 26, 23 }, { 27, 32 }, { 28, 23 }, 919 { 23, 20 }, { 26, 23 }, { 27, 32 }, { 28, 23 },
846 { 28, 24 }, { 23, 40 }, { 24, 32 }, { 28, 29 }, 920 { 28, 24 }, { 23, 40 }, { 24, 32 }, { 28, 29 },
847 { 23, 42 }, { 19, 57 }, { 22, 53 }, { 22, 61 }, 921 { 23, 42 }, { 19, 57 }, { 22, 53 }, { 22, 61 },
848 { 11, 86 }, 922 { 11, 86 },
849 923
850 924 /* 399 - 435 */
925 { 12, 40 }, { 11, 51 }, { 14, 59 },
926 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 },
927 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 },
928 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 },
929 { -16, 66 }, { -22, 65 }, { -20, 63 }, { 9, -2 },
930 { 26, -9 }, { 33, -9 }, { 39, -7 }, { 41, -2 },
931 { 45, 3 }, { 49, 9 }, { 45, 27 }, { 36, 59 },
932 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 },
933 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 },
934 { -8, 66 }, { -8, 76 },
935
936 /* 436 - 459 */
937 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
938 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 },
939 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
940 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 21, -13 },
941 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 },
942 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 },
851 }, 943 },
852 944
853 /* i_cabac_init_idc == 1 */ 945 /* i_cabac_init_idc == 1 */
854 { 946 {
855 /* 0 - 10 */ 947 /* 0 - 10 */
983 { 23, 22 }, { 27, 21 }, { 33, 20 }, { 26, 28 }, 1075 { 23, 22 }, { 27, 21 }, { 33, 20 }, { 26, 28 },
984 { 30, 24 }, { 27, 34 }, { 18, 42 }, { 25, 39 }, 1076 { 30, 24 }, { 27, 34 }, { 18, 42 }, { 25, 39 },
985 { 18, 50 }, { 12, 70 }, { 21, 54 }, { 14, 71 }, 1077 { 18, 50 }, { 12, 70 }, { 21, 54 }, { 14, 71 },
986 { 11, 83 }, 1078 { 11, 83 },
987 1079
1080 /* 399 - 435 */
1081 { 24, 32 }, { 21, 49 }, { 21, 54 },
1082 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 },
1083 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 8 },
1084 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 },
1085 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 17, -10 },
1086 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
1087 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
1088 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 },
1089 { -2, 52 }, { -9, 57 }, { -6, 53 }, { -4, 65 },
1090 { -4, 67 }, { -7, 82 },
1091
1092 /* 436 - 459 */
1093 { -3, 81 }, { -3, 76 }, { -7, 72 }, { -6, 78 },
1094 { -12, 72 }, { -14, 68 }, { -3, 70 }, { -6, 76 },
1095 { -5, 66 }, { -5, 62 }, { 0, 57 }, { -4, 61 },
1096 { -9, 60 }, { 1, 54 }, { 2, 58 }, { 17, -10 },
1097 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 },
1098 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 },
988 }, 1099 },
989 1100
990 /* i_cabac_init_idc == 2 */ 1101 /* i_cabac_init_idc == 2 */
991 { 1102 {
992 /* 0 - 10 */ 1103 /* 0 - 10 */
1119 { 18, 31 }, { 19, 26 }, { 36, 24 }, { 24, 23 }, 1230 { 18, 31 }, { 19, 26 }, { 36, 24 }, { 24, 23 },
1120 { 27, 16 }, { 24, 30 }, { 31, 29 }, { 22, 41 }, 1231 { 27, 16 }, { 24, 30 }, { 31, 29 }, { 22, 41 },
1121 { 22, 42 }, { 16, 60 }, { 15, 52 }, { 14, 60 }, 1232 { 22, 42 }, { 16, 60 }, { 15, 52 }, { 14, 60 },
1122 { 3, 78 }, { -16, 123 }, { 21, 53 }, { 22, 56 }, 1233 { 3, 78 }, { -16, 123 }, { 21, 53 }, { 22, 56 },
1123 { 25, 61 }, 1234 { 25, 61 },
1235
1236 /* 399 - 435 */
1237 { 21, 33 }, { 19, 50 }, { 17, 61 },
1238 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1239 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1240 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1241 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1242 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1243 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1244 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 },
1245 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 },
1246 { -6, 68 }, { -10, 79 },
1247
1248 /* 436 - 459 */
1249 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 },
1250 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 },
1251 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 },
1252 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 },
1253 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 },
1254 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 },
1124 } 1255 }
1125 }; 1256 };