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;