Multithreading changes and better error resilience
Fixed the following bugs
Issue 21145276
Issue 21144884
Issue 21181133
Issue 21181134
Decoder now returns error if the level in stream is higher than level at init
Change-Id: I8892c62bd98f7854d046510330c05a1e9ca826b2
diff --git a/decoder/ih264d_deblocking.c b/decoder/ih264d_deblocking.c
index ad4ce08..c5f3657 100644
--- a/decoder/ih264d_deblocking.c
+++ b/decoder/ih264d_deblocking.c
@@ -39,7 +39,6 @@
#include "ih264d_format_conv.h"
#include "ih264d_deblocking.h"
#include "ih264d_tables.h"
-//extern UWORD8 *g_dest_y, *g_dest_uv;
/*!
*************************************************************************
@@ -80,8 +79,8 @@
WORD8 i1_cb_qp_idx_ofst,
WORD8 i1_cr_qp_idx_ofst,
deblk_mb_t * ps_cur_mb,
- UWORD16 i4_strd_y,
- UWORD16 i4_strd_uv,
+ WORD32 i4_strd_y,
+ WORD32 i4_strd_uv,
deblk_mb_t * ps_left_mb,
UWORD32 pu4_bs_tab[],
UWORD8 u1_cur_fld)
@@ -121,11 +120,11 @@
/* Chroma cb values */
{
- UWORD8 u1_mb_qp1, u1_mb_qp2;
- u1_mb_qp1 = (ps_cur_mb->u1_left_mb_qp + i1_cb_qp_idx_ofst);
- u1_mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
- qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + u1_mb_qp1]
- + gau1_ih264d_qp_scale_cr[12 + u1_mb_qp2] + 1) >> 1);
+ WORD32 mb_qp1, mb_qp2;
+ mb_qp1 = (ps_cur_mb->u1_left_mb_qp + i1_cb_qp_idx_ofst);
+ mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
+ qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
+ + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
}
idx_a_u = qp_avg + ofst_a;
alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
@@ -133,11 +132,11 @@
beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
/* Chroma cr values */
{
- UWORD8 u1_mb_qp1, u1_mb_qp2;
- u1_mb_qp1 = (ps_cur_mb->u1_left_mb_qp + i1_cr_qp_idx_ofst);
- u1_mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
- qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + u1_mb_qp1]
- + gau1_ih264d_qp_scale_cr[12 + u1_mb_qp2] + 1) >> 1);
+ WORD32 mb_qp1, mb_qp2;
+ mb_qp1 = (ps_cur_mb->u1_left_mb_qp + i1_cr_qp_idx_ofst);
+ mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
+ qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
+ + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
}
idx_a_v = qp_avg + ofst_a;
alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
@@ -159,12 +158,9 @@
if(u4_bs_val)
{
- pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_y];
- pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_u];
- pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_v];
+ pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y];
+ pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u];
+ pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v];
ps_dec->pf_deblk_luma_vert_bslt4(pu1_y, i4_strd_y, alpha_y,
beta_y, u4_bs_val,
pu1_cliptab_y);
@@ -198,12 +194,9 @@
if(u4_bs_val)
{
- pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_y];
- pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_u];
- pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_v];
+ pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y];
+ pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u];
+ pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v];
ps_dec->pf_deblk_luma_vert_bslt4_mbaff(pu1_y, i4_strd_y,
alpha_y, beta_y,
@@ -236,11 +229,11 @@
u4_bs_val = pu4_bs_tab[9];
{
- UWORD8 u1_mb_qp1, u1_mb_qp2;
- u1_mb_qp1 = ((ps_left_mb + 1)->u1_mb_qp + i1_cb_qp_idx_ofst);
- u1_mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
- qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + u1_mb_qp1]
- + gau1_ih264d_qp_scale_cr[12 + u1_mb_qp2] + 1) >> 1);
+ WORD32 mb_qp1, mb_qp2;
+ mb_qp1 = ((ps_left_mb + 1)->u1_mb_qp + i1_cb_qp_idx_ofst);
+ mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
+ qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
+ + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
}
idx_a_u = qp_avg + ofst_a;
alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
@@ -248,11 +241,11 @@
beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
u4_bs_val = pu4_bs_tab[9];
{
- UWORD8 u1_mb_qp1, u1_mb_qp2;
- u1_mb_qp1 = ((ps_left_mb + 1)->u1_mb_qp + i1_cr_qp_idx_ofst);
- u1_mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
- qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + u1_mb_qp1]
- + gau1_ih264d_qp_scale_cr[12 + u1_mb_qp2] + 1) >> 1);
+ WORD32 mb_qp1, mb_qp2;
+ mb_qp1 = ((ps_left_mb + 1)->u1_mb_qp + i1_cr_qp_idx_ofst);
+ mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
+ qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
+ + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
}
idx_a_v = qp_avg + ofst_a;
alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
@@ -272,12 +265,9 @@
if(u4_bs_val)
{
- pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_y];
- pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_u];
- pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_v];
+ pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y];
+ pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u];
+ pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v];
ps_dec->pf_deblk_luma_vert_bslt4_mbaff(pu1_y, i4_strd_y,
alpha_y, beta_y,
@@ -313,8 +303,8 @@
WORD8 i1_cb_qp_idx_ofst,
WORD8 i1_cr_qp_idx_ofst,
deblk_mb_t * ps_cur_mb,
- UWORD16 i4_strd_y,
- UWORD16 i4_strd_uv,
+ WORD32 i4_strd_y,
+ WORD32 i4_strd_uv,
deblk_mb_t * ps_top_mb,
UWORD32 u4_bs)
{
@@ -322,7 +312,6 @@
WORD32 alpha_u = 0, beta_u = 0, alpha_v = 0, beta_v = 0;
WORD32 alpha_y = 0, beta_y = 0;
WORD32 qp_avg;
- WORD32 uc_QPav_Y;
WORD32 idx_b_u, idx_a_u, idx_b_v, idx_a_v;
WORD32 idx_b_y, idx_a_y;
UWORD16 uc_tmp;
@@ -335,20 +324,20 @@
/* LUMA values */
/* Deblock rounding change */
uc_tmp = ((ps_cur_mb->u1_topmb_qp + ps_cur_mb->u1_mb_qp + 1) >> 1);
- uc_QPav_Y = (UWORD8)uc_tmp;
- idx_a_y = uc_QPav_Y + ofst_a;
+ qp_avg = (UWORD8)uc_tmp;
+ idx_a_y = qp_avg + ofst_a;
alpha_y = gau1_ih264d_alpha_table[12 + idx_a_y];
- idx_b_y = uc_QPav_Y + ofst_b;
+ idx_b_y = qp_avg + ofst_b;
beta_y = gau1_ih264d_beta_table[12 + idx_b_y];
pu1_y = ps_tfr_cxt->pu1_mb_y;
/* CHROMA cb values */
{
- UWORD8 u1_mb_qp1, u1_mb_qp2;
- u1_mb_qp1 = (ps_cur_mb->u1_topmb_qp + i1_cb_qp_idx_ofst);
- u1_mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
- qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + u1_mb_qp1]
- + gau1_ih264d_qp_scale_cr[12 + u1_mb_qp2] + 1) >> 1);
+ WORD32 mb_qp1, mb_qp2;
+ mb_qp1 = (ps_cur_mb->u1_topmb_qp + i1_cb_qp_idx_ofst);
+ mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
+ qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
+ + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
}
idx_a_u = qp_avg + ofst_a;
@@ -357,11 +346,11 @@
beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
/* CHROMA cr values */
{
- UWORD8 u1_mb_qp1, u1_mb_qp2;
- u1_mb_qp1 = (ps_cur_mb->u1_topmb_qp + i1_cr_qp_idx_ofst);
- u1_mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
- qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + u1_mb_qp1]
- + gau1_ih264d_qp_scale_cr[12 + u1_mb_qp2] + 1) >> 1);
+ WORD32 mb_qp1, mb_qp2;
+ mb_qp1 = (ps_cur_mb->u1_topmb_qp + i1_cr_qp_idx_ofst);
+ mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
+ qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
+ + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
}
idx_a_v = qp_avg + ofst_a;
@@ -405,11 +394,8 @@
tfr_ctxt_t * ps_tfr_cxt,
WORD8 i1_cb_qp_idx_ofst,
WORD8 i1_cr_qp_idx_ofst,
- deblk_mb_t * ps_cur_mb,
WORD32 i4_strd_y,
- WORD32 i4_strd_uv,
- deblk_mb_t * ps_top_mb,
- deblk_mb_t * ps_left_mb)
+ WORD32 i4_strd_uv )
{
UWORD8 *pu1_y, *pu1_u;
UWORD32 u4_bs;
@@ -420,157 +406,211 @@
UWORD8 *pu1_cliptab_v;
UWORD8 *pu1_cliptab_y;
- UWORD32 * pu4_bs_tab = ps_cur_mb->u4_bs_table;
+ UWORD32 * pu4_bs_tab;
WORD32 idx_a_y, idx_a_u, idx_a_v;
+ UWORD32 u4_deb_mode, u4_mbs_next;
+ UWORD32 u4_image_wd_mb;
+ deblk_mb_t *ps_top_mb,*ps_left_mb,*ps_cur_mb;
PROFILE_DISABLE_DEBLK()
/* Return from here to switch off deblocking */
- /*---------------------------------------------------------------------*/
- /* Filter wrt Left edge */
- /* except */
- /* - Left Egde is Picture Boundary */
- /* - Left Egde is part of Slice Boundary and Deblocking */
- /* parameters of slice disable Filtering of Slice Boundary Edges*/
- /*---------------------------------------------------------------------*/
- if(ps_left_mb)
- ih264d_filter_boundary_left_nonmbaff(ps_dec, ps_tfr_cxt,
- i1_cb_qp_idx_ofst,
- i1_cr_qp_idx_ofst, ps_cur_mb,
- i4_strd_y, i4_strd_uv, ps_left_mb,
- pu4_bs_tab, 0);
+ u4_image_wd_mb = ps_dec->u2_frm_wd_in_mbs;
- /*--------------------------------------------------------------------*/
- /* Filter wrt Other Vertical Edges */
- /*--------------------------------------------------------------------*/
- {
- WORD32 ofst_a, ofst_b, idx_b_y, idx_b_u,
- idx_b_v;
- WORD32 qp_avg, qp_avg_u, qp_avg_v;
- ofst_a = ps_cur_mb->i1_slice_alpha_c0_offset;
- ofst_b = ps_cur_mb->i1_slice_beta_offset;
+ ps_cur_mb = ps_dec->ps_cur_deblk_mb;
+ pu4_bs_tab = ps_cur_mb->u4_bs_table;
+ u4_deb_mode = ps_cur_mb->u1_deblocking_mode;
+ if(!(u4_deb_mode & MB_DISABLE_FILTERING))
+ {
- qp_avg = ps_cur_mb->u1_mb_qp;
+ if(ps_dec->u4_deblk_mb_x)
+ {
+ ps_left_mb = ps_cur_mb - 1;
- idx_a_y = qp_avg + ofst_a;
- alpha = gau1_ih264d_alpha_table[12 + idx_a_y];
- idx_b_y = qp_avg + ofst_b;
- beta = gau1_ih264d_beta_table[12 + idx_b_y];
+ }
+ else
+ {
+ ps_left_mb = NULL;
- /* CHROMA values */
- /* CHROMA Cb values */
- qp_avg_u = (qp_avg + i1_cb_qp_idx_ofst);
- qp_avg_u = gau1_ih264d_qp_scale_cr[12 + qp_avg_u];
- idx_a_u = qp_avg_u + ofst_a;
- alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
- idx_b_u = qp_avg_u + ofst_b;
- beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
- /* CHROMA Cr values */
- qp_avg_v = (qp_avg + i1_cr_qp_idx_ofst);
- qp_avg_v = gau1_ih264d_qp_scale_cr[12 + qp_avg_v];
- idx_a_v = qp_avg_v + ofst_a;
- alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
- idx_b_v = qp_avg_v + ofst_b;
- beta_v = gau1_ih264d_beta_table[12 + idx_b_v];
- }
+ }
+ if(ps_dec->u4_deblk_mb_y != 0)
+ {
+ ps_top_mb = ps_cur_mb - (u4_image_wd_mb);
+ }
+ else
+ {
+ ps_top_mb = NULL;
+ }
- pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y]; //this for Luma
- pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u]; //this for chroma
- pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v]; //this for chroma
+ if(u4_deb_mode & MB_DISABLE_LEFT_EDGE)
+ ps_left_mb = NULL;
+ if(u4_deb_mode & MB_DISABLE_TOP_EDGE)
+ ps_top_mb = NULL;
- //edge=1
+ /*---------------------------------------------------------------------*/
+ /* Filter wrt Left edge */
+ /* except */
+ /* - Left Egde is Picture Boundary */
+ /* - Left Egde is part of Slice Boundary and Deblocking */
+ /* parameters of slice disable Filtering of Slice Boundary Edges*/
+ /*---------------------------------------------------------------------*/
+ if(ps_left_mb)
+ ih264d_filter_boundary_left_nonmbaff(ps_dec, ps_tfr_cxt,
+ i1_cb_qp_idx_ofst,
+ i1_cr_qp_idx_ofst, ps_cur_mb,
+ i4_strd_y, i4_strd_uv, ps_left_mb,
+ pu4_bs_tab, 0);
+
+ /*--------------------------------------------------------------------*/
+ /* Filter wrt Other Vertical Edges */
+ /*--------------------------------------------------------------------*/
+ {
+ WORD32 ofst_a, ofst_b, idx_b_y, idx_b_u,
+ idx_b_v;
+ WORD32 qp_avg, qp_avg_u, qp_avg_v;
+ ofst_a = ps_cur_mb->i1_slice_alpha_c0_offset;
+ ofst_b = ps_cur_mb->i1_slice_beta_offset;
+
+ qp_avg = ps_cur_mb->u1_mb_qp;
+
+ idx_a_y = qp_avg + ofst_a;
+ alpha = gau1_ih264d_alpha_table[12 + idx_a_y];
+ idx_b_y = qp_avg + ofst_b;
+ beta = gau1_ih264d_beta_table[12 + idx_b_y];
+
+ /* CHROMA values */
+ /* CHROMA Cb values */
+ qp_avg_u = (qp_avg + i1_cb_qp_idx_ofst);
+ qp_avg_u = gau1_ih264d_qp_scale_cr[12 + qp_avg_u];
+ idx_a_u = qp_avg_u + ofst_a;
+ alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
+ idx_b_u = qp_avg_u + ofst_b;
+ beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
+ /* CHROMA Cr values */
+ qp_avg_v = (qp_avg + i1_cr_qp_idx_ofst);
+ qp_avg_v = gau1_ih264d_qp_scale_cr[12 + qp_avg_v];
+ idx_a_v = qp_avg_v + ofst_a;
+ alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
+ idx_b_v = qp_avg_v + ofst_b;
+ beta_v = gau1_ih264d_beta_table[12 + idx_b_v];
+ }
+
+ pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y]; //this for Luma
+ pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u]; //this for chroma
+ pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v]; //this for chroma
+
+ //edge=1
- u4_bs = pu4_bs_tab[5];
- pu1_y = ps_tfr_cxt->pu1_mb_y;
- pu1_u = ps_tfr_cxt->pu1_mb_u;
+ u4_bs = pu4_bs_tab[5];
+ pu1_y = ps_tfr_cxt->pu1_mb_y;
+ pu1_u = ps_tfr_cxt->pu1_mb_u;
- if(u4_bs)
- {
+ if(u4_bs)
+ {
- ps_dec->pf_deblk_luma_vert_bslt4(pu1_y + 4, i4_strd_y, alpha, beta,
- u4_bs, pu1_cliptab_y);
+ ps_dec->pf_deblk_luma_vert_bslt4(pu1_y + 4, i4_strd_y, alpha, beta,
+ u4_bs, pu1_cliptab_y);
- }
- //edge=2
+ }
+ //edge=2
- u4_bs = pu4_bs_tab[6];
- if(u4_bs)
- {
- ps_dec->pf_deblk_luma_vert_bslt4(pu1_y + 8, i4_strd_y, alpha, beta,
- u4_bs, pu1_cliptab_y);
- ps_dec->pf_deblk_chroma_vert_bslt4(pu1_u + 4 * YUV420SP_FACTOR,
- i4_strd_uv, alpha_u, beta_u,
- alpha_v, beta_v, u4_bs,
- pu1_cliptab_u, pu1_cliptab_v);
+ u4_bs = pu4_bs_tab[6];
+ if(u4_bs)
+ {
+ ps_dec->pf_deblk_luma_vert_bslt4(pu1_y + 8, i4_strd_y, alpha, beta,
+ u4_bs, pu1_cliptab_y);
+ ps_dec->pf_deblk_chroma_vert_bslt4(pu1_u + 4 * YUV420SP_FACTOR,
+ i4_strd_uv, alpha_u, beta_u,
+ alpha_v, beta_v, u4_bs,
+ pu1_cliptab_u, pu1_cliptab_v);
- }
- //edge=3
+ }
+ //edge=3
- u4_bs = pu4_bs_tab[7];
- if(u4_bs)
- {
- ps_dec->pf_deblk_luma_vert_bslt4(pu1_y + 12, i4_strd_y, alpha, beta,
- u4_bs, pu1_cliptab_y);
+ u4_bs = pu4_bs_tab[7];
+ if(u4_bs)
+ {
+ ps_dec->pf_deblk_luma_vert_bslt4(pu1_y + 12, i4_strd_y, alpha, beta,
+ u4_bs, pu1_cliptab_y);
- }
+ }
- /*--------------------------------------------------------------------*/
- /* Filter wrt Top edge */
- /* except */
- /* - Top Egde is Picture Boundary */
- /* - Top Egde is part of Slice Boundary and Deblocking */
- /* parameters of slice disable Filtering of Slice Boundary Edges*/
- /*--------------------------------------------------------------------*/
- if(ps_top_mb)
- {
- /** if top MB and MB AFF and cur MB is frame and top is field then */
- /* one extra top edge needs to be deblocked */
+ /*--------------------------------------------------------------------*/
+ /* Filter wrt Top edge */
+ /* except */
+ /* - Top Egde is Picture Boundary */
+ /* - Top Egde is part of Slice Boundary and Deblocking */
+ /* parameters of slice disable Filtering of Slice Boundary Edges*/
+ /*--------------------------------------------------------------------*/
+ if(ps_top_mb)
+ {
+ /** if top MB and MB AFF and cur MB is frame and top is field then */
+ /* one extra top edge needs to be deblocked */
- ih264d_filter_boundary_top_nonmbaff(ps_dec, ps_tfr_cxt,
- i1_cb_qp_idx_ofst,
- i1_cr_qp_idx_ofst, ps_cur_mb,
- i4_strd_y, i4_strd_uv, ps_top_mb,
- pu4_bs_tab[0]);
+ ih264d_filter_boundary_top_nonmbaff(ps_dec, ps_tfr_cxt,
+ i1_cb_qp_idx_ofst,
+ i1_cr_qp_idx_ofst, ps_cur_mb,
+ i4_strd_y, i4_strd_uv, ps_top_mb,
+ pu4_bs_tab[0]);
- }
+ }
- /*--------------------------------------------------------------------*/
- /* Filter wrt Other Horizontal Edges */
- /*--------------------------------------------------------------------*/
+ /*--------------------------------------------------------------------*/
+ /* Filter wrt Other Horizontal Edges */
+ /*--------------------------------------------------------------------*/
- //edge1
- u4_bs = pu4_bs_tab[1];
+ //edge1
+ u4_bs = pu4_bs_tab[1];
- if(u4_bs)
- {
- ps_dec->pf_deblk_luma_horz_bslt4(pu1_y + (i4_strd_y << 2), i4_strd_y,
- alpha, beta, u4_bs, pu1_cliptab_y);
+ if(u4_bs)
+ {
+ ps_dec->pf_deblk_luma_horz_bslt4(pu1_y + (i4_strd_y << 2), i4_strd_y,
+ alpha, beta, u4_bs, pu1_cliptab_y);
- }
- //edge2
- u4_bs = pu4_bs_tab[2];
+ }
+ //edge2
+ u4_bs = pu4_bs_tab[2];
- if(u4_bs)
- {
+ if(u4_bs)
+ {
- ps_dec->pf_deblk_luma_horz_bslt4(pu1_y + (i4_strd_y << 3), i4_strd_y,
- alpha, beta, u4_bs, pu1_cliptab_y);
- ps_dec->pf_deblk_chroma_horz_bslt4(pu1_u + (i4_strd_uv << 2),
- i4_strd_uv, alpha_u, beta_u,
- alpha_v, beta_v, u4_bs,
- pu1_cliptab_u, pu1_cliptab_v);
+ ps_dec->pf_deblk_luma_horz_bslt4(pu1_y + (i4_strd_y << 3), i4_strd_y,
+ alpha, beta, u4_bs, pu1_cliptab_y);
+ ps_dec->pf_deblk_chroma_horz_bslt4(pu1_u + (i4_strd_uv << 2),
+ i4_strd_uv, alpha_u, beta_u,
+ alpha_v, beta_v, u4_bs,
+ pu1_cliptab_u, pu1_cliptab_v);
- }
- //edge3
- u4_bs = pu4_bs_tab[3];
- if(u4_bs)
- {
- ps_dec->pf_deblk_luma_horz_bslt4(
- (pu1_y + (i4_strd_y << 3) + (i4_strd_y << 2)),
- i4_strd_y, alpha, beta, u4_bs, pu1_cliptab_y);
+ }
+ //edge3
+ u4_bs = pu4_bs_tab[3];
+ if(u4_bs)
+ {
+ ps_dec->pf_deblk_luma_horz_bslt4(
+ (pu1_y + (i4_strd_y << 3) + (i4_strd_y << 2)),
+ i4_strd_y, alpha, beta, u4_bs, pu1_cliptab_y);
- }
+ }
+ }
+
+ ps_dec->u4_deblk_mb_x++;
+ ps_dec->ps_cur_deblk_mb++;
+ ps_dec->u4_cur_deblk_mb_num++;
+ u4_mbs_next = u4_image_wd_mb - ps_dec->u4_deblk_mb_x;
+
+ ps_tfr_cxt->pu1_mb_y += 16;
+ ps_tfr_cxt->pu1_mb_u += 8 * YUV420SP_FACTOR;
+ ps_tfr_cxt->pu1_mb_v += 8;
+
+ if(!u4_mbs_next)
+ {
+ ps_tfr_cxt->pu1_mb_y += ps_tfr_cxt->u4_y_inc;
+ ps_tfr_cxt->pu1_mb_u += ps_tfr_cxt->u4_uv_inc;
+ ps_tfr_cxt->pu1_mb_v += ps_tfr_cxt->u4_uv_inc;
+ ps_dec->u4_deblk_mb_y++;
+ ps_dec->u4_deblk_mb_x = 0;
+ }
}
@@ -604,6 +644,10 @@
ps_tfr_cxt->pu1_dest_u = ps_tfr_cxt->pu1_src_u;
ps_tfr_cxt->pu1_dest_v = ps_tfr_cxt->pu1_src_v;
+ ps_tfr_cxt->pu1_mb_y = ps_tfr_cxt->pu1_src_y + 4;
+ ps_tfr_cxt->pu1_mb_u = ps_tfr_cxt->pu1_src_u + 4;
+ ps_tfr_cxt->pu1_mb_v = ps_tfr_cxt->pu1_src_v + 4;
+
i4_wd_y = ps_dec->u2_frm_wd_y << u1_field_pic_flag;
i4_wd_uv = ps_dec->u2_frm_wd_uv << u1_field_pic_flag;
ps_tfr_cxt->u4_y_inc = ((i4_wd_y << u1_mbaff) * 16
@@ -698,14 +742,13 @@
i4_wd_uv = ps_dec->u2_frm_wd_uv << u1_field_pic_flag;
/* Initial filling of the buffers with deblocking data */
- pu1_deb_y = ps_tfr_cxt->pu1_src_y + 4;
- pu1_deb_u = ps_tfr_cxt->pu1_src_u + 4;
- pu1_deb_v = ps_tfr_cxt->pu1_src_v + 4;
+ pu1_deb_y = ps_tfr_cxt->pu1_mb_y;
+ pu1_deb_u = ps_tfr_cxt->pu1_mb_u;
+ pu1_deb_v = ps_tfr_cxt->pu1_mb_v;
ps_cur_mb = ps_dec->ps_deblk_pic;
if(ps_dec->u4_app_disable_deblk_frm == 0)
{
- if(ps_dec->u4_mb_level_deblk == 0 || ps_dec->u4_num_cores >= 3)
{
while(i2_mb_y > 0)
@@ -941,13 +984,9 @@
void ih264d_deblock_picture_non_mbaff(dec_struct_t * ps_dec)
{
- WORD16 i2_mb_x, i2_mb_y;
deblk_mb_t *ps_cur_mb;
- deblk_mb_t *ps_top_mb;
- deblk_mb_t *ps_left_mb;
UWORD8 u1_vert_pad_top = 1;
- UWORD8 u1_first_row;
UWORD8 u1_deb_mode;
WORD32 i4_wd_y, i4_wd_uv;
@@ -974,80 +1013,26 @@
0);
/* Pic level Initialisations */
- i2_mb_y = u2_image_ht_mb;
- i2_mb_x = 0;
- u1_first_row = 1;
+
i4_wd_y = ps_dec->u2_frm_wd_y << u1_field_pic_flag;
i4_wd_uv = ps_dec->u2_frm_wd_uv << u1_field_pic_flag;
/* Initial filling of the buffers with deblocking data */
- ps_tfr_cxt->pu1_mb_y = ps_tfr_cxt->pu1_src_y + 4;
- ps_tfr_cxt->pu1_mb_u = ps_tfr_cxt->pu1_src_u + 4;
- ps_tfr_cxt->pu1_mb_v = ps_tfr_cxt->pu1_src_v + 4;
ps_cur_mb = ps_dec->ps_deblk_pic;
if(ps_dec->u4_app_disable_deblk_frm == 0)
{
- if((ps_dec->u4_mb_level_deblk == 0) && (ps_dec->u4_num_cores != 3))
+ if(ps_dec->ps_cur_sps->u1_mb_aff_flag == 1)
{
-
- while(i2_mb_y > 0)
+ while( ps_dec->u4_deblk_mb_y < u2_image_ht_mb)
{
- do
- {
-
- u1_deb_mode = ps_cur_mb->u1_deblocking_mode;
- if(!(u1_deb_mode & MB_DISABLE_FILTERING))
- {
- if(i2_mb_x)
- {
- ps_left_mb = ps_cur_mb - 1;
- }
- else
- {
- ps_left_mb = NULL;
- }
- if(!u1_first_row)
- {
- ps_top_mb = ps_cur_mb - (u2_image_wd_mb);
- }
- else
- {
- ps_top_mb = NULL;
- }
-
- if(u1_deb_mode & MB_DISABLE_LEFT_EDGE)
- ps_left_mb = NULL;
- if(u1_deb_mode & MB_DISABLE_TOP_EDGE)
- ps_top_mb = NULL;
-
- ih264d_deblock_mb_nonmbaff(ps_dec, ps_tfr_cxt,
- i1_cb_qp_idx_ofst,
- i1_cr_qp_idx_ofst, ps_cur_mb,
- i4_wd_y, i4_wd_uv, ps_top_mb,
- ps_left_mb);
- }
-
- ps_cur_mb++;
- i2_mb_x++;
-
- ps_tfr_cxt->pu1_mb_y += 16;
- ps_tfr_cxt->pu1_mb_u += 8 * YUV420SP_FACTOR;
- ps_tfr_cxt->pu1_mb_v += 8;
-
- }
- while(i2_mb_x < u2_image_wd_mb);
-
- ps_tfr_cxt->pu1_mb_y += ps_tfr_cxt->u4_y_inc;
- ps_tfr_cxt->pu1_mb_u += ps_tfr_cxt->u4_uv_inc;
- ps_tfr_cxt->pu1_mb_v += ps_tfr_cxt->u4_uv_inc;
-
- i2_mb_x = 0;
- i2_mb_y--;
- u1_first_row = 0;
-
+ ih264d_deblock_mb_nonmbaff(ps_dec, ps_tfr_cxt,
+ i1_cb_qp_idx_ofst,
+ i1_cr_qp_idx_ofst,
+ i4_wd_y, i4_wd_uv);
+ ps_cur_mb++;
}
}
@@ -1116,14 +1101,10 @@
void ih264d_deblock_picture_progressive(dec_struct_t * ps_dec)
{
- WORD16 i2_mb_x, i2_mb_y;
-
deblk_mb_t *ps_cur_mb;
- deblk_mb_t *ps_top_mb;
- deblk_mb_t *ps_left_mb;
UWORD8 u1_vert_pad_top = 1;
- UWORD8 u1_mbs_next, u1_first_row;
+ UWORD8 u1_mbs_next;
UWORD8 u1_deb_mode;
WORD32 i4_wd_y, i4_wd_uv;
@@ -1149,83 +1130,23 @@
0);
/* Pic level Initialisations */
- i2_mb_y = u2_image_ht_mb;
- i2_mb_x = 0;
-
- u1_first_row = 1;
i4_wd_y = ps_dec->u2_frm_wd_y;
i4_wd_uv = ps_dec->u2_frm_wd_uv;
/* Initial filling of the buffers with deblocking data */
-
- ps_tfr_cxt->pu1_mb_y = ps_tfr_cxt->pu1_src_y + 4;
- ps_tfr_cxt->pu1_mb_u = ps_tfr_cxt->pu1_src_u + 4;
- ps_tfr_cxt->pu1_mb_v = ps_tfr_cxt->pu1_src_v + 4;
ps_cur_mb = ps_dec->ps_deblk_pic;
if(ps_dec->u4_app_disable_deblk_frm == 0)
{
-
- if((ps_dec->u4_mb_level_deblk == 0) && (ps_dec->u4_num_cores != 3))
+ if(ps_dec->ps_cur_sps->u1_mb_aff_flag == 1)
{
-
- while(i2_mb_y > 0)
+ while( ps_dec->u4_deblk_mb_y < u2_image_ht_mb)
{
-
- u1_deb_mode = ps_cur_mb->u1_deblocking_mode;
- if(!(u1_deb_mode & MB_DISABLE_FILTERING))
- {
-
- if(i2_mb_x)
- {
- ps_left_mb = ps_cur_mb - 1;
-
- }
- else
- {
- ps_left_mb = NULL;
-
- }
- if(!u1_first_row)
- {
- ps_top_mb = ps_cur_mb - (u2_image_wd_mb);
- }
- else
- {
- ps_top_mb = NULL;
- }
-
- if(u1_deb_mode & MB_DISABLE_LEFT_EDGE)
- ps_left_mb = NULL;
- if(u1_deb_mode & MB_DISABLE_TOP_EDGE)
- ps_top_mb = NULL;
-
- ih264d_deblock_mb_nonmbaff(ps_dec, ps_tfr_cxt,
- i1_cb_qp_idx_ofst,
- i1_cr_qp_idx_ofst, ps_cur_mb,
- i4_wd_y, i4_wd_uv, ps_top_mb,
- ps_left_mb);
- }
-
+ ih264d_deblock_mb_nonmbaff(ps_dec, ps_tfr_cxt,
+ i1_cb_qp_idx_ofst,
+ i1_cr_qp_idx_ofst,
+ i4_wd_y, i4_wd_uv);
ps_cur_mb++;
- i2_mb_x++;
- u1_mbs_next = u2_image_wd_mb - i2_mb_x;
-
- ps_tfr_cxt->pu1_mb_y += 16;
- ps_tfr_cxt->pu1_mb_u += 8 * YUV420SP_FACTOR;
- ps_tfr_cxt->pu1_mb_v += 8;
-
- if(!u1_mbs_next)
- {
- ps_tfr_cxt->pu1_mb_y += ps_tfr_cxt->u4_y_inc;
- ps_tfr_cxt->pu1_mb_u += ps_tfr_cxt->u4_uv_inc;
- ps_tfr_cxt->pu1_mb_v += ps_tfr_cxt->u4_uv_inc;
-
- i2_mb_x = 0;
- i2_mb_y--;
- u1_first_row = 0;
- }
-
}
}
@@ -1355,12 +1276,12 @@
u4_recWidth = ps_dec->u2_frm_wd_y << u1_mb_field_decoding_flag;
u4_recwidth_cr = ps_dec->u2_frm_wd_uv << u1_mb_field_decoding_flag;
- pu1_mb_last_row = ps_dec->s_tran_addrecon.pu1_dest_y
+ pu1_mb_last_row = ps_dec->ps_frame_buf_ip_recon->pu1_dest_y
+ (u4_recWidth * (MB_SIZE - 1));
pu1_mb_last_row += MB_SIZE * nmb_index;
MEMCPY_16BYTES(ps_dec->pu1_cur_y_intra_pred_line, pu1_mb_last_row);
- pu1_mb_last_row = ps_dec->s_tran_addrecon.pu1_dest_u
+ pu1_mb_last_row = ps_dec->ps_frame_buf_ip_recon->pu1_dest_u
+ (u4_recwidth_cr * (BLK8x8SIZE - 1));
pu1_mb_last_row += BLK8x8SIZE * nmb_index * YUV420SP_FACTOR;
@@ -1413,227 +1334,20 @@
}
-void ih264d_deblock_mb_level(dec_struct_t *ps_dec,
- dec_mb_info_t *ps_cur_mb_info,
- UWORD32 nmb_index)
-{
- UWORD8 u1_deb_mode;
- deblk_mb_t *ps_cur_mb, *ps_left_mb, *ps_top_mb;
- UWORD16 u2_image_wd_mb = ps_dec->u2_frm_wd_in_mbs;
- UWORD16 u2_image_ht_mb = ps_dec->u2_frm_ht_in_mbs;
- WORD8 i1_cb_qp_idx_ofst = ps_dec->ps_cur_pps->i1_chroma_qp_index_offset;
- WORD8 i1_cr_qp_idx_ofst =
- ps_dec->ps_cur_pps->i1_second_chroma_qp_index_offset;
- WORD32 i4_wd_y, i4_wd_uv;
- tfr_ctxt_t * ps_tfr_cxt = &ps_dec->s_tran_addrecon;
- WORD16 i2_mb_y, i2_mb_x;
- UWORD8 u1_mb_field_decoding_flag = ps_cur_mb_info->u1_mb_field_decodingflag;
- deblk_mb_t *ps_deblk_cur_mb;
-
- /*Copy the last row of every MB ,to be used for intra prediction f next row*/
- {
- UWORD8 *pu1_mb_last_row, u1_mb_field_decoding_flag;
- UWORD32 u4_recWidth, u4_recwidth_cr;
-
- u1_mb_field_decoding_flag = ps_cur_mb_info->u1_mb_field_decodingflag;
-
- u4_recWidth = ps_dec->u2_frm_wd_y << u1_mb_field_decoding_flag;
- u4_recwidth_cr = ps_dec->u2_frm_wd_uv << u1_mb_field_decoding_flag;
-
- pu1_mb_last_row = ps_dec->s_tran_addrecon.pu1_dest_y
- + (u4_recWidth * (MB_SIZE - 1));
- pu1_mb_last_row += MB_SIZE * nmb_index;
- MEMCPY_16BYTES(ps_dec->pu1_cur_y_intra_pred_line, pu1_mb_last_row);
-
- pu1_mb_last_row = ps_dec->s_tran_addrecon.pu1_dest_u
- + (u4_recwidth_cr * (BLK8x8SIZE - 1));
- pu1_mb_last_row += BLK8x8SIZE * nmb_index * YUV420SP_FACTOR;
-
- MEMCPY_16BYTES(ps_dec->pu1_cur_u_intra_pred_line, pu1_mb_last_row);
-
- ps_dec->pu1_cur_y_intra_pred_line =
- ps_dec->pu1_cur_y_intra_pred_line_base
- + (MB_SIZE
- * (ps_cur_mb_info->u2_mbx
- + 1));
- ps_dec->pu1_cur_u_intra_pred_line =
- ps_dec->pu1_cur_u_intra_pred_line_base
- + (BLK8x8SIZE
- * (ps_cur_mb_info->u2_mbx
- + 1))
- * YUV420SP_FACTOR;
- ps_dec->pu1_cur_v_intra_pred_line =
- ps_dec->pu1_cur_v_intra_pred_line_base
- + (BLK8x8SIZE
- * (ps_cur_mb_info->u2_mbx
- + 1));
- }
-
- i2_mb_y = ps_cur_mb_info->u2_mby;
- i4_wd_y = ps_dec->u2_frm_wd_y << u1_mb_field_decoding_flag;
- i4_wd_uv = ps_dec->u2_frm_wd_uv << u1_mb_field_decoding_flag;
-
- if(ps_cur_mb_info->u2_mbx != 0)
- {
- /*Deblock the previous MB*/
- deblk_mb_t *ps_deblk_cur_mb;
-
- if(ps_dec->u1_separate_parse == 1)
- {
- ps_deblk_cur_mb = ps_dec->ps_deblk_mbn_dec_thrd + nmb_index - 1;
-
- }
- else
- {
-
- if(nmb_index == 0)
- /*if first mb in Nmb ,pick up the context from previous Nmb data*/
- ps_deblk_cur_mb = ps_dec->ps_deblk_mbn_prev
- + ps_dec->u4_num_mbs_prev_nmb - 1;
- else
- ps_deblk_cur_mb = ps_dec->ps_deblk_mbn + nmb_index - 1;
- }
-
- ps_cur_mb = ps_deblk_cur_mb;
-
- u1_deb_mode = ps_cur_mb->u1_deblocking_mode;
-
- i2_mb_x = ps_cur_mb_info->u2_mbx - 1;
-
- if(ps_dec->u4_app_disable_deblk_frm == 1)
- u1_deb_mode = MB_DISABLE_FILTERING;
- if(!(u1_deb_mode & MB_DISABLE_FILTERING))
- {
-
- if(i2_mb_x)
- {
- ps_left_mb = ps_cur_mb - 1;
-
- }
- else
- {
- ps_left_mb = NULL;
-
- }
- if(i2_mb_y)
- {
- ps_top_mb = ps_cur_mb - (u2_image_wd_mb);
- }
- else
- {
- ps_top_mb = NULL;
- }
-
- if(u1_deb_mode & MB_DISABLE_LEFT_EDGE)
- ps_left_mb = NULL;
- if(u1_deb_mode & MB_DISABLE_TOP_EDGE)
- ps_top_mb = NULL;
-
- ih264d_deblock_mb_nonmbaff(ps_dec, ps_tfr_cxt, i1_cb_qp_idx_ofst,
- i1_cr_qp_idx_ofst, ps_cur_mb, i4_wd_y,
- i4_wd_uv, ps_top_mb, ps_left_mb);
- }
-
- ps_tfr_cxt->pu1_mb_y += MB_SIZE;
- ps_tfr_cxt->pu1_mb_u += (MB_SIZE >> 1) * YUV420SP_FACTOR;
- ps_tfr_cxt->pu1_mb_v += (MB_SIZE >> 1);
- }
-
- if(ps_cur_mb_info->u2_mbx == (ps_dec->u2_frm_wd_in_mbs - 1))
- {
- /*Deblock the previous MB*/
- deblk_mb_t *ps_deblk_cur_mb;
- UWORD8 *pu1_temp;
-
- if(ps_dec->u1_separate_parse == 1)
- ps_deblk_cur_mb = ps_dec->ps_deblk_mbn_dec_thrd + nmb_index;
- else
- ps_deblk_cur_mb = ps_dec->ps_deblk_mbn + nmb_index;
-
- i2_mb_x = ps_cur_mb_info->u2_mbx;
-
- ps_cur_mb = ps_deblk_cur_mb;
- u1_deb_mode = ps_cur_mb->u1_deblocking_mode;
-
- if(ps_dec->u4_app_disable_deblk_frm == 1)
- u1_deb_mode = MB_DISABLE_FILTERING;
-
- if(!(u1_deb_mode & MB_DISABLE_FILTERING))
- {
-
- if(i2_mb_x)
- {
- ps_left_mb = ps_cur_mb - 1;
-
- }
- else
- {
- ps_left_mb = NULL;
-
- }
- if(i2_mb_y)
- {
- ps_top_mb = ps_cur_mb - (u2_image_wd_mb);
- }
- else
- {
- ps_top_mb = NULL;
- }
-
- if(u1_deb_mode & MB_DISABLE_LEFT_EDGE)
- ps_left_mb = NULL;
- if(u1_deb_mode & MB_DISABLE_TOP_EDGE)
- ps_top_mb = NULL;
-
- ih264d_deblock_mb_nonmbaff(ps_dec, ps_tfr_cxt, i1_cb_qp_idx_ofst,
- i1_cr_qp_idx_ofst, ps_cur_mb, i4_wd_y,
- i4_wd_uv, ps_top_mb, ps_left_mb);
- }
-
- ps_dec->pu1_cur_y_intra_pred_line =
- ps_dec->pu1_cur_y_intra_pred_line_base;
- ps_dec->pu1_cur_u_intra_pred_line =
- ps_dec->pu1_cur_u_intra_pred_line_base;
- ps_dec->pu1_cur_v_intra_pred_line =
- ps_dec->pu1_cur_v_intra_pred_line_base;
-
- /*swap current and previous rows*/
- pu1_temp = ps_dec->pu1_cur_y_intra_pred_line;
- ps_dec->pu1_cur_y_intra_pred_line = ps_dec->pu1_prev_y_intra_pred_line;
- ps_dec->pu1_prev_y_intra_pred_line = pu1_temp;
-
- pu1_temp = ps_dec->pu1_cur_u_intra_pred_line;
- ps_dec->pu1_cur_u_intra_pred_line = ps_dec->pu1_prev_u_intra_pred_line;
- ps_dec->pu1_prev_u_intra_pred_line = pu1_temp;
-
- pu1_temp = ps_dec->pu1_cur_v_intra_pred_line;
- ps_dec->pu1_cur_v_intra_pred_line = ps_dec->pu1_prev_v_intra_pred_line;
- ps_dec->pu1_prev_v_intra_pred_line = pu1_temp;
-
- ps_dec->pu1_cur_y_intra_pred_line_base =
- ps_dec->pu1_cur_y_intra_pred_line;
- ps_dec->pu1_cur_u_intra_pred_line_base =
- ps_dec->pu1_cur_u_intra_pred_line;
- ps_dec->pu1_cur_v_intra_pred_line_base =
- ps_dec->pu1_cur_v_intra_pred_line;
-
- }
-
-}
void ih264d_filter_boundary_left_mbaff(dec_struct_t *ps_dec,
tfr_ctxt_t * ps_tfr_cxt,
WORD8 i1_cb_qp_idx_ofst,
WORD8 i1_cr_qp_idx_ofst,
deblk_mb_t * ps_cur_mb,
- UWORD16 i4_strd_y,
- UWORD16 i4_strd_uv,
+ WORD32 i4_strd_y,
+ WORD32 i4_strd_uv,
deblk_mb_t * ps_left_mb, /* Neighbouring MB parameters */
UWORD32 pu4_bs_tab[], /* pointer to the BsTable array */
UWORD8 u1_cur_fld)
{
UWORD8 *pu1_y, *pu1_u, *pu1_v;
- UWORD8 uc_tmp, qp_avg, uc_QPav_Y;
+ UWORD8 uc_tmp, qp_avg;
WORD32 alpha_u = 0, beta_u = 0, alpha_v = 0, beta_v = 0;
WORD32 alpha_y = 0, beta_y = 0;
@@ -1657,19 +1371,19 @@
/* LUMA values */
/* Deblock rounding change */
uc_tmp = (UWORD8)((ps_left_mb->u1_mb_qp + ps_cur_mb->u1_mb_qp + 1) >> 1);
- uc_QPav_Y = uc_tmp;
- idx_a_y = uc_QPav_Y + ofst_a;
+ qp_avg = uc_tmp;
+ idx_a_y = qp_avg + ofst_a;
alpha_y = gau1_ih264d_alpha_table[12 + idx_a_y];
- idx_b_y = uc_QPav_Y + ofst_b;
+ idx_b_y = qp_avg + ofst_b;
beta_y = gau1_ih264d_beta_table[12 + idx_b_y];
/* Chroma cb values */
{
- UWORD8 u1_mb_qp1, u1_mb_qp2;
- u1_mb_qp1 = (ps_left_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
- u1_mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
- qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + u1_mb_qp1]
- + gau1_ih264d_qp_scale_cr[12 + u1_mb_qp2] + 1) >> 1);
+ WORD32 mb_qp1, mb_qp2;
+ mb_qp1 = (ps_left_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
+ mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
+ qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
+ + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
}
idx_a_u = qp_avg + ofst_a;
alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
@@ -1678,11 +1392,11 @@
/* Chroma cr values */
{
- UWORD8 u1_mb_qp1, u1_mb_qp2;
- u1_mb_qp1 = (ps_left_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
- u1_mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
- qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + u1_mb_qp1]
- + gau1_ih264d_qp_scale_cr[12 + u1_mb_qp2] + 1) >> 1);
+ WORD32 mb_qp1, mb_qp2;
+ mb_qp1 = (ps_left_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
+ mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
+ qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
+ + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
}
idx_a_v = qp_avg + ofst_a;
alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
@@ -1743,12 +1457,9 @@
if(u4_bs_val)
{
- pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_y];
- pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_u];
- pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_v];
+ pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y];
+ pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u];
+ pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v];
ps_dec->pf_deblk_luma_vert_bslt4_mbaff(pu1_y, i4_strd_y,
alpha_y, beta_y,
u4_bs_val,
@@ -1773,19 +1484,19 @@
}
uc_tmp = (((ps_left_mb + 1)->u1_mb_qp + ps_cur_mb->u1_mb_qp + 1) >> 1);
- uc_QPav_Y = uc_tmp;
- idx_a_y = uc_QPav_Y + ofst_a;
+ qp_avg = uc_tmp;
+ idx_a_y = qp_avg + ofst_a;
alpha_y = gau1_ih264d_alpha_table[12 + idx_a_y];
- idx_b_y = uc_QPav_Y + ofst_b;
+ idx_b_y = qp_avg + ofst_b;
beta_y = gau1_ih264d_beta_table[12 + idx_b_y];
u4_bs_val = pu4_bs_tab[9];
{
- UWORD8 u1_mb_qp1, u1_mb_qp2;
- u1_mb_qp1 = ((ps_left_mb + 1)->u1_mb_qp + i1_cb_qp_idx_ofst);
- u1_mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
- qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + u1_mb_qp1]
- + gau1_ih264d_qp_scale_cr[12 + u1_mb_qp2] + 1) >> 1);
+ WORD32 mb_qp1, mb_qp2;
+ mb_qp1 = ((ps_left_mb + 1)->u1_mb_qp + i1_cb_qp_idx_ofst);
+ mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
+ qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
+ + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
}
idx_a_u = qp_avg + ofst_a;
alpha_u = gau1_ih264d_alpha_table[12 + idx_a_u];
@@ -1793,11 +1504,11 @@
beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
u4_bs_val = pu4_bs_tab[9];
{
- UWORD8 u1_mb_qp1, u1_mb_qp2;
- u1_mb_qp1 = ((ps_left_mb + 1)->u1_mb_qp + i1_cr_qp_idx_ofst);
- u1_mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
- qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + u1_mb_qp1]
- + gau1_ih264d_qp_scale_cr[12 + u1_mb_qp2] + 1) >> 1);
+ WORD32 mb_qp1, mb_qp2;
+ mb_qp1 = ((ps_left_mb + 1)->u1_mb_qp + i1_cr_qp_idx_ofst);
+ mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
+ qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
+ + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
}
idx_a_v = qp_avg + ofst_a;
alpha_v = gau1_ih264d_alpha_table[12 + idx_a_v];
@@ -1817,12 +1528,9 @@
if(u4_bs_val)
{
- pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_y];
- pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_u];
- pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12
- + idx_a_v];
+ pu1_cliptab_y = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_y];
+ pu1_cliptab_u = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_u];
+ pu1_cliptab_v = (UWORD8 *)&gau1_ih264d_clip_table[12 + idx_a_v];
ps_dec->pf_deblk_luma_vert_bslt4_mbaff(pu1_y, i4_strd_y,
alpha_y, beta_y,
@@ -1846,8 +1554,8 @@
WORD8 i1_cb_qp_idx_ofst,
WORD8 i1_cr_qp_idx_ofst,
deblk_mb_t * ps_cur_mb,
- UWORD16 i4_strd_y,
- UWORD16 i4_strd_uv,
+ WORD32 i4_strd_y,
+ WORD32 i4_strd_uv,
deblk_mb_t * ps_top_mb,
UWORD32 u4_bs)
{
@@ -1855,7 +1563,6 @@
WORD32 alpha_u = 0, beta_u = 0, alpha_v = 0, beta_v = 0;
WORD32 alpha_y = 0, beta_y = 0;
WORD32 qp_avg;
- WORD32 uc_QPav_Y;
WORD32 idx_b_u, idx_a_u, idx_b_v, idx_a_v;
WORD32 idx_b_y, idx_a_y;
UWORD16 uc_tmp;
@@ -1867,20 +1574,20 @@
/* LUMA values */
/* Deblock rounding change */
uc_tmp = ((ps_top_mb->u1_mb_qp + ps_cur_mb->u1_mb_qp + 1) >> 1);
- uc_QPav_Y = (UWORD8)uc_tmp;
- idx_a_y = uc_QPav_Y + ofst_a;
+ qp_avg = (UWORD8)uc_tmp;
+ idx_a_y = qp_avg + ofst_a;
alpha_y = gau1_ih264d_alpha_table[12 + idx_a_y];
- idx_b_y = uc_QPav_Y + ofst_b;
+ idx_b_y = qp_avg + ofst_b;
beta_y = gau1_ih264d_beta_table[12 + idx_b_y];
pu1_y = ps_tfr_cxt->pu1_mb_y;
/* CHROMA cb values */
{
- UWORD8 u1_mb_qp1, u1_mb_qp2;
- u1_mb_qp1 = (ps_top_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
- u1_mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
- qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + u1_mb_qp1]
- + gau1_ih264d_qp_scale_cr[12 + u1_mb_qp2] + 1) >> 1);
+ WORD32 mb_qp1, mb_qp2;
+ mb_qp1 = (ps_top_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
+ mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cb_qp_idx_ofst);
+ qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
+ + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
}
idx_a_u = qp_avg + ofst_a;
@@ -1889,11 +1596,11 @@
beta_u = gau1_ih264d_beta_table[12 + idx_b_u];
/* CHROMA cr values */
{
- UWORD8 u1_mb_qp1, u1_mb_qp2;
- u1_mb_qp1 = (ps_top_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
- u1_mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
- qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + u1_mb_qp1]
- + gau1_ih264d_qp_scale_cr[12 + u1_mb_qp2] + 1) >> 1);
+ WORD32 mb_qp1, mb_qp2;
+ mb_qp1 = (ps_top_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
+ mb_qp2 = (ps_cur_mb->u1_mb_qp + i1_cr_qp_idx_ofst);
+ qp_avg = (UWORD8)((gau1_ih264d_qp_scale_cr[12 + mb_qp1]
+ + gau1_ih264d_qp_scale_cr[12 + mb_qp2] + 1) >> 1);
}
idx_a_v = qp_avg + ofst_a;