diff options
Diffstat (limited to 'encoder/ih264e_intra_modes_eval.c')
-rw-r--r-- | encoder/ih264e_intra_modes_eval.c | 85 |
1 files changed, 52 insertions, 33 deletions
diff --git a/encoder/ih264e_intra_modes_eval.c b/encoder/ih264e_intra_modes_eval.c index 3edf98f..a0e447e 100644 --- a/encoder/ih264e_intra_modes_eval.c +++ b/encoder/ih264e_intra_modes_eval.c @@ -31,19 +31,19 @@ * ittiam * * @par List of Functions: -* - ih264e_derive_neighbor_availability_of_mbs() -* - ih264e_derive_ngbr_avbl_of_mb_partitions() -* - ih264e_evaluate_intra16x16_modes_for_least_cost_rdoptoff() -* - ih264e_evaluate_intra8x8_modes_for_least_cost_rdoptoff() -* - ih264e_evaluate_intra4x4_modes_for_least_cost_rdoptoff() -* - ih264e_evaluate_intra4x4_modes_for_least_cost_rdopton() -* - ih264e_evaluate_chroma_intra8x8_modes_for_least_cost_rdoptoff() -* - ih264e_evaluate_intra16x16_modes() -* - ih264e_evaluate_intra4x4_modes() -* - ih264e_evaluate_intra_chroma_modes() +* - ih264e_derive_neighbor_availability_of_mbs +* - ih264e_derive_ngbr_avbl_of_mb_partitions +* - ih264e_evaluate_intra16x16_modes_for_least_cost_rdoptoff +* - ih264e_evaluate_intra8x8_modes_for_least_cost_rdoptoff +* - ih264e_evaluate_intra4x4_modes_for_least_cost_rdoptoff +* - ih264e_evaluate_intra4x4_modes_for_least_cost_rdopton +* - ih264e_evaluate_chroma_intra8x8_modes_for_least_cost_rdoptoff +* - ih264e_evaluate_intra16x16_modes +* - ih264e_evaluate_intra4x4_modes +* - ih264e_evaluate_intra_chroma_modes * * @remarks -* None +* none * ******************************************************************************* */ @@ -52,43 +52,47 @@ /* File Includes */ /*****************************************************************************/ -/* System include files */ +/* System Include Files */ #include <stdio.h> #include <string.h> #include <limits.h> #include <assert.h> -/* User include files */ +/* User Include Files */ #include "ih264e_config.h" #include "ih264_typedefs.h" -#include "ih264e_defs.h" #include "iv2.h" #include "ive2.h" + #include "ih264_debug.h" -#include "ih264_defs.h" #include "ih264_macros.h" -#include "ih264_intra_pred_filters.h" +#include "ih264_defs.h" +#include "ih264_mem_fns.h" +#include "ih264_padding.h" #include "ih264_structs.h" -#include "ih264_common_tables.h" #include "ih264_trans_quant_itrans_iquant.h" #include "ih264_inter_pred_filters.h" -#include "ih264_mem_fns.h" -#include "ih264_padding.h" +#include "ih264_intra_pred_filters.h" #include "ih264_deblk_edge_filters.h" +#include "ih264_common_tables.h" #include "ih264_cabac_tables.h" -#include "ime_distortion_metrics.h" -#include "ih264e_error.h" -#include "ih264e_bitstream.h" + #include "ime_defs.h" +#include "ime_distortion_metrics.h" #include "ime_structs.h" +#include "ime_platform_macros.h" + #include "irc_cntrl_param.h" #include "irc_frame_info_collector.h" + +#include "ih264e_error.h" +#include "ih264e_defs.h" +#include "ih264e_globals.h" #include "ih264e_rate_control.h" +#include "ih264e_bitstream.h" #include "ih264e_cabac_structs.h" #include "ih264e_structs.h" #include "ih264e_intra_modes_eval.h" -#include "ih264e_globals.h" -#include "ime_platform_macros.h" /*****************************************************************************/ @@ -322,7 +326,6 @@ UWORD8 ih264e_derive_ngbr_avbl_of_mb_partitions(block_neighbors_t *ps_ngbr_avbl, * ****************************************************************************** */ - void ih264e_evaluate_intra16x16_modes_for_least_cost_rdoptoff(process_ctxt_t *ps_proc) { /* Codec Context */ @@ -364,6 +367,7 @@ void ih264e_evaluate_intra16x16_modes_for_least_cost_rdoptoff(process_ctxt_t *ps UWORD8 *pu1_mb_b = pu1_ref_mb - i4_rec_strd; UWORD8 *pu1_mb_d = pu1_mb_b - 1; UWORD8 u1_mb_a, u1_mb_b, u1_mb_d; + /* valid intra modes map */ UWORD32 u4_valid_intra_modes; @@ -479,6 +483,10 @@ void ih264e_evaluate_intra16x16_modes_for_least_cost_rdoptoff(process_ctxt_t *ps ps_proc->i4_mb_distortion = i4_mb_distortion_least; ps_proc->u4_mb_type = I16x16; } + if (i4_mb_cost_least < ps_proc->i4_mb_intra_cost) + { + ps_proc->i4_mb_intra_cost = i4_mb_cost_least; + } return ; } @@ -566,6 +574,7 @@ void ih264e_evaluate_intra8x8_modes_for_least_cost_rdoptoff(process_ctxt_t *ps_p UWORD8 *pu1_top_mb_intra_modes = ps_proc->pu1_top_mb_intra_modes + (ps_proc->i4_mb_x << 4); mb_info_t *ps_top_mb_syn_ele = ps_proc->ps_top_row_mb_syntax_ele + ps_proc->i4_mb_x; mb_info_t *ps_top_right_mb_syn_ele = ps_proc->ps_top_row_mb_syntax_ele + ps_proc->i4_mb_x; + /* valid intra modes map */ UWORD32 u4_valid_intra_modes; @@ -590,7 +599,7 @@ void ih264e_evaluate_intra8x8_modes_for_least_cost_rdoptoff(process_ctxt_t *ps_p && (u4_constrained_intra_pred ? ps_top_right_mb_syn_ele->u2_is_intra : 1)); - for(b8 = 0; b8 < 4; b8++) + for (b8 = 0; b8 < 4; b8++) { u4_pix_x = (b8 & 0x01) << 3; u4_pix_y = (b8 >> 1) << 3; @@ -727,6 +736,10 @@ void ih264e_evaluate_intra8x8_modes_for_least_cost_rdoptoff(process_ctxt_t *ps_p ps_proc->i4_mb_distortion = i4_total_distortion; ps_proc->u4_mb_type = I8x8; } + if (i4_total_cost < ps_proc->i4_mb_intra_cost) + { + ps_proc->i4_mb_intra_cost = i4_total_cost; + } return ; } @@ -827,6 +840,7 @@ void ih264e_evaluate_intra4x4_modes_for_least_cost_rdoptoff(process_ctxt_t *ps_p UWORD32 u4_constrained_intra_pred = ps_proc->ps_codec->s_cfg.u4_constrained_intra_pred; UWORD8 u1_mb_a, u1_mb_b, u1_mb_c, u1_mb_d; + if (ps_proc->ps_ngbr_avbl->u1_mb_c) { ps_top_right_mb_syn_ele = ps_proc->ps_top_row_mb_syntax_ele + ps_proc->i4_mb_x + 1; @@ -998,6 +1012,10 @@ void ih264e_evaluate_intra4x4_modes_for_least_cost_rdoptoff(process_ctxt_t *ps_p ps_proc->i4_mb_distortion = i4_total_distortion; ps_proc->u4_mb_type = I4x4; } + if (i4_total_cost < ps_proc->i4_mb_intra_cost) + { + ps_proc->i4_mb_intra_cost = i4_total_cost; + } return ; } @@ -1082,7 +1100,7 @@ void ih264e_evaluate_intra4x4_modes_for_least_cost_rdopton(process_ctxt_t *ps_pr UWORD8 *pu1_mb_d; /* number of non zero coeffs*/ - UWORD8 *pu1_nnz = (UWORD8 *)ps_proc->au4_nnz_intra_4x4; + UWORD8 *pu1_nnz = (UWORD8 *)ps_proc->au4_nnz_intra_4x4; /* quantization parameters */ quant_params_t *ps_qp_params = ps_proc->ps_qp_params[0]; @@ -1136,11 +1154,11 @@ void ih264e_evaluate_intra4x4_modes_for_least_cost_rdopton(process_ctxt_t *ps_pr i4_ngbr_avbl = (u1_mb_a) + (u1_mb_d << 1) + (u1_mb_b << 2) + (u1_mb_c << 3); memcpy(ps_proc->au1_ngbr_avbl_4x4_subblks, gau1_ih264_4x4_ngbr_avbl[i4_ngbr_avbl], 16); - for(b8 = 0; b8 < 4; b8++) + for (b8 = 0; b8 < 4; b8++) { u4_blk_x = (b8 & 0x01) << 3; u4_blk_y = (b8 >> 1) << 3; - for(b4 = 0; b4 < 4; b4++, pu1_nnz++, pi2_res_mb += MB_SIZE) + for (b4 = 0; b4 < 4; b4++, pu1_nnz++, pi2_res_mb += MB_SIZE) { u4_pix_x = u4_blk_x + ((b4 & 0x01) << 2); u4_pix_y = u4_blk_y + ((b4 >> 1) << 2); @@ -1336,6 +1354,10 @@ void ih264e_evaluate_intra4x4_modes_for_least_cost_rdopton(process_ctxt_t *ps_pr ps_proc->i4_mb_distortion = i4_total_distortion; ps_proc->u4_mb_type = I4x4; } + if (i4_total_cost < ps_proc->i4_mb_intra_cost) + { + ps_proc->i4_mb_intra_cost = i4_total_cost; + } return ; } @@ -1361,7 +1383,6 @@ void ih264e_evaluate_intra4x4_modes_for_least_cost_rdopton(process_ctxt_t *ps_pr * ****************************************************************************** */ - void ih264e_evaluate_chroma_intra8x8_modes_for_least_cost_rdoptoff(process_ctxt_t *ps_proc) { /* Codec Context */ @@ -1406,8 +1427,8 @@ void ih264e_evaluate_chroma_intra8x8_modes_for_least_cost_rdoptoff(process_ctxt_ UWORD8 i; UWORD32 u4_constrained_intra_pred = ps_proc->ps_codec->s_cfg.u4_constrained_intra_pred; UWORD8 u1_mb_a, u1_mb_b, u1_mb_d; - /* locating neighbors that are available for prediction */ + /* locating neighbors that are available for prediction */ /* gather prediction pels from the neighbors */ /* left pels */ u1_mb_a = ((ps_proc->ps_ngbr_avbl->u1_mb_a) @@ -2038,7 +2059,6 @@ void ih264e_evaluate_intra_4x4_modes(UWORD8 *pu1_src, pu1_dst += dst_strd; memset(pu1_dst, u4_dcval, 4); } - else if (i4_min_cost == i4_cost[3]) { *u4_intra_mode = DIAG_DL_I4x4; @@ -2064,7 +2084,6 @@ void ih264e_evaluate_intra_4x4_modes(UWORD8 *pu1_src, pu1_dst += dst_strd; memcpy(pu1_dst, (pu1_pred_val - 3), 4); } - else if (i4_min_cost == i4_cost[5]) { *u4_intra_mode = VERT_R_I4x4; |