Merge "libhevcenc: default initialize enc ctxt at the start" am: e6689ed5b0

am: 53dfefdaf7

Change-Id: I30146872ae00af14f77cb81111469bc7e103b947
This commit is contained in:
Ram Mohan 2019-11-13 18:42:53 -08:00 committed by android-build-merger
commit c789b735f0
4 changed files with 69 additions and 226 deletions

View file

@ -624,6 +624,11 @@ LWORD64 ihevce_cu_mode_decide(
}
}
if(ps_ctxt->i1_cu_qp_delta_enable)
{
ihevce_update_cu_level_qp_lamda(ps_ctxt, ps_cu_analyse, 4, 0);
}
s_prms.i4_ctb_nbr_map_stride = ps_ctxt->i4_nbr_map_strd;
s_prms.i4_max_num_inter_rdopt_cands = ps_ctxt->i4_max_num_inter_rdopt_cands;
s_prms.i4_nbr_4x4_left_strd = nbr_4x4_left_strd;
@ -2037,11 +2042,6 @@ void ihevce_enc_loop_process_row(
ps_ctb_ipe_analyse->nodes_created_in_cu_tree = 1;
ps_ctxt->ps_enc_out_ctxt = &ps_ctxt->as_enc_cu_ctxt[0];
ps_ctxt->pu1_ecd_data = pu1_row_ecd_data;
if(ps_ctxt->i4_use_ctb_level_lamda)
{
ihevce_compute_cu_level_QP(
ps_ctxt, -1, ps_ctb_ipe_analyse->i4_64x64_act_factor[3][1], 0);
}
s_cu_update_prms.ppu1_row_ecd_data = &pu1_row_ecd_data;
s_cu_update_prms.pi4_last_cu_pos_in_ctb = &last_cu_pos_in_ctb;

View file

@ -845,6 +845,57 @@ void ihevce_compute_cu_level_QP(
}
}
void ihevce_update_cu_level_qp_lamda(
ihevce_enc_loop_ctxt_t *ps_ctxt, cu_analyse_t *ps_cu_analyse, WORD32 trans_size, WORD32 is_intra)
{
WORD32 i4_act_counter = 0, i4_act_counter_lamda = 0;
if(ps_cu_analyse->u1_cu_size == 64)
{
ASSERT((trans_size == 32) || (trans_size == 16) || (trans_size == 8) || (trans_size == 4));
i4_act_counter = (trans_size == 16) + 2 * ((trans_size == 8) || (trans_size == 4));
i4_act_counter_lamda = 3;
}
else if(ps_cu_analyse->u1_cu_size == 32)
{
ASSERT((trans_size == 32) || (trans_size == 16) || (trans_size == 8) || (trans_size == 4));
i4_act_counter = (trans_size == 16) + 2 * ((trans_size == 8) || (trans_size == 4));
i4_act_counter_lamda = 0;
}
else if(ps_cu_analyse->u1_cu_size == 16)
{
ASSERT((trans_size == 16) || (trans_size == 8) || (trans_size == 4));
i4_act_counter = (trans_size == 8) || (trans_size == 4);
i4_act_counter_lamda = 0;
}
else if(ps_cu_analyse->u1_cu_size == 8)
{
ASSERT((trans_size == 8) || (trans_size == 4));
i4_act_counter = 1;
i4_act_counter_lamda = 0;
}
else
{
ASSERT(0);
}
if(ps_ctxt->i4_use_ctb_level_lamda)
{
ihevce_compute_cu_level_QP(
ps_ctxt, ps_cu_analyse->i4_act_factor[i4_act_counter][is_intra], -1, 0);
}
else
{
ihevce_compute_cu_level_QP(
ps_ctxt,
ps_cu_analyse->i4_act_factor[i4_act_counter][is_intra],
ps_cu_analyse->i4_act_factor[i4_act_counter_lamda][is_intra],
0);
}
ps_cu_analyse->i1_cu_qp = ps_ctxt->i4_cu_qp;
}
/**
*******************************************************************************
* \if Function name : ihevce_scan_coeffs \endif
@ -2986,53 +3037,9 @@ LWORD64 ihevce_intra_rdopt_cu_ntu(
if(ps_ctxt->i1_cu_qp_delta_enable)
{
WORD32 i4_act_counter = 0, i4_act_counter_lamda = 0;
if(ps_cu_analyse->u1_cu_size == 64)
{
ASSERT(
(trans_size == 32) || (trans_size == 16) || (trans_size == 8) || (trans_size == 4));
i4_act_counter = (trans_size == 16) + 2 * ((trans_size == 8) || (trans_size == 4));
i4_act_counter_lamda = 3;
}
else if(ps_cu_analyse->u1_cu_size == 32)
{
ASSERT(
(trans_size == 32) || (trans_size == 16) || (trans_size == 8) || (trans_size == 4));
i4_act_counter = (trans_size == 16) + 2 * ((trans_size == 8) || (trans_size == 4));
i4_act_counter_lamda = 0;
}
else if(ps_cu_analyse->u1_cu_size == 16)
{
ASSERT((trans_size == 16) || (trans_size == 8) || (trans_size == 4));
i4_act_counter = (trans_size == 8) || (trans_size == 4);
i4_act_counter_lamda = 0;
}
else if(ps_cu_analyse->u1_cu_size == 8)
{
ASSERT((trans_size == 8) || (trans_size == 4));
i4_act_counter = 1;
i4_act_counter_lamda = 0;
}
else
{
ASSERT(0);
}
if(ps_ctxt->i4_use_ctb_level_lamda)
{
ihevce_compute_cu_level_QP(
ps_ctxt, ps_cu_analyse->i4_act_factor[i4_act_counter][1], -1, 0);
}
else
{
ihevce_compute_cu_level_QP(
ps_ctxt,
ps_cu_analyse->i4_act_factor[i4_act_counter][1],
ps_cu_analyse->i4_act_factor[i4_act_counter_lamda][1],
0);
}
ps_cu_analyse->i1_cu_qp = ps_ctxt->i4_cu_qp;
ihevce_update_cu_level_qp_lamda(ps_ctxt, ps_cu_analyse, trans_size, 1);
}
if(u1_is_cu_noisy && !ps_ctxt->u1_enable_psyRDOPT)
{
ps_ctxt->i8_cl_ssd_lambda_qf =
@ -4371,59 +4378,9 @@ LWORD64 ihevce_inter_rdopt_cu_ntu(
if(ps_ctxt->i1_cu_qp_delta_enable)
{
WORD32 i4_act_counter = 0, i4_act_counter_lamda = 0;
if(ps_cu_analyse->u1_cu_size == 64)
{
ASSERT(
(i4_min_trans_size == 32) || (i4_min_trans_size == 16) ||
(i4_min_trans_size == 8) || (i4_min_trans_size == 4));
i4_act_counter = (i4_min_trans_size == 16) +
2 * ((i4_min_trans_size == 8) || (i4_min_trans_size == 4));
i4_act_counter_lamda = 3;
}
else if(ps_cu_analyse->u1_cu_size == 32)
{
ASSERT(
(i4_min_trans_size == 32) || (i4_min_trans_size == 16) ||
(i4_min_trans_size == 8) || (i4_min_trans_size == 4));
i4_act_counter = (i4_min_trans_size == 16) +
2 * ((i4_min_trans_size == 8) || (i4_min_trans_size == 4));
i4_act_counter_lamda = 0;
}
else if(ps_cu_analyse->u1_cu_size == 16)
{
ASSERT(
(i4_min_trans_size == 16) || (i4_min_trans_size == 8) || (i4_min_trans_size == 4));
i4_act_counter = (i4_min_trans_size == 8) || (i4_min_trans_size == 4);
i4_act_counter_lamda = 0;
}
else if(ps_cu_analyse->u1_cu_size == 8)
{
ASSERT((i4_min_trans_size == 8) || (i4_min_trans_size == 4));
i4_act_counter = 1;
i4_act_counter_lamda = 0;
}
else
{
ASSERT(0);
}
if(ps_ctxt->i4_use_ctb_level_lamda)
{
ihevce_compute_cu_level_QP(
ps_ctxt, ps_cu_analyse->i4_act_factor[i4_act_counter][0], -1, 0);
}
else
{
ihevce_compute_cu_level_QP(
ps_ctxt,
ps_cu_analyse->i4_act_factor[i4_act_counter][0],
ps_cu_analyse->i4_act_factor[i4_act_counter_lamda][0],
0);
}
ps_cu_analyse->i1_cu_qp = ps_ctxt->i4_cu_qp;
ihevce_update_cu_level_qp_lamda(ps_ctxt, ps_cu_analyse, i4_min_trans_size, 0);
}
if(u1_is_cu_noisy && !ps_ctxt->u1_enable_psyRDOPT)
{
ps_ctxt->i8_cl_ssd_lambda_qf =
@ -5243,57 +5200,7 @@ LWORD64 ihevce_inter_tu_tree_selector_and_rdopt_cost_computer(
if(ps_ctxt->i1_cu_qp_delta_enable)
{
WORD32 i4_act_counter = 0, i4_act_counter_lamda = 0;
if(ps_cu_analyse->u1_cu_size == 64)
{
ASSERT(
(i4_min_trans_size == 32) || (i4_min_trans_size == 16) ||
(i4_min_trans_size == 8) || (i4_min_trans_size == 4));
i4_act_counter = (i4_min_trans_size == 16) +
2 * ((i4_min_trans_size == 8) || (i4_min_trans_size == 4));
i4_act_counter_lamda = 3;
}
else if(ps_cu_analyse->u1_cu_size == 32)
{
ASSERT(
(i4_min_trans_size == 32) || (i4_min_trans_size == 16) ||
(i4_min_trans_size == 8) || (i4_min_trans_size == 4));
i4_act_counter = (i4_min_trans_size == 16) +
2 * ((i4_min_trans_size == 8) || (i4_min_trans_size == 4));
i4_act_counter_lamda = 0;
}
else if(ps_cu_analyse->u1_cu_size == 16)
{
ASSERT(
(i4_min_trans_size == 16) || (i4_min_trans_size == 8) || (i4_min_trans_size == 4));
i4_act_counter = (i4_min_trans_size == 8) || (i4_min_trans_size == 4);
i4_act_counter_lamda = 0;
}
else if(ps_cu_analyse->u1_cu_size == 8)
{
ASSERT((i4_min_trans_size == 8) || (i4_min_trans_size == 4));
i4_act_counter = 1;
i4_act_counter_lamda = 0;
}
else
{
ASSERT(0);
}
if(ps_ctxt->i4_use_ctb_level_lamda)
{
ihevce_compute_cu_level_QP(
ps_ctxt, ps_cu_analyse->i4_act_factor[i4_act_counter][0], -1, 0);
}
else
{
ihevce_compute_cu_level_QP(
ps_ctxt,
ps_cu_analyse->i4_act_factor[i4_act_counter][0],
ps_cu_analyse->i4_act_factor[i4_act_counter_lamda][0],
0);
}
ps_cu_analyse->i1_cu_qp = ps_ctxt->i4_cu_qp;
ihevce_update_cu_level_qp_lamda(ps_ctxt, ps_cu_analyse, i4_min_trans_size, 0);
}
if(u1_is_cu_noisy && !ps_ctxt->u1_enable_psyRDOPT)
@ -6564,57 +6471,7 @@ void ihevce_intra_chroma_pred_mode_selector(
if(ps_ctxt->i1_cu_qp_delta_enable)
{
WORD32 i4_act_counter = 0, i4_act_counter_lamda = 0;
if(ps_cu_analyse->u1_cu_size == 64)
{
ASSERT(
(luma_trans_size == 32) || (luma_trans_size == 16) || (luma_trans_size == 8) ||
(luma_trans_size == 4));
i4_act_counter = (luma_trans_size == 16) +
2 * ((luma_trans_size == 8) || (luma_trans_size == 4));
i4_act_counter_lamda = 3;
}
else if(ps_cu_analyse->u1_cu_size == 32)
{
ASSERT(
(luma_trans_size == 32) || (luma_trans_size == 16) || (luma_trans_size == 8) ||
(luma_trans_size == 4));
i4_act_counter = (luma_trans_size == 16) +
2 * ((luma_trans_size == 8) || (luma_trans_size == 4));
i4_act_counter_lamda = 0;
}
else if(ps_cu_analyse->u1_cu_size == 16)
{
ASSERT((luma_trans_size == 16) || (luma_trans_size == 8) || (luma_trans_size == 4));
i4_act_counter = (luma_trans_size == 8) || (luma_trans_size == 4);
i4_act_counter_lamda = 0;
}
else if(ps_cu_analyse->u1_cu_size == 8)
{
ASSERT((luma_trans_size == 8) || (luma_trans_size == 4));
i4_act_counter = 1;
i4_act_counter_lamda = 0;
}
else
{
ASSERT(0);
}
/*assumption is that control comes here for intras*/
if(ps_ctxt->i4_use_ctb_level_lamda)
{
ihevce_compute_cu_level_QP(
ps_ctxt, ps_cu_analyse->i4_act_factor[i4_act_counter][1], -1, 0);
}
else
{
ihevce_compute_cu_level_QP(
ps_ctxt,
ps_cu_analyse->i4_act_factor[i4_act_counter][1],
ps_cu_analyse->i4_act_factor[i4_act_counter_lamda][1],
0);
}
ps_cu_analyse->i1_cu_qp = ps_ctxt->i4_cu_qp;
ihevce_update_cu_level_qp_lamda(ps_ctxt, ps_cu_analyse, luma_trans_size, 1);
}
u1_compute_spatial_ssd = (ps_ctxt->i4_cu_qp <= MAX_QP_WHERE_SPATIAL_SSD_ENABLED) &&

