| @@ -32,6 +32,36 @@ | |||||
| #include "cavs.h" | #include "cavs.h" | ||||
| #include "cavsdata.h" | #include "cavsdata.h" | ||||
| static const uint8_t alpha_tab[64] = { | |||||
| 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, | |||||
| 4, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 18, 20, | |||||
| 22, 24, 26, 28, 30, 33, 33, 35, 35, 36, 37, 37, 39, 39, 42, 44, | |||||
| 46, 48, 50, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64 | |||||
| }; | |||||
| static const uint8_t beta_tab[64] = { | |||||
| 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, | |||||
| 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, | |||||
| 6, 7, 7, 7, 8, 8, 8, 9, 9, 10, 10, 11, 11, 12, 13, 14, | |||||
| 15, 16, 17, 18, 19, 20, 21, 22, 23, 23, 24, 24, 25, 25, 26, 27 | |||||
| }; | |||||
| static const uint8_t tc_tab[64] = { | |||||
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |||||
| 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, | |||||
| 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, | |||||
| 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9 | |||||
| }; | |||||
| /** mark block as unavailable, i.e. out of picture | |||||
| or not yet decoded */ | |||||
| static const cavs_vector un_mv = { 0, 0, 1, NOT_AVAIL }; | |||||
| static const int8_t left_modifier_l[8] = { 0, -1, 6, -1, -1, 7, 6, 7 }; | |||||
| static const int8_t top_modifier_l[8] = { -1, 1, 5, -1, -1, 5, 7, 7 }; | |||||
| static const int8_t left_modifier_c[7] = { 5, -1, 2, -1, 6, 5, 6 }; | |||||
| static const int8_t top_modifier_c[7] = { 4, 1, -1, -1, 4, 6, 6 }; | |||||
| /***************************************************************************** | /***************************************************************************** | ||||
| * | * | ||||
| * in-loop deblocking filter | * in-loop deblocking filter | ||||
| @@ -307,14 +337,14 @@ void ff_cavs_modify_mb_i(AVSContext *h, int *pred_mode_uv) { | |||||
| /* modify pred modes according to availability of neighbour samples */ | /* modify pred modes according to availability of neighbour samples */ | ||||
| if(!(h->flags & A_AVAIL)) { | if(!(h->flags & A_AVAIL)) { | ||||
| modify_pred(ff_left_modifier_l, &h->pred_mode_Y[4] ); | |||||
| modify_pred(ff_left_modifier_l, &h->pred_mode_Y[7] ); | |||||
| modify_pred(ff_left_modifier_c, pred_mode_uv ); | |||||
| modify_pred(left_modifier_l, &h->pred_mode_Y[4]); | |||||
| modify_pred(left_modifier_l, &h->pred_mode_Y[7]); | |||||
| modify_pred(left_modifier_c, pred_mode_uv); | |||||
| } | } | ||||
| if(!(h->flags & B_AVAIL)) { | if(!(h->flags & B_AVAIL)) { | ||||
| modify_pred(ff_top_modifier_l, &h->pred_mode_Y[4] ); | |||||
| modify_pred(ff_top_modifier_l, &h->pred_mode_Y[5] ); | |||||
| modify_pred(ff_top_modifier_c, pred_mode_uv ); | |||||
| modify_pred(top_modifier_l, &h->pred_mode_Y[4]); | |||||
| modify_pred(top_modifier_l, &h->pred_mode_Y[5]); | |||||
| modify_pred(top_modifier_c, pred_mode_uv); | |||||
| } | } | ||||
| } | } | ||||
| @@ -496,7 +526,7 @@ void ff_cavs_mv(AVSContext *h, enum cavs_mv_loc nP, enum cavs_mv_loc nC, | |||||
| ((mvA->ref == NOT_AVAIL) || (mvB->ref == NOT_AVAIL) || | ((mvA->ref == NOT_AVAIL) || (mvB->ref == NOT_AVAIL) || | ||||
| ((mvA->x | mvA->y | mvA->ref) == 0) || | ((mvA->x | mvA->y | mvA->ref) == 0) || | ||||
| ((mvB->x | mvB->y | mvB->ref) == 0) )) { | ((mvB->x | mvB->y | mvB->ref) == 0) )) { | ||||
| mvP2 = &ff_cavs_un_mv; | |||||
| mvP2 = &un_mv; | |||||
| /* if there is only one suitable candidate, take it */ | /* if there is only one suitable candidate, take it */ | ||||
| } else if((mvA->ref >= 0) && (mvB->ref < 0) && (mvC->ref < 0)) { | } else if((mvA->ref >= 0) && (mvB->ref < 0) && (mvC->ref < 0)) { | ||||
| mvP2= mvA; | mvP2= mvA; | ||||
| @@ -545,10 +575,10 @@ void ff_cavs_init_mb(AVSContext *h) { | |||||
| h->pred_mode_Y[2] = h->top_pred_Y[h->mbx*2+1]; | h->pred_mode_Y[2] = h->top_pred_Y[h->mbx*2+1]; | ||||
| /* clear top predictors if MB B is not available */ | /* clear top predictors if MB B is not available */ | ||||
| if(!(h->flags & B_AVAIL)) { | if(!(h->flags & B_AVAIL)) { | ||||
| h->mv[MV_FWD_B2] = ff_cavs_un_mv; | |||||
| h->mv[MV_FWD_B3] = ff_cavs_un_mv; | |||||
| h->mv[MV_BWD_B2] = ff_cavs_un_mv; | |||||
| h->mv[MV_BWD_B3] = ff_cavs_un_mv; | |||||
| h->mv[MV_FWD_B2] = un_mv; | |||||
| h->mv[MV_FWD_B3] = un_mv; | |||||
| h->mv[MV_BWD_B2] = un_mv; | |||||
| h->mv[MV_BWD_B3] = un_mv; | |||||
| h->pred_mode_Y[1] = h->pred_mode_Y[2] = NOT_AVAIL; | h->pred_mode_Y[1] = h->pred_mode_Y[2] = NOT_AVAIL; | ||||
| h->flags &= ~(C_AVAIL|D_AVAIL); | h->flags &= ~(C_AVAIL|D_AVAIL); | ||||
| } else if(h->mbx) { | } else if(h->mbx) { | ||||
| @@ -558,13 +588,13 @@ void ff_cavs_init_mb(AVSContext *h) { | |||||
| h->flags &= ~C_AVAIL; | h->flags &= ~C_AVAIL; | ||||
| /* clear top-right predictors if MB C is not available */ | /* clear top-right predictors if MB C is not available */ | ||||
| if(!(h->flags & C_AVAIL)) { | if(!(h->flags & C_AVAIL)) { | ||||
| h->mv[MV_FWD_C2] = ff_cavs_un_mv; | |||||
| h->mv[MV_BWD_C2] = ff_cavs_un_mv; | |||||
| h->mv[MV_FWD_C2] = un_mv; | |||||
| h->mv[MV_BWD_C2] = un_mv; | |||||
| } | } | ||||
| /* clear top-left predictors if MB D is not available */ | /* clear top-left predictors if MB D is not available */ | ||||
| if(!(h->flags & D_AVAIL)) { | if(!(h->flags & D_AVAIL)) { | ||||
| h->mv[MV_FWD_D3] = ff_cavs_un_mv; | |||||
| h->mv[MV_BWD_D3] = ff_cavs_un_mv; | |||||
| h->mv[MV_FWD_D3] = un_mv; | |||||
| h->mv[MV_BWD_D3] = un_mv; | |||||
| } | } | ||||
| } | } | ||||
| @@ -597,7 +627,7 @@ int ff_cavs_next_mb(AVSContext *h) { | |||||
| h->pred_mode_Y[3] = h->pred_mode_Y[6] = NOT_AVAIL; | h->pred_mode_Y[3] = h->pred_mode_Y[6] = NOT_AVAIL; | ||||
| /* clear left mv predictors */ | /* clear left mv predictors */ | ||||
| for(i=0;i<=20;i+=4) | for(i=0;i<=20;i+=4) | ||||
| h->mv[i] = ff_cavs_un_mv; | |||||
| h->mv[i] = un_mv; | |||||
| h->mbx = 0; | h->mbx = 0; | ||||
| h->mby++; | h->mby++; | ||||
| /* re-calculate sample pointers */ | /* re-calculate sample pointers */ | ||||
| @@ -622,7 +652,7 @@ void ff_cavs_init_pic(AVSContext *h) { | |||||
| /* clear some predictors */ | /* clear some predictors */ | ||||
| for(i=0;i<=20;i+=4) | for(i=0;i<=20;i+=4) | ||||
| h->mv[i] = ff_cavs_un_mv; | |||||
| h->mv[i] = un_mv; | |||||
| h->mv[MV_BWD_X0] = ff_cavs_dir_mv; | h->mv[MV_BWD_X0] = ff_cavs_dir_mv; | ||||
| set_mvs(&h->mv[MV_BWD_X0], BLK_16X16); | set_mvs(&h->mv[MV_BWD_X0], BLK_16X16); | ||||
| h->mv[MV_FWD_X0] = ff_cavs_dir_mv; | h->mv[MV_FWD_X0] = ff_cavs_dir_mv; | ||||
| @@ -693,8 +723,8 @@ av_cold int ff_cavs_init(AVCodecContext *avctx) { | |||||
| h->intra_pred_c[ INTRA_C_LP_LEFT] = intra_pred_lp_left; | h->intra_pred_c[ INTRA_C_LP_LEFT] = intra_pred_lp_left; | ||||
| h->intra_pred_c[ INTRA_C_LP_TOP] = intra_pred_lp_top; | h->intra_pred_c[ INTRA_C_LP_TOP] = intra_pred_lp_top; | ||||
| h->intra_pred_c[ INTRA_C_DC_128] = intra_pred_dc_128; | h->intra_pred_c[ INTRA_C_DC_128] = intra_pred_dc_128; | ||||
| h->mv[ 7] = ff_cavs_un_mv; | |||||
| h->mv[19] = ff_cavs_un_mv; | |||||
| h->mv[ 7] = un_mv; | |||||
| h->mv[19] = un_mv; | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -225,20 +225,8 @@ typedef struct { | |||||
| DCTELEM *block; | DCTELEM *block; | ||||
| } AVSContext; | } AVSContext; | ||||
| extern const uint8_t ff_cavs_dequant_shift[64]; | |||||
| extern const uint16_t ff_cavs_dequant_mul[64]; | |||||
| extern const struct dec_2dvlc ff_cavs_intra_dec[7]; | |||||
| extern const struct dec_2dvlc ff_cavs_inter_dec[7]; | |||||
| extern const struct dec_2dvlc ff_cavs_chroma_dec[5]; | |||||
| extern const uint8_t ff_cavs_chroma_qp[64]; | |||||
| extern const uint8_t ff_cavs_scan3x3[4]; | |||||
| extern const uint8_t ff_cavs_partition_flags[30]; | extern const uint8_t ff_cavs_partition_flags[30]; | ||||
| extern const int8_t ff_left_modifier_l[8]; | |||||
| extern const int8_t ff_top_modifier_l[8]; | |||||
| extern const int8_t ff_left_modifier_c[7]; | |||||
| extern const int8_t ff_top_modifier_c[7]; | |||||
| extern const cavs_vector ff_cavs_intra_mv; | extern const cavs_vector ff_cavs_intra_mv; | ||||
| extern const cavs_vector ff_cavs_un_mv; | |||||
| extern const cavs_vector ff_cavs_dir_mv; | extern const cavs_vector ff_cavs_dir_mv; | ||||
| static inline void modify_pred(const int8_t *mod_table, int *mode) | static inline void modify_pred(const int8_t *mod_table, int *mode) | ||||
| @@ -57,41 +57,6 @@ const uint8_t ff_cavs_partition_flags[30] = { | |||||
| SPLITH|SPLITV, //B_8X8 = 29 | SPLITH|SPLITV, //B_8X8 = 29 | ||||
| }; | }; | ||||
| const uint8_t ff_cavs_scan3x3[4] = {4,5,7,8}; | |||||
| const uint8_t ff_cavs_chroma_qp[64] = { | |||||
| 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15, | |||||
| 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, | |||||
| 32,33,34,35,36,37,38,39,40,41,42,42,43,43,44,44, | |||||
| 45,45,46,46,47,47,48,48,48,49,49,49,50,50,50,51 | |||||
| }; | |||||
| const uint8_t ff_cavs_dequant_shift[64] = { | |||||
| 14,14,14,14,14,14,14,14, | |||||
| 13,13,13,13,13,13,13,13, | |||||
| 13,12,12,12,12,12,12,12, | |||||
| 11,11,11,11,11,11,11,11, | |||||
| 11,10,10,10,10,10,10,10, | |||||
| 10, 9, 9, 9, 9, 9, 9, 9, | |||||
| 9, 8, 8, 8, 8, 8, 8, 8, | |||||
| 7, 7, 7, 7, 7, 7, 7, 7 | |||||
| }; | |||||
| const uint16_t ff_cavs_dequant_mul[64] = { | |||||
| 32768,36061,38968,42495,46341,50535,55437,60424, | |||||
| 32932,35734,38968,42495,46177,50535,55109,59933, | |||||
| 65535,35734,38968,42577,46341,50617,55027,60097, | |||||
| 32809,35734,38968,42454,46382,50576,55109,60056, | |||||
| 65535,35734,38968,42495,46320,50515,55109,60076, | |||||
| 65535,35744,38968,42495,46341,50535,55099,60087, | |||||
| 65535,35734,38973,42500,46341,50535,55109,60097, | |||||
| 32771,35734,38965,42497,46341,50535,55109,60099 | |||||
| }; | |||||
| /** mark block as unavailable, i.e. out of picture | |||||
| or not yet decoded */ | |||||
| const cavs_vector ff_cavs_un_mv = {0,0,1,NOT_AVAIL}; | |||||
| /** mark block as "no prediction from this direction" | /** mark block as "no prediction from this direction" | ||||
| e.g. forward motion vector in BWD partition */ | e.g. forward motion vector in BWD partition */ | ||||
| const cavs_vector ff_cavs_dir_mv = {0,0,1,REF_DIR}; | const cavs_vector ff_cavs_dir_mv = {0,0,1,REF_DIR}; | ||||
| @@ -99,407 +64,4 @@ const cavs_vector ff_cavs_dir_mv = {0,0,1,REF_DIR}; | |||||
| /** mark block as using intra prediction */ | /** mark block as using intra prediction */ | ||||
| const cavs_vector ff_cavs_intra_mv = {0,0,1,REF_INTRA}; | const cavs_vector ff_cavs_intra_mv = {0,0,1,REF_INTRA}; | ||||
| #define EOB 0,0,0 | |||||
| const struct dec_2dvlc ff_cavs_intra_dec[7] = { | |||||
| { | |||||
| { //level / run / table_inc | |||||
| { 1, 1, 1},{ -1, 1, 1},{ 1, 2, 1},{ -1, 2, 1},{ 1, 3, 1},{ -1, 3, 1}, | |||||
| { 1, 4, 1},{ -1, 4, 1},{ 1, 5, 1},{ -1, 5, 1},{ 1, 6, 1},{ -1, 6, 1}, | |||||
| { 1, 7, 1},{ -1, 7, 1},{ 1, 8, 1},{ -1, 8, 1},{ 1, 9, 1},{ -1, 9, 1}, | |||||
| { 1,10, 1},{ -1,10, 1},{ 1,11, 1},{ -1,11, 1},{ 2, 1, 2},{ -2, 1, 2}, | |||||
| { 1,12, 1},{ -1,12, 1},{ 1,13, 1},{ -1,13, 1},{ 1,14, 1},{ -1,14, 1}, | |||||
| { 1,15, 1},{ -1,15, 1},{ 2, 2, 2},{ -2, 2, 2},{ 1,16, 1},{ -1,16, 1}, | |||||
| { 1,17, 1},{ -1,17, 1},{ 3, 1, 3},{ -3, 1, 3},{ 1,18, 1},{ -1,18, 1}, | |||||
| { 1,19, 1},{ -1,19, 1},{ 2, 3, 2},{ -2, 3, 2},{ 1,20, 1},{ -1,20, 1}, | |||||
| { 1,21, 1},{ -1,21, 1},{ 2, 4, 2},{ -2, 4, 2},{ 1,22, 1},{ -1,22, 1}, | |||||
| { 2, 5, 2},{ -2, 5, 2},{ 1,23, 1},{ -1,23, 1},{ EOB } | |||||
| }, | |||||
| //level_add | |||||
| { 0, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |||||
| 2, 2, 2, 2, 2, 2, 2,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 0, //inc_limit | |||||
| 23, //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 2, 1, 1},{ -2, 1, 1}, | |||||
| { 1, 3, 0},{ -1, 3, 0},{ EOB },{ 1, 4, 0},{ -1, 4, 0},{ 1, 5, 0}, | |||||
| { -1, 5, 0},{ 1, 6, 0},{ -1, 6, 0},{ 3, 1, 2},{ -3, 1, 2},{ 2, 2, 1}, | |||||
| { -2, 2, 1},{ 1, 7, 0},{ -1, 7, 0},{ 1, 8, 0},{ -1, 8, 0},{ 1, 9, 0}, | |||||
| { -1, 9, 0},{ 2, 3, 1},{ -2, 3, 1},{ 4, 1, 2},{ -4, 1, 2},{ 1,10, 0}, | |||||
| { -1,10, 0},{ 1,11, 0},{ -1,11, 0},{ 2, 4, 1},{ -2, 4, 1},{ 3, 2, 2}, | |||||
| { -3, 2, 2},{ 1,12, 0},{ -1,12, 0},{ 2, 5, 1},{ -2, 5, 1},{ 5, 1, 3}, | |||||
| { -5, 1, 3},{ 1,13, 0},{ -1,13, 0},{ 2, 6, 1},{ -2, 6, 1},{ 1,14, 0}, | |||||
| { -1,14, 0},{ 2, 7, 1},{ -2, 7, 1},{ 2, 8, 1},{ -2, 8, 1},{ 3, 3, 2}, | |||||
| { -3, 3, 2},{ 6, 1, 3},{ -6, 1, 3},{ 1,15, 0},{ -1,15, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0, 7, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 1, //inc_limit | |||||
| 15, //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 1, 2, 0},{ -1, 2, 0}, | |||||
| { 3, 1, 1},{ -3, 1, 1},{ EOB },{ 1, 3, 0},{ -1, 3, 0},{ 2, 2, 0}, | |||||
| { -2, 2, 0},{ 4, 1, 1},{ -4, 1, 1},{ 1, 4, 0},{ -1, 4, 0},{ 5, 1, 2}, | |||||
| { -5, 1, 2},{ 1, 5, 0},{ -1, 5, 0},{ 3, 2, 1},{ -3, 2, 1},{ 2, 3, 0}, | |||||
| { -2, 3, 0},{ 1, 6, 0},{ -1, 6, 0},{ 6, 1, 2},{ -6, 1, 2},{ 2, 4, 0}, | |||||
| { -2, 4, 0},{ 1, 7, 0},{ -1, 7, 0},{ 4, 2, 1},{ -4, 2, 1},{ 7, 1, 2}, | |||||
| { -7, 1, 2},{ 3, 3, 1},{ -3, 3, 1},{ 2, 5, 0},{ -2, 5, 0},{ 1, 8, 0}, | |||||
| { -1, 8, 0},{ 2, 6, 0},{ -2, 6, 0},{ 8, 1, 3},{ -8, 1, 3},{ 1, 9, 0}, | |||||
| { -1, 9, 0},{ 5, 2, 2},{ -5, 2, 2},{ 3, 4, 1},{ -3, 4, 1},{ 2, 7, 0}, | |||||
| { -2, 7, 0},{ 9, 1, 3},{ -9, 1, 3},{ 1,10, 0},{ -1,10, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,10, 6, 4, 4, 3, 3, 3, 2, 2, 2,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 2, //inc_limit | |||||
| 10, //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0},{ -3, 1, 0}, | |||||
| { 1, 2, 0},{ -1, 2, 0},{ EOB },{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 1}, | |||||
| { -5, 1, 1},{ 2, 2, 0},{ -2, 2, 0},{ 1, 3, 0},{ -1, 3, 0},{ 6, 1, 1}, | |||||
| { -6, 1, 1},{ 3, 2, 0},{ -3, 2, 0},{ 7, 1, 1},{ -7, 1, 1},{ 1, 4, 0}, | |||||
| { -1, 4, 0},{ 8, 1, 2},{ -8, 1, 2},{ 2, 3, 0},{ -2, 3, 0},{ 4, 2, 0}, | |||||
| { -4, 2, 0},{ 1, 5, 0},{ -1, 5, 0},{ 9, 1, 2},{ -9, 1, 2},{ 5, 2, 1}, | |||||
| { -5, 2, 1},{ 2, 4, 0},{ -2, 4, 0},{ 10, 1, 2},{-10, 1, 2},{ 3, 3, 0}, | |||||
| { -3, 3, 0},{ 1, 6, 0},{ -1, 6, 0},{ 11, 1, 3},{-11, 1, 3},{ 6, 2, 1}, | |||||
| { -6, 2, 1},{ 1, 7, 0},{ -1, 7, 0},{ 2, 5, 0},{ -2, 5, 0},{ 3, 4, 0}, | |||||
| { -3, 4, 0},{ 12, 1, 3},{-12, 1, 3},{ 4, 3, 0},{ -4, 3, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,13, 7, 5, 4, 3, 2, 2,-1,-1,-1 -1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 4, //inc_limit | |||||
| 7, //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0},{ -3, 1, 0}, | |||||
| { EOB },{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0},{ -5, 1, 0},{ 6, 1, 0}, | |||||
| { -6, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 7, 1, 0},{ -7, 1, 0},{ 8, 1, 1}, | |||||
| { -8, 1, 1},{ 2, 2, 0},{ -2, 2, 0},{ 9, 1, 1},{ -9, 1, 1},{ 10, 1, 1}, | |||||
| {-10, 1, 1},{ 1, 3, 0},{ -1, 3, 0},{ 3, 2, 0},{ -3, 2, 0},{ 11, 1, 2}, | |||||
| {-11, 1, 2},{ 4, 2, 0},{ -4, 2, 0},{ 12, 1, 2},{-12, 1, 2},{ 13, 1, 2}, | |||||
| {-13, 1, 2},{ 5, 2, 0},{ -5, 2, 0},{ 1, 4, 0},{ -1, 4, 0},{ 2, 3, 0}, | |||||
| { -2, 3, 0},{ 14, 1, 2},{-14, 1, 2},{ 6, 2, 0},{ -6, 2, 0},{ 15, 1, 2}, | |||||
| {-15, 1, 2},{ 16, 1, 2},{-16, 1, 2},{ 3, 3, 0},{ -3, 3, 0},{ 1, 5, 0}, | |||||
| { -1, 5, 0},{ 7, 2, 0},{ -7, 2, 0},{ 17, 1, 2},{-17, 1, 2} | |||||
| }, | |||||
| //level_add | |||||
| { 0,18, 8, 4, 2, 2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 7, //inc_limit | |||||
| 5, //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0},{ -5, 1, 0},{ 6, 1, 0}, | |||||
| { -6, 1, 0},{ 7, 1, 0},{ -7, 1, 0},{ 8, 1, 0},{ -8, 1, 0},{ 9, 1, 0}, | |||||
| { -9, 1, 0},{ 10, 1, 0},{-10, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 11, 1, 1}, | |||||
| {-11, 1, 1},{ 12, 1, 1},{-12, 1, 1},{ 13, 1, 1},{-13, 1, 1},{ 2, 2, 0}, | |||||
| { -2, 2, 0},{ 14, 1, 1},{-14, 1, 1},{ 15, 1, 1},{-15, 1, 1},{ 3, 2, 0}, | |||||
| { -3, 2, 0},{ 16, 1, 1},{-16, 1, 1},{ 1, 3, 0},{ -1, 3, 0},{ 17, 1, 1}, | |||||
| {-17, 1, 1},{ 4, 2, 0},{ -4, 2, 0},{ 18, 1, 1},{-18, 1, 1},{ 5, 2, 0}, | |||||
| { -5, 2, 0},{ 19, 1, 1},{-19, 1, 1},{ 20, 1, 1},{-20, 1, 1},{ 6, 2, 0}, | |||||
| { -6, 2, 0},{ 21, 1, 1},{-21, 1, 1},{ 2, 3, 0},{ -2, 3, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,22, 7, 3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 10, //inc_limit | |||||
| 3, //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0},{ -5, 1, 0},{ 6, 1, 0}, | |||||
| { -6, 1, 0},{ 7, 1, 0},{ -7, 1, 0},{ 8, 1, 0},{ -8, 1, 0},{ 9, 1, 0}, | |||||
| { -9, 1, 0},{ 10, 1, 0},{-10, 1, 0},{ 11, 1, 0},{-11, 1, 0},{ 12, 1, 0}, | |||||
| {-12, 1, 0},{ 13, 1, 0},{-13, 1, 0},{ 14, 1, 0},{-14, 1, 0},{ 15, 1, 0}, | |||||
| {-15, 1, 0},{ 16, 1, 0},{-16, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 17, 1, 0}, | |||||
| {-17, 1, 0},{ 18, 1, 0},{-18, 1, 0},{ 19, 1, 0},{-19, 1, 0},{ 20, 1, 0}, | |||||
| {-20, 1, 0},{ 21, 1, 0},{-21, 1, 0},{ 2, 2, 0},{ -2, 2, 0},{ 22, 1, 0}, | |||||
| {-22, 1, 0},{ 23, 1, 0},{-23, 1, 0},{ 24, 1, 0},{-24, 1, 0},{ 25, 1, 0}, | |||||
| {-25, 1, 0},{ 3, 2, 0},{ -3, 2, 0},{ 26, 1, 0},{-26, 1, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,27, 4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| INT_MAX, //inc_limit | |||||
| 2, //max_run | |||||
| } | |||||
| }; | |||||
| const struct dec_2dvlc ff_cavs_inter_dec[7] = { | |||||
| { | |||||
| { //level / run | |||||
| { 1, 1, 1},{ -1, 1, 1},{ 1, 2, 1},{ -1, 2, 1},{ 1, 3, 1},{ -1, 3, 1}, | |||||
| { 1, 4, 1},{ -1, 4, 1},{ 1, 5, 1},{ -1, 5, 1},{ 1, 6, 1},{ -1, 6, 1}, | |||||
| { 1, 7, 1},{ -1, 7, 1},{ 1, 8, 1},{ -1, 8, 1},{ 1, 9, 1},{ -1, 9, 1}, | |||||
| { 1,10, 1},{ -1,10, 1},{ 1,11, 1},{ -1,11, 1},{ 1,12, 1},{ -1,12, 1}, | |||||
| { 1,13, 1},{ -1,13, 1},{ 2, 1, 2},{ -2, 1, 2},{ 1,14, 1},{ -1,14, 1}, | |||||
| { 1,15, 1},{ -1,15, 1},{ 1,16, 1},{ -1,16, 1},{ 1,17, 1},{ -1,17, 1}, | |||||
| { 1,18, 1},{ -1,18, 1},{ 1,19, 1},{ -1,19, 1},{ 3, 1, 3},{ -3, 1, 3}, | |||||
| { 1,20, 1},{ -1,20, 1},{ 1,21, 1},{ -1,21, 1},{ 2, 2, 2},{ -2, 2, 2}, | |||||
| { 1,22, 1},{ -1,22, 1},{ 1,23, 1},{ -1,23, 1},{ 1,24, 1},{ -1,24, 1}, | |||||
| { 1,25, 1},{ -1,25, 1},{ 1,26, 1},{ -1,26, 1},{ EOB } | |||||
| }, | |||||
| //level_add | |||||
| { 0, 4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |||||
| 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, | |||||
| 3, //golomb_order | |||||
| 0, //inc_limit | |||||
| 26 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ EOB },{ 1, 2, 0},{ -1, 2, 0},{ 1, 3, 0}, | |||||
| { -1, 3, 0},{ 1, 4, 0},{ -1, 4, 0},{ 1, 5, 0},{ -1, 5, 0},{ 1, 6, 0}, | |||||
| { -1, 6, 0},{ 2, 1, 1},{ -2, 1, 1},{ 1, 7, 0},{ -1, 7, 0},{ 1, 8, 0}, | |||||
| { -1, 8, 0},{ 1, 9, 0},{ -1, 9, 0},{ 1,10, 0},{ -1,10, 0},{ 2, 2, 1}, | |||||
| { -2, 2, 1},{ 1,11, 0},{ -1,11, 0},{ 1,12, 0},{ -1,12, 0},{ 3, 1, 2}, | |||||
| { -3, 1, 2},{ 1,13, 0},{ -1,13, 0},{ 1,14, 0},{ -1,14, 0},{ 2, 3, 1}, | |||||
| { -2, 3, 1},{ 1,15, 0},{ -1,15, 0},{ 2, 4, 1},{ -2, 4, 1},{ 1,16, 0}, | |||||
| { -1,16, 0},{ 2, 5, 1},{ -2, 5, 1},{ 1,17, 0},{ -1,17, 0},{ 4, 1, 3}, | |||||
| { -4, 1, 3},{ 2, 6, 1},{ -2, 6, 1},{ 1,18, 0},{ -1,18, 0},{ 1,19, 0}, | |||||
| { -1,19, 0},{ 2, 7, 1},{ -2, 7, 1},{ 3, 2, 2},{ -3, 2, 2} | |||||
| }, | |||||
| //level_add | |||||
| { 0, 5, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |||||
| 2, 2, 2,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 1, //inc_limit | |||||
| 19 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ EOB },{ 1, 2, 0},{ -1, 2, 0},{ 2, 1, 0}, | |||||
| { -2, 1, 0},{ 1, 3, 0},{ -1, 3, 0},{ 1, 4, 0},{ -1, 4, 0},{ 3, 1, 1}, | |||||
| { -3, 1, 1},{ 2, 2, 0},{ -2, 2, 0},{ 1, 5, 0},{ -1, 5, 0},{ 1, 6, 0}, | |||||
| { -1, 6, 0},{ 1, 7, 0},{ -1, 7, 0},{ 2, 3, 0},{ -2, 3, 0},{ 4, 1, 2}, | |||||
| { -4, 1, 2},{ 1, 8, 0},{ -1, 8, 0},{ 3, 2, 1},{ -3, 2, 1},{ 2, 4, 0}, | |||||
| { -2, 4, 0},{ 1, 9, 0},{ -1, 9, 0},{ 1,10, 0},{ -1,10, 0},{ 5, 1, 2}, | |||||
| { -5, 1, 2},{ 2, 5, 0},{ -2, 5, 0},{ 1,11, 0},{ -1,11, 0},{ 2, 6, 0}, | |||||
| { -2, 6, 0},{ 1,12, 0},{ -1,12, 0},{ 3, 3, 1},{ -3, 3, 1},{ 6, 1, 2}, | |||||
| { -6, 1, 2},{ 4, 2, 2},{ -4, 2, 2},{ 1,13, 0},{ -1,13, 0},{ 2, 7, 0}, | |||||
| { -2, 7, 0},{ 3, 4, 1},{ -3, 4, 1},{ 1,14, 0},{ -1,14, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0, 7, 5, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 2, //inc_limit | |||||
| 14 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ EOB },{ 2, 1, 0},{ -2, 1, 0},{ 1, 2, 0}, | |||||
| { -1, 2, 0},{ 3, 1, 0},{ -3, 1, 0},{ 1, 3, 0},{ -1, 3, 0},{ 2, 2, 0}, | |||||
| { -2, 2, 0},{ 4, 1, 1},{ -4, 1, 1},{ 1, 4, 0},{ -1, 4, 0},{ 5, 1, 1}, | |||||
| { -5, 1, 1},{ 1, 5, 0},{ -1, 5, 0},{ 3, 2, 0},{ -3, 2, 0},{ 2, 3, 0}, | |||||
| { -2, 3, 0},{ 1, 6, 0},{ -1, 6, 0},{ 6, 1, 1},{ -6, 1, 1},{ 2, 4, 0}, | |||||
| { -2, 4, 0},{ 1, 7, 0},{ -1, 7, 0},{ 4, 2, 1},{ -4, 2, 1},{ 7, 1, 2}, | |||||
| { -7, 1, 2},{ 3, 3, 0},{ -3, 3, 0},{ 1, 8, 0},{ -1, 8, 0},{ 2, 5, 0}, | |||||
| { -2, 5, 0},{ 8, 1, 2},{ -8, 1, 2},{ 1, 9, 0},{ -1, 9, 0},{ 3, 4, 0}, | |||||
| { -3, 4, 0},{ 2, 6, 0},{ -2, 6, 0},{ 5, 2, 1},{ -5, 2, 1},{ 1,10, 0}, | |||||
| { -1,10, 0},{ 9, 1, 2},{ -9, 1, 2},{ 4, 3, 1},{ -4, 3, 1} | |||||
| }, | |||||
| //level_add | |||||
| { 0,10, 6, 5, 4, 3, 3, 2, 2, 2, 2,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 3, //inc_limit | |||||
| 10 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ EOB },{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0}, | |||||
| { -5, 1, 0},{ 2, 2, 0},{ -2, 2, 0},{ 1, 3, 0},{ -1, 3, 0},{ 6, 1, 0}, | |||||
| { -6, 1, 0},{ 3, 2, 0},{ -3, 2, 0},{ 7, 1, 1},{ -7, 1, 1},{ 1, 4, 0}, | |||||
| { -1, 4, 0},{ 8, 1, 1},{ -8, 1, 1},{ 2, 3, 0},{ -2, 3, 0},{ 4, 2, 0}, | |||||
| { -4, 2, 0},{ 1, 5, 0},{ -1, 5, 0},{ 9, 1, 1},{ -9, 1, 1},{ 5, 2, 0}, | |||||
| { -5, 2, 0},{ 2, 4, 0},{ -2, 4, 0},{ 1, 6, 0},{ -1, 6, 0},{ 10, 1, 2}, | |||||
| {-10, 1, 2},{ 3, 3, 0},{ -3, 3, 0},{ 11, 1, 2},{-11, 1, 2},{ 1, 7, 0}, | |||||
| { -1, 7, 0},{ 6, 2, 0},{ -6, 2, 0},{ 3, 4, 0},{ -3, 4, 0},{ 2, 5, 0}, | |||||
| { -2, 5, 0},{ 12, 1, 2},{-12, 1, 2},{ 4, 3, 0},{ -4, 3, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,13, 7, 5, 4, 3, 2, 2,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 6, //inc_limit | |||||
| 7 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0},{ -5, 1, 0},{ 1, 2, 0}, | |||||
| { -1, 2, 0},{ 6, 1, 0},{ -6, 1, 0},{ 7, 1, 0},{ -7, 1, 0},{ 8, 1, 0}, | |||||
| { -8, 1, 0},{ 2, 2, 0},{ -2, 2, 0},{ 9, 1, 0},{ -9, 1, 0},{ 1, 3, 0}, | |||||
| { -1, 3, 0},{ 10, 1, 1},{-10, 1, 1},{ 3, 2, 0},{ -3, 2, 0},{ 11, 1, 1}, | |||||
| {-11, 1, 1},{ 4, 2, 0},{ -4, 2, 0},{ 12, 1, 1},{-12, 1, 1},{ 1, 4, 0}, | |||||
| { -1, 4, 0},{ 2, 3, 0},{ -2, 3, 0},{ 13, 1, 1},{-13, 1, 1},{ 5, 2, 0}, | |||||
| { -5, 2, 0},{ 14, 1, 1},{-14, 1, 1},{ 6, 2, 0},{ -6, 2, 0},{ 1, 5, 0}, | |||||
| { -1, 5, 0},{ 15, 1, 1},{-15, 1, 1},{ 3, 3, 0},{ -3, 3, 0},{ 16, 1, 1}, | |||||
| {-16, 1, 1},{ 2, 4, 0},{ -2, 4, 0},{ 7, 2, 0},{ -7, 2, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,17, 8, 4, 3, 2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 9, //inc_limit | |||||
| 5 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0},{ -5, 1, 0},{ 6, 1, 0}, | |||||
| { -6, 1, 0},{ 7, 1, 0},{ -7, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 8, 1, 0}, | |||||
| { -8, 1, 0},{ 9, 1, 0},{ -9, 1, 0},{ 10, 1, 0},{-10, 1, 0},{ 11, 1, 0}, | |||||
| {-11, 1, 0},{ 12, 1, 0},{-12, 1, 0},{ 2, 2, 0},{ -2, 2, 0},{ 13, 1, 0}, | |||||
| {-13, 1, 0},{ 1, 3, 0},{ -1, 3, 0},{ 14, 1, 0},{-14, 1, 0},{ 15, 1, 0}, | |||||
| {-15, 1, 0},{ 3, 2, 0},{ -3, 2, 0},{ 16, 1, 0},{-16, 1, 0},{ 17, 1, 0}, | |||||
| {-17, 1, 0},{ 18, 1, 0},{-18, 1, 0},{ 4, 2, 0},{ -4, 2, 0},{ 19, 1, 0}, | |||||
| {-19, 1, 0},{ 20, 1, 0},{-20, 1, 0},{ 2, 3, 0},{ -2, 3, 0},{ 1, 4, 0}, | |||||
| { -1, 4, 0},{ 5, 2, 0},{ -5, 2, 0},{ 21, 1, 0},{-21, 1, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,22, 6, 3, 2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| INT_MAX, //inc_limit | |||||
| 4 //max_run | |||||
| } | |||||
| }; | |||||
| const struct dec_2dvlc ff_cavs_chroma_dec[5] = { | |||||
| { | |||||
| { //level / run | |||||
| { 1, 1, 1},{ -1, 1, 1},{ 1, 2, 1},{ -1, 2, 1},{ 1, 3, 1},{ -1, 3, 1}, | |||||
| { 1, 4, 1},{ -1, 4, 1},{ 1, 5, 1},{ -1, 5, 1},{ 1, 6, 1},{ -1, 6, 1}, | |||||
| { 1, 7, 1},{ -1, 7, 1},{ 2, 1, 2},{ -2, 1, 2},{ 1, 8, 1},{ -1, 8, 1}, | |||||
| { 1, 9, 1},{ -1, 9, 1},{ 1,10, 1},{ -1,10, 1},{ 1,11, 1},{ -1,11, 1}, | |||||
| { 1,12, 1},{ -1,12, 1},{ 1,13, 1},{ -1,13, 1},{ 1,14, 1},{ -1,14, 1}, | |||||
| { 1,15, 1},{ -1,15, 1},{ 3, 1, 3},{ -3, 1, 3},{ 1,16, 1},{ -1,16, 1}, | |||||
| { 1,17, 1},{ -1,17, 1},{ 1,18, 1},{ -1,18, 1},{ 1,19, 1},{ -1,19, 1}, | |||||
| { 1,20, 1},{ -1,20, 1},{ 1,21, 1},{ -1,21, 1},{ 1,22, 1},{ -1,22, 1}, | |||||
| { 2, 2, 2},{ -2, 2, 2},{ 1,23, 1},{ -1,23, 1},{ 1,24, 1},{ -1,24, 1}, | |||||
| { 1,25, 1},{ -1,25, 1},{ 4, 1, 3},{ -4, 1, 3},{ EOB } | |||||
| }, | |||||
| //level_add | |||||
| { 0, 5, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |||||
| 2, 2, 2, 2, 2, 2, 2, 2, 2,-1}, | |||||
| 2, //golomb_order | |||||
| 0, //inc_limit | |||||
| 25 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 2, 1, 1}, | |||||
| { -2, 1, 1},{ 1, 3, 0},{ -1, 3, 0},{ 1, 4, 0},{ -1, 4, 0},{ 1, 5, 0}, | |||||
| { -1, 5, 0},{ 1, 6, 0},{ -1, 6, 0},{ 3, 1, 2},{ -3, 1, 2},{ 1, 7, 0}, | |||||
| { -1, 7, 0},{ 1, 8, 0},{ -1, 8, 0},{ 2, 2, 1},{ -2, 2, 1},{ 1, 9, 0}, | |||||
| { -1, 9, 0},{ 1,10, 0},{ -1,10, 0},{ 1,11, 0},{ -1,11, 0},{ 4, 1, 2}, | |||||
| { -4, 1, 2},{ 1,12, 0},{ -1,12, 0},{ 1,13, 0},{ -1,13, 0},{ 1,14, 0}, | |||||
| { -1,14, 0},{ 2, 3, 1},{ -2, 3, 1},{ 1,15, 0},{ -1,15, 0},{ 2, 4, 1}, | |||||
| { -2, 4, 1},{ 5, 1, 3},{ -5, 1, 3},{ 3, 2, 2},{ -3, 2, 2},{ 1,16, 0}, | |||||
| { -1,16, 0},{ 1,17, 0},{ -1,17, 0},{ 1,18, 0},{ -1,18, 0},{ 2, 5, 1}, | |||||
| { -2, 5, 1},{ 1,19, 0},{ -1,19, 0},{ 1,20, 0},{ -1,20, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0, 6, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |||||
| 2, 2, 2, 2,-1,-1,-1,-1,-1,-1}, | |||||
| 0, //golomb_order | |||||
| 1, //inc_limit | |||||
| 20 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ EOB },{ 2, 1, 0},{ -2, 1, 0},{ 1, 2, 0}, | |||||
| { -1, 2, 0},{ 3, 1, 1},{ -3, 1, 1},{ 1, 3, 0},{ -1, 3, 0},{ 4, 1, 1}, | |||||
| { -4, 1, 1},{ 2, 2, 0},{ -2, 2, 0},{ 1, 4, 0},{ -1, 4, 0},{ 5, 1, 2}, | |||||
| { -5, 1, 2},{ 1, 5, 0},{ -1, 5, 0},{ 3, 2, 1},{ -3, 2, 1},{ 2, 3, 0}, | |||||
| { -2, 3, 0},{ 1, 6, 0},{ -1, 6, 0},{ 6, 1, 2},{ -6, 1, 2},{ 1, 7, 0}, | |||||
| { -1, 7, 0},{ 2, 4, 0},{ -2, 4, 0},{ 7, 1, 2},{ -7, 1, 2},{ 1, 8, 0}, | |||||
| { -1, 8, 0},{ 4, 2, 1},{ -4, 2, 1},{ 1, 9, 0},{ -1, 9, 0},{ 3, 3, 1}, | |||||
| { -3, 3, 1},{ 2, 5, 0},{ -2, 5, 0},{ 2, 6, 0},{ -2, 6, 0},{ 8, 1, 2}, | |||||
| { -8, 1, 2},{ 1,10, 0},{ -1,10, 0},{ 1,11, 0},{ -1,11, 0},{ 9, 1, 2}, | |||||
| { -9, 1, 2},{ 5, 2, 2},{ -5, 2, 2},{ 3, 4, 1},{ -3, 4, 1}, | |||||
| }, | |||||
| //level_add | |||||
| { 0,10, 6, 4, 4, 3, 3, 2, 2, 2, 2, 2,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 1, //golomb_order | |||||
| 2, //inc_limit | |||||
| 11 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 4, 1, 0},{ -4, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 5, 1, 1}, | |||||
| { -5, 1, 1},{ 2, 2, 0},{ -2, 2, 0},{ 6, 1, 1},{ -6, 1, 1},{ 1, 3, 0}, | |||||
| { -1, 3, 0},{ 7, 1, 1},{ -7, 1, 1},{ 3, 2, 0},{ -3, 2, 0},{ 8, 1, 1}, | |||||
| { -8, 1, 1},{ 1, 4, 0},{ -1, 4, 0},{ 2, 3, 0},{ -2, 3, 0},{ 9, 1, 1}, | |||||
| { -9, 1, 1},{ 4, 2, 0},{ -4, 2, 0},{ 1, 5, 0},{ -1, 5, 0},{ 10, 1, 1}, | |||||
| {-10, 1, 1},{ 3, 3, 0},{ -3, 3, 0},{ 5, 2, 1},{ -5, 2, 1},{ 2, 4, 0}, | |||||
| { -2, 4, 0},{ 11, 1, 1},{-11, 1, 1},{ 1, 6, 0},{ -1, 6, 0},{ 12, 1, 1}, | |||||
| {-12, 1, 1},{ 1, 7, 0},{ -1, 7, 0},{ 6, 2, 1},{ -6, 2, 1},{ 13, 1, 1}, | |||||
| {-13, 1, 1},{ 2, 5, 0},{ -2, 5, 0},{ 1, 8, 0},{ -1, 8, 0}, | |||||
| }, | |||||
| //level_add | |||||
| { 0,14, 7, 4, 3, 3, 2, 2, 2,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 1, //golomb_order | |||||
| 4, //inc_limit | |||||
| 8 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0},{ -5, 1, 0},{ 6, 1, 0}, | |||||
| { -6, 1, 0},{ 7, 1, 0},{ -7, 1, 0},{ 8, 1, 0},{ -8, 1, 0},{ 1, 2, 0}, | |||||
| { -1, 2, 0},{ 9, 1, 0},{ -9, 1, 0},{ 10, 1, 0},{-10, 1, 0},{ 11, 1, 0}, | |||||
| {-11, 1, 0},{ 2, 2, 0},{ -2, 2, 0},{ 12, 1, 0},{-12, 1, 0},{ 13, 1, 0}, | |||||
| {-13, 1, 0},{ 3, 2, 0},{ -3, 2, 0},{ 14, 1, 0},{-14, 1, 0},{ 1, 3, 0}, | |||||
| { -1, 3, 0},{ 15, 1, 0},{-15, 1, 0},{ 4, 2, 0},{ -4, 2, 0},{ 16, 1, 0}, | |||||
| {-16, 1, 0},{ 17, 1, 0},{-17, 1, 0},{ 5, 2, 0},{ -5, 2, 0},{ 1, 4, 0}, | |||||
| { -1, 4, 0},{ 2, 3, 0},{ -2, 3, 0},{ 18, 1, 0},{-18, 1, 0},{ 6, 2, 0}, | |||||
| { -6, 2, 0},{ 19, 1, 0},{-19, 1, 0},{ 1, 5, 0},{ -1, 5, 0}, | |||||
| }, | |||||
| //level_add | |||||
| { 0,20, 7, 3, 2, 2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 0, //golomb_order | |||||
| INT_MAX, //inc_limit | |||||
| 5, //max_run | |||||
| } | |||||
| }; | |||||
| #undef EOB | |||||
| static const uint8_t alpha_tab[64] = { | |||||
| 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, | |||||
| 4, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 18, 20, | |||||
| 22, 24, 26, 28, 30, 33, 33, 35, 35, 36, 37, 37, 39, 39, 42, 44, | |||||
| 46, 48, 50, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64 | |||||
| }; | |||||
| static const uint8_t beta_tab[64] = { | |||||
| 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, | |||||
| 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, | |||||
| 6, 7, 7, 7, 8, 8, 8, 9, 9, 10, 10, 11, 11, 12, 13, 14, | |||||
| 15, 16, 17, 18, 19, 20, 21, 22, 23, 23, 24, 24, 25, 25, 26, 27 | |||||
| }; | |||||
| static const uint8_t tc_tab[64] = { | |||||
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |||||
| 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, | |||||
| 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, | |||||
| 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9 | |||||
| }; | |||||
| const int8_t ff_left_modifier_l[8] = { 0, -1, 6, -1, -1, 7, 6, 7 }; | |||||
| const int8_t ff_top_modifier_l[8] = { -1, 1, 5, -1, -1, 5, 7, 7 }; | |||||
| const int8_t ff_left_modifier_c[7] = { 5, -1, 2, -1, 6, 5, 6 }; | |||||
| const int8_t ff_top_modifier_c[7] = { 4, 1, -1, -1, 4, 6, 6 }; | |||||
| #endif /* AVCODEC_CAVSDATA_H */ | #endif /* AVCODEC_CAVSDATA_H */ | ||||
| @@ -46,6 +46,414 @@ static const uint8_t cbp_tab[64][2] = { | |||||
| {34,50},{50,56},{52,25},{54,22},{41,54},{56,57},{38,41},{57,38} | {34,50},{50,56},{52,25},{54,22},{41,54},{56,57},{38,41},{57,38} | ||||
| }; | }; | ||||
| static const uint8_t scan3x3[4] = { 4, 5, 7, 8 }; | |||||
| static const uint8_t cavs_chroma_qp[64] = { | |||||
| 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15, | |||||
| 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, | |||||
| 32,33,34,35,36,37,38,39,40,41,42,42,43,43,44,44, | |||||
| 45,45,46,46,47,47,48,48,48,49,49,49,50,50,50,51 | |||||
| }; | |||||
| static const uint8_t dequant_shift[64] = { | |||||
| 14,14,14,14,14,14,14,14, | |||||
| 13,13,13,13,13,13,13,13, | |||||
| 13,12,12,12,12,12,12,12, | |||||
| 11,11,11,11,11,11,11,11, | |||||
| 11,10,10,10,10,10,10,10, | |||||
| 10, 9, 9, 9, 9, 9, 9, 9, | |||||
| 9, 8, 8, 8, 8, 8, 8, 8, | |||||
| 7, 7, 7, 7, 7, 7, 7, 7 | |||||
| }; | |||||
| static const uint16_t dequant_mul[64] = { | |||||
| 32768,36061,38968,42495,46341,50535,55437,60424, | |||||
| 32932,35734,38968,42495,46177,50535,55109,59933, | |||||
| 65535,35734,38968,42577,46341,50617,55027,60097, | |||||
| 32809,35734,38968,42454,46382,50576,55109,60056, | |||||
| 65535,35734,38968,42495,46320,50515,55109,60076, | |||||
| 65535,35744,38968,42495,46341,50535,55099,60087, | |||||
| 65535,35734,38973,42500,46341,50535,55109,60097, | |||||
| 32771,35734,38965,42497,46341,50535,55109,60099 | |||||
| }; | |||||
| #define EOB 0,0,0 | |||||
| static const struct dec_2dvlc intra_dec[7] = { | |||||
| { | |||||
| { //level / run / table_inc | |||||
| { 1, 1, 1},{ -1, 1, 1},{ 1, 2, 1},{ -1, 2, 1},{ 1, 3, 1},{ -1, 3, 1}, | |||||
| { 1, 4, 1},{ -1, 4, 1},{ 1, 5, 1},{ -1, 5, 1},{ 1, 6, 1},{ -1, 6, 1}, | |||||
| { 1, 7, 1},{ -1, 7, 1},{ 1, 8, 1},{ -1, 8, 1},{ 1, 9, 1},{ -1, 9, 1}, | |||||
| { 1,10, 1},{ -1,10, 1},{ 1,11, 1},{ -1,11, 1},{ 2, 1, 2},{ -2, 1, 2}, | |||||
| { 1,12, 1},{ -1,12, 1},{ 1,13, 1},{ -1,13, 1},{ 1,14, 1},{ -1,14, 1}, | |||||
| { 1,15, 1},{ -1,15, 1},{ 2, 2, 2},{ -2, 2, 2},{ 1,16, 1},{ -1,16, 1}, | |||||
| { 1,17, 1},{ -1,17, 1},{ 3, 1, 3},{ -3, 1, 3},{ 1,18, 1},{ -1,18, 1}, | |||||
| { 1,19, 1},{ -1,19, 1},{ 2, 3, 2},{ -2, 3, 2},{ 1,20, 1},{ -1,20, 1}, | |||||
| { 1,21, 1},{ -1,21, 1},{ 2, 4, 2},{ -2, 4, 2},{ 1,22, 1},{ -1,22, 1}, | |||||
| { 2, 5, 2},{ -2, 5, 2},{ 1,23, 1},{ -1,23, 1},{ EOB } | |||||
| }, | |||||
| //level_add | |||||
| { 0, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |||||
| 2, 2, 2, 2, 2, 2, 2,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 0, //inc_limit | |||||
| 23, //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 2, 1, 1},{ -2, 1, 1}, | |||||
| { 1, 3, 0},{ -1, 3, 0},{ EOB },{ 1, 4, 0},{ -1, 4, 0},{ 1, 5, 0}, | |||||
| { -1, 5, 0},{ 1, 6, 0},{ -1, 6, 0},{ 3, 1, 2},{ -3, 1, 2},{ 2, 2, 1}, | |||||
| { -2, 2, 1},{ 1, 7, 0},{ -1, 7, 0},{ 1, 8, 0},{ -1, 8, 0},{ 1, 9, 0}, | |||||
| { -1, 9, 0},{ 2, 3, 1},{ -2, 3, 1},{ 4, 1, 2},{ -4, 1, 2},{ 1,10, 0}, | |||||
| { -1,10, 0},{ 1,11, 0},{ -1,11, 0},{ 2, 4, 1},{ -2, 4, 1},{ 3, 2, 2}, | |||||
| { -3, 2, 2},{ 1,12, 0},{ -1,12, 0},{ 2, 5, 1},{ -2, 5, 1},{ 5, 1, 3}, | |||||
| { -5, 1, 3},{ 1,13, 0},{ -1,13, 0},{ 2, 6, 1},{ -2, 6, 1},{ 1,14, 0}, | |||||
| { -1,14, 0},{ 2, 7, 1},{ -2, 7, 1},{ 2, 8, 1},{ -2, 8, 1},{ 3, 3, 2}, | |||||
| { -3, 3, 2},{ 6, 1, 3},{ -6, 1, 3},{ 1,15, 0},{ -1,15, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0, 7, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 1, //inc_limit | |||||
| 15, //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 1, 2, 0},{ -1, 2, 0}, | |||||
| { 3, 1, 1},{ -3, 1, 1},{ EOB },{ 1, 3, 0},{ -1, 3, 0},{ 2, 2, 0}, | |||||
| { -2, 2, 0},{ 4, 1, 1},{ -4, 1, 1},{ 1, 4, 0},{ -1, 4, 0},{ 5, 1, 2}, | |||||
| { -5, 1, 2},{ 1, 5, 0},{ -1, 5, 0},{ 3, 2, 1},{ -3, 2, 1},{ 2, 3, 0}, | |||||
| { -2, 3, 0},{ 1, 6, 0},{ -1, 6, 0},{ 6, 1, 2},{ -6, 1, 2},{ 2, 4, 0}, | |||||
| { -2, 4, 0},{ 1, 7, 0},{ -1, 7, 0},{ 4, 2, 1},{ -4, 2, 1},{ 7, 1, 2}, | |||||
| { -7, 1, 2},{ 3, 3, 1},{ -3, 3, 1},{ 2, 5, 0},{ -2, 5, 0},{ 1, 8, 0}, | |||||
| { -1, 8, 0},{ 2, 6, 0},{ -2, 6, 0},{ 8, 1, 3},{ -8, 1, 3},{ 1, 9, 0}, | |||||
| { -1, 9, 0},{ 5, 2, 2},{ -5, 2, 2},{ 3, 4, 1},{ -3, 4, 1},{ 2, 7, 0}, | |||||
| { -2, 7, 0},{ 9, 1, 3},{ -9, 1, 3},{ 1,10, 0},{ -1,10, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,10, 6, 4, 4, 3, 3, 3, 2, 2, 2,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 2, //inc_limit | |||||
| 10, //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0},{ -3, 1, 0}, | |||||
| { 1, 2, 0},{ -1, 2, 0},{ EOB },{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 1}, | |||||
| { -5, 1, 1},{ 2, 2, 0},{ -2, 2, 0},{ 1, 3, 0},{ -1, 3, 0},{ 6, 1, 1}, | |||||
| { -6, 1, 1},{ 3, 2, 0},{ -3, 2, 0},{ 7, 1, 1},{ -7, 1, 1},{ 1, 4, 0}, | |||||
| { -1, 4, 0},{ 8, 1, 2},{ -8, 1, 2},{ 2, 3, 0},{ -2, 3, 0},{ 4, 2, 0}, | |||||
| { -4, 2, 0},{ 1, 5, 0},{ -1, 5, 0},{ 9, 1, 2},{ -9, 1, 2},{ 5, 2, 1}, | |||||
| { -5, 2, 1},{ 2, 4, 0},{ -2, 4, 0},{ 10, 1, 2},{-10, 1, 2},{ 3, 3, 0}, | |||||
| { -3, 3, 0},{ 1, 6, 0},{ -1, 6, 0},{ 11, 1, 3},{-11, 1, 3},{ 6, 2, 1}, | |||||
| { -6, 2, 1},{ 1, 7, 0},{ -1, 7, 0},{ 2, 5, 0},{ -2, 5, 0},{ 3, 4, 0}, | |||||
| { -3, 4, 0},{ 12, 1, 3},{-12, 1, 3},{ 4, 3, 0},{ -4, 3, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,13, 7, 5, 4, 3, 2, 2,-1,-1,-1 -1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 4, //inc_limit | |||||
| 7, //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0},{ -3, 1, 0}, | |||||
| { EOB },{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0},{ -5, 1, 0},{ 6, 1, 0}, | |||||
| { -6, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 7, 1, 0},{ -7, 1, 0},{ 8, 1, 1}, | |||||
| { -8, 1, 1},{ 2, 2, 0},{ -2, 2, 0},{ 9, 1, 1},{ -9, 1, 1},{ 10, 1, 1}, | |||||
| {-10, 1, 1},{ 1, 3, 0},{ -1, 3, 0},{ 3, 2, 0},{ -3, 2, 0},{ 11, 1, 2}, | |||||
| {-11, 1, 2},{ 4, 2, 0},{ -4, 2, 0},{ 12, 1, 2},{-12, 1, 2},{ 13, 1, 2}, | |||||
| {-13, 1, 2},{ 5, 2, 0},{ -5, 2, 0},{ 1, 4, 0},{ -1, 4, 0},{ 2, 3, 0}, | |||||
| { -2, 3, 0},{ 14, 1, 2},{-14, 1, 2},{ 6, 2, 0},{ -6, 2, 0},{ 15, 1, 2}, | |||||
| {-15, 1, 2},{ 16, 1, 2},{-16, 1, 2},{ 3, 3, 0},{ -3, 3, 0},{ 1, 5, 0}, | |||||
| { -1, 5, 0},{ 7, 2, 0},{ -7, 2, 0},{ 17, 1, 2},{-17, 1, 2} | |||||
| }, | |||||
| //level_add | |||||
| { 0,18, 8, 4, 2, 2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 7, //inc_limit | |||||
| 5, //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0},{ -5, 1, 0},{ 6, 1, 0}, | |||||
| { -6, 1, 0},{ 7, 1, 0},{ -7, 1, 0},{ 8, 1, 0},{ -8, 1, 0},{ 9, 1, 0}, | |||||
| { -9, 1, 0},{ 10, 1, 0},{-10, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 11, 1, 1}, | |||||
| {-11, 1, 1},{ 12, 1, 1},{-12, 1, 1},{ 13, 1, 1},{-13, 1, 1},{ 2, 2, 0}, | |||||
| { -2, 2, 0},{ 14, 1, 1},{-14, 1, 1},{ 15, 1, 1},{-15, 1, 1},{ 3, 2, 0}, | |||||
| { -3, 2, 0},{ 16, 1, 1},{-16, 1, 1},{ 1, 3, 0},{ -1, 3, 0},{ 17, 1, 1}, | |||||
| {-17, 1, 1},{ 4, 2, 0},{ -4, 2, 0},{ 18, 1, 1},{-18, 1, 1},{ 5, 2, 0}, | |||||
| { -5, 2, 0},{ 19, 1, 1},{-19, 1, 1},{ 20, 1, 1},{-20, 1, 1},{ 6, 2, 0}, | |||||
| { -6, 2, 0},{ 21, 1, 1},{-21, 1, 1},{ 2, 3, 0},{ -2, 3, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,22, 7, 3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 10, //inc_limit | |||||
| 3, //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0},{ -5, 1, 0},{ 6, 1, 0}, | |||||
| { -6, 1, 0},{ 7, 1, 0},{ -7, 1, 0},{ 8, 1, 0},{ -8, 1, 0},{ 9, 1, 0}, | |||||
| { -9, 1, 0},{ 10, 1, 0},{-10, 1, 0},{ 11, 1, 0},{-11, 1, 0},{ 12, 1, 0}, | |||||
| {-12, 1, 0},{ 13, 1, 0},{-13, 1, 0},{ 14, 1, 0},{-14, 1, 0},{ 15, 1, 0}, | |||||
| {-15, 1, 0},{ 16, 1, 0},{-16, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 17, 1, 0}, | |||||
| {-17, 1, 0},{ 18, 1, 0},{-18, 1, 0},{ 19, 1, 0},{-19, 1, 0},{ 20, 1, 0}, | |||||
| {-20, 1, 0},{ 21, 1, 0},{-21, 1, 0},{ 2, 2, 0},{ -2, 2, 0},{ 22, 1, 0}, | |||||
| {-22, 1, 0},{ 23, 1, 0},{-23, 1, 0},{ 24, 1, 0},{-24, 1, 0},{ 25, 1, 0}, | |||||
| {-25, 1, 0},{ 3, 2, 0},{ -3, 2, 0},{ 26, 1, 0},{-26, 1, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,27, 4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| INT_MAX, //inc_limit | |||||
| 2, //max_run | |||||
| } | |||||
| }; | |||||
| static const struct dec_2dvlc inter_dec[7] = { | |||||
| { | |||||
| { //level / run | |||||
| { 1, 1, 1},{ -1, 1, 1},{ 1, 2, 1},{ -1, 2, 1},{ 1, 3, 1},{ -1, 3, 1}, | |||||
| { 1, 4, 1},{ -1, 4, 1},{ 1, 5, 1},{ -1, 5, 1},{ 1, 6, 1},{ -1, 6, 1}, | |||||
| { 1, 7, 1},{ -1, 7, 1},{ 1, 8, 1},{ -1, 8, 1},{ 1, 9, 1},{ -1, 9, 1}, | |||||
| { 1,10, 1},{ -1,10, 1},{ 1,11, 1},{ -1,11, 1},{ 1,12, 1},{ -1,12, 1}, | |||||
| { 1,13, 1},{ -1,13, 1},{ 2, 1, 2},{ -2, 1, 2},{ 1,14, 1},{ -1,14, 1}, | |||||
| { 1,15, 1},{ -1,15, 1},{ 1,16, 1},{ -1,16, 1},{ 1,17, 1},{ -1,17, 1}, | |||||
| { 1,18, 1},{ -1,18, 1},{ 1,19, 1},{ -1,19, 1},{ 3, 1, 3},{ -3, 1, 3}, | |||||
| { 1,20, 1},{ -1,20, 1},{ 1,21, 1},{ -1,21, 1},{ 2, 2, 2},{ -2, 2, 2}, | |||||
| { 1,22, 1},{ -1,22, 1},{ 1,23, 1},{ -1,23, 1},{ 1,24, 1},{ -1,24, 1}, | |||||
| { 1,25, 1},{ -1,25, 1},{ 1,26, 1},{ -1,26, 1},{ EOB } | |||||
| }, | |||||
| //level_add | |||||
| { 0, 4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |||||
| 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, | |||||
| 3, //golomb_order | |||||
| 0, //inc_limit | |||||
| 26 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ EOB },{ 1, 2, 0},{ -1, 2, 0},{ 1, 3, 0}, | |||||
| { -1, 3, 0},{ 1, 4, 0},{ -1, 4, 0},{ 1, 5, 0},{ -1, 5, 0},{ 1, 6, 0}, | |||||
| { -1, 6, 0},{ 2, 1, 1},{ -2, 1, 1},{ 1, 7, 0},{ -1, 7, 0},{ 1, 8, 0}, | |||||
| { -1, 8, 0},{ 1, 9, 0},{ -1, 9, 0},{ 1,10, 0},{ -1,10, 0},{ 2, 2, 1}, | |||||
| { -2, 2, 1},{ 1,11, 0},{ -1,11, 0},{ 1,12, 0},{ -1,12, 0},{ 3, 1, 2}, | |||||
| { -3, 1, 2},{ 1,13, 0},{ -1,13, 0},{ 1,14, 0},{ -1,14, 0},{ 2, 3, 1}, | |||||
| { -2, 3, 1},{ 1,15, 0},{ -1,15, 0},{ 2, 4, 1},{ -2, 4, 1},{ 1,16, 0}, | |||||
| { -1,16, 0},{ 2, 5, 1},{ -2, 5, 1},{ 1,17, 0},{ -1,17, 0},{ 4, 1, 3}, | |||||
| { -4, 1, 3},{ 2, 6, 1},{ -2, 6, 1},{ 1,18, 0},{ -1,18, 0},{ 1,19, 0}, | |||||
| { -1,19, 0},{ 2, 7, 1},{ -2, 7, 1},{ 3, 2, 2},{ -3, 2, 2} | |||||
| }, | |||||
| //level_add | |||||
| { 0, 5, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |||||
| 2, 2, 2,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 1, //inc_limit | |||||
| 19 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ EOB },{ 1, 2, 0},{ -1, 2, 0},{ 2, 1, 0}, | |||||
| { -2, 1, 0},{ 1, 3, 0},{ -1, 3, 0},{ 1, 4, 0},{ -1, 4, 0},{ 3, 1, 1}, | |||||
| { -3, 1, 1},{ 2, 2, 0},{ -2, 2, 0},{ 1, 5, 0},{ -1, 5, 0},{ 1, 6, 0}, | |||||
| { -1, 6, 0},{ 1, 7, 0},{ -1, 7, 0},{ 2, 3, 0},{ -2, 3, 0},{ 4, 1, 2}, | |||||
| { -4, 1, 2},{ 1, 8, 0},{ -1, 8, 0},{ 3, 2, 1},{ -3, 2, 1},{ 2, 4, 0}, | |||||
| { -2, 4, 0},{ 1, 9, 0},{ -1, 9, 0},{ 1,10, 0},{ -1,10, 0},{ 5, 1, 2}, | |||||
| { -5, 1, 2},{ 2, 5, 0},{ -2, 5, 0},{ 1,11, 0},{ -1,11, 0},{ 2, 6, 0}, | |||||
| { -2, 6, 0},{ 1,12, 0},{ -1,12, 0},{ 3, 3, 1},{ -3, 3, 1},{ 6, 1, 2}, | |||||
| { -6, 1, 2},{ 4, 2, 2},{ -4, 2, 2},{ 1,13, 0},{ -1,13, 0},{ 2, 7, 0}, | |||||
| { -2, 7, 0},{ 3, 4, 1},{ -3, 4, 1},{ 1,14, 0},{ -1,14, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0, 7, 5, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 2, //inc_limit | |||||
| 14 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ EOB },{ 2, 1, 0},{ -2, 1, 0},{ 1, 2, 0}, | |||||
| { -1, 2, 0},{ 3, 1, 0},{ -3, 1, 0},{ 1, 3, 0},{ -1, 3, 0},{ 2, 2, 0}, | |||||
| { -2, 2, 0},{ 4, 1, 1},{ -4, 1, 1},{ 1, 4, 0},{ -1, 4, 0},{ 5, 1, 1}, | |||||
| { -5, 1, 1},{ 1, 5, 0},{ -1, 5, 0},{ 3, 2, 0},{ -3, 2, 0},{ 2, 3, 0}, | |||||
| { -2, 3, 0},{ 1, 6, 0},{ -1, 6, 0},{ 6, 1, 1},{ -6, 1, 1},{ 2, 4, 0}, | |||||
| { -2, 4, 0},{ 1, 7, 0},{ -1, 7, 0},{ 4, 2, 1},{ -4, 2, 1},{ 7, 1, 2}, | |||||
| { -7, 1, 2},{ 3, 3, 0},{ -3, 3, 0},{ 1, 8, 0},{ -1, 8, 0},{ 2, 5, 0}, | |||||
| { -2, 5, 0},{ 8, 1, 2},{ -8, 1, 2},{ 1, 9, 0},{ -1, 9, 0},{ 3, 4, 0}, | |||||
| { -3, 4, 0},{ 2, 6, 0},{ -2, 6, 0},{ 5, 2, 1},{ -5, 2, 1},{ 1,10, 0}, | |||||
| { -1,10, 0},{ 9, 1, 2},{ -9, 1, 2},{ 4, 3, 1},{ -4, 3, 1} | |||||
| }, | |||||
| //level_add | |||||
| { 0,10, 6, 5, 4, 3, 3, 2, 2, 2, 2,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 3, //inc_limit | |||||
| 10 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ EOB },{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0}, | |||||
| { -5, 1, 0},{ 2, 2, 0},{ -2, 2, 0},{ 1, 3, 0},{ -1, 3, 0},{ 6, 1, 0}, | |||||
| { -6, 1, 0},{ 3, 2, 0},{ -3, 2, 0},{ 7, 1, 1},{ -7, 1, 1},{ 1, 4, 0}, | |||||
| { -1, 4, 0},{ 8, 1, 1},{ -8, 1, 1},{ 2, 3, 0},{ -2, 3, 0},{ 4, 2, 0}, | |||||
| { -4, 2, 0},{ 1, 5, 0},{ -1, 5, 0},{ 9, 1, 1},{ -9, 1, 1},{ 5, 2, 0}, | |||||
| { -5, 2, 0},{ 2, 4, 0},{ -2, 4, 0},{ 1, 6, 0},{ -1, 6, 0},{ 10, 1, 2}, | |||||
| {-10, 1, 2},{ 3, 3, 0},{ -3, 3, 0},{ 11, 1, 2},{-11, 1, 2},{ 1, 7, 0}, | |||||
| { -1, 7, 0},{ 6, 2, 0},{ -6, 2, 0},{ 3, 4, 0},{ -3, 4, 0},{ 2, 5, 0}, | |||||
| { -2, 5, 0},{ 12, 1, 2},{-12, 1, 2},{ 4, 3, 0},{ -4, 3, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,13, 7, 5, 4, 3, 2, 2,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 6, //inc_limit | |||||
| 7 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0},{ -5, 1, 0},{ 1, 2, 0}, | |||||
| { -1, 2, 0},{ 6, 1, 0},{ -6, 1, 0},{ 7, 1, 0},{ -7, 1, 0},{ 8, 1, 0}, | |||||
| { -8, 1, 0},{ 2, 2, 0},{ -2, 2, 0},{ 9, 1, 0},{ -9, 1, 0},{ 1, 3, 0}, | |||||
| { -1, 3, 0},{ 10, 1, 1},{-10, 1, 1},{ 3, 2, 0},{ -3, 2, 0},{ 11, 1, 1}, | |||||
| {-11, 1, 1},{ 4, 2, 0},{ -4, 2, 0},{ 12, 1, 1},{-12, 1, 1},{ 1, 4, 0}, | |||||
| { -1, 4, 0},{ 2, 3, 0},{ -2, 3, 0},{ 13, 1, 1},{-13, 1, 1},{ 5, 2, 0}, | |||||
| { -5, 2, 0},{ 14, 1, 1},{-14, 1, 1},{ 6, 2, 0},{ -6, 2, 0},{ 1, 5, 0}, | |||||
| { -1, 5, 0},{ 15, 1, 1},{-15, 1, 1},{ 3, 3, 0},{ -3, 3, 0},{ 16, 1, 1}, | |||||
| {-16, 1, 1},{ 2, 4, 0},{ -2, 4, 0},{ 7, 2, 0},{ -7, 2, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,17, 8, 4, 3, 2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| 9, //inc_limit | |||||
| 5 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0},{ -5, 1, 0},{ 6, 1, 0}, | |||||
| { -6, 1, 0},{ 7, 1, 0},{ -7, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 8, 1, 0}, | |||||
| { -8, 1, 0},{ 9, 1, 0},{ -9, 1, 0},{ 10, 1, 0},{-10, 1, 0},{ 11, 1, 0}, | |||||
| {-11, 1, 0},{ 12, 1, 0},{-12, 1, 0},{ 2, 2, 0},{ -2, 2, 0},{ 13, 1, 0}, | |||||
| {-13, 1, 0},{ 1, 3, 0},{ -1, 3, 0},{ 14, 1, 0},{-14, 1, 0},{ 15, 1, 0}, | |||||
| {-15, 1, 0},{ 3, 2, 0},{ -3, 2, 0},{ 16, 1, 0},{-16, 1, 0},{ 17, 1, 0}, | |||||
| {-17, 1, 0},{ 18, 1, 0},{-18, 1, 0},{ 4, 2, 0},{ -4, 2, 0},{ 19, 1, 0}, | |||||
| {-19, 1, 0},{ 20, 1, 0},{-20, 1, 0},{ 2, 3, 0},{ -2, 3, 0},{ 1, 4, 0}, | |||||
| { -1, 4, 0},{ 5, 2, 0},{ -5, 2, 0},{ 21, 1, 0},{-21, 1, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0,22, 6, 3, 2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 2, //golomb_order | |||||
| INT_MAX, //inc_limit | |||||
| 4 //max_run | |||||
| } | |||||
| }; | |||||
| static const struct dec_2dvlc chroma_dec[5] = { | |||||
| { | |||||
| { //level / run | |||||
| { 1, 1, 1},{ -1, 1, 1},{ 1, 2, 1},{ -1, 2, 1},{ 1, 3, 1},{ -1, 3, 1}, | |||||
| { 1, 4, 1},{ -1, 4, 1},{ 1, 5, 1},{ -1, 5, 1},{ 1, 6, 1},{ -1, 6, 1}, | |||||
| { 1, 7, 1},{ -1, 7, 1},{ 2, 1, 2},{ -2, 1, 2},{ 1, 8, 1},{ -1, 8, 1}, | |||||
| { 1, 9, 1},{ -1, 9, 1},{ 1,10, 1},{ -1,10, 1},{ 1,11, 1},{ -1,11, 1}, | |||||
| { 1,12, 1},{ -1,12, 1},{ 1,13, 1},{ -1,13, 1},{ 1,14, 1},{ -1,14, 1}, | |||||
| { 1,15, 1},{ -1,15, 1},{ 3, 1, 3},{ -3, 1, 3},{ 1,16, 1},{ -1,16, 1}, | |||||
| { 1,17, 1},{ -1,17, 1},{ 1,18, 1},{ -1,18, 1},{ 1,19, 1},{ -1,19, 1}, | |||||
| { 1,20, 1},{ -1,20, 1},{ 1,21, 1},{ -1,21, 1},{ 1,22, 1},{ -1,22, 1}, | |||||
| { 2, 2, 2},{ -2, 2, 2},{ 1,23, 1},{ -1,23, 1},{ 1,24, 1},{ -1,24, 1}, | |||||
| { 1,25, 1},{ -1,25, 1},{ 4, 1, 3},{ -4, 1, 3},{ EOB } | |||||
| }, | |||||
| //level_add | |||||
| { 0, 5, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |||||
| 2, 2, 2, 2, 2, 2, 2, 2, 2,-1}, | |||||
| 2, //golomb_order | |||||
| 0, //inc_limit | |||||
| 25 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 2, 1, 1}, | |||||
| { -2, 1, 1},{ 1, 3, 0},{ -1, 3, 0},{ 1, 4, 0},{ -1, 4, 0},{ 1, 5, 0}, | |||||
| { -1, 5, 0},{ 1, 6, 0},{ -1, 6, 0},{ 3, 1, 2},{ -3, 1, 2},{ 1, 7, 0}, | |||||
| { -1, 7, 0},{ 1, 8, 0},{ -1, 8, 0},{ 2, 2, 1},{ -2, 2, 1},{ 1, 9, 0}, | |||||
| { -1, 9, 0},{ 1,10, 0},{ -1,10, 0},{ 1,11, 0},{ -1,11, 0},{ 4, 1, 2}, | |||||
| { -4, 1, 2},{ 1,12, 0},{ -1,12, 0},{ 1,13, 0},{ -1,13, 0},{ 1,14, 0}, | |||||
| { -1,14, 0},{ 2, 3, 1},{ -2, 3, 1},{ 1,15, 0},{ -1,15, 0},{ 2, 4, 1}, | |||||
| { -2, 4, 1},{ 5, 1, 3},{ -5, 1, 3},{ 3, 2, 2},{ -3, 2, 2},{ 1,16, 0}, | |||||
| { -1,16, 0},{ 1,17, 0},{ -1,17, 0},{ 1,18, 0},{ -1,18, 0},{ 2, 5, 1}, | |||||
| { -2, 5, 1},{ 1,19, 0},{ -1,19, 0},{ 1,20, 0},{ -1,20, 0} | |||||
| }, | |||||
| //level_add | |||||
| { 0, 6, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | |||||
| 2, 2, 2, 2,-1,-1,-1,-1,-1,-1}, | |||||
| 0, //golomb_order | |||||
| 1, //inc_limit | |||||
| 20 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { 1, 1, 0},{ -1, 1, 0},{ EOB },{ 2, 1, 0},{ -2, 1, 0},{ 1, 2, 0}, | |||||
| { -1, 2, 0},{ 3, 1, 1},{ -3, 1, 1},{ 1, 3, 0},{ -1, 3, 0},{ 4, 1, 1}, | |||||
| { -4, 1, 1},{ 2, 2, 0},{ -2, 2, 0},{ 1, 4, 0},{ -1, 4, 0},{ 5, 1, 2}, | |||||
| { -5, 1, 2},{ 1, 5, 0},{ -1, 5, 0},{ 3, 2, 1},{ -3, 2, 1},{ 2, 3, 0}, | |||||
| { -2, 3, 0},{ 1, 6, 0},{ -1, 6, 0},{ 6, 1, 2},{ -6, 1, 2},{ 1, 7, 0}, | |||||
| { -1, 7, 0},{ 2, 4, 0},{ -2, 4, 0},{ 7, 1, 2},{ -7, 1, 2},{ 1, 8, 0}, | |||||
| { -1, 8, 0},{ 4, 2, 1},{ -4, 2, 1},{ 1, 9, 0},{ -1, 9, 0},{ 3, 3, 1}, | |||||
| { -3, 3, 1},{ 2, 5, 0},{ -2, 5, 0},{ 2, 6, 0},{ -2, 6, 0},{ 8, 1, 2}, | |||||
| { -8, 1, 2},{ 1,10, 0},{ -1,10, 0},{ 1,11, 0},{ -1,11, 0},{ 9, 1, 2}, | |||||
| { -9, 1, 2},{ 5, 2, 2},{ -5, 2, 2},{ 3, 4, 1},{ -3, 4, 1}, | |||||
| }, | |||||
| //level_add | |||||
| { 0,10, 6, 4, 4, 3, 3, 2, 2, 2, 2, 2,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 1, //golomb_order | |||||
| 2, //inc_limit | |||||
| 11 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 4, 1, 0},{ -4, 1, 0},{ 1, 2, 0},{ -1, 2, 0},{ 5, 1, 1}, | |||||
| { -5, 1, 1},{ 2, 2, 0},{ -2, 2, 0},{ 6, 1, 1},{ -6, 1, 1},{ 1, 3, 0}, | |||||
| { -1, 3, 0},{ 7, 1, 1},{ -7, 1, 1},{ 3, 2, 0},{ -3, 2, 0},{ 8, 1, 1}, | |||||
| { -8, 1, 1},{ 1, 4, 0},{ -1, 4, 0},{ 2, 3, 0},{ -2, 3, 0},{ 9, 1, 1}, | |||||
| { -9, 1, 1},{ 4, 2, 0},{ -4, 2, 0},{ 1, 5, 0},{ -1, 5, 0},{ 10, 1, 1}, | |||||
| {-10, 1, 1},{ 3, 3, 0},{ -3, 3, 0},{ 5, 2, 1},{ -5, 2, 1},{ 2, 4, 0}, | |||||
| { -2, 4, 0},{ 11, 1, 1},{-11, 1, 1},{ 1, 6, 0},{ -1, 6, 0},{ 12, 1, 1}, | |||||
| {-12, 1, 1},{ 1, 7, 0},{ -1, 7, 0},{ 6, 2, 1},{ -6, 2, 1},{ 13, 1, 1}, | |||||
| {-13, 1, 1},{ 2, 5, 0},{ -2, 5, 0},{ 1, 8, 0},{ -1, 8, 0}, | |||||
| }, | |||||
| //level_add | |||||
| { 0,14, 7, 4, 3, 3, 2, 2, 2,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 1, //golomb_order | |||||
| 4, //inc_limit | |||||
| 8 //max_run | |||||
| },{ | |||||
| { //level / run | |||||
| { EOB },{ 1, 1, 0},{ -1, 1, 0},{ 2, 1, 0},{ -2, 1, 0},{ 3, 1, 0}, | |||||
| { -3, 1, 0},{ 4, 1, 0},{ -4, 1, 0},{ 5, 1, 0},{ -5, 1, 0},{ 6, 1, 0}, | |||||
| { -6, 1, 0},{ 7, 1, 0},{ -7, 1, 0},{ 8, 1, 0},{ -8, 1, 0},{ 1, 2, 0}, | |||||
| { -1, 2, 0},{ 9, 1, 0},{ -9, 1, 0},{ 10, 1, 0},{-10, 1, 0},{ 11, 1, 0}, | |||||
| {-11, 1, 0},{ 2, 2, 0},{ -2, 2, 0},{ 12, 1, 0},{-12, 1, 0},{ 13, 1, 0}, | |||||
| {-13, 1, 0},{ 3, 2, 0},{ -3, 2, 0},{ 14, 1, 0},{-14, 1, 0},{ 1, 3, 0}, | |||||
| { -1, 3, 0},{ 15, 1, 0},{-15, 1, 0},{ 4, 2, 0},{ -4, 2, 0},{ 16, 1, 0}, | |||||
| {-16, 1, 0},{ 17, 1, 0},{-17, 1, 0},{ 5, 2, 0},{ -5, 2, 0},{ 1, 4, 0}, | |||||
| { -1, 4, 0},{ 2, 3, 0},{ -2, 3, 0},{ 18, 1, 0},{-18, 1, 0},{ 6, 2, 0}, | |||||
| { -6, 2, 0},{ 19, 1, 0},{-19, 1, 0},{ 1, 5, 0},{ -1, 5, 0}, | |||||
| }, | |||||
| //level_add | |||||
| { 0,20, 7, 3, 2, 2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, | |||||
| -1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, | |||||
| 0, //golomb_order | |||||
| INT_MAX, //inc_limit | |||||
| 5, //max_run | |||||
| } | |||||
| }; | |||||
| #undef EOB | |||||
| /***************************************************************************** | /***************************************************************************** | ||||
| * | * | ||||
| * motion vector prediction | * motion vector prediction | ||||
| @@ -142,8 +550,8 @@ static int decode_residual_block(AVSContext *h, GetBitContext *gb, | |||||
| level_buf[i] = level; | level_buf[i] = level; | ||||
| run_buf[i] = run; | run_buf[i] = run; | ||||
| } | } | ||||
| if(dequant(h,level_buf, run_buf, block, ff_cavs_dequant_mul[qp], | |||||
| ff_cavs_dequant_shift[qp], i)) | |||||
| if (dequant(h, level_buf, run_buf, block, dequant_mul[qp], | |||||
| dequant_shift[qp], i)) | |||||
| return -1; | return -1; | ||||
| h->cdsp.cavs_idct8_add(dst,block,stride); | h->cdsp.cavs_idct8_add(dst,block,stride); | ||||
| h->s.dsp.clear_block(block); | h->s.dsp.clear_block(block); | ||||
| @@ -153,11 +561,11 @@ static int decode_residual_block(AVSContext *h, GetBitContext *gb, | |||||
| static inline void decode_residual_chroma(AVSContext *h) { | static inline void decode_residual_chroma(AVSContext *h) { | ||||
| if(h->cbp & (1<<4)) | if(h->cbp & (1<<4)) | ||||
| decode_residual_block(h,&h->s.gb,ff_cavs_chroma_dec,0, | |||||
| ff_cavs_chroma_qp[h->qp],h->cu,h->c_stride); | |||||
| decode_residual_block(h, &h->s.gb, chroma_dec, 0, | |||||
| cavs_chroma_qp[h->qp], h->cu, h->c_stride); | |||||
| if(h->cbp & (1<<5)) | if(h->cbp & (1<<5)) | ||||
| decode_residual_block(h,&h->s.gb,ff_cavs_chroma_dec,0, | |||||
| ff_cavs_chroma_qp[h->qp],h->cv,h->c_stride); | |||||
| decode_residual_block(h, &h->s.gb, chroma_dec, 0, | |||||
| cavs_chroma_qp[h->qp], h->cv, h->c_stride); | |||||
| } | } | ||||
| static inline int decode_residual_inter(AVSContext *h) { | static inline int decode_residual_inter(AVSContext *h) { | ||||
| @@ -176,7 +584,7 @@ static inline int decode_residual_inter(AVSContext *h) { | |||||
| h->qp = (h->qp + get_se_golomb(&h->s.gb)) & 63; | h->qp = (h->qp + get_se_golomb(&h->s.gb)) & 63; | ||||
| for(block=0;block<4;block++) | for(block=0;block<4;block++) | ||||
| if(h->cbp & (1<<block)) | if(h->cbp & (1<<block)) | ||||
| decode_residual_block(h,&h->s.gb,ff_cavs_inter_dec,0,h->qp, | |||||
| decode_residual_block(h, &h->s.gb, inter_dec, 0, h->qp, | |||||
| h->cy + h->luma_scan[block], h->l_stride); | h->cy + h->luma_scan[block], h->l_stride); | ||||
| decode_residual_chroma(h); | decode_residual_chroma(h); | ||||
| @@ -202,7 +610,7 @@ static int decode_mb_i(AVSContext *h, int cbp_code) { | |||||
| /* get intra prediction modes from stream */ | /* get intra prediction modes from stream */ | ||||
| for(block=0;block<4;block++) { | for(block=0;block<4;block++) { | ||||
| int nA,nB,predpred; | int nA,nB,predpred; | ||||
| int pos = ff_cavs_scan3x3[block]; | |||||
| int pos = scan3x3[block]; | |||||
| nA = h->pred_mode_Y[pos-1]; | nA = h->pred_mode_Y[pos-1]; | ||||
| nB = h->pred_mode_Y[pos-3]; | nB = h->pred_mode_Y[pos-3]; | ||||
| @@ -237,10 +645,10 @@ static int decode_mb_i(AVSContext *h, int cbp_code) { | |||||
| for(block=0;block<4;block++) { | for(block=0;block<4;block++) { | ||||
| d = h->cy + h->luma_scan[block]; | d = h->cy + h->luma_scan[block]; | ||||
| ff_cavs_load_intra_pred_luma(h, top, &left, block); | ff_cavs_load_intra_pred_luma(h, top, &left, block); | ||||
| h->intra_pred_l[h->pred_mode_Y[ff_cavs_scan3x3[block]]] | |||||
| h->intra_pred_l[h->pred_mode_Y[scan3x3[block]]] | |||||
| (d, top, left, h->l_stride); | (d, top, left, h->l_stride); | ||||
| if(h->cbp & (1<<block)) | if(h->cbp & (1<<block)) | ||||
| decode_residual_block(h,gb,ff_cavs_intra_dec,1,h->qp,d,h->l_stride); | |||||
| decode_residual_block(h, gb, intra_dec, 1, h->qp, d, h->l_stride); | |||||
| } | } | ||||
| /* chroma intra prediction */ | /* chroma intra prediction */ | ||||