mirror of
https://github.com/ittiam-systems/libhevc.git
synced 2026-04-06 06:10:50 +07:00
Merge "libhevcenc: default initialize enc ctxt at the start" am: e6689ed5b0
am: 53dfefdaf7
Change-Id: I30146872ae00af14f77cb81111469bc7e103b947
This commit is contained in:
commit
c789b735f0
4 changed files with 69 additions and 226 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) &&
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue