From 487a32d1993aacb817873b1dafca15c7ee8dfd19 Mon Sep 17 00:00:00 2001 From: Harish Mahendrakar Date: Tue, 22 Sep 2026 15:52:14 -0700 Subject: [PATCH] Consolidate sao_10bd_t into sao_t --- common/ihevc_structs.h | 105 +---------- decoder/ihevcd_api.c | 10 +- decoder/ihevcd_parse_slice.c | 246 +------------------------- decoder/ihevcd_sao.c | 333 +++++++++++++++++++---------------- 4 files changed, 193 insertions(+), 501 deletions(-) diff --git a/common/ihevc_structs.h b/common/ihevc_structs.h index e5e0ecd..9b9bfee 100644 --- a/common/ihevc_structs.h +++ b/common/ihevc_structs.h @@ -979,109 +979,6 @@ typedef struct }ref_list_t; -/** - * SAO - */ -typedef struct -{ - /** - * sao_type_idx_luma - */ - UWORD32 b3_y_type_idx : 3; - - /** - * luma SaoOffsetVal[1] - */ - WORD32 b4_y_offset_1 : 4; - - /** - * luma SaoOffsetVal[2] - */ - WORD32 b4_y_offset_2 : 4; - - /** - * luma SaoOffsetVal[3] - */ - WORD32 b4_y_offset_3 : 4; - - /** - * luma SaoOffsetVal[4] - */ - WORD32 b4_y_offset_4 : 4; - - /** - * luma sao_band_position - */ - UWORD32 b5_y_band_pos : 5; - - WORD32 : 0; - - /** - * sao_type_idx_chroma - */ - UWORD32 b3_cb_type_idx : 3; - - /** - * chroma SaoOffsetVal[1] - */ - WORD32 b4_cb_offset_1 : 4; - - /** - * chroma SaoOffsetVal[2] - */ - WORD32 b4_cb_offset_2 : 4; - - /** - * chroma SaoOffsetVal[3] - */ - WORD32 b4_cb_offset_3 : 4; - - /** - * chroma SaoOffsetVal[4] - */ - WORD32 b4_cb_offset_4 : 4; - - /** - * cb sao_band_position - */ - UWORD32 b5_cb_band_pos : 5; - - WORD32 : 0; - - /** - * sao_type_idx_chroma - */ - UWORD32 b3_cr_type_idx : 3; - - /** - * chroma SaoOffsetVal[1] - */ - WORD32 b4_cr_offset_1 : 4; - - /** - * chroma SaoOffsetVal[2] - */ - WORD32 b4_cr_offset_2 : 4; - - /** - * chroma SaoOffsetVal[3] - */ - WORD32 b4_cr_offset_3 : 4; - - /** - * chroma SaoOffsetVal[4] - */ - WORD32 b4_cr_offset_4 : 4; - - /** - * cr sao_band_position - */ - UWORD32 b5_cr_band_pos : 5; - - WORD32 : 0; - -}sao_t; - /** * SAO */ @@ -1183,7 +1080,7 @@ typedef struct WORD32 : 0; -}sao_10bd_t; +}sao_t; /** * Motion vector diff --git a/decoder/ihevcd_api.c b/decoder/ihevcd_api.c index 243f46e..6856c23 100644 --- a/decoder/ihevcd_api.c +++ b/decoder/ihevcd_api.c @@ -2192,15 +2192,7 @@ WORD32 ihevcd_allocate_dynamic_bufs(codec_t *ps_codec) ps_codec->as_process[i].pu1_tile_idx = (UWORD16 *)pv_buf + wd / MIN_CTB_SIZE /* Offset 1 row */; } - if (sizeof(UWORD8) == pixel_size) - { - /* 4 bytes per color component per CTB */ - size = 3 * 4; - } - else /* HBD: currently upto 12 bit depth case */ - { - size = sizeof(sao_10bd_t); - } + size = sizeof(sao_t); /* MAX number of CTBs in a row */ size *= wd / MIN_CTB_SIZE; diff --git a/decoder/ihevcd_parse_slice.c b/decoder/ihevcd_parse_slice.c index e95ee0d..71e0351 100644 --- a/decoder/ihevcd_parse_slice.c +++ b/decoder/ihevcd_parse_slice.c @@ -2325,6 +2325,8 @@ IHEVCD_ERROR_T ihevcd_parse_sao(codec_t *ps_codec) ps_sao = ps_codec->s_parse.ps_pic_sao + rx + ry * ps_sps->i2_pic_wd_in_ctb; + WORD32 i4_bit_depth = ps_codec->i4_bit_depth_luma; + /* Default values */ ps_sao->b3_y_type_idx = 0; ps_sao->b3_cb_type_idx = 0; @@ -2417,7 +2419,7 @@ IHEVCD_ERROR_T ihevcd_parse_sao(codec_t *ps_codec) WORD32 i; WORD32 sao_offset[4]; WORD32 sao_band_position = 0; - WORD32 c_max = (1 << (MIN(BIT_DEPTH, 10) - 5)) - 1; + WORD32 c_max = (1 << (MIN(i4_bit_depth, 10) - 5)) - 1; for(i = 0; i < 4; i++) { sao_offset[i] = ihevcd_cabac_decode_bypass_bins_tunary(ps_cabac, ps_bitstrm, c_max); @@ -2469,235 +2471,6 @@ IHEVCD_ERROR_T ihevcd_parse_sao(codec_t *ps_codec) } } - if(0 == c_idx) - { - ps_sao->b4_y_offset_1 = sao_offset[0]; - ps_sao->b4_y_offset_2 = sao_offset[1]; - ps_sao->b4_y_offset_3 = sao_offset[2]; - ps_sao->b4_y_offset_4 = sao_offset[3]; - - ps_sao->b5_y_band_pos = sao_band_position; - } - else if(1 == c_idx) - { - ps_sao->b4_cb_offset_1 = sao_offset[0]; - ps_sao->b4_cb_offset_2 = sao_offset[1]; - ps_sao->b4_cb_offset_3 = sao_offset[2]; - ps_sao->b4_cb_offset_4 = sao_offset[3]; - - ps_sao->b5_cb_band_pos = sao_band_position; - } - else // 2 == c_idx - { - ps_sao->b4_cr_offset_1 = sao_offset[0]; - ps_sao->b4_cr_offset_2 = sao_offset[1]; - ps_sao->b4_cr_offset_3 = sao_offset[2]; - ps_sao->b4_cr_offset_4 = sao_offset[3]; - - ps_sao->b5_cr_band_pos = sao_band_position; - } - } - } - } - } - - return ret; -} - -/** - ******************************************************************************* - * - * @brief - * Parses SAO (Sample adaptive offset syntax) - * - * @par Description: - * Parses SAO (Sample adaptive offset syntax) as per Section:7.3.9.3 - * - * @param[in] ps_codec - * Pointer to codec context - * - * @returns Error from IHEVCD_ERROR_T - * - * @remarks - * - * - ******************************************************************************* - */ -IHEVCD_ERROR_T ihevcd_10bd_parse_sao(codec_t *ps_codec) -{ - IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS; - sps_t *ps_sps; - sao_10bd_t *ps_sao; - WORD32 rx; - WORD32 ry; - WORD32 value; - bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm; - WORD32 sao_merge_left_flag; - WORD32 sao_merge_up_flag; - slice_header_t *ps_slice_hdr; - cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac; - WORD32 ctxt_idx; - WORD32 i4_bit_depth; - - ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr_base; - ps_slice_hdr += (ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1)); - - ps_sps = (ps_codec->s_parse.ps_sps); - rx = ps_codec->s_parse.i4_ctb_x; - ry = ps_codec->s_parse.i4_ctb_y; - - ps_sao = (sao_10bd_t *)ps_codec->s_parse.ps_pic_sao + rx + ry * ps_sps->i2_pic_wd_in_ctb; - - i4_bit_depth = ps_codec->i4_bit_depth_luma; - - /* Default values */ - ps_sao->b3_y_type_idx = 0; - ps_sao->b3_cb_type_idx = 0; - ps_sao->b3_cr_type_idx = 0; - - UNUSED(value); - ctxt_idx = IHEVC_CAB_SAO_MERGE; - sao_merge_left_flag = 0; - sao_merge_up_flag = 0; - if(rx > 0) - { - /*TODO:Implemented only for slice. condition for tile is not tested*/ - if ( ( (0 != ps_codec->s_parse.i4_ctb_slice_x) || (0 != ps_codec->s_parse.i4_ctb_slice_y)) && - (0 != ps_codec->s_parse.i4_ctb_tile_x) ) - { - - TRACE_CABAC_CTXT("sao_merge_flag", ps_cabac->u4_range, ctxt_idx); - sao_merge_left_flag = ihevcd_cabac_decode_bin(ps_cabac, - ps_bitstrm, - ctxt_idx); - AEV_TRACE("sao_merge_flag", sao_merge_left_flag, ps_cabac->u4_range); - } - - } - if(ry > 0 && !sao_merge_left_flag) - { - if((ps_codec->s_parse.i4_ctb_slice_y > 0) && (ps_codec->s_parse.i4_ctb_tile_y > 0)) - { - TRACE_CABAC_CTXT("sao_merge_flag", ps_cabac->u4_range, ctxt_idx); - sao_merge_up_flag = ihevcd_cabac_decode_bin(ps_cabac, - ps_bitstrm, - ctxt_idx); - AEV_TRACE("sao_merge_flag", sao_merge_up_flag, ps_cabac->u4_range); - } - } - ctxt_idx = IHEVC_CAB_SAO_TYPE; - - if(sao_merge_left_flag) - { - *ps_sao = *(ps_sao - 1); - } - else if(sao_merge_up_flag) - { - *ps_sao = *(ps_sao - ps_sps->i2_pic_wd_in_ctb); - } - else // if(!sao_merge_up_flag && !sao_merge_left_flag) - { - pps_t *ps_pps; - WORD32 c_idx; - WORD32 sao_type_idx = 0; - - ps_pps = ps_codec->s_parse.ps_pps; - - for(c_idx = 0; c_idx < 3; c_idx++) - { - if((ps_slice_hdr->i1_slice_sao_luma_flag && c_idx == 0) || (ps_slice_hdr->i1_slice_sao_chroma_flag && c_idx > 0)) - { - - - /* sao_type_idx will be same for c_idx == 1 and c_idx == 2 - hence not initialized to zero for c_idx == 2*/ - - if(c_idx == 0) - { - sao_type_idx = 0; - TRACE_CABAC_CTXT("sao_type_idx", ps_cabac->u4_range, ctxt_idx); - sao_type_idx = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx); - - if(sao_type_idx) - { - sao_type_idx += ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm); - } - AEV_TRACE("sao_type_idx", sao_type_idx, ps_cabac->u4_range); - - ps_sao->b3_y_type_idx = sao_type_idx; - } - if(c_idx == 1) - { - sao_type_idx = 0; - TRACE_CABAC_CTXT("sao_type_idx", ps_cabac->u4_range, ctxt_idx); - sao_type_idx = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx); - if(sao_type_idx) - { - sao_type_idx += ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm); - } - - AEV_TRACE("sao_type_idx", sao_type_idx, ps_cabac->u4_range); - - ps_sao->b3_cb_type_idx = sao_type_idx; - ps_sao->b3_cr_type_idx = sao_type_idx; - } - - if(sao_type_idx != 0) - { - WORD32 i; - WORD32 sao_offset[4]; - WORD32 sao_band_position = 0; - WORD32 c_max = ( 1 << (MIN(i4_bit_depth, 10) - 5)) - 1; - for(i = 0; i < 4; i++) - { - sao_offset[i] = ihevcd_cabac_decode_bypass_bins_tunary(ps_cabac, ps_bitstrm, c_max); - AEV_TRACE("sao_offset_abs", sao_offset[i], ps_cabac->u4_range); - - if( (2 == sao_type_idx) && (i > 1) ) - { - sao_offset[i] = -sao_offset[i]; - } - } - - if(sao_type_idx == 1) - { - for( i = 0; i < 4; i++ ) - { - if(sao_offset[i] != 0) - { - value = ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm); - AEV_TRACE("sao_offset_sign", value, ps_cabac->u4_range); - - if(value) - { - sao_offset[i] = -sao_offset[i]; - } - } - } - value = ihevcd_cabac_decode_bypass_bins(ps_cabac, ps_bitstrm, 5); - AEV_TRACE("sao_band_position", value, ps_cabac->u4_range); - - sao_band_position = value; - } - else - { - if(c_idx == 0) - { - value = ihevcd_cabac_decode_bypass_bins(ps_cabac, ps_bitstrm, 2); - AEV_TRACE("sao_eo_class", value, ps_cabac->u4_range); - - ps_sao->b3_y_type_idx += value; - } - - if(c_idx == 1) - { - value = ihevcd_cabac_decode_bypass_bins(ps_cabac, ps_bitstrm, 2); - AEV_TRACE("sao_eo_class", value, ps_cabac->u4_range); - - ps_sao->b3_cb_type_idx += value; - ps_sao->b3_cr_type_idx += value; - } - } - if(0 == c_idx) { ps_sao->b8_y_offset_1 = sao_offset[0]; @@ -2726,16 +2499,15 @@ IHEVCD_ERROR_T ihevcd_10bd_parse_sao(codec_t *ps_codec) ps_sao->b5_cr_band_pos = sao_band_position; } } - } /* End of if sao parameters */ + } - /* Loop updates */ i4_bit_depth = ps_codec->i4_bit_depth_chroma; - - } /* End of loop over c_idx */ + } } return ret; } + /** ******************************************************************************* * @@ -3301,11 +3073,7 @@ IHEVCD_ERROR_T ihevcd_parse_slice_data(codec_t *ps_codec) { if(ps_slice_hdr->i1_slice_sao_luma_flag || ps_slice_hdr->i1_slice_sao_chroma_flag) { - if ((8 == ps_codec->i4_bit_depth_chroma) && (8 == ps_codec->i4_bit_depth_luma)) { - ihevcd_parse_sao(ps_codec); - } else { - ihevcd_10bd_parse_sao(ps_codec); - } + ihevcd_parse_sao(ps_codec); } } else diff --git a/decoder/ihevcd_sao.c b/decoder/ihevcd_sao.c index c7fe17e..5880fff 100644 --- a/decoder/ihevcd_sao.c +++ b/decoder/ihevcd_sao.c @@ -77,51 +77,6 @@ #define SAO_SHIFT_CTB 8 - - - -#define GET_SAO_Y_OFFSETS(ai1_offset_y) do { \ - if(1 == pixel_size_y) { \ - (ai1_offset_y)[1] = ps_sao->b4_y_offset_1; \ - (ai1_offset_y)[2] = ps_sao->b4_y_offset_2; \ - (ai1_offset_y)[3] = ps_sao->b4_y_offset_3; \ - (ai1_offset_y)[4] = ps_sao->b4_y_offset_4; \ - } else { \ - (ai1_offset_y)[1] = ps_sao_10bd->b8_y_offset_1; \ - (ai1_offset_y)[2] = ps_sao_10bd->b8_y_offset_2; \ - (ai1_offset_y)[3] = ps_sao_10bd->b8_y_offset_3; \ - (ai1_offset_y)[4] = ps_sao_10bd->b8_y_offset_4; \ - } \ -} while(0) - -#define GET_SAO_CHROMA_OFFSETS(ai1_offset_cb, ai1_offset_cr) do { \ - if(1 == pixel_size_uv) { \ - (ai1_offset_cb)[1] = ps_sao->b4_cb_offset_1; \ - (ai1_offset_cb)[2] = ps_sao->b4_cb_offset_2; \ - (ai1_offset_cb)[3] = ps_sao->b4_cb_offset_3; \ - (ai1_offset_cb)[4] = ps_sao->b4_cb_offset_4; \ - (ai1_offset_cr)[1] = ps_sao->b4_cr_offset_1; \ - (ai1_offset_cr)[2] = ps_sao->b4_cr_offset_2; \ - (ai1_offset_cr)[3] = ps_sao->b4_cr_offset_3; \ - (ai1_offset_cr)[4] = ps_sao->b4_cr_offset_4; \ - } else { \ - (ai1_offset_cb)[1] = ps_sao_10bd->b8_cb_offset_1; \ - (ai1_offset_cb)[2] = ps_sao_10bd->b8_cb_offset_2; \ - (ai1_offset_cb)[3] = ps_sao_10bd->b8_cb_offset_3; \ - (ai1_offset_cb)[4] = ps_sao_10bd->b8_cb_offset_4; \ - (ai1_offset_cr)[1] = ps_sao_10bd->b8_cr_offset_1; \ - (ai1_offset_cr)[2] = ps_sao_10bd->b8_cr_offset_2; \ - (ai1_offset_cr)[3] = ps_sao_10bd->b8_cr_offset_3; \ - (ai1_offset_cr)[4] = ps_sao_10bd->b8_cr_offset_4; \ - } \ -} while(0) - -#define SAO_Y_TYPE_IDX (1 == pixel_size_y ? (WORD32)ps_sao->b3_y_type_idx : (WORD32)ps_sao_10bd->b3_y_type_idx) -#define SAO_CB_TYPE_IDX (1 == pixel_size_uv ? (WORD32)ps_sao->b3_cb_type_idx : (WORD32)ps_sao_10bd->b3_cb_type_idx) -#define SAO_Y_BAND_POS (1 == pixel_size_y ? (WORD32)ps_sao->b5_y_band_pos : (WORD32)ps_sao_10bd->b5_y_band_pos) -#define SAO_CB_BAND_POS (1 == pixel_size_uv ? (WORD32)ps_sao->b5_cb_band_pos : (WORD32)ps_sao_10bd->b5_cb_band_pos) -#define SAO_CR_BAND_POS (1 == pixel_size_uv ? (WORD32)ps_sao->b5_cr_band_pos : (WORD32)ps_sao_10bd->b5_cr_band_pos) - #define UPDATE_LUMA_BUFFERS(pu1_src_luma, src_strd, pu1_src_left_luma, pu1_src_top_luma, pu1_top_left, sao_wd_luma, sao_ht_luma, pixel_size_y) do { \ if(1 == (pixel_size_y)) { \ for(row = 0; row < (sao_ht_luma); row++) { \ @@ -175,7 +130,6 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) WORD32 log2_ctb_size; sps_t *ps_sps; sao_t *ps_sao; - sao_10bd_t *ps_sao_10bd; pps_t *ps_pps; slice_header_t *ps_slice_hdr, *ps_slice_hdr_base; tile_t *ps_tile; @@ -268,7 +222,6 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_sao_src_top_left_chroma_top_right = ps_sao_ctxt->pu1_sao_src_top_left_chroma_top_right + (2 * ps_sao_ctxt->i4_ctb_x * pixel_size_uv); ps_sao = ps_sao_ctxt->ps_pic_sao + ps_sao_ctxt->i4_ctb_x + ps_sao_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb; - ps_sao_10bd = (sao_10bd_t *)ps_sao_ctxt->ps_pic_sao + ps_sao_ctxt->i4_ctb_x + ps_sao_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb; loop_filter_strd = (ps_sps->i2_pic_width_in_luma_samples + 63) >> 6; backup_strd = 2 * MAX_CTB_SIZE; @@ -464,7 +417,6 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_luma -= (sao_wd_luma + sao_ht_luma * src_strd) * pixel_size_y; pu1_src_chroma -= (sao_wd_chroma + sao_ht_chroma * chroma_strd) * pixel_size_uv; ps_sao -= (1 + ps_sps->i2_pic_wd_in_ctb); - ps_sao_10bd -= (1 + ps_sps->i2_pic_wd_in_ctb); pu1_src_top_luma = ps_sao_ctxt->pu1_sao_src_top_luma + ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma) * pixel_size_y; pu1_src_top_chroma = ps_sao_ctxt->pu1_sao_src_top_chroma + ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) * (chroma_pixel_strd / h_samp_factor) - sao_wd_chroma) * pixel_size_uv; pu1_src_left_luma = ps_sao_ctxt->pu1_sao_src_left_luma + ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - sao_ht_luma) * pixel_size_y; @@ -472,14 +424,17 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) if(ps_slice_hdr_top_left->i1_slice_sao_luma_flag) { - if(0 == SAO_Y_TYPE_IDX) + if(0 == ps_sao->b3_y_type_idx) { UPDATE_LUMA_BUFFERS(pu1_src_luma, src_strd, pu1_src_left_luma, pu1_src_top_luma, pu1_sao_src_luma_top_left_ctb, sao_wd_luma, sao_ht_luma, pixel_size_y); } - else if(1 == SAO_Y_TYPE_IDX) + else if(1 == ps_sao->b3_y_type_idx) { - GET_SAO_Y_OFFSETS(ai1_offset_y); + ai1_offset_y[1] = ps_sao->b8_y_offset_1; + ai1_offset_y[2] = ps_sao->b8_y_offset_2; + ai1_offset_y[3] = ps_sao->b8_y_offset_3; + ai1_offset_y[4] = ps_sao->b8_y_offset_4; if(1 == pixel_size_y) { @@ -489,7 +444,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_left_luma, pu1_src_top_luma, pu1_sao_src_luma_top_left_ctb, - SAO_Y_BAND_POS, + ps_sao->b5_y_band_pos, ai1_offset_y, sao_wd_luma, sao_ht_luma); @@ -502,7 +457,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) (UWORD16 *)pu1_src_left_luma, (UWORD16 *)pu1_src_top_luma, (UWORD16 *)pu1_sao_src_luma_top_left_ctb, - SAO_Y_BAND_POS, + ps_sao->b5_y_band_pos, ai1_offset_y, sao_wd_luma, sao_ht_luma, @@ -512,7 +467,10 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) else // if(2 <= ps_sao->b3_y_type_idx) { - GET_SAO_Y_OFFSETS(ai1_offset_y); + ai1_offset_y[1] = ps_sao->b8_y_offset_1; + ai1_offset_y[2] = ps_sao->b8_y_offset_2; + ai1_offset_y[3] = ps_sao->b8_y_offset_3; + ai1_offset_y[4] = ps_sao->b8_y_offset_4; for(i = 0; i < 8; i++) { @@ -758,7 +716,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) { au1_src_top_right[0] = pu1_src_top_luma[sao_wd_luma]; u1_sao_src_top_left_luma_bot_left = pu1_src_left_luma[sao_ht_luma]; - ps_codec->apf_sao_luma[SAO_Y_TYPE_IDX - 2](pu1_src_luma, + ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma, src_strd, pu1_src_left_luma, pu1_src_top_luma, @@ -776,7 +734,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) UWORD16 *pu2_src_left_luma = (UWORD16 *)pu1_src_left_luma; au2_src_top_right[0] = pu2_src_top_luma[sao_wd_luma]; u2_sao_src_top_left_luma_bot_left = pu2_src_left_luma[sao_ht_luma]; - ps_codec->apf_hbd_sao_luma[SAO_Y_TYPE_IDX - 2]((UWORD16 *)pu1_src_luma, + ps_codec->apf_hbd_sao_luma[ps_sao->b3_y_type_idx - 2]((UWORD16 *)pu1_src_luma, src_strd, (UWORD16 *)pu1_src_left_luma, (UWORD16 *)pu1_src_top_luma, @@ -799,14 +757,22 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) if(CHROMA_FMT_IDC_MONOCHROME != ps_sps->i1_chroma_format_idc && ps_slice_hdr_top_left->i1_slice_sao_chroma_flag) { - if(0 == SAO_CB_TYPE_IDX) + if(0 == ps_sao->b3_cb_type_idx) { UPDATE_CHROMA_BUFFERS(pu1_src_chroma, chroma_strd, pu1_src_left_chroma, pu1_src_top_chroma, pu1_sao_src_chroma_top_left_ctb, sao_wd_chroma, sao_ht_chroma, pixel_size_uv); } - else if(1 == SAO_CB_TYPE_IDX) + else if(1 == ps_sao->b3_cb_type_idx) { - GET_SAO_CHROMA_OFFSETS(ai1_offset_cb, ai1_offset_cr); + ai1_offset_cb[1] = ps_sao->b8_cb_offset_1; + ai1_offset_cb[2] = ps_sao->b8_cb_offset_2; + ai1_offset_cb[3] = ps_sao->b8_cb_offset_3; + ai1_offset_cb[4] = ps_sao->b8_cb_offset_4; + + ai1_offset_cr[1] = ps_sao->b8_cr_offset_1; + ai1_offset_cr[2] = ps_sao->b8_cr_offset_2; + ai1_offset_cr[3] = ps_sao->b8_cr_offset_3; + ai1_offset_cr[4] = ps_sao->b8_cr_offset_4; if(chroma_yuv420sp_vu) { @@ -818,8 +784,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_left_chroma, pu1_src_top_chroma, pu1_sao_src_chroma_top_left_ctb, - SAO_CR_BAND_POS, - SAO_CB_BAND_POS, + ps_sao->b5_cr_band_pos, + ps_sao->b5_cb_band_pos, ai1_offset_cr, ai1_offset_cb, sao_wd_chroma, @@ -833,8 +799,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, (UWORD16 *)pu1_sao_src_chroma_top_left_ctb, - SAO_CR_BAND_POS, - SAO_CB_BAND_POS, + ps_sao->b5_cr_band_pos, + ps_sao->b5_cb_band_pos, ai1_offset_cr, ai1_offset_cb, sao_wd_chroma, @@ -852,8 +818,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_left_chroma, pu1_src_top_chroma, pu1_sao_src_chroma_top_left_ctb, - SAO_CB_BAND_POS, - SAO_CR_BAND_POS, + ps_sao->b5_cb_band_pos, + ps_sao->b5_cr_band_pos, ai1_offset_cb, ai1_offset_cr, sao_wd_chroma, @@ -867,8 +833,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, (UWORD16 *)pu1_sao_src_chroma_top_left_ctb, - SAO_CB_BAND_POS, - SAO_CR_BAND_POS, + ps_sao->b5_cb_band_pos, + ps_sao->b5_cr_band_pos, ai1_offset_cb, ai1_offset_cr, sao_wd_chroma, @@ -880,7 +846,15 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) else // if(2 <= ps_sao->b3_cb_type_idx) { - GET_SAO_CHROMA_OFFSETS(ai1_offset_cb, ai1_offset_cr); + ai1_offset_cb[1] = ps_sao->b8_cb_offset_1; + ai1_offset_cb[2] = ps_sao->b8_cb_offset_2; + ai1_offset_cb[3] = ps_sao->b8_cb_offset_3; + ai1_offset_cb[4] = ps_sao->b8_cb_offset_4; + + ai1_offset_cr[1] = ps_sao->b8_cr_offset_1; + ai1_offset_cr[2] = ps_sao->b8_cr_offset_2; + ai1_offset_cr[3] = ps_sao->b8_cr_offset_3; + ai1_offset_cr[4] = ps_sao->b8_cr_offset_4; for(i = 0; i < 8; i++) { au1_avail_chroma[i] = 255; @@ -1111,7 +1085,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) if(chroma_yuv420sp_vu) { - ps_codec->apf_sao_chroma[SAO_CB_TYPE_IDX - 2](pu1_src_chroma, + ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, chroma_strd, pu1_src_left_chroma, pu1_src_top_chroma, @@ -1126,7 +1100,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) } else { - ps_codec->apf_sao_chroma[SAO_CB_TYPE_IDX - 2](pu1_src_chroma, + ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, chroma_strd, pu1_src_left_chroma, pu1_src_top_chroma, @@ -1158,7 +1132,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) if(chroma_yuv420sp_vu) { - ps_codec->apf_hbd_sao_chroma[SAO_CB_TYPE_IDX - 2]((UWORD16 *)pu1_src_chroma, + ps_codec->apf_hbd_sao_chroma[ps_sao->b3_cb_type_idx - 2]((UWORD16 *)pu1_src_chroma, chroma_strd, (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, @@ -1174,7 +1148,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) } else { - ps_codec->apf_hbd_sao_chroma[SAO_CB_TYPE_IDX - 2]((UWORD16 *)pu1_src_chroma, + ps_codec->apf_hbd_sao_chroma[ps_sao->b3_cb_type_idx - 2]((UWORD16 *)pu1_src_chroma, chroma_strd, (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, @@ -1199,7 +1173,6 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_luma += (sao_wd_luma + sao_ht_luma * src_strd) * pixel_size_y; pu1_src_chroma += (sao_wd_chroma + sao_ht_chroma * chroma_strd) * pixel_size_uv; ps_sao += (1 + ps_sps->i2_pic_wd_in_ctb); - ps_sao_10bd += (1 + ps_sps->i2_pic_wd_in_ctb); } @@ -1238,7 +1211,6 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_luma -= (sao_ht_luma * src_strd) * pixel_size_y; pu1_src_chroma -= (sao_ht_chroma * chroma_strd) * pixel_size_uv; ps_sao -= (ps_sps->i2_pic_wd_in_ctb); - ps_sao_10bd -= (ps_sps->i2_pic_wd_in_ctb); pu1_src_top_luma = ps_sao_ctxt->pu1_sao_src_top_luma + ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) * pixel_size_y); pu1_src_top_chroma = ps_sao_ctxt->pu1_sao_src_top_chroma + ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) * (chroma_pixel_strd / h_samp_factor) * pixel_size_uv); pu1_src_left_luma = ps_sao_ctxt->pu1_sao_src_left_luma + (((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - sao_ht_chroma) * pixel_size_y); @@ -1248,14 +1220,17 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) { if(ps_slice_hdr_top->i1_slice_sao_luma_flag) { - if(0 == SAO_Y_TYPE_IDX) + if(0 == ps_sao->b3_y_type_idx) { UPDATE_LUMA_BUFFERS(pu1_src_luma, src_strd, pu1_src_left_luma, pu1_src_top_luma, pu1_sao_src_luma_top_left_ctb, sao_wd_luma, sao_ht_luma, pixel_size_y); } - else if(1 == SAO_Y_TYPE_IDX) + else if(1 == ps_sao->b3_y_type_idx) { - GET_SAO_Y_OFFSETS(ai1_offset_y); + ai1_offset_y[1] = ps_sao->b8_y_offset_1; + ai1_offset_y[2] = ps_sao->b8_y_offset_2; + ai1_offset_y[3] = ps_sao->b8_y_offset_3; + ai1_offset_y[4] = ps_sao->b8_y_offset_4; if(1 == pixel_size_y) { @@ -1265,7 +1240,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_left_luma, pu1_src_top_luma, pu1_sao_src_luma_top_left_ctb, - SAO_Y_BAND_POS, + ps_sao->b5_y_band_pos, ai1_offset_y, sao_wd_luma, sao_ht_luma); @@ -1278,7 +1253,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) (UWORD16 *)pu1_src_left_luma, (UWORD16 *)pu1_src_top_luma, (UWORD16 *)pu1_sao_src_luma_top_left_ctb, - SAO_Y_BAND_POS, + ps_sao->b5_y_band_pos, ai1_offset_y, sao_wd_luma, sao_ht_luma, @@ -1288,7 +1263,10 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) else // if(2 <= ps_sao->b3_y_type_idx) { - GET_SAO_Y_OFFSETS(ai1_offset_y); + ai1_offset_y[1] = ps_sao->b8_y_offset_1; + ai1_offset_y[2] = ps_sao->b8_y_offset_2; + ai1_offset_y[3] = ps_sao->b8_y_offset_3; + ai1_offset_y[4] = ps_sao->b8_y_offset_4; memset(au1_avail_luma, 255, 8); memset(au1_tile_slice_boundary, 0, 8); @@ -1488,7 +1466,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) { au1_src_top_right[0] = pu1_sao_src_top_left_luma_top_right[0]; u1_sao_src_top_left_luma_bot_left = pu1_src_luma[sao_ht_luma * src_strd - 1]; - ps_codec->apf_sao_luma[SAO_Y_TYPE_IDX - 2](pu1_src_luma, + ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma, src_strd, pu1_src_left_luma, pu1_src_top_luma, @@ -1506,7 +1484,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) UWORD16 *pu2_src_luma = (UWORD16 *)pu1_src_luma; au2_src_top_right[0] = pu2_sao_src_top_left_luma_top_right[0]; u2_sao_src_top_left_luma_bot_left = pu2_src_luma[sao_ht_luma * src_strd - 1]; - ps_codec->apf_hbd_sao_luma[SAO_Y_TYPE_IDX - 2]((UWORD16 *)pu1_src_luma, + ps_codec->apf_hbd_sao_luma[ps_sao->b3_y_type_idx - 2]((UWORD16 *)pu1_src_luma, src_strd, (UWORD16 *)pu1_src_left_luma, (UWORD16 *)pu1_src_top_luma, @@ -1531,14 +1509,22 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) { if(ps_slice_hdr_top->i1_slice_sao_chroma_flag) { - if(0 == SAO_CB_TYPE_IDX) + if(0 == ps_sao->b3_cb_type_idx) { UPDATE_CHROMA_BUFFERS(pu1_src_chroma, chroma_strd, pu1_src_left_chroma, pu1_src_top_chroma, pu1_sao_src_chroma_top_left_ctb, sao_wd_chroma, sao_ht_chroma, pixel_size_uv); } - else if(1 == SAO_CB_TYPE_IDX) + else if(1 == ps_sao->b3_cb_type_idx) { - GET_SAO_CHROMA_OFFSETS(ai1_offset_cb, ai1_offset_cr); + ai1_offset_cb[1] = ps_sao->b8_cb_offset_1; + ai1_offset_cb[2] = ps_sao->b8_cb_offset_2; + ai1_offset_cb[3] = ps_sao->b8_cb_offset_3; + ai1_offset_cb[4] = ps_sao->b8_cb_offset_4; + + ai1_offset_cr[1] = ps_sao->b8_cr_offset_1; + ai1_offset_cr[2] = ps_sao->b8_cr_offset_2; + ai1_offset_cr[3] = ps_sao->b8_cr_offset_3; + ai1_offset_cr[4] = ps_sao->b8_cr_offset_4; if(chroma_yuv420sp_vu) { @@ -1550,8 +1536,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_left_chroma, pu1_src_top_chroma, pu1_sao_src_chroma_top_left_ctb, - SAO_CR_BAND_POS, - SAO_CB_BAND_POS, + ps_sao->b5_cr_band_pos, + ps_sao->b5_cb_band_pos, ai1_offset_cr, ai1_offset_cb, sao_wd_chroma, @@ -1565,8 +1551,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, (UWORD16 *)pu1_sao_src_chroma_top_left_ctb, - SAO_CR_BAND_POS, - SAO_CB_BAND_POS, + ps_sao->b5_cr_band_pos, + ps_sao->b5_cb_band_pos, ai1_offset_cr, ai1_offset_cb, sao_wd_chroma, @@ -1584,8 +1570,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_left_chroma, pu1_src_top_chroma, pu1_sao_src_chroma_top_left_ctb, - SAO_CB_BAND_POS, - SAO_CR_BAND_POS, + ps_sao->b5_cb_band_pos, + ps_sao->b5_cr_band_pos, ai1_offset_cb, ai1_offset_cr, sao_wd_chroma, @@ -1599,8 +1585,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, (UWORD16 *)pu1_sao_src_chroma_top_left_ctb, - SAO_CB_BAND_POS, - SAO_CR_BAND_POS, + ps_sao->b5_cb_band_pos, + ps_sao->b5_cr_band_pos, ai1_offset_cb, ai1_offset_cr, sao_wd_chroma, @@ -1611,7 +1597,15 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) } else // if(2 <= ps_sao->b3_cb_type_idx) { - GET_SAO_CHROMA_OFFSETS(ai1_offset_cb, ai1_offset_cr); + ai1_offset_cb[1] = ps_sao->b8_cb_offset_1; + ai1_offset_cb[2] = ps_sao->b8_cb_offset_2; + ai1_offset_cb[3] = ps_sao->b8_cb_offset_3; + ai1_offset_cb[4] = ps_sao->b8_cb_offset_4; + + ai1_offset_cr[1] = ps_sao->b8_cr_offset_1; + ai1_offset_cr[2] = ps_sao->b8_cr_offset_2; + ai1_offset_cr[3] = ps_sao->b8_cr_offset_3; + ai1_offset_cr[4] = ps_sao->b8_cr_offset_4; for(i = 0; i < 8; i++) { @@ -1790,7 +1784,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) if(chroma_yuv420sp_vu) { - ps_codec->apf_sao_chroma[SAO_CB_TYPE_IDX - 2](pu1_src_chroma, + ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, chroma_strd, pu1_src_left_chroma, pu1_src_top_chroma, @@ -1805,7 +1799,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) } else { - ps_codec->apf_sao_chroma[SAO_CB_TYPE_IDX - 2](pu1_src_chroma, + ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, chroma_strd, pu1_src_left_chroma, pu1_src_top_chroma, @@ -1831,7 +1825,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) if(chroma_yuv420sp_vu) { - ps_codec->apf_hbd_sao_chroma[SAO_CB_TYPE_IDX - 2]((UWORD16 *)pu1_src_chroma, + ps_codec->apf_hbd_sao_chroma[ps_sao->b3_cb_type_idx - 2]((UWORD16 *)pu1_src_chroma, chroma_strd, (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, @@ -1847,7 +1841,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) } else { - ps_codec->apf_hbd_sao_chroma[SAO_CB_TYPE_IDX - 2]((UWORD16 *)pu1_src_chroma, + ps_codec->apf_hbd_sao_chroma[ps_sao->b3_cb_type_idx - 2]((UWORD16 *)pu1_src_chroma, chroma_strd, (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, @@ -1874,7 +1868,6 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_luma += sao_ht_luma * src_strd * pixel_size_y; pu1_src_chroma += sao_ht_chroma * chroma_strd * pixel_size_uv; ps_sao += (ps_sps->i2_pic_wd_in_ctb); - ps_sao_10bd += (ps_sps->i2_pic_wd_in_ctb); } /* Left CTB */ @@ -1911,7 +1904,6 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_luma -= sao_wd_luma * pixel_size_y; pu1_src_chroma -= sao_wd_chroma * pixel_size_uv; ps_sao -= 1; - ps_sao_10bd -= 1; pu1_src_top_luma = ps_sao_ctxt->pu1_sao_src_top_luma + ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma) * pixel_size_y; pu1_src_top_chroma = ps_sao_ctxt->pu1_sao_src_top_chroma + ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) * (chroma_pixel_strd / h_samp_factor) - sao_wd_chroma) * pixel_size_uv; pu1_src_left_luma = ps_sao_ctxt->pu1_sao_src_left_luma + ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) * pixel_size_y); @@ -1922,14 +1914,17 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) { if(ps_slice_hdr_left->i1_slice_sao_luma_flag) { - if(0 == SAO_Y_TYPE_IDX) + if(0 == ps_sao->b3_y_type_idx) { UPDATE_LUMA_BUFFERS(pu1_src_luma, src_strd, pu1_src_left_luma, pu1_src_top_luma, pu1_sao_src_top_left_luma_curr_ctb, sao_wd_luma, sao_ht_luma, pixel_size_y); } - else if(1 == SAO_Y_TYPE_IDX) + else if(1 == ps_sao->b3_y_type_idx) { - GET_SAO_Y_OFFSETS(ai1_offset_y); + ai1_offset_y[1] = ps_sao->b8_y_offset_1; + ai1_offset_y[2] = ps_sao->b8_y_offset_2; + ai1_offset_y[3] = ps_sao->b8_y_offset_3; + ai1_offset_y[4] = ps_sao->b8_y_offset_4; if(1 == pixel_size_y) { @@ -1939,7 +1934,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_left_luma, pu1_src_top_luma, pu1_sao_src_top_left_luma_curr_ctb, - SAO_Y_BAND_POS, + ps_sao->b5_y_band_pos, ai1_offset_y, sao_wd_luma, sao_ht_luma); @@ -1952,7 +1947,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) (UWORD16 *)pu1_src_left_luma, (UWORD16 *)pu1_src_top_luma, (UWORD16 *)pu1_sao_src_top_left_luma_curr_ctb, - SAO_Y_BAND_POS, + ps_sao->b5_y_band_pos, ai1_offset_y, sao_wd_luma, sao_ht_luma, @@ -1962,7 +1957,10 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) else // if(2 <= ps_sao->b3_y_type_idx) { - GET_SAO_Y_OFFSETS(ai1_offset_y); + ai1_offset_y[1] = ps_sao->b8_y_offset_1; + ai1_offset_y[2] = ps_sao->b8_y_offset_2; + ai1_offset_y[3] = ps_sao->b8_y_offset_3; + ai1_offset_y[4] = ps_sao->b8_y_offset_4; for(i = 0; i < 8; i++) { @@ -2150,7 +2148,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) { au1_src_top_right[0] = pu1_src_top_luma[sao_wd_luma]; u1_sao_src_top_left_luma_bot_left = pu1_sao_src_top_left_luma_bot_left[0]; - ps_codec->apf_sao_luma[SAO_Y_TYPE_IDX - 2](pu1_src_luma, + ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma, src_strd, pu1_src_left_luma, pu1_src_top_luma, @@ -2168,7 +2166,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) UWORD16 *pu2_sao_src_top_left_luma_bot_left = (UWORD16 *)pu1_sao_src_top_left_luma_bot_left; au2_src_top_right[0] = pu2_src_top_luma[sao_wd_luma]; u2_sao_src_top_left_luma_bot_left = pu2_sao_src_top_left_luma_bot_left[0]; - ps_codec->apf_hbd_sao_luma[SAO_Y_TYPE_IDX - 2]((UWORD16 *)pu1_src_luma, + ps_codec->apf_hbd_sao_luma[ps_sao->b3_y_type_idx - 2]((UWORD16 *)pu1_src_luma, src_strd, (UWORD16 *)pu1_src_left_luma, (UWORD16 *)pu1_src_top_luma, @@ -2194,14 +2192,22 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) { if(ps_slice_hdr_left->i1_slice_sao_chroma_flag) { - if(0 == SAO_CB_TYPE_IDX) + if(0 == ps_sao->b3_cb_type_idx) { UPDATE_CHROMA_BUFFERS(pu1_src_chroma, chroma_strd, pu1_src_left_chroma, pu1_src_top_chroma, pu1_sao_src_top_left_chroma_curr_ctb, sao_wd_chroma, sao_ht_chroma, pixel_size_uv); } - else if(1 == SAO_CB_TYPE_IDX) + else if(1 == ps_sao->b3_cb_type_idx) { - GET_SAO_CHROMA_OFFSETS(ai1_offset_cb, ai1_offset_cr); + ai1_offset_cb[1] = ps_sao->b8_cb_offset_1; + ai1_offset_cb[2] = ps_sao->b8_cb_offset_2; + ai1_offset_cb[3] = ps_sao->b8_cb_offset_3; + ai1_offset_cb[4] = ps_sao->b8_cb_offset_4; + + ai1_offset_cr[1] = ps_sao->b8_cr_offset_1; + ai1_offset_cr[2] = ps_sao->b8_cr_offset_2; + ai1_offset_cr[3] = ps_sao->b8_cr_offset_3; + ai1_offset_cr[4] = ps_sao->b8_cr_offset_4; if(chroma_yuv420sp_vu) { @@ -2213,8 +2219,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_left_chroma, pu1_src_top_chroma, pu1_sao_src_top_left_chroma_curr_ctb, - SAO_CR_BAND_POS, - SAO_CB_BAND_POS, + ps_sao->b5_cr_band_pos, + ps_sao->b5_cb_band_pos, ai1_offset_cr, ai1_offset_cb, sao_wd_chroma, @@ -2228,8 +2234,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, (UWORD16 *)pu1_sao_src_top_left_chroma_curr_ctb, - SAO_CR_BAND_POS, - SAO_CB_BAND_POS, + ps_sao->b5_cr_band_pos, + ps_sao->b5_cb_band_pos, ai1_offset_cr, ai1_offset_cb, sao_wd_chroma, @@ -2247,8 +2253,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_left_chroma, pu1_src_top_chroma, pu1_sao_src_top_left_chroma_curr_ctb, - SAO_CB_BAND_POS, - SAO_CR_BAND_POS, + ps_sao->b5_cb_band_pos, + ps_sao->b5_cr_band_pos, ai1_offset_cb, ai1_offset_cr, sao_wd_chroma, @@ -2262,8 +2268,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, (UWORD16 *)pu1_sao_src_top_left_chroma_curr_ctb, - SAO_CB_BAND_POS, - SAO_CR_BAND_POS, + ps_sao->b5_cb_band_pos, + ps_sao->b5_cr_band_pos, ai1_offset_cb, ai1_offset_cr, sao_wd_chroma, @@ -2275,7 +2281,15 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) else // if(2 <= ps_sao->b3_cb_type_idx) { - GET_SAO_CHROMA_OFFSETS(ai1_offset_cb, ai1_offset_cr); + ai1_offset_cb[1] = ps_sao->b8_cb_offset_1; + ai1_offset_cb[2] = ps_sao->b8_cb_offset_2; + ai1_offset_cb[3] = ps_sao->b8_cb_offset_3; + ai1_offset_cb[4] = ps_sao->b8_cb_offset_4; + + ai1_offset_cr[1] = ps_sao->b8_cr_offset_1; + ai1_offset_cr[2] = ps_sao->b8_cr_offset_2; + ai1_offset_cr[3] = ps_sao->b8_cr_offset_3; + ai1_offset_cr[4] = ps_sao->b8_cr_offset_4; for(i = 0; i < 8; i++) { @@ -2461,7 +2475,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) if(chroma_yuv420sp_vu) { - ps_codec->apf_sao_chroma[SAO_CB_TYPE_IDX - 2](pu1_src_chroma, + ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, chroma_strd, pu1_src_left_chroma, pu1_src_top_chroma, @@ -2476,7 +2490,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) } else { - ps_codec->apf_sao_chroma[SAO_CB_TYPE_IDX - 2](pu1_src_chroma, + ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, chroma_strd, pu1_src_left_chroma, pu1_src_top_chroma, @@ -2513,7 +2527,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) if(chroma_yuv420sp_vu) { - ps_codec->apf_hbd_sao_chroma[SAO_CB_TYPE_IDX - 2]((UWORD16 *)pu1_src_chroma, + ps_codec->apf_hbd_sao_chroma[ps_sao->b3_cb_type_idx - 2]((UWORD16 *)pu1_src_chroma, chroma_strd, (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, @@ -2529,7 +2543,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) } else { - ps_codec->apf_hbd_sao_chroma[SAO_CB_TYPE_IDX - 2]((UWORD16 *)pu1_src_chroma, + ps_codec->apf_hbd_sao_chroma[ps_sao->b3_cb_type_idx - 2]((UWORD16 *)pu1_src_chroma, chroma_strd, (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, @@ -2556,7 +2570,6 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_luma += sao_wd_luma * pixel_size_y; pu1_src_chroma += sao_wd_chroma * pixel_size_uv; ps_sao += 1; - ps_sao_10bd += 1; } @@ -2605,7 +2618,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) { if(ps_sao_ctxt->ps_slice_hdr->i1_slice_sao_luma_flag) { - if(0 == SAO_Y_TYPE_IDX) + if(0 == ps_sao->b3_y_type_idx) { UPDATE_LUMA_BUFFERS(pu1_src_luma, src_strd, pu1_src_left_luma, pu1_src_top_luma, pu1_sao_src_top_left_luma_curr_ctb, sao_wd_luma, sao_ht_luma, pixel_size_y); if(1 == pixel_size_y) @@ -2618,9 +2631,12 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) } } - else if(1 == SAO_Y_TYPE_IDX) + else if(1 == ps_sao->b3_y_type_idx) { - GET_SAO_Y_OFFSETS(ai1_offset_y); + ai1_offset_y[1] = ps_sao->b8_y_offset_1; + ai1_offset_y[2] = ps_sao->b8_y_offset_2; + ai1_offset_y[3] = ps_sao->b8_y_offset_3; + ai1_offset_y[4] = ps_sao->b8_y_offset_4; if(1 == pixel_size_y) { @@ -2630,7 +2646,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_left_luma, pu1_src_top_luma, pu1_sao_src_top_left_luma_curr_ctb, - SAO_Y_BAND_POS, + ps_sao->b5_y_band_pos, ai1_offset_y, sao_wd_luma, sao_ht_luma); @@ -2643,7 +2659,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) (UWORD16 *)pu1_src_left_luma, (UWORD16 *)pu1_src_top_luma, (UWORD16 *)pu1_sao_src_top_left_luma_curr_ctb, - SAO_Y_BAND_POS, + ps_sao->b5_y_band_pos, ai1_offset_y, sao_wd_luma, sao_ht_luma, @@ -2653,7 +2669,10 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) else // if(2 <= ps_sao->b3_y_type_idx) { - GET_SAO_Y_OFFSETS(ai1_offset_y); + ai1_offset_y[1] = ps_sao->b8_y_offset_1; + ai1_offset_y[2] = ps_sao->b8_y_offset_2; + ai1_offset_y[3] = ps_sao->b8_y_offset_3; + ai1_offset_y[4] = ps_sao->b8_y_offset_4; for(i = 0; i < 8; i++) { @@ -2871,7 +2890,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) au1_src_top_right[0] = pu1_src_luma[sao_wd_luma - src_strd]; u1_sao_src_top_left_luma_bot_left = pu1_src_luma[sao_ht_luma * src_strd - 1]; - ps_codec->apf_sao_luma[SAO_Y_TYPE_IDX - 2](pu1_src_luma, + ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma, src_strd, pu1_src_left_luma, pu1_src_top_luma, @@ -2891,7 +2910,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) au2_src_top_right[0] = pu2_src_luma[sao_wd_luma - src_strd]; u2_sao_src_top_left_luma_bot_left = pu2_src_luma[sao_ht_luma * src_strd - 1]; - ps_codec->apf_hbd_sao_luma[SAO_Y_TYPE_IDX - 2]((UWORD16 *)pu1_src_luma, + ps_codec->apf_hbd_sao_luma[ps_sao->b3_y_type_idx - 2]((UWORD16 *)pu1_src_luma, src_strd, (UWORD16 *)pu1_src_left_luma, (UWORD16 *)pu1_src_top_luma, @@ -2926,7 +2945,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) { if(ps_sao_ctxt->ps_slice_hdr->i1_slice_sao_chroma_flag) { - if(0 == SAO_CB_TYPE_IDX) + if(0 == ps_sao->b3_cb_type_idx) { UPDATE_CHROMA_BUFFERS(pu1_src_chroma, chroma_strd, pu1_src_left_chroma, pu1_src_top_chroma, pu1_sao_src_top_left_chroma_curr_ctb, sao_wd_chroma, sao_ht_chroma, pixel_size_uv); if(1 == pixel_size_uv) @@ -2941,9 +2960,17 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) } } - else if(1 == SAO_CB_TYPE_IDX) + else if(1 == ps_sao->b3_cb_type_idx) { - GET_SAO_CHROMA_OFFSETS(ai1_offset_cb, ai1_offset_cr); + ai1_offset_cb[1] = ps_sao->b8_cb_offset_1; + ai1_offset_cb[2] = ps_sao->b8_cb_offset_2; + ai1_offset_cb[3] = ps_sao->b8_cb_offset_3; + ai1_offset_cb[4] = ps_sao->b8_cb_offset_4; + + ai1_offset_cr[1] = ps_sao->b8_cr_offset_1; + ai1_offset_cr[2] = ps_sao->b8_cr_offset_2; + ai1_offset_cr[3] = ps_sao->b8_cr_offset_3; + ai1_offset_cr[4] = ps_sao->b8_cr_offset_4; if(chroma_yuv420sp_vu) { @@ -2955,8 +2982,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_left_chroma, pu1_src_top_chroma, pu1_sao_src_top_left_chroma_curr_ctb, - SAO_CR_BAND_POS, - SAO_CB_BAND_POS, + ps_sao->b5_cr_band_pos, + ps_sao->b5_cb_band_pos, ai1_offset_cr, ai1_offset_cb, sao_wd_chroma, @@ -2970,8 +2997,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, (UWORD16 *)pu1_sao_src_top_left_chroma_curr_ctb, - SAO_CR_BAND_POS, - SAO_CB_BAND_POS, + ps_sao->b5_cr_band_pos, + ps_sao->b5_cb_band_pos, ai1_offset_cr, ai1_offset_cb, sao_wd_chroma, @@ -2989,8 +3016,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) pu1_src_left_chroma, pu1_src_top_chroma, pu1_sao_src_top_left_chroma_curr_ctb, - SAO_CB_BAND_POS, - SAO_CR_BAND_POS, + ps_sao->b5_cb_band_pos, + ps_sao->b5_cr_band_pos, ai1_offset_cb, ai1_offset_cr, sao_wd_chroma, @@ -3004,8 +3031,8 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, (UWORD16 *)pu1_sao_src_top_left_chroma_curr_ctb, - SAO_CB_BAND_POS, - SAO_CR_BAND_POS, + ps_sao->b5_cb_band_pos, + ps_sao->b5_cr_band_pos, ai1_offset_cb, ai1_offset_cr, sao_wd_chroma, @@ -3017,7 +3044,15 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) else // if(2 <= ps_sao->b3_cb_type_idx) { - GET_SAO_CHROMA_OFFSETS(ai1_offset_cb, ai1_offset_cr); + ai1_offset_cb[1] = ps_sao->b8_cb_offset_1; + ai1_offset_cb[2] = ps_sao->b8_cb_offset_2; + ai1_offset_cb[3] = ps_sao->b8_cb_offset_3; + ai1_offset_cb[4] = ps_sao->b8_cb_offset_4; + + ai1_offset_cr[1] = ps_sao->b8_cr_offset_1; + ai1_offset_cr[2] = ps_sao->b8_cr_offset_2; + ai1_offset_cr[3] = ps_sao->b8_cr_offset_3; + ai1_offset_cr[4] = ps_sao->b8_cr_offset_4; for(i = 0; i < 8; i++) { @@ -3224,7 +3259,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) if(chroma_yuv420sp_vu) { - ps_codec->apf_sao_chroma[SAO_CB_TYPE_IDX - 2](pu1_src_chroma, + ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, chroma_strd, pu1_src_left_chroma, pu1_src_top_chroma, @@ -3239,7 +3274,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) } else { - ps_codec->apf_sao_chroma[SAO_CB_TYPE_IDX - 2](pu1_src_chroma, + ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, chroma_strd, pu1_src_left_chroma, pu1_src_top_chroma, @@ -3270,7 +3305,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) if(chroma_yuv420sp_vu) { - ps_codec->apf_hbd_sao_chroma[SAO_CB_TYPE_IDX - 2]((UWORD16 *)pu1_src_chroma, + ps_codec->apf_hbd_sao_chroma[ps_sao->b3_cb_type_idx - 2]((UWORD16 *)pu1_src_chroma, chroma_strd, (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma, @@ -3286,7 +3321,7 @@ void ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) } else { - ps_codec->apf_hbd_sao_chroma[SAO_CB_TYPE_IDX - 2]((UWORD16 *)pu1_src_chroma, + ps_codec->apf_hbd_sao_chroma[ps_sao->b3_cb_type_idx - 2]((UWORD16 *)pu1_src_chroma, chroma_strd, (UWORD16 *)pu1_src_left_chroma, (UWORD16 *)pu1_src_top_chroma,