@ -45,7 +45,7 @@
/* Cabac pre state table */
static const int8_t cabac_context_init_I [ 460 ] [ 2 ] =
static const int8_t cabac_context_init_I [ 102 4] [ 2 ] =
{
/* 0 - 10 */
{ 20 , - 15 } , { 2 , 54 } , { 3 , 74 } , { 20 , - 15 } ,
@ -211,10 +211,153 @@ static const int8_t cabac_context_init_I[460][2] =
{ - 10 , 73 } , { - 10 , 70 } , { - 10 , 69 } , { - 5 , 66 } ,
{ - 9 , 64 } , { - 5 , 58 } , { 2 , 59 } , { 21 , - 10 } ,
{ 24 , - 11 } , { 28 , - 8 } , { 28 , - 1 } , { 29 , 3 } ,
{ 29 , 9 } , { 35 , 20 } , { 29 , 36 } , { 14 , 67 }
{ 29 , 9 } , { 35 , 20 } , { 29 , 36 } , { 14 , 67 } ,
/* 460 -> 1024 */
{ - 17 , 123 } , { - 12 , 115 } , { - 16 , 122 } , { - 11 , 115 } ,
{ - 12 , 63 } , { - 2 , 68 } , { - 15 , 84 } , { - 13 , 104 } ,
{ - 3 , 70 } , { - 8 , 93 } , { - 10 , 90 } , { - 30 , 127 } ,
{ - 17 , 123 } , { - 12 , 115 } , { - 16 , 122 } , { - 11 , 115 } ,
{ - 12 , 63 } , { - 2 , 68 } , { - 15 , 84 } , { - 13 , 104 } ,
{ - 3 , 70 } , { - 8 , 93 } , { - 10 , 90 } , { - 30 , 127 } ,
{ - 7 , 93 } , { - 11 , 87 } , { - 3 , 77 } , { - 5 , 71 } ,
{ - 4 , 63 } , { - 4 , 68 } , { - 12 , 84 } , { - 7 , 62 } ,
{ - 7 , 65 } , { 8 , 61 } , { 5 , 56 } , { - 2 , 66 } ,
{ 1 , 64 } , { 0 , 61 } , { - 2 , 78 } , { 1 , 50 } ,
{ 7 , 52 } , { 10 , 35 } , { 0 , 44 } , { 11 , 38 } ,
{ 1 , 45 } , { 0 , 46 } , { 5 , 44 } , { 31 , 17 } ,
{ 1 , 51 } , { 7 , 50 } , { 28 , 19 } , { 16 , 33 } ,
{ 14 , 62 } , { - 13 , 108 } , { - 15 , 100 } , { - 13 , 101 } ,
{ - 13 , 91 } , { - 12 , 94 } , { - 10 , 88 } , { - 16 , 84 } ,
{ - 10 , 86 } , { - 7 , 83 } , { - 13 , 87 } , { - 19 , 94 } ,
{ 1 , 70 } , { 0 , 72 } , { - 5 , 74 } , { 18 , 59 } ,
{ - 7 , 93 } , { - 11 , 87 } , { - 3 , 77 } , { - 5 , 71 } ,
{ - 4 , 63 } , { - 4 , 68 } , { - 12 , 84 } , { - 7 , 62 } ,
{ - 7 , 65 } , { 8 , 61 } , { 5 , 56 } , { - 2 , 66 } ,
{ 1 , 64 } , { 0 , 61 } , { - 2 , 78 } , { 1 , 50 } ,
{ 7 , 52 } , { 10 , 35 } , { 0 , 44 } , { 11 , 38 } ,
{ 1 , 45 } , { 0 , 46 } , { 5 , 44 } , { 31 , 17 } ,
{ 1 , 51 } , { 7 , 50 } , { 28 , 19 } , { 16 , 33 } ,
{ 14 , 62 } , { - 13 , 108 } , { - 15 , 100 } , { - 13 , 101 } ,
{ - 13 , 91 } , { - 12 , 94 } , { - 10 , 88 } , { - 16 , 84 } ,
{ - 10 , 86 } , { - 7 , 83 } , { - 13 , 87 } , { - 19 , 94 } ,
{ 1 , 70 } , { 0 , 72 } , { - 5 , 74 } , { 18 , 59 } ,
{ 24 , 0 } , { 15 , 9 } , { 8 , 25 } , { 13 , 18 } ,
{ 15 , 9 } , { 13 , 19 } , { 10 , 37 } , { 12 , 18 } ,
{ 6 , 29 } , { 20 , 33 } , { 15 , 30 } , { 4 , 45 } ,
{ 1 , 58 } , { 0 , 62 } , { 7 , 61 } , { 12 , 38 } ,
{ 11 , 45 } , { 15 , 39 } , { 11 , 42 } , { 13 , 44 } ,
{ 16 , 45 } , { 12 , 41 } , { 10 , 49 } , { 30 , 34 } ,
{ 18 , 42 } , { 10 , 55 } , { 17 , 51 } , { 17 , 46 } ,
{ 0 , 89 } , { 26 , - 19 } , { 22 , - 17 } , { 26 , - 17 } ,
{ 30 , - 25 } , { 28 , - 20 } , { 33 , - 23 } , { 37 , - 27 } ,
{ 33 , - 23 } , { 40 , - 28 } , { 38 , - 17 } , { 33 , - 11 } ,
{ 40 , - 15 } , { 41 , - 6 } , { 38 , 1 } , { 41 , 17 } ,
{ 24 , 0 } , { 15 , 9 } , { 8 , 25 } , { 13 , 18 } ,
{ 15 , 9 } , { 13 , 19 } , { 10 , 37 } , { 12 , 18 } ,
{ 6 , 29 } , { 20 , 33 } , { 15 , 30 } , { 4 , 45 } ,
{ 1 , 58 } , { 0 , 62 } , { 7 , 61 } , { 12 , 38 } ,
{ 11 , 45 } , { 15 , 39 } , { 11 , 42 } , { 13 , 44 } ,
{ 16 , 45 } , { 12 , 41 } , { 10 , 49 } , { 30 , 34 } ,
{ 18 , 42 } , { 10 , 55 } , { 17 , 51 } , { 17 , 46 } ,
{ 0 , 89 } , { 26 , - 19 } , { 22 , - 17 } , { 26 , - 17 } ,
{ 30 , - 25 } , { 28 , - 20 } , { 33 , - 23 } , { 37 , - 27 } ,
{ 33 , - 23 } , { 40 , - 28 } , { 38 , - 17 } , { 33 , - 11 } ,
{ 40 , - 15 } , { 41 , - 6 } , { 38 , 1 } , { 41 , 17 } ,
{ - 17 , 120 } , { - 20 , 112 } , { - 18 , 114 } , { - 11 , 85 } ,
{ - 15 , 92 } , { - 14 , 89 } , { - 26 , 71 } , { - 15 , 81 } ,
{ - 14 , 80 } , { 0 , 68 } , { - 14 , 70 } , { - 24 , 56 } ,
{ - 23 , 68 } , { - 24 , 50 } , { - 11 , 74 } , { - 14 , 106 } ,
{ - 13 , 97 } , { - 15 , 90 } , { - 12 , 90 } , { - 18 , 88 } ,
{ - 10 , 73 } , { - 9 , 79 } , { - 14 , 86 } , { - 10 , 73 } ,
{ - 10 , 70 } , { - 10 , 69 } , { - 5 , 66 } , { - 9 , 64 } ,
{ - 5 , 58 } , { 2 , 59 } , { 23 , - 13 } , { 26 , - 13 } ,
{ 40 , - 15 } , { 49 , - 14 } , { 44 , 3 } , { 45 , 6 } ,
{ 44 , 34 } , { 33 , 54 } , { 19 , 82 } , { 21 , - 10 } ,
{ 24 , - 11 } , { 28 , - 8 } , { 28 , - 1 } , { 29 , 3 } ,
{ 29 , 9 } , { 35 , 20 } , { 29 , 36 } , { 14 , 67 } ,
{ - 3 , 75 } , { - 1 , 23 } , { 1 , 34 } , { 1 , 43 } ,
{ 0 , 54 } , { - 2 , 55 } , { 0 , 61 } , { 1 , 64 } ,
{ 0 , 68 } , { - 9 , 92 } , { - 17 , 120 } , { - 20 , 112 } ,
{ - 18 , 114 } , { - 11 , 85 } , { - 15 , 92 } , { - 14 , 89 } ,
{ - 26 , 71 } , { - 15 , 81 } , { - 14 , 80 } , { 0 , 68 } ,
{ - 14 , 70 } , { - 24 , 56 } , { - 23 , 68 } , { - 24 , 50 } ,
{ - 11 , 74 } , { - 14 , 106 } , { - 13 , 97 } , { - 15 , 90 } ,
{ - 12 , 90 } , { - 18 , 88 } , { - 10 , 73 } , { - 9 , 79 } ,
{ - 14 , 86 } , { - 10 , 73 } , { - 10 , 70 } , { - 10 , 69 } ,
{ - 5 , 66 } , { - 9 , 64 } , { - 5 , 58 } , { 2 , 59 } ,
{ 23 , - 13 } , { 26 , - 13 } , { 40 , - 15 } , { 49 , - 14 } ,
{ 44 , 3 } , { 45 , 6 } , { 44 , 34 } , { 33 , 54 } ,
{ 19 , 82 } , { 21 , - 10 } , { 24 , - 11 } , { 28 , - 8 } ,
{ 28 , - 1 } , { 29 , 3 } , { 29 , 9 } , { 35 , 20 } ,
{ 29 , 36 } , { 14 , 67 } , { - 3 , 75 } , { - 1 , 23 } ,
{ 1 , 34 } , { 1 , 43 } , { 0 , 54 } , { - 2 , 55 } ,
{ 0 , 61 } , { 1 , 64 } , { 0 , 68 } , { - 9 , 92 } ,
{ - 6 , 93 } , { - 6 , 84 } , { - 8 , 79 } , { 0 , 66 } ,
{ - 1 , 71 } , { 0 , 62 } , { - 2 , 60 } , { - 2 , 59 } ,
{ - 5 , 75 } , { - 3 , 62 } , { - 4 , 58 } , { - 9 , 66 } ,
{ - 1 , 79 } , { 0 , 71 } , { 3 , 68 } , { 10 , 44 } ,
{ - 7 , 62 } , { 15 , 36 } , { 14 , 40 } , { 16 , 27 } ,
{ 12 , 29 } , { 1 , 44 } , { 20 , 36 } , { 18 , 32 } ,
{ 5 , 42 } , { 1 , 48 } , { 10 , 62 } , { 17 , 46 } ,
{ 9 , 64 } , { - 12 , 104 } , { - 11 , 97 } , { - 16 , 96 } ,
{ - 7 , 88 } , { - 8 , 85 } , { - 7 , 85 } , { - 9 , 85 } ,
{ - 13 , 88 } , { 4 , 66 } , { - 3 , 77 } , { - 3 , 76 } ,
{ - 6 , 76 } , { 10 , 58 } , { - 1 , 76 } , { - 1 , 83 } ,
{ - 6 , 93 } , { - 6 , 84 } , { - 8 , 79 } , { 0 , 66 } ,
{ - 1 , 71 } , { 0 , 62 } , { - 2 , 60 } , { - 2 , 59 } ,
{ - 5 , 75 } , { - 3 , 62 } , { - 4 , 58 } , { - 9 , 66 } ,
{ - 1 , 79 } , { 0 , 71 } , { 3 , 68 } , { 10 , 44 } ,
{ - 7 , 62 } , { 15 , 36 } , { 14 , 40 } , { 16 , 27 } ,
{ 12 , 29 } , { 1 , 44 } , { 20 , 36 } , { 18 , 32 } ,
{ 5 , 42 } , { 1 , 48 } , { 10 , 62 } , { 17 , 46 } ,
{ 9 , 64 } , { - 12 , 104 } , { - 11 , 97 } , { - 16 , 96 } ,
{ - 7 , 88 } , { - 8 , 85 } , { - 7 , 85 } , { - 9 , 85 } ,
{ - 13 , 88 } , { 4 , 66 } , { - 3 , 77 } , { - 3 , 76 } ,
{ - 6 , 76 } , { 10 , 58 } , { - 1 , 76 } , { - 1 , 83 } ,
{ 15 , 6 } , { 6 , 19 } , { 7 , 16 } , { 12 , 14 } ,
{ 18 , 13 } , { 13 , 11 } , { 13 , 15 } , { 15 , 16 } ,
{ 12 , 23 } , { 13 , 23 } , { 15 , 20 } , { 14 , 26 } ,
{ 14 , 44 } , { 17 , 40 } , { 17 , 47 } , { 24 , 17 } ,
{ 21 , 21 } , { 25 , 22 } , { 31 , 27 } , { 22 , 29 } ,
{ 19 , 35 } , { 14 , 50 } , { 10 , 57 } , { 7 , 63 } ,
{ - 2 , 77 } , { - 4 , 82 } , { - 3 , 94 } , { 9 , 69 } ,
{ - 12 , 109 } , { 36 , - 35 } , { 36 , - 34 } , { 32 , - 26 } ,
{ 37 , - 30 } , { 44 , - 32 } , { 34 , - 18 } , { 34 , - 15 } ,
{ 40 , - 15 } , { 33 , - 7 } , { 35 , - 5 } , { 33 , 0 } ,
{ 38 , 2 } , { 33 , 13 } , { 23 , 35 } , { 13 , 58 } ,
{ 15 , 6 } , { 6 , 19 } , { 7 , 16 } , { 12 , 14 } ,
{ 18 , 13 } , { 13 , 11 } , { 13 , 15 } , { 15 , 16 } ,
{ 12 , 23 } , { 13 , 23 } , { 15 , 20 } , { 14 , 26 } ,
{ 14 , 44 } , { 17 , 40 } , { 17 , 47 } , { 24 , 17 } ,
{ 21 , 21 } , { 25 , 22 } , { 31 , 27 } , { 22 , 29 } ,
{ 19 , 35 } , { 14 , 50 } , { 10 , 57 } , { 7 , 63 } ,
{ - 2 , 77 } , { - 4 , 82 } , { - 3 , 94 } , { 9 , 69 } ,
{ - 12 , 109 } , { 36 , - 35 } , { 36 , - 34 } , { 32 , - 26 } ,
{ 37 , - 30 } , { 44 , - 32 } , { 34 , - 18 } , { 34 , - 15 } ,
{ 40 , - 15 } , { 33 , - 7 } , { 35 , - 5 } , { 33 , 0 } ,
{ 38 , 2 } , { 33 , 13 } , { 23 , 35 } , { 13 , 58 } ,
{ - 3 , 71 } , { - 6 , 42 } , { - 5 , 50 } , { - 3 , 54 } ,
{ - 2 , 62 } , { 0 , 58 } , { 1 , 63 } , { - 2 , 72 } ,
{ - 1 , 74 } , { - 9 , 91 } , { - 5 , 67 } , { - 5 , 27 } ,
{ - 3 , 39 } , { - 2 , 44 } , { 0 , 46 } , { - 16 , 64 } ,
{ - 8 , 68 } , { - 10 , 78 } , { - 6 , 77 } , { - 10 , 86 } ,
{ - 12 , 92 } , { - 15 , 55 } , { - 10 , 60 } , { - 6 , 62 } ,
{ - 4 , 65 } , { - 12 , 73 } , { - 8 , 76 } , { - 7 , 80 } ,
{ - 9 , 88 } , { - 17 , 110 } , { - 3 , 71 } , { - 6 , 42 } ,
{ - 5 , 50 } , { - 3 , 54 } , { - 2 , 62 } , { 0 , 58 } ,
{ 1 , 63 } , { - 2 , 72 } , { - 1 , 74 } , { - 9 , 91 } ,
{ - 5 , 67 } , { - 5 , 27 } , { - 3 , 39 } , { - 2 , 44 } ,
{ 0 , 46 } , { - 16 , 64 } , { - 8 , 68 } , { - 10 , 78 } ,
{ - 6 , 77 } , { - 10 , 86 } , { - 12 , 92 } , { - 15 , 55 } ,
{ - 10 , 60 } , { - 6 , 62 } , { - 4 , 65 } , { - 12 , 73 } ,
{ - 8 , 76 } , { - 7 , 80 } , { - 9 , 88 } , { - 17 , 110 } ,
{ - 3 , 70 } , { - 8 , 93 } , { - 10 , 90 } , { - 30 , 127 } ,
{ - 3 , 70 } , { - 8 , 93 } , { - 10 , 90 } , { - 30 , 127 } ,
{ - 3 , 70 } , { - 8 , 93 } , { - 10 , 90 } , { - 30 , 127 }
} ;
static const int8_t cabac_context_init_PB [ 3 ] [ 460 ] [ 2 ] =
static const int8_t cabac_context_init_PB [ 3 ] [ 102 4] [ 2 ] =
{
/* i_cabac_init_idc == 0 */
{
@ -370,6 +513,149 @@ static const int8_t cabac_context_init_PB[3][460][2] =
{ - 14 , 66 } , { 0 , 59 } , { 2 , 59 } , { 21 , - 13 } ,
{ 33 , - 14 } , { 39 , - 7 } , { 46 , - 2 } , { 51 , 2 } ,
{ 60 , 6 } , { 61 , 17 } , { 55 , 34 } , { 42 , 62 } ,
/* 460 - 1024 */
{ - 7 , 92 } , { - 5 , 89 } , { - 7 , 96 } , { - 13 , 108 } ,
{ - 3 , 46 } , { - 1 , 65 } , { - 1 , 57 } , { - 9 , 93 } ,
{ - 3 , 74 } , { - 9 , 92 } , { - 8 , 87 } , { - 23 , 126 } ,
{ - 7 , 92 } , { - 5 , 89 } , { - 7 , 96 } , { - 13 , 108 } ,
{ - 3 , 46 } , { - 1 , 65 } , { - 1 , 57 } , { - 9 , 93 } ,
{ - 3 , 74 } , { - 9 , 92 } , { - 8 , 87 } , { - 23 , 126 } ,
{ - 2 , 85 } , { - 6 , 78 } , { - 1 , 75 } , { - 7 , 77 } ,
{ 2 , 54 } , { 5 , 50 } , { - 3 , 68 } , { 1 , 50 } ,
{ 6 , 42 } , { - 4 , 81 } , { 1 , 63 } , { - 4 , 70 } ,
{ 0 , 67 } , { 2 , 57 } , { - 2 , 76 } , { 11 , 35 } ,
{ 4 , 64 } , { 1 , 61 } , { 11 , 35 } , { 18 , 25 } ,
{ 12 , 24 } , { 13 , 29 } , { 13 , 36 } , { - 10 , 93 } ,
{ - 7 , 73 } , { - 2 , 73 } , { 13 , 46 } , { 9 , 49 } ,
{ - 7 , 100 } , { 9 , 53 } , { 2 , 53 } , { 5 , 53 } ,
{ - 2 , 61 } , { 0 , 56 } , { 0 , 56 } , { - 13 , 63 } ,
{ - 5 , 60 } , { - 1 , 62 } , { 4 , 57 } , { - 6 , 69 } ,
{ 4 , 57 } , { 14 , 39 } , { 4 , 51 } , { 13 , 68 } ,
{ - 2 , 85 } , { - 6 , 78 } , { - 1 , 75 } , { - 7 , 77 } ,
{ 2 , 54 } , { 5 , 50 } , { - 3 , 68 } , { 1 , 50 } ,
{ 6 , 42 } , { - 4 , 81 } , { 1 , 63 } , { - 4 , 70 } ,
{ 0 , 67 } , { 2 , 57 } , { - 2 , 76 } , { 11 , 35 } ,
{ 4 , 64 } , { 1 , 61 } , { 11 , 35 } , { 18 , 25 } ,
{ 12 , 24 } , { 13 , 29 } , { 13 , 36 } , { - 10 , 93 } ,
{ - 7 , 73 } , { - 2 , 73 } , { 13 , 46 } , { 9 , 49 } ,
{ - 7 , 100 } , { 9 , 53 } , { 2 , 53 } , { 5 , 53 } ,
{ - 2 , 61 } , { 0 , 56 } , { 0 , 56 } , { - 13 , 63 } ,
{ - 5 , 60 } , { - 1 , 62 } , { 4 , 57 } , { - 6 , 69 } ,
{ 4 , 57 } , { 14 , 39 } , { 4 , 51 } , { 13 , 68 } ,
{ 11 , 28 } , { 2 , 40 } , { 3 , 44 } , { 0 , 49 } ,
{ 0 , 46 } , { 2 , 44 } , { 2 , 51 } , { 0 , 47 } ,
{ 4 , 39 } , { 2 , 62 } , { 6 , 46 } , { 0 , 54 } ,
{ 3 , 54 } , { 2 , 58 } , { 4 , 63 } , { 6 , 51 } ,
{ 6 , 57 } , { 7 , 53 } , { 6 , 52 } , { 6 , 55 } ,
{ 11 , 45 } , { 14 , 36 } , { 8 , 53 } , { - 1 , 82 } ,
{ 7 , 55 } , { - 3 , 78 } , { 15 , 46 } , { 22 , 31 } ,
{ - 1 , 84 } , { 25 , 7 } , { 30 , - 7 } , { 28 , 3 } ,
{ 28 , 4 } , { 32 , 0 } , { 34 , - 1 } , { 30 , 6 } ,
{ 30 , 6 } , { 32 , 9 } , { 31 , 19 } , { 26 , 27 } ,
{ 26 , 30 } , { 37 , 20 } , { 28 , 34 } , { 17 , 70 } ,
{ 11 , 28 } , { 2 , 40 } , { 3 , 44 } , { 0 , 49 } ,
{ 0 , 46 } , { 2 , 44 } , { 2 , 51 } , { 0 , 47 } ,
{ 4 , 39 } , { 2 , 62 } , { 6 , 46 } , { 0 , 54 } ,
{ 3 , 54 } , { 2 , 58 } , { 4 , 63 } , { 6 , 51 } ,
{ 6 , 57 } , { 7 , 53 } , { 6 , 52 } , { 6 , 55 } ,
{ 11 , 45 } , { 14 , 36 } , { 8 , 53 } , { - 1 , 82 } ,
{ 7 , 55 } , { - 3 , 78 } , { 15 , 46 } , { 22 , 31 } ,
{ - 1 , 84 } , { 25 , 7 } , { 30 , - 7 } , { 28 , 3 } ,
{ 28 , 4 } , { 32 , 0 } , { 34 , - 1 } , { 30 , 6 } ,
{ 30 , 6 } , { 32 , 9 } , { 31 , 19 } , { 26 , 27 } ,
{ 26 , 30 } , { 37 , 20 } , { 28 , 34 } , { 17 , 70 } ,
{ - 4 , 79 } , { - 7 , 71 } , { - 5 , 69 } , { - 9 , 70 } ,
{ - 8 , 66 } , { - 10 , 68 } , { - 19 , 73 } , { - 12 , 69 } ,
{ - 16 , 70 } , { - 15 , 67 } , { - 20 , 62 } , { - 19 , 70 } ,
{ - 16 , 66 } , { - 22 , 65 } , { - 20 , 63 } , { - 5 , 85 } ,
{ - 6 , 81 } , { - 10 , 77 } , { - 7 , 81 } , { - 17 , 80 } ,
{ - 18 , 73 } , { - 4 , 74 } , { - 10 , 83 } , { - 9 , 71 } ,
{ - 9 , 67 } , { - 1 , 61 } , { - 8 , 66 } , { - 14 , 66 } ,
{ 0 , 59 } , { 2 , 59 } , { 9 , - 2 } , { 26 , - 9 } ,
{ 33 , - 9 } , { 39 , - 7 } , { 41 , - 2 } , { 45 , 3 } ,
{ 49 , 9 } , { 45 , 27 } , { 36 , 59 } , { 21 , - 13 } ,
{ 33 , - 14 } , { 39 , - 7 } , { 46 , - 2 } , { 51 , 2 } ,
{ 60 , 6 } , { 61 , 17 } , { 55 , 34 } , { 42 , 62 } ,
{ - 6 , 66 } , { - 7 , 35 } , { - 7 , 42 } , { - 8 , 45 } ,
{ - 5 , 48 } , { - 12 , 56 } , { - 6 , 60 } , { - 5 , 62 } ,
{ - 8 , 66 } , { - 8 , 76 } , { - 4 , 79 } , { - 7 , 71 } ,
{ - 5 , 69 } , { - 9 , 70 } , { - 8 , 66 } , { - 10 , 68 } ,
{ - 19 , 73 } , { - 12 , 69 } , { - 16 , 70 } , { - 15 , 67 } ,
{ - 20 , 62 } , { - 19 , 70 } , { - 16 , 66 } , { - 22 , 65 } ,
{ - 20 , 63 } , { - 5 , 85 } , { - 6 , 81 } , { - 10 , 77 } ,
{ - 7 , 81 } , { - 17 , 80 } , { - 18 , 73 } , { - 4 , 74 } ,
{ - 10 , 83 } , { - 9 , 71 } , { - 9 , 67 } , { - 1 , 61 } ,
{ - 8 , 66 } , { - 14 , 66 } , { 0 , 59 } , { 2 , 59 } ,
{ 9 , - 2 } , { 26 , - 9 } , { 33 , - 9 } , { 39 , - 7 } ,
{ 41 , - 2 } , { 45 , 3 } , { 49 , 9 } , { 45 , 27 } ,
{ 36 , 59 } , { 21 , - 13 } , { 33 , - 14 } , { 39 , - 7 } ,
{ 46 , - 2 } , { 51 , 2 } , { 60 , 6 } , { 61 , 17 } ,
{ 55 , 34 } , { 42 , 62 } , { - 6 , 66 } , { - 7 , 35 } ,
{ - 7 , 42 } , { - 8 , 45 } , { - 5 , 48 } , { - 12 , 56 } ,
{ - 6 , 60 } , { - 5 , 62 } , { - 8 , 66 } , { - 8 , 76 } ,
{ - 13 , 106 } , { - 16 , 106 } , { - 10 , 87 } , { - 21 , 114 } ,
{ - 18 , 110 } , { - 14 , 98 } , { - 22 , 110 } , { - 21 , 106 } ,
{ - 18 , 103 } , { - 21 , 107 } , { - 23 , 108 } , { - 26 , 112 } ,
{ - 10 , 96 } , { - 12 , 95 } , { - 5 , 91 } , { - 9 , 93 } ,
{ - 22 , 94 } , { - 5 , 86 } , { 9 , 67 } , { - 4 , 80 } ,
{ - 10 , 85 } , { - 1 , 70 } , { 7 , 60 } , { 9 , 58 } ,
{ 5 , 61 } , { 12 , 50 } , { 15 , 50 } , { 18 , 49 } ,
{ 17 , 54 } , { 10 , 41 } , { 7 , 46 } , { - 1 , 51 } ,
{ 7 , 49 } , { 8 , 52 } , { 9 , 41 } , { 6 , 47 } ,
{ 2 , 55 } , { 13 , 41 } , { 10 , 44 } , { 6 , 50 } ,
{ 5 , 53 } , { 13 , 49 } , { 4 , 63 } , { 6 , 64 } ,
{ - 13 , 106 } , { - 16 , 106 } , { - 10 , 87 } , { - 21 , 114 } ,
{ - 18 , 110 } , { - 14 , 98 } , { - 22 , 110 } , { - 21 , 106 } ,
{ - 18 , 103 } , { - 21 , 107 } , { - 23 , 108 } , { - 26 , 112 } ,
{ - 10 , 96 } , { - 12 , 95 } , { - 5 , 91 } , { - 9 , 93 } ,
{ - 22 , 94 } , { - 5 , 86 } , { 9 , 67 } , { - 4 , 80 } ,
{ - 10 , 85 } , { - 1 , 70 } , { 7 , 60 } , { 9 , 58 } ,
{ 5 , 61 } , { 12 , 50 } , { 15 , 50 } , { 18 , 49 } ,
{ 17 , 54 } , { 10 , 41 } , { 7 , 46 } , { - 1 , 51 } ,
{ 7 , 49 } , { 8 , 52 } , { 9 , 41 } , { 6 , 47 } ,
{ 2 , 55 } , { 13 , 41 } , { 10 , 44 } , { 6 , 50 } ,
{ 5 , 53 } , { 13 , 49 } , { 4 , 63 } , { 6 , 64 } ,
{ 14 , 11 } , { 11 , 14 } , { 9 , 11 } , { 18 , 11 } ,
{ 21 , 9 } , { 23 , - 2 } , { 32 , - 15 } , { 32 , - 15 } ,
{ 34 , - 21 } , { 39 , - 23 } , { 42 , - 33 } , { 41 , - 31 } ,
{ 46 , - 28 } , { 38 , - 12 } , { 21 , 29 } , { 45 , - 24 } ,
{ 53 , - 45 } , { 48 , - 26 } , { 65 , - 43 } , { 43 , - 19 } ,
{ 39 , - 10 } , { 30 , 9 } , { 18 , 26 } , { 20 , 27 } ,
{ 0 , 57 } , { - 14 , 82 } , { - 5 , 75 } , { - 19 , 97 } ,
{ - 35 , 125 } , { 27 , 0 } , { 28 , 0 } , { 31 , - 4 } ,
{ 27 , 6 } , { 34 , 8 } , { 30 , 10 } , { 24 , 22 } ,
{ 33 , 19 } , { 22 , 32 } , { 26 , 31 } , { 21 , 41 } ,
{ 26 , 44 } , { 23 , 47 } , { 16 , 65 } , { 14 , 71 } ,
{ 14 , 11 } , { 11 , 14 } , { 9 , 11 } , { 18 , 11 } ,
{ 21 , 9 } , { 23 , - 2 } , { 32 , - 15 } , { 32 , - 15 } ,
{ 34 , - 21 } , { 39 , - 23 } , { 42 , - 33 } , { 41 , - 31 } ,
{ 46 , - 28 } , { 38 , - 12 } , { 21 , 29 } , { 45 , - 24 } ,
{ 53 , - 45 } , { 48 , - 26 } , { 65 , - 43 } , { 43 , - 19 } ,
{ 39 , - 10 } , { 30 , 9 } , { 18 , 26 } , { 20 , 27 } ,
{ 0 , 57 } , { - 14 , 82 } , { - 5 , 75 } , { - 19 , 97 } ,
{ - 35 , 125 } , { 27 , 0 } , { 28 , 0 } , { 31 , - 4 } ,
{ 27 , 6 } , { 34 , 8 } , { 30 , 10 } , { 24 , 22 } ,
{ 33 , 19 } , { 22 , 32 } , { 26 , 31 } , { 21 , 41 } ,
{ 26 , 44 } , { 23 , 47 } , { 16 , 65 } , { 14 , 71 } ,
{ - 6 , 76 } , { - 2 , 44 } , { 0 , 45 } , { 0 , 52 } ,
{ - 3 , 64 } , { - 2 , 59 } , { - 4 , 70 } , { - 4 , 75 } ,
{ - 8 , 82 } , { - 17 , 102 } , { - 9 , 77 } , { 3 , 24 } ,
{ 0 , 42 } , { 0 , 48 } , { 0 , 55 } , { - 6 , 59 } ,
{ - 7 , 71 } , { - 12 , 83 } , { - 11 , 87 } , { - 30 , 119 } ,
{ 1 , 58 } , { - 3 , 29 } , { - 1 , 36 } , { 1 , 38 } ,
{ 2 , 43 } , { - 6 , 55 } , { 0 , 58 } , { 0 , 64 } ,
{ - 3 , 74 } , { - 10 , 90 } , { - 6 , 76 } , { - 2 , 44 } ,
{ 0 , 45 } , { 0 , 52 } , { - 3 , 64 } , { - 2 , 59 } ,
{ - 4 , 70 } , { - 4 , 75 } , { - 8 , 82 } , { - 17 , 102 } ,
{ - 9 , 77 } , { 3 , 24 } , { 0 , 42 } , { 0 , 48 } ,
{ 0 , 55 } , { - 6 , 59 } , { - 7 , 71 } , { - 12 , 83 } ,
{ - 11 , 87 } , { - 30 , 119 } , { 1 , 58 } , { - 3 , 29 } ,
{ - 1 , 36 } , { 1 , 38 } , { 2 , 43 } , { - 6 , 55 } ,
{ 0 , 58 } , { 0 , 64 } , { - 3 , 74 } , { - 10 , 90 } ,
{ - 3 , 74 } , { - 9 , 92 } , { - 8 , 87 } , { - 23 , 126 } ,
{ - 3 , 74 } , { - 9 , 92 } , { - 8 , 87 } , { - 23 , 126 } ,
{ - 3 , 74 } , { - 9 , 92 } , { - 8 , 87 } , { - 23 , 126 }
} ,
/* i_cabac_init_idc == 1 */
@ -526,6 +812,149 @@ static const int8_t cabac_context_init_PB[3][460][2] =
{ - 9 , 60 } , { 1 , 54 } , { 2 , 58 } , { 17 , - 10 } ,
{ 32 , - 13 } , { 42 , - 9 } , { 49 , - 5 } , { 53 , 0 } ,
{ 64 , 3 } , { 68 , 10 } , { 66 , 27 } , { 47 , 57 } ,
/* 460 - 1024 */
{ 0 , 80 } , { - 5 , 89 } , { - 7 , 94 } , { - 4 , 92 } ,
{ 0 , 39 } , { 0 , 65 } , { - 15 , 84 } , { - 35 , 127 } ,
{ - 2 , 73 } , { - 12 , 104 } , { - 9 , 91 } , { - 31 , 127 } ,
{ 0 , 80 } , { - 5 , 89 } , { - 7 , 94 } , { - 4 , 92 } ,
{ 0 , 39 } , { 0 , 65 } , { - 15 , 84 } , { - 35 , 127 } ,
{ - 2 , 73 } , { - 12 , 104 } , { - 9 , 91 } , { - 31 , 127 } ,
{ - 13 , 103 } , { - 13 , 91 } , { - 9 , 89 } , { - 14 , 92 } ,
{ - 8 , 76 } , { - 12 , 87 } , { - 23 , 110 } , { - 24 , 105 } ,
{ - 10 , 78 } , { - 20 , 112 } , { - 17 , 99 } , { - 78 , 127 } ,
{ - 70 , 127 } , { - 50 , 127 } , { - 46 , 127 } , { - 4 , 66 } ,
{ - 5 , 78 } , { - 4 , 71 } , { - 8 , 72 } , { 2 , 59 } ,
{ - 1 , 55 } , { - 7 , 70 } , { - 6 , 75 } , { - 8 , 89 } ,
{ - 34 , 119 } , { - 3 , 75 } , { 32 , 20 } , { 30 , 22 } ,
{ - 44 , 127 } , { 0 , 54 } , { - 5 , 61 } , { 0 , 58 } ,
{ - 1 , 60 } , { - 3 , 61 } , { - 8 , 67 } , { - 25 , 84 } ,
{ - 14 , 74 } , { - 5 , 65 } , { 5 , 52 } , { 2 , 57 } ,
{ 0 , 61 } , { - 9 , 69 } , { - 11 , 70 } , { 18 , 55 } ,
{ - 13 , 103 } , { - 13 , 91 } , { - 9 , 89 } , { - 14 , 92 } ,
{ - 8 , 76 } , { - 12 , 87 } , { - 23 , 110 } , { - 24 , 105 } ,
{ - 10 , 78 } , { - 20 , 112 } , { - 17 , 99 } , { - 78 , 127 } ,
{ - 70 , 127 } , { - 50 , 127 } , { - 46 , 127 } , { - 4 , 66 } ,
{ - 5 , 78 } , { - 4 , 71 } , { - 8 , 72 } , { 2 , 59 } ,
{ - 1 , 55 } , { - 7 , 70 } , { - 6 , 75 } , { - 8 , 89 } ,
{ - 34 , 119 } , { - 3 , 75 } , { 32 , 20 } , { 30 , 22 } ,
{ - 44 , 127 } , { 0 , 54 } , { - 5 , 61 } , { 0 , 58 } ,
{ - 1 , 60 } , { - 3 , 61 } , { - 8 , 67 } , { - 25 , 84 } ,
{ - 14 , 74 } , { - 5 , 65 } , { 5 , 52 } , { 2 , 57 } ,
{ 0 , 61 } , { - 9 , 69 } , { - 11 , 70 } , { 18 , 55 } ,
{ 4 , 45 } , { 10 , 28 } , { 10 , 31 } , { 33 , - 11 } ,
{ 52 , - 43 } , { 18 , 15 } , { 28 , 0 } , { 35 , - 22 } ,
{ 38 , - 25 } , { 34 , 0 } , { 39 , - 18 } , { 32 , - 12 } ,
{ 102 , - 94 } , { 0 , 0 } , { 56 , - 15 } , { 33 , - 4 } ,
{ 29 , 10 } , { 37 , - 5 } , { 51 , - 29 } , { 39 , - 9 } ,
{ 52 , - 34 } , { 69 , - 58 } , { 67 , - 63 } , { 44 , - 5 } ,
{ 32 , 7 } , { 55 , - 29 } , { 32 , 1 } , { 0 , 0 } ,
{ 27 , 36 } , { 33 , - 25 } , { 34 , - 30 } , { 36 , - 28 } ,
{ 38 , - 28 } , { 38 , - 27 } , { 34 , - 18 } , { 35 , - 16 } ,
{ 34 , - 14 } , { 32 , - 8 } , { 37 , - 6 } , { 35 , 0 } ,
{ 30 , 10 } , { 28 , 18 } , { 26 , 25 } , { 29 , 41 } ,
{ 4 , 45 } , { 10 , 28 } , { 10 , 31 } , { 33 , - 11 } ,
{ 52 , - 43 } , { 18 , 15 } , { 28 , 0 } , { 35 , - 22 } ,
{ 38 , - 25 } , { 34 , 0 } , { 39 , - 18 } , { 32 , - 12 } ,
{ 102 , - 94 } , { 0 , 0 } , { 56 , - 15 } , { 33 , - 4 } ,
{ 29 , 10 } , { 37 , - 5 } , { 51 , - 29 } , { 39 , - 9 } ,
{ 52 , - 34 } , { 69 , - 58 } , { 67 , - 63 } , { 44 , - 5 } ,
{ 32 , 7 } , { 55 , - 29 } , { 32 , 1 } , { 0 , 0 } ,
{ 27 , 36 } , { 33 , - 25 } , { 34 , - 30 } , { 36 , - 28 } ,
{ 38 , - 28 } , { 38 , - 27 } , { 34 , - 18 } , { 35 , - 16 } ,
{ 34 , - 14 } , { 32 , - 8 } , { 37 , - 6 } , { 35 , 0 } ,
{ 30 , 10 } , { 28 , 18 } , { 26 , 25 } , { 29 , 41 } ,
{ - 5 , 85 } , { - 6 , 81 } , { - 10 , 77 } , { - 7 , 81 } ,
{ - 17 , 80 } , { - 18 , 73 } , { - 4 , 74 } , { - 10 , 83 } ,
{ - 9 , 71 } , { - 9 , 67 } , { - 1 , 61 } , { - 8 , 66 } ,
{ - 14 , 66 } , { 0 , 59 } , { 2 , 59 } , { - 3 , 81 } ,
{ - 3 , 76 } , { - 7 , 72 } , { - 6 , 78 } , { - 12 , 72 } ,
{ - 14 , 68 } , { - 3 , 70 } , { - 6 , 76 } , { - 5 , 66 } ,
{ - 5 , 62 } , { 0 , 57 } , { - 4 , 61 } , { - 9 , 60 } ,
{ 1 , 54 } , { 2 , 58 } , { 17 , - 10 } , { 32 , - 13 } ,
{ 42 , - 9 } , { 49 , - 5 } , { 53 , 0 } , { 64 , 3 } ,
{ 68 , 10 } , { 66 , 27 } , { 47 , 57 } , { 17 , - 10 } ,
{ 32 , - 13 } , { 42 , - 9 } , { 49 , - 5 } , { 53 , 0 } ,
{ 64 , 3 } , { 68 , 10 } , { 66 , 27 } , { 47 , 57 } ,
{ - 5 , 71 } , { 0 , 24 } , { - 1 , 36 } , { - 2 , 42 } ,
{ - 2 , 52 } , { - 9 , 57 } , { - 6 , 63 } , { - 4 , 65 } ,
{ - 4 , 67 } , { - 7 , 82 } , { - 5 , 85 } , { - 6 , 81 } ,
{ - 10 , 77 } , { - 7 , 81 } , { - 17 , 80 } , { - 18 , 73 } ,
{ - 4 , 74 } , { - 10 , 83 } , { - 9 , 71 } , { - 9 , 67 } ,
{ - 1 , 61 } , { - 8 , 66 } , { - 14 , 66 } , { 0 , 59 } ,
{ 2 , 59 } , { - 3 , 81 } , { - 3 , 76 } , { - 7 , 72 } ,
{ - 6 , 78 } , { - 12 , 72 } , { - 14 , 68 } , { - 3 , 70 } ,
{ - 6 , 76 } , { - 5 , 66 } , { - 5 , 62 } , { 0 , 57 } ,
{ - 4 , 61 } , { - 9 , 60 } , { 1 , 54 } , { 2 , 58 } ,
{ 17 , - 10 } , { 32 , - 13 } , { 42 , - 9 } , { 49 , - 5 } ,
{ 53 , 0 } , { 64 , 3 } , { 68 , 10 } , { 66 , 27 } ,
{ 47 , 57 } , { 17 , - 10 } , { 32 , - 13 } , { 42 , - 9 } ,
{ 49 , - 5 } , { 53 , 0 } , { 64 , 3 } , { 68 , 10 } ,
{ 66 , 27 } , { 47 , 57 } , { - 5 , 71 } , { 0 , 24 } ,
{ - 1 , 36 } , { - 2 , 42 } , { - 2 , 52 } , { - 9 , 57 } ,
{ - 6 , 63 } , { - 4 , 65 } , { - 4 , 67 } , { - 7 , 82 } ,
{ - 21 , 126 } , { - 23 , 124 } , { - 20 , 110 } , { - 26 , 126 } ,
{ - 25 , 124 } , { - 17 , 105 } , { - 27 , 121 } , { - 27 , 117 } ,
{ - 17 , 102 } , { - 26 , 117 } , { - 27 , 116 } , { - 33 , 122 } ,
{ - 10 , 95 } , { - 14 , 100 } , { - 8 , 95 } , { - 17 , 111 } ,
{ - 28 , 114 } , { - 6 , 89 } , { - 2 , 80 } , { - 4 , 82 } ,
{ - 9 , 85 } , { - 8 , 81 } , { - 1 , 72 } , { 5 , 64 } ,
{ 1 , 67 } , { 9 , 56 } , { 0 , 69 } , { 1 , 69 } ,
{ 7 , 69 } , { - 7 , 69 } , { - 6 , 67 } , { - 16 , 77 } ,
{ - 2 , 64 } , { 2 , 61 } , { - 6 , 67 } , { - 3 , 64 } ,
{ 2 , 57 } , { - 3 , 65 } , { - 3 , 66 } , { 0 , 62 } ,
{ 9 , 51 } , { - 1 , 66 } , { - 2 , 71 } , { - 2 , 75 } ,
{ - 21 , 126 } , { - 23 , 124 } , { - 20 , 110 } , { - 26 , 126 } ,
{ - 25 , 124 } , { - 17 , 105 } , { - 27 , 121 } , { - 27 , 117 } ,
{ - 17 , 102 } , { - 26 , 117 } , { - 27 , 116 } , { - 33 , 122 } ,
{ - 10 , 95 } , { - 14 , 100 } , { - 8 , 95 } , { - 17 , 111 } ,
{ - 28 , 114 } , { - 6 , 89 } , { - 2 , 80 } , { - 4 , 82 } ,
{ - 9 , 85 } , { - 8 , 81 } , { - 1 , 72 } , { 5 , 64 } ,
{ 1 , 67 } , { 9 , 56 } , { 0 , 69 } , { 1 , 69 } ,
{ 7 , 69 } , { - 7 , 69 } , { - 6 , 67 } , { - 16 , 77 } ,
{ - 2 , 64 } , { 2 , 61 } , { - 6 , 67 } , { - 3 , 64 } ,
{ 2 , 57 } , { - 3 , 65 } , { - 3 , 66 } , { 0 , 62 } ,
{ 9 , 51 } , { - 1 , 66 } , { - 2 , 71 } , { - 2 , 75 } ,
{ 19 , - 6 } , { 18 , - 6 } , { 14 , 0 } , { 26 , - 12 } ,
{ 31 , - 16 } , { 33 , - 25 } , { 33 , - 22 } , { 37 , - 28 } ,
{ 39 , - 30 } , { 42 , - 30 } , { 47 , - 42 } , { 45 , - 36 } ,
{ 49 , - 34 } , { 41 , - 17 } , { 32 , 9 } , { 69 , - 71 } ,
{ 63 , - 63 } , { 66 , - 64 } , { 77 , - 74 } , { 54 , - 39 } ,
{ 52 , - 35 } , { 41 , - 10 } , { 36 , 0 } , { 40 , - 1 } ,
{ 30 , 14 } , { 28 , 26 } , { 23 , 37 } , { 12 , 55 } ,
{ 11 , 65 } , { 37 , - 33 } , { 39 , - 36 } , { 40 , - 37 } ,
{ 38 , - 30 } , { 46 , - 33 } , { 42 , - 30 } , { 40 , - 24 } ,
{ 49 , - 29 } , { 38 , - 12 } , { 40 , - 10 } , { 38 , - 3 } ,
{ 46 , - 5 } , { 31 , 20 } , { 29 , 30 } , { 25 , 44 } ,
{ 19 , - 6 } , { 18 , - 6 } , { 14 , 0 } , { 26 , - 12 } ,
{ 31 , - 16 } , { 33 , - 25 } , { 33 , - 22 } , { 37 , - 28 } ,
{ 39 , - 30 } , { 42 , - 30 } , { 47 , - 42 } , { 45 , - 36 } ,
{ 49 , - 34 } , { 41 , - 17 } , { 32 , 9 } , { 69 , - 71 } ,
{ 63 , - 63 } , { 66 , - 64 } , { 77 , - 74 } , { 54 , - 39 } ,
{ 52 , - 35 } , { 41 , - 10 } , { 36 , 0 } , { 40 , - 1 } ,
{ 30 , 14 } , { 28 , 26 } , { 23 , 37 } , { 12 , 55 } ,
{ 11 , 65 } , { 37 , - 33 } , { 39 , - 36 } , { 40 , - 37 } ,
{ 38 , - 30 } , { 46 , - 33 } , { 42 , - 30 } , { 40 , - 24 } ,
{ 49 , - 29 } , { 38 , - 12 } , { 40 , - 10 } , { 38 , - 3 } ,
{ 46 , - 5 } , { 31 , 20 } , { 29 , 30 } , { 25 , 44 } ,
{ - 23 , 112 } , { - 15 , 71 } , { - 7 , 61 } , { 0 , 53 } ,
{ - 5 , 66 } , { - 11 , 77 } , { - 9 , 80 } , { - 9 , 84 } ,
{ - 10 , 87 } , { - 34 , 127 } , { - 21 , 101 } , { - 3 , 39 } ,
{ - 5 , 53 } , { - 7 , 61 } , { - 11 , 75 } , { - 15 , 77 } ,
{ - 17 , 91 } , { - 25 , 107 } , { - 25 , 111 } , { - 28 , 122 } ,
{ - 11 , 76 } , { - 10 , 44 } , { - 10 , 52 } , { - 10 , 57 } ,
{ - 9 , 58 } , { - 16 , 72 } , { - 7 , 69 } , { - 4 , 69 } ,
{ - 5 , 74 } , { - 9 , 86 } , { - 23 , 112 } , { - 15 , 71 } ,
{ - 7 , 61 } , { 0 , 53 } , { - 5 , 66 } , { - 11 , 77 } ,
{ - 9 , 80 } , { - 9 , 84 } , { - 10 , 87 } , { - 34 , 127 } ,
{ - 21 , 101 } , { - 3 , 39 } , { - 5 , 53 } , { - 7 , 61 } ,
{ - 11 , 75 } , { - 15 , 77 } , { - 17 , 91 } , { - 25 , 107 } ,
{ - 25 , 111 } , { - 28 , 122 } , { - 11 , 76 } , { - 10 , 44 } ,
{ - 10 , 52 } , { - 10 , 57 } , { - 9 , 58 } , { - 16 , 72 } ,
{ - 7 , 69 } , { - 4 , 69 } , { - 5 , 74 } , { - 9 , 86 } ,
{ - 2 , 73 } , { - 12 , 104 } , { - 9 , 91 } , { - 31 , 127 } ,
{ - 2 , 73 } , { - 12 , 104 } , { - 9 , 91 } , { - 31 , 127 } ,
{ - 2 , 73 } , { - 12 , 104 } , { - 9 , 91 } , { - 31 , 127 }
} ,
/* i_cabac_init_idc == 2 */
@ -682,6 +1111,149 @@ static const int8_t cabac_context_init_PB[3][460][2] =
{ - 14 , 59 } , { - 9 , 52 } , { - 11 , 68 } , { 9 , - 2 } ,
{ 30 , - 10 } , { 31 , - 4 } , { 33 , - 1 } , { 33 , 7 } ,
{ 31 , 12 } , { 37 , 23 } , { 31 , 38 } , { 20 , 64 } ,
/* 460 - 1024 */
{ 11 , 80 } , { 5 , 76 } , { 2 , 84 } , { 5 , 78 } ,
{ - 6 , 55 } , { 4 , 61 } , { - 14 , 83 } , { - 37 , 127 } ,
{ - 5 , 79 } , { - 11 , 104 } , { - 11 , 91 } , { - 30 , 127 } ,
{ 11 , 80 } , { 5 , 76 } , { 2 , 84 } , { 5 , 78 } ,
{ - 6 , 55 } , { 4 , 61 } , { - 14 , 83 } , { - 37 , 127 } ,
{ - 5 , 79 } , { - 11 , 104 } , { - 11 , 91 } , { - 30 , 127 } ,
{ - 4 , 86 } , { - 12 , 88 } , { - 5 , 82 } , { - 3 , 72 } ,
{ - 4 , 67 } , { - 8 , 72 } , { - 16 , 89 } , { - 9 , 69 } ,
{ - 1 , 59 } , { 5 , 66 } , { 4 , 57 } , { - 4 , 71 } ,
{ - 2 , 71 } , { 2 , 58 } , { - 1 , 74 } , { - 4 , 44 } ,
{ - 1 , 69 } , { 0 , 62 } , { - 7 , 51 } , { - 4 , 47 } ,
{ - 6 , 42 } , { - 3 , 41 } , { - 6 , 53 } , { 8 , 76 } ,
{ - 9 , 78 } , { - 11 , 83 } , { 9 , 52 } , { 0 , 67 } ,
{ - 5 , 90 } , { 1 , 67 } , { - 15 , 72 } , { - 5 , 75 } ,
{ - 8 , 80 } , { - 21 , 83 } , { - 21 , 64 } , { - 13 , 31 } ,
{ - 25 , 64 } , { - 29 , 94 } , { 9 , 75 } , { 17 , 63 } ,
{ - 8 , 74 } , { - 5 , 35 } , { - 2 , 27 } , { 13 , 91 } ,
{ - 4 , 86 } , { - 12 , 88 } , { - 5 , 82 } , { - 3 , 72 } ,
{ - 4 , 67 } , { - 8 , 72 } , { - 16 , 89 } , { - 9 , 69 } ,
{ - 1 , 59 } , { 5 , 66 } , { 4 , 57 } , { - 4 , 71 } ,
{ - 2 , 71 } , { 2 , 58 } , { - 1 , 74 } , { - 4 , 44 } ,
{ - 1 , 69 } , { 0 , 62 } , { - 7 , 51 } , { - 4 , 47 } ,
{ - 6 , 42 } , { - 3 , 41 } , { - 6 , 53 } , { 8 , 76 } ,
{ - 9 , 78 } , { - 11 , 83 } , { 9 , 52 } , { 0 , 67 } ,
{ - 5 , 90 } , { 1 , 67 } , { - 15 , 72 } , { - 5 , 75 } ,
{ - 8 , 80 } , { - 21 , 83 } , { - 21 , 64 } , { - 13 , 31 } ,
{ - 25 , 64 } , { - 29 , 94 } , { 9 , 75 } , { 17 , 63 } ,
{ - 8 , 74 } , { - 5 , 35 } , { - 2 , 27 } , { 13 , 91 } ,
{ 4 , 39 } , { 0 , 42 } , { 7 , 34 } , { 11 , 29 } ,
{ 8 , 31 } , { 6 , 37 } , { 7 , 42 } , { 3 , 40 } ,
{ 8 , 33 } , { 13 , 43 } , { 13 , 36 } , { 4 , 47 } ,
{ 3 , 55 } , { 2 , 58 } , { 6 , 60 } , { 8 , 44 } ,
{ 11 , 44 } , { 14 , 42 } , { 7 , 48 } , { 4 , 56 } ,
{ 4 , 52 } , { 13 , 37 } , { 9 , 49 } , { 19 , 58 } ,
{ 10 , 48 } , { 12 , 45 } , { 0 , 69 } , { 20 , 33 } ,
{ 8 , 63 } , { 35 , - 18 } , { 33 , - 25 } , { 28 , - 3 } ,
{ 24 , 10 } , { 27 , 0 } , { 34 , - 14 } , { 52 , - 44 } ,
{ 39 , - 24 } , { 19 , 17 } , { 31 , 25 } , { 36 , 29 } ,
{ 24 , 33 } , { 34 , 15 } , { 30 , 20 } , { 22 , 73 } ,
{ 4 , 39 } , { 0 , 42 } , { 7 , 34 } , { 11 , 29 } ,
{ 8 , 31 } , { 6 , 37 } , { 7 , 42 } , { 3 , 40 } ,
{ 8 , 33 } , { 13 , 43 } , { 13 , 36 } , { 4 , 47 } ,
{ 3 , 55 } , { 2 , 58 } , { 6 , 60 } , { 8 , 44 } ,
{ 11 , 44 } , { 14 , 42 } , { 7 , 48 } , { 4 , 56 } ,
{ 4 , 52 } , { 13 , 37 } , { 9 , 49 } , { 19 , 58 } ,
{ 10 , 48 } , { 12 , 45 } , { 0 , 69 } , { 20 , 33 } ,
{ 8 , 63 } , { 35 , - 18 } , { 33 , - 25 } , { 28 , - 3 } ,
{ 24 , 10 } , { 27 , 0 } , { 34 , - 14 } , { 52 , - 44 } ,
{ 39 , - 24 } , { 19 , 17 } , { 31 , 25 } , { 36 , 29 } ,
{ 24 , 33 } , { 34 , 15 } , { 30 , 20 } , { 22 , 73 } ,
{ - 3 , 78 } , { - 8 , 74 } , { - 9 , 72 } , { - 10 , 72 } ,
{ - 18 , 75 } , { - 12 , 71 } , { - 11 , 63 } , { - 5 , 70 } ,
{ - 17 , 75 } , { - 14 , 72 } , { - 16 , 67 } , { - 8 , 53 } ,
{ - 14 , 59 } , { - 9 , 52 } , { - 11 , 68 } , { - 3 , 78 } ,
{ - 8 , 74 } , { - 9 , 72 } , { - 10 , 72 } , { - 18 , 75 } ,
{ - 12 , 71 } , { - 11 , 63 } , { - 5 , 70 } , { - 17 , 75 } ,
{ - 14 , 72 } , { - 16 , 67 } , { - 8 , 53 } , { - 14 , 59 } ,
{ - 9 , 52 } , { - 11 , 68 } , { 9 , - 2 } , { 30 , - 10 } ,
{ 31 , - 4 } , { 33 , - 1 } , { 33 , 7 } , { 31 , 12 } ,
{ 37 , 23 } , { 31 , 38 } , { 20 , 64 } , { 9 , - 2 } ,
{ 30 , - 10 } , { 31 , - 4 } , { 33 , - 1 } , { 33 , 7 } ,
{ 31 , 12 } , { 37 , 23 } , { 31 , 38 } , { 20 , 64 } ,
{ - 9 , 71 } , { - 7 , 37 } , { - 8 , 44 } , { - 11 , 49 } ,
{ - 10 , 56 } , { - 12 , 59 } , { - 8 , 63 } , { - 9 , 67 } ,
{ - 6 , 68 } , { - 10 , 79 } , { - 3 , 78 } , { - 8 , 74 } ,
{ - 9 , 72 } , { - 10 , 72 } , { - 18 , 75 } , { - 12 , 71 } ,
{ - 11 , 63 } , { - 5 , 70 } , { - 17 , 75 } , { - 14 , 72 } ,
{ - 16 , 67 } , { - 8 , 53 } , { - 14 , 59 } , { - 9 , 52 } ,
{ - 11 , 68 } , { - 3 , 78 } , { - 8 , 74 } , { - 9 , 72 } ,
{ - 10 , 72 } , { - 18 , 75 } , { - 12 , 71 } , { - 11 , 63 } ,
{ - 5 , 70 } , { - 17 , 75 } , { - 14 , 72 } , { - 16 , 67 } ,
{ - 8 , 53 } , { - 14 , 59 } , { - 9 , 52 } , { - 11 , 68 } ,
{ 9 , - 2 } , { 30 , - 10 } , { 31 , - 4 } , { 33 , - 1 } ,
{ 33 , 7 } , { 31 , 12 } , { 37 , 23 } , { 31 , 38 } ,
{ 20 , 64 } , { 9 , - 2 } , { 30 , - 10 } , { 31 , - 4 } ,
{ 33 , - 1 } , { 33 , 7 } , { 31 , 12 } , { 37 , 23 } ,
{ 31 , 38 } , { 20 , 64 } , { - 9 , 71 } , { - 7 , 37 } ,
{ - 8 , 44 } , { - 11 , 49 } , { - 10 , 56 } , { - 12 , 59 } ,
{ - 8 , 63 } , { - 9 , 67 } , { - 6 , 68 } , { - 10 , 79 } ,
{ - 22 , 127 } , { - 25 , 127 } , { - 25 , 120 } , { - 27 , 127 } ,
{ - 19 , 114 } , { - 23 , 117 } , { - 25 , 118 } , { - 26 , 117 } ,
{ - 24 , 113 } , { - 28 , 118 } , { - 31 , 120 } , { - 37 , 124 } ,
{ - 10 , 94 } , { - 15 , 102 } , { - 10 , 99 } , { - 13 , 106 } ,
{ - 50 , 127 } , { - 5 , 92 } , { 17 , 57 } , { - 5 , 86 } ,
{ - 13 , 94 } , { - 12 , 91 } , { - 2 , 77 } , { 0 , 71 } ,
{ - 1 , 73 } , { 4 , 64 } , { - 7 , 81 } , { 5 , 64 } ,
{ 15 , 57 } , { 1 , 67 } , { 0 , 68 } , { - 10 , 67 } ,
{ 1 , 68 } , { 0 , 77 } , { 2 , 64 } , { 0 , 68 } ,
{ - 5 , 78 } , { 7 , 55 } , { 5 , 59 } , { 2 , 65 } ,
{ 14 , 54 } , { 15 , 44 } , { 5 , 60 } , { 2 , 70 } ,
{ - 22 , 127 } , { - 25 , 127 } , { - 25 , 120 } , { - 27 , 127 } ,
{ - 19 , 114 } , { - 23 , 117 } , { - 25 , 118 } , { - 26 , 117 } ,
{ - 24 , 113 } , { - 28 , 118 } , { - 31 , 120 } , { - 37 , 124 } ,
{ - 10 , 94 } , { - 15 , 102 } , { - 10 , 99 } , { - 13 , 106 } ,
{ - 50 , 127 } , { - 5 , 92 } , { 17 , 57 } , { - 5 , 86 } ,
{ - 13 , 94 } , { - 12 , 91 } , { - 2 , 77 } , { 0 , 71 } ,
{ - 1 , 73 } , { 4 , 64 } , { - 7 , 81 } , { 5 , 64 } ,
{ 15 , 57 } , { 1 , 67 } , { 0 , 68 } , { - 10 , 67 } ,
{ 1 , 68 } , { 0 , 77 } , { 2 , 64 } , { 0 , 68 } ,
{ - 5 , 78 } , { 7 , 55 } , { 5 , 59 } , { 2 , 65 } ,
{ 14 , 54 } , { 15 , 44 } , { 5 , 60 } , { 2 , 70 } ,
{ 17 , - 13 } , { 16 , - 9 } , { 17 , - 12 } , { 27 , - 21 } ,
{ 37 , - 30 } , { 41 , - 40 } , { 42 , - 41 } , { 48 , - 47 } ,
{ 39 , - 32 } , { 46 , - 40 } , { 52 , - 51 } , { 46 , - 41 } ,
{ 52 , - 39 } , { 43 , - 19 } , { 32 , 11 } , { 61 , - 55 } ,
{ 56 , - 46 } , { 62 , - 50 } , { 81 , - 67 } , { 45 , - 20 } ,
{ 35 , - 2 } , { 28 , 15 } , { 34 , 1 } , { 39 , 1 } ,
{ 30 , 17 } , { 20 , 38 } , { 18 , 45 } , { 15 , 54 } ,
{ 0 , 79 } , { 36 , - 16 } , { 37 , - 14 } , { 37 , - 17 } ,
{ 32 , 1 } , { 34 , 15 } , { 29 , 15 } , { 24 , 25 } ,
{ 34 , 22 } , { 31 , 16 } , { 35 , 18 } , { 31 , 28 } ,
{ 33 , 41 } , { 36 , 28 } , { 27 , 47 } , { 21 , 62 } ,
{ 17 , - 13 } , { 16 , - 9 } , { 17 , - 12 } , { 27 , - 21 } ,
{ 37 , - 30 } , { 41 , - 40 } , { 42 , - 41 } , { 48 , - 47 } ,
{ 39 , - 32 } , { 46 , - 40 } , { 52 , - 51 } , { 46 , - 41 } ,
{ 52 , - 39 } , { 43 , - 19 } , { 32 , 11 } , { 61 , - 55 } ,
{ 56 , - 46 } , { 62 , - 50 } , { 81 , - 67 } , { 45 , - 20 } ,
{ 35 , - 2 } , { 28 , 15 } , { 34 , 1 } , { 39 , 1 } ,
{ 30 , 17 } , { 20 , 38 } , { 18 , 45 } , { 15 , 54 } ,
{ 0 , 79 } , { 36 , - 16 } , { 37 , - 14 } , { 37 , - 17 } ,
{ 32 , 1 } , { 34 , 15 } , { 29 , 15 } , { 24 , 25 } ,
{ 34 , 22 } , { 31 , 16 } , { 35 , 18 } , { 31 , 28 } ,
{ 33 , 41 } , { 36 , 28 } , { 27 , 47 } , { 21 , 62 } ,
{ - 24 , 115 } , { - 22 , 82 } , { - 9 , 62 } , { 0 , 53 } ,
{ 0 , 59 } , { - 14 , 85 } , { - 13 , 89 } , { - 13 , 94 } ,
{ - 11 , 92 } , { - 29 , 127 } , { - 21 , 100 } , { - 14 , 57 } ,
{ - 12 , 67 } , { - 11 , 71 } , { - 10 , 77 } , { - 21 , 85 } ,
{ - 16 , 88 } , { - 23 , 104 } , { - 15 , 98 } , { - 37 , 127 } ,
{ - 10 , 82 } , { - 8 , 48 } , { - 8 , 61 } , { - 8 , 66 } ,
{ - 7 , 70 } , { - 14 , 75 } , { - 10 , 79 } , { - 9 , 83 } ,
{ - 12 , 92 } , { - 18 , 108 } , { - 24 , 115 } , { - 22 , 82 } ,
{ - 9 , 62 } , { 0 , 53 } , { 0 , 59 } , { - 14 , 85 } ,
{ - 13 , 89 } , { - 13 , 94 } , { - 11 , 92 } , { - 29 , 127 } ,
{ - 21 , 100 } , { - 14 , 57 } , { - 12 , 67 } , { - 11 , 71 } ,
{ - 10 , 77 } , { - 21 , 85 } , { - 16 , 88 } , { - 23 , 104 } ,
{ - 15 , 98 } , { - 37 , 127 } , { - 10 , 82 } , { - 8 , 48 } ,
{ - 8 , 61 } , { - 8 , 66 } , { - 7 , 70 } , { - 14 , 75 } ,
{ - 10 , 79 } , { - 9 , 83 } , { - 12 , 92 } , { - 18 , 108 } ,
{ - 5 , 79 } , { - 11 , 104 } , { - 11 , 91 } , { - 30 , 127 } ,
{ - 5 , 79 } , { - 11 , 104 } , { - 11 , 91 } , { - 30 , 127 } ,
{ - 5 , 79 } , { - 11 , 104 } , { - 11 , 91 } , { - 30 , 127 }
}
} ;
@ -695,7 +1267,7 @@ void ff_h264_init_cabac_states(H264Context *h) {
else tab = cabac_context_init_PB [ h - > cabac_init_idc ] ;
/* calculate pre-state */
for ( i = 0 ; i < 460 ; i + + ) {
for ( i = 0 ; i < 102 4; i + + ) {
int pre = 2 * ( ( ( tab [ i ] [ 0 ] * slice_qp ) > > 4 ) + tab [ i ] [ 1 ] ) - 127 ;
pre ^ = pre > > 31 ;
@ -957,21 +1529,22 @@ static int decode_cabac_mb_mvd( H264Context *h, int ctxbase, int amvd, int *mvda
my + = decode_cabac_mb_mvd ( h , 47 , amvd1 , & mpy ) ; \
}
static av_always_inline int get_cabac_cbf_ctx ( H264Context * h , int cat , int idx , int is_dc ) {
static av_always_inline int get_cabac_cbf_ctx ( H264Context * h , int cat , int idx , int max_coeff , int is_dc ) {
int nza , nzb ;
int ctx = 0 ;
static const uint16_t base_ctx [ 14 ] = { 85 , 89 , 93 , 97 , 101 , 1012 , 460 , 464 , 468 , 1016 , 472 , 476 , 480 , 1020 } ;
if ( is_dc ) {
if ( cat = = 0 ) {
nza = h - > left_cbp & 0x100 ;
nzb = h - > top_cbp & 0x100 ;
} else {
if ( cat = = 3 ) {
idx - = CHROMA_DC_BLOCK_INDEX ;
nza = ( h - > left_cbp > > ( 6 + idx ) ) & 0x01 ;
nzb = ( h - > top_cbp > > ( 6 + idx ) ) & 0x01 ;
} else {
idx - = LUMA_DC_BLOCK_INDEX ;
nza = h - > left_cbp & ( 0x100 < < idx ) ;
nzb = h - > top_cbp & ( 0x100 < < idx ) ;
}
} else {
assert ( cat = = 1 | | cat = = 2 | | cat = = 4 ) ;
nza = h - > non_zero_count_cache [ scan8 [ idx ] - 1 ] ;
nzb = h - > non_zero_count_cache [ scan8 [ idx ] - 8 ] ;
}
@ -982,7 +1555,7 @@ static av_always_inline int get_cabac_cbf_ctx( H264Context *h, int cat, int idx,
if ( nzb > 0 )
ctx + = 2 ;
return ctx + 4 * cat ;
return base_ctx [ cat ] + ctx ;
}
DECLARE_ASM_CONST ( 1 , uint8_t , last_coeff_flag_offset_8x8 ) [ 63 ] = {
@ -993,16 +1566,16 @@ DECLARE_ASM_CONST(1, uint8_t, last_coeff_flag_offset_8x8)[63] = {
} ;
static av_always_inline void decode_cabac_residual_internal ( H264Context * h , DCTELEM * block , int cat , int n , const uint8_t * scantable , const uint32_t * qmul , int max_coeff , int is_dc ) {
static const int significant_coeff_flag_offset [ 2 ] [ 6 ] = {
{ 105 + 0 , 105 + 15 , 105 + 29 , 105 + 44 , 105 + 47 , 402 } ,
{ 277 + 0 , 277 + 15 , 277 + 29 , 277 + 44 , 277 + 47 , 436 }
static const int significant_coeff_flag_offset [ 2 ] [ 14 ] = {
{ 105 + 0 , 105 + 15 , 105 + 29 , 105 + 44 , 105 + 47 , 402 , 484 + 0 , 484 + 15 , 484 + 29 , 660 , 528 + 0 , 528 + 15 , 528 + 29 , 718 } ,
{ 277 + 0 , 277 + 15 , 277 + 29 , 277 + 44 , 277 + 47 , 436 , 776 + 0 , 776 + 15 , 776 + 29 , 675 , 820 + 0 , 820 + 15 , 820 + 29 , 733 }
} ;
static const int last_coeff_flag_offset [ 2 ] [ 6 ] = {
{ 166 + 0 , 166 + 15 , 166 + 29 , 166 + 44 , 166 + 47 , 417 } ,
{ 338 + 0 , 338 + 15 , 338 + 29 , 338 + 44 , 338 + 47 , 451 }
static const int last_coeff_flag_offset [ 2 ] [ 14 ] = {
{ 166 + 0 , 166 + 15 , 166 + 29 , 166 + 44 , 166 + 47 , 417 , 572 + 0 , 572 + 15 , 572 + 29 , 690 , 616 + 0 , 616 + 15 , 616 + 29 , 748 } ,
{ 338 + 0 , 338 + 15 , 338 + 29 , 338 + 44 , 338 + 47 , 451 , 864 + 0 , 864 + 15 , 864 + 29 , 699 , 908 + 0 , 908 + 15 , 908 + 29 , 757 }
} ;
static const int coeff_abs_level_m1_offset [ 6 ] = {
227 + 0 , 227 + 10 , 227 + 20 , 227 + 30 , 227 + 39 , 426
static const int coeff_abs_level_m1_offset [ 14 ] = {
227 + 0 , 227 + 10 , 227 + 20 , 227 + 30 , 227 + 39 , 426 , 952 + 0 , 952 + 10 , 952 + 20 , 708 , 982 + 0 , 982 + 10 , 982 + 20 , 766
} ;
static const uint8_t significant_coeff_flag_offset_8x8 [ 2 ] [ 63 ] = {
{ 0 , 1 , 2 , 3 , 4 , 5 , 5 , 4 , 4 , 3 , 3 , 4 , 4 , 4 , 5 , 5 ,
@ -1057,7 +1630,7 @@ static av_always_inline void decode_cabac_residual_internal( H264Context *h, DCT
abs_level_m1_ctx_base = h - > cabac_state
+ coeff_abs_level_m1_offset [ cat ] ;
if ( ! is_dc & & cat = = 5 ) {
if ( ! is_dc & & max_coeff = = 64 ) {
# define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
for ( last = 0 ; last < coefs ; last + + ) { \
uint8_t * sig_ctx = significant_coeff_ctx_base + sig_off ; \
@ -1075,9 +1648,11 @@ static av_always_inline void decode_cabac_residual_internal( H264Context *h, DCT
}
const uint8_t * sig_off = significant_coeff_flag_offset_8x8 [ MB_FIELD ] ;
# if ARCH_X86 && HAVE_7REGS && HAVE_EBX_AVAILABLE && !defined(BROKEN_RELOCATIONS)
coeff_count = decode_significance_8x8_x86 ( CC , significant_coeff_ctx_base , index , sig_off ) ;
coeff_count = decode_significance_8x8_x86 ( CC , significant_coeff_ctx_base , index ,
last_coeff_ctx_base - significant_coeff_ctx_base , sig_off ) ;
} else {
coeff_count = decode_significance_x86 ( CC , max_coeff , significant_coeff_ctx_base , index ) ;
coeff_count = decode_significance_x86 ( CC , max_coeff , significant_coeff_ctx_base , index ,
last_coeff_ctx_base - significant_coeff_ctx_base ) ;
# else
DECODE_SIGNIFICANCE ( 63 , sig_off [ last ] , last_coeff_flag_offset_8x8 [ last ] ) ;
} else {
@ -1087,16 +1662,16 @@ static av_always_inline void decode_cabac_residual_internal( H264Context *h, DCT
assert ( coeff_count > 0 ) ;
if ( is_dc ) {
if ( cat = = 0 )
h - > cbp_table [ h - > mb_xy ] | = 0x100 ;
else
if ( cat = = 3 )
h - > cbp_table [ h - > mb_xy ] | = 0x40 < < ( n - CHROMA_DC_BLOCK_INDEX ) ;
else
h - > cbp_table [ h - > mb_xy ] | = 0x100 < < ( n - LUMA_DC_BLOCK_INDEX ) ;
h - > non_zero_count_cache [ scan8 [ n ] ] = coeff_count ;
} else {
if ( cat = = 5 )
if ( max_coeff = = 64 )
fill_rectangle ( & h - > non_zero_count_cache [ scan8 [ n ] ] , 2 , 2 , 8 , coeff_count , 1 ) ;
else {
assert ( cat = = 1 | | cat = = 2 | | cat = = 4 ) ;
assert ( cat = = 1 | | cat = = 2 | | cat = = 4 | | cat = = 7 | | cat = = 8 | | cat = = 11 | | cat = = 12 ) ;
h - > non_zero_count_cache [ scan8 [ n ] ] = coeff_count ;
}
}
@ -1179,7 +1754,7 @@ static void decode_cabac_residual_nondc_internal( H264Context *h, DCTELEM *block
static av_always_inline void decode_cabac_residual_dc ( H264Context * h , DCTELEM * block , int cat , int n , const uint8_t * scantable , int max_coeff ) {
/* read coded block flag */
if ( get_cabac ( & h - > cabac , & h - > cabac_state [ 85 + get_cabac_cbf_ctx ( h , cat , n , 1 ) ] ) = = 0 ) {
if ( get_cabac ( & h - > cabac , & h - > cabac_state [ get_cabac_cbf_ctx ( h , cat , n , max_coeff , 1 ) ] ) = = 0 ) {
h - > non_zero_count_cache [ scan8 [ n ] ] = 0 ;
return ;
}
@ -1188,13 +1763,68 @@ static av_always_inline void decode_cabac_residual_dc( H264Context *h, DCTELEM *
static av_always_inline void decode_cabac_residual_nondc ( H264Context * h , DCTELEM * block , int cat , int n , const uint8_t * scantable , const uint32_t * qmul , int max_coeff ) {
/* read coded block flag */
if ( cat ! = 5 & & get_cabac ( & h - > cabac , & h - > cabac_state [ 85 + get_cabac_cbf_ctx ( h , cat , n , 0 ) ] ) = = 0 ) {
h - > non_zero_count_cache [ scan8 [ n ] ] = 0 ;
if ( ( cat ! = 5 | | CHROMA444 ) & & get_cabac ( & h - > cabac , & h - > cabac_state [ get_cabac_cbf_ctx ( h , cat , n , max_coeff , 0 ) ] ) = = 0 ) {
if ( max_coeff = = 64 ) {
fill_rectangle ( & h - > non_zero_count_cache [ scan8 [ n ] ] , 2 , 2 , 8 , 0 , 1 ) ;
} else {
h - > non_zero_count_cache [ scan8 [ n ] ] = 0 ;
}
return ;
}
decode_cabac_residual_nondc_internal ( h , block , cat , n , scantable , qmul , max_coeff ) ;
}
static av_always_inline void decode_cabac_luma_residual ( H264Context * h , const uint8_t * scan , const uint8_t * scan8x8 , int pixel_shift , int mb_type , int cbp , int p )
{
static const uint8_t ctx_cat [ 4 ] [ 3 ] = { { 0 , 6 , 10 } , { 1 , 7 , 11 } , { 2 , 8 , 12 } , { 5 , 9 , 13 } } ;
const uint32_t * qmul ;
int i8x8 , i4x4 ;
MpegEncContext * const s = & h - > s ;
int qscale = p = = 0 ? s - > qscale : h - > chroma_qp [ p - 1 ] ;
if ( IS_INTRA16x16 ( mb_type ) ) {
//av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 DC\n" );
AV_ZERO128 ( h - > mb_luma_dc [ p ] + 0 ) ;
AV_ZERO128 ( h - > mb_luma_dc [ p ] + 8 ) ;
AV_ZERO128 ( h - > mb_luma_dc [ p ] + 16 ) ;
AV_ZERO128 ( h - > mb_luma_dc [ p ] + 24 ) ;
decode_cabac_residual_dc ( h , h - > mb_luma_dc [ p ] , ctx_cat [ 0 ] [ p ] , LUMA_DC_BLOCK_INDEX + p , scan , 16 ) ;
if ( cbp & 15 ) {
qmul = h - > dequant4_coeff [ p ] [ qscale ] ;
for ( i4x4 = 0 ; i4x4 < 16 ; i4x4 + + ) {
const int index = 16 * p + i4x4 ;
//av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 AC:%d\n", index );
decode_cabac_residual_nondc ( h , h - > mb + ( 16 * index < < pixel_shift ) , ctx_cat [ 1 ] [ p ] , index , scan + 1 , qmul , 15 ) ;
}
} else {
fill_rectangle ( & h - > non_zero_count_cache [ scan8 [ 16 * p ] ] , 4 , 4 , 8 , 0 , 1 ) ;
}
} else {
int cqm = ( IS_INTRA ( mb_type ) ? 0 : 3 ) + p ;
for ( i8x8 = 0 ; i8x8 < 4 ; i8x8 + + ) {
if ( cbp & ( 1 < < i8x8 ) ) {
if ( IS_8x8DCT ( mb_type ) ) {
const int index = 16 * p + 4 * i8x8 ;
decode_cabac_residual_nondc ( h , h - > mb + ( 16 * index < < pixel_shift ) , ctx_cat [ 3 ] [ p ] , index ,
scan8x8 , h - > dequant8_coeff [ cqm ] [ qscale ] , 64 ) ;
} else {
qmul = h - > dequant4_coeff [ cqm ] [ qscale ] ;
for ( i4x4 = 0 ; i4x4 < 4 ; i4x4 + + ) {
const int index = 16 * p + 4 * i8x8 + i4x4 ;
//av_log( s->avctx, AV_LOG_ERROR, "Luma4x4: %d\n", index );
//START_TIMER
decode_cabac_residual_nondc ( h , h - > mb + ( 16 * index < < pixel_shift ) , ctx_cat [ 2 ] [ p ] , index , scan , qmul , 16 ) ;
//STOP_TIMER("decode_residual")
}
}
} else {
uint8_t * const nnz = & h - > non_zero_count_cache [ scan8 [ 4 * i8x8 + 16 * p ] ] ;
nnz [ 0 ] = nnz [ 1 ] = nnz [ 8 ] = nnz [ 9 ] = 0 ;
}
}
}
}
/**
* decodes a macroblock
* @ return 0 if OK , AC_ERROR / DC_ERROR / MV_ERROR if an error is noticed
@ -1204,6 +1834,7 @@ int ff_h264_decode_mb_cabac(H264Context *h) {
int mb_xy ;
int mb_type , partition_count , cbp = 0 ;
int dct8x8_allowed = h - > pps . transform_8x8_mode ;
int decode_chroma = h - > sps . chroma_format_idc = = 1 | | h - > sps . chroma_format_idc = = 2 ;
const int pixel_shift = h - > pixel_shift ;
mb_xy = h - > mb_xy = s - > mb_x + s - > mb_y * s - > mb_stride ;
@ -1313,7 +1944,8 @@ decode_intra_mb:
h - > slice_table [ mb_xy ] = h - > slice_num ;
if ( IS_INTRA_PCM ( mb_type ) ) {
const int mb_size = ( 384 * h - > sps . bit_depth_luma ) > > 3 ;
static const uint16_t mb_sizes [ 4 ] = { 256 , 384 , 512 , 768 } ;
const int mb_size = mb_sizes [ h - > sps . chroma_format_idc ] * h - > sps . bit_depth_luma > > 3 ;
const uint8_t * ptr ;
// We assume these blocks are very rare so we do not optimize it.
@ -1326,20 +1958,17 @@ decode_intra_mb:
}
// The pixels are stored in the same order as levels in h->mb array.
memcpy ( h - > mb , ptr , 2 * mb_size / 3 ) ; ptr + = 2 * mb_size / 3 ;
if ( CHROMA ) {
memcpy ( h - > mb + mb_size / 3 , ptr , mb_size / 3 ) ; ptr + = mb_size / 3 ;
}
memcpy ( h - > mb , ptr , mb_size ) ; ptr + = mb_size ;
ff_init_cabac_decoder ( & h - > cabac , ptr , h - > cabac . bytestream_end - ptr ) ;
// All blocks are present
h - > cbp_table [ mb_xy ] = 0x1 ef ;
h - > cbp_table [ mb_xy ] = 0xf7 ef ;
h - > chroma_pred_mode_table [ mb_xy ] = 0 ;
// In deblocking, the quantizer is 0
s - > current_picture . qscale_table [ mb_xy ] = 0 ;
// All coeffs are present
memset ( h - > non_zero_count [ mb_xy ] , 16 , 32 ) ;
memset ( h - > non_zero_count [ mb_xy ] , 16 , 48 ) ;
s - > current_picture . mb_type [ mb_xy ] = mb_type ;
h - > last_qscale_diff = 0 ;
return 0 ;
@ -1376,7 +2005,7 @@ decode_intra_mb:
h - > intra16x16_pred_mode = ff_h264_check_intra_pred_mode ( h , h - > intra16x16_pred_mode ) ;
if ( h - > intra16x16_pred_mode < 0 ) return - 1 ;
}
if ( CHROMA ) {
if ( decode_chroma ) {
h - > chroma_pred_mode_table [ mb_xy ] =
pred_mode = decode_cabac_mb_chroma_pre_mode ( h ) ;
@ -1605,7 +2234,7 @@ decode_intra_mb:
if ( ! IS_INTRA16x16 ( mb_type ) ) {
cbp = decode_cabac_mb_cbp_luma ( h ) ;
if ( CHROMA )
if ( decode_chroma )
cbp | = decode_cabac_mb_cbp_chroma ( h ) < < 4 ;
}
@ -1614,6 +2243,28 @@ decode_intra_mb:
if ( dct8x8_allowed & & ( cbp & 15 ) & & ! IS_INTRA ( mb_type ) ) {
mb_type | = MB_TYPE_8x8DCT * get_cabac_noinline ( & h - > cabac , & h - > cabac_state [ 399 + h - > neighbor_transform_size ] ) ;
}
/* It would be better to do this in fill_decode_caches, but we don't know
* the transform mode of the current macroblock there . */
if ( CHROMA444 & & IS_8x8DCT ( mb_type ) ) {
int i ;
for ( i = 0 ; i < 2 ; i + + ) {
if ( h - > left_type [ i ] & & ! IS_8x8DCT ( h - > left_type [ i ] ) ) {
h - > non_zero_count_cache [ 3 + 8 * 1 + 2 * 8 * i ] =
h - > non_zero_count_cache [ 3 + 8 * 2 + 2 * 8 * i ] =
h - > non_zero_count_cache [ 3 + 8 * 6 + 2 * 8 * i ] =
h - > non_zero_count_cache [ 3 + 8 * 7 + 2 * 8 * i ] =
h - > non_zero_count_cache [ 3 + 8 * 11 + 2 * 8 * i ] =
h - > non_zero_count_cache [ 3 + 8 * 12 + 2 * 8 * i ] = IS_INTRA ( mb_type ) ? 64 : 0 ;
}
}
if ( h - > top_type & & ! IS_8x8DCT ( h - > top_type ) ) {
uint32_t top_empty = CABAC & & ! IS_INTRA ( mb_type ) ? 0 : 0x40404040 ;
AV_WN32A ( & h - > non_zero_count_cache [ 4 + 8 * 0 ] , top_empty ) ;
AV_WN32A ( & h - > non_zero_count_cache [ 4 + 8 * 5 ] , top_empty ) ;
AV_WN32A ( & h - > non_zero_count_cache [ 4 + 8 * 10 ] , top_empty ) ;
}
}
s - > current_picture . mb_type [ mb_xy ] = mb_type ;
if ( cbp | | IS_INTRA16x16 ( mb_type ) ) {
@ -1658,76 +2309,38 @@ decode_intra_mb:
} else
h - > last_qscale_diff = 0 ;
if ( IS_INTRA16x16 ( mb_type ) ) {
int i ;
//av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 DC\n" );
AV_ZERO128 ( h - > mb_luma_dc + 0 ) ;
AV_ZERO128 ( h - > mb_luma_dc + 8 ) ;
AV_ZERO128 ( h - > mb_luma_dc + 16 ) ;
AV_ZERO128 ( h - > mb_luma_dc + 24 ) ;
decode_cabac_residual_dc ( h , h - > mb_luma_dc , 0 , LUMA_DC_BLOCK_INDEX , scan , 16 ) ;
if ( cbp & 15 ) {
qmul = h - > dequant4_coeff [ 0 ] [ s - > qscale ] ;
for ( i = 0 ; i < 16 ; i + + ) {
//av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 AC:%d\n", i );
decode_cabac_residual_nondc ( h , h - > mb + ( 16 * i < < pixel_shift ) , 1 , i , scan + 1 , qmul , 15 ) ;
}
} else {
fill_rectangle ( & h - > non_zero_count_cache [ scan8 [ 0 ] ] , 4 , 4 , 8 , 0 , 1 ) ;
}
decode_cabac_luma_residual ( h , scan , scan8x8 , pixel_shift , mb_type , cbp , 0 ) ;
if ( CHROMA444 ) {
decode_cabac_luma_residual ( h , scan , scan8x8 , pixel_shift , mb_type , cbp , 1 ) ;
decode_cabac_luma_residual ( h , scan , scan8x8 , pixel_shift , mb_type , cbp , 2 ) ;
} else {
int i8x8 , i4x4 ;
for ( i8x8 = 0 ; i8x8 < 4 ; i8x8 + + ) {
if ( cbp & ( 1 < < i8x8 ) ) {
if ( IS_8x8DCT ( mb_type ) ) {
decode_cabac_residual_nondc ( h , h - > mb + ( 64 * i8x8 < < pixel_shift ) , 5 , 4 * i8x8 ,
scan8x8 , h - > dequant8_coeff [ IS_INTRA ( mb_type ) ? 0 : 1 ] [ s - > qscale ] , 64 ) ;
} else {
qmul = h - > dequant4_coeff [ IS_INTRA ( mb_type ) ? 0 : 3 ] [ s - > qscale ] ;
for ( i4x4 = 0 ; i4x4 < 4 ; i4x4 + + ) {
const int index = 4 * i8x8 + i4x4 ;
//av_log( s->avctx, AV_LOG_ERROR, "Luma4x4: %d\n", index );
//START_TIMER
decode_cabac_residual_nondc ( h , h - > mb + ( 16 * index < < pixel_shift ) , 2 , index , scan , qmul , 16 ) ;
//STOP_TIMER("decode_residual")
}
}
} else {
uint8_t * const nnz = & h - > non_zero_count_cache [ scan8 [ 4 * i8x8 ] ] ;
nnz [ 0 ] = nnz [ 1 ] = nnz [ 8 ] = nnz [ 9 ] = 0 ;
if ( cbp & 0x30 ) {
int c ;
for ( c = 0 ; c < 2 ; c + + ) {
//av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-DC\n",c );
decode_cabac_residual_dc ( h , h - > mb + ( ( 256 + 16 * 16 * c ) < < pixel_shift ) , 3 , CHROMA_DC_BLOCK_INDEX + c , chroma_dc_scan , 4 ) ;
}
}
}
if ( cbp & 0x30 ) {
int c ;
for ( c = 0 ; c < 2 ; c + + ) {
//av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-DC\n",c );
decode_cabac_residual_dc ( h , h - > mb + ( ( 256 + 16 * 4 * c ) < < pixel_shift ) , 3 , CHROMA_DC_BLOCK_INDEX + c , chroma_dc_scan , 4 ) ;
}
}
if ( cbp & 0x20 ) {
int c , i ;
for ( c = 0 ; c < 2 ; c + + ) {
qmul = h - > dequant4_coeff [ c + 1 + ( IS_INTRA ( mb_type ) ? 0 : 3 ) ] [ h - > chroma_qp [ c ] ] ;
for ( i = 0 ; i < 4 ; i + + ) {
const int index = 16 + 4 * c + i ;
//av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-AC %d\n",c, index - 16 );
decode_cabac_residual_nondc ( h , h - > mb + ( 16 * index < < pixel_shift ) , 4 , index , scan + 1 , qmul , 15 ) ;
if ( cbp & 0x20 ) {
int c , i ;
for ( c = 0 ; c < 2 ; c + + ) {
qmul = h - > dequant4_coeff [ c + 1 + ( IS_INTRA ( mb_type ) ? 0 : 3 ) ] [ h - > chroma_qp [ c ] ] ;
for ( i = 0 ; i < 4 ; i + + ) {
const int index = 16 + 16 * c + i ;
//av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-AC %d\n",c, index - 16 );
decode_cabac_residual_nondc ( h , h - > mb + ( 16 * index < < pixel_shift ) , 4 , index , scan + 1 , qmul , 15 ) ;
}
}
} else {
fill_rectangle ( & h - > non_zero_count_cache [ scan8 [ 16 ] ] , 4 , 4 , 8 , 0 , 1 ) ;
fill_rectangle ( & h - > non_zero_count_cache [ scan8 [ 32 ] ] , 4 , 4 , 8 , 0 , 1 ) ;
}
} else {
uint8_t * const nnz = & h - > non_zero_count_cache [ 0 ] ;
nnz [ scan8 [ 16 ] + 0 ] = nnz [ scan8 [ 16 ] + 1 ] = nnz [ scan8 [ 16 ] + 8 ] = nnz [ scan8 [ 16 ] + 9 ] =
nnz [ scan8 [ 20 ] + 0 ] = nnz [ scan8 [ 20 ] + 1 ] = nnz [ scan8 [ 20 ] + 8 ] = nnz [ scan8 [ 20 ] + 9 ] = 0 ;
}
} else {
uint8_t * const nnz = & h - > non_zero_count_cache [ 0 ] ;
fill_rectangle ( & nnz [ scan8 [ 0 ] ] , 4 , 4 , 8 , 0 , 1 ) ;
nnz [ scan8 [ 16 ] + 0 ] = nnz [ scan8 [ 16 ] + 1 ] = nnz [ scan8 [ 16 ] + 8 ] = nnz [ scan8 [ 16 ] + 9 ] =
nnz [ scan8 [ 20 ] + 0 ] = nnz [ scan8 [ 20 ] + 1 ] = nnz [ scan8 [ 20 ] + 8 ] = nnz [ scan8 [ 20 ] + 9 ] = 0 ;
fill_rectangle ( & h - > non_zero_count_cache [ scan8 [ 0 ] ] , 4 , 4 , 8 , 0 , 1 ) ;
fill_rectangle ( & h - > non_zero_count_cache [ scan8 [ 16 ] ] , 4 , 4 , 8 , 0 , 1 ) ;
fill_rectangle ( & h - > non_zero_count_cache [ scan8 [ 32 ] ] , 4 , 4 , 8 , 0 , 1 ) ;
h - > last_qscale_diff = 0 ;
}