Consolidate sao_10bd_t into sao_t

This commit is contained in:
Harish Mahendrakar 2026-09-22 15:52:14 -07:00 • committed by Harish Mahendrakar
parent 352ddf882d
commit 487a32d199
4 changed files with 193 additions and 501 deletions

View file

@ -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

View file

@ -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;

View file

@ -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

View file

@ -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,