View file

@ -103,6 +103,12 @@ void ihevce_compute_cu_level_QP(
WORD32 i4_activity_for_lamda,
WORD32 i4_reduce_qp);
void ihevce_update_cu_level_qp_lamda(
ihevce_enc_loop_ctxt_t *ps_ctxt,
cu_analyse_t *ps_cu_analyse,
WORD32 trans_size,
WORD32 is_intra);
WORD32 ihevce_scan_coeffs(
WORD16 *pi2_quant_coeffs,
WORD32 *pi4_subBlock2csbfId_map,

View file

@ -201,7 +201,6 @@ void ihevce_ipe_recompute_lambda_from_min_8x8_act_in_ctb(
ihevce_ipe_ctxt_t *ps_ctxt, ihevce_ed_ctb_l1_t *ps_ed_ctb_l1)
{
WORD32 i4_cu_qp = 0;
WORD32 i4_mod_factor_num;
#if MODULATE_LAMDA_WHEN_SPATIAL_MOD_ON
WORD32 i4_activity;
#endif
@ -209,19 +208,6 @@ void ihevce_ipe_recompute_lambda_from_min_8x8_act_in_ctb(
WORD32 i4_curr_satd;
long double ld_avg_satd;
#if MODULATE_LAMDA_WHEN_SPATIAL_MOD_ON
WORD32 i4_mod_factor_denom = QP_MOD_FACTOR_DEN;
#endif
if(ISLICE == ps_ctxt->i4_slice_type)
{
i4_mod_factor_num = INTRA_QP_MOD_FACTOR_NUM;
}
else
{
i4_mod_factor_num = INTER_QP_MOD_FACTOR_NUM;
}
#if LAMDA_BASED_ON_QUANT
i4_curr_satd = ps_ed_ctb_l1->i4_32x32_satd[0][2];
i8_avg_satd = ps_ctxt->i8_curr_frame_32x32_avg_act[2];
@ -956,13 +942,7 @@ void ihevce_ipe_process_row(
if(ps_ctxt->u1_use_lambda_derived_from_min_8x8_act_in_ctb)
{
/*HACK : MAMATHA, This function assumes that data is accumalated
for all probable CU-TU combinations for INcomplete CTB, which is currently not the case,
hence not recomputing lamda for the incomplete CTB */
if((ps_ctb_node->u1_width == u1_ctb_size) && (ps_ctb_node->u1_height == u1_ctb_size))
{
ihevce_ipe_recompute_lambda_from_min_8x8_act_in_ctb(ps_ctxt, ps_ed_ctb_l1);
}
ihevce_ipe_recompute_lambda_from_min_8x8_act_in_ctb(ps_ctxt, ps_ed_ctb_l1);
}
ihevce_ipe_process_ctb(