18d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/******************************************************************************
28d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
38d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Copyright (C) 2015 The Android Open Source Project
48d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
58d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Licensed under the Apache License, Version 2.0 (the "License");
68d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * you may not use this file except in compliance with the License.
78d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * You may obtain a copy of the License at:
88d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
98d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * http://www.apache.org/licenses/LICENSE-2.0
108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Unless required by applicable law or agreed to in writing, software
128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * distributed under the License is distributed on an "AS IS" BASIS,
138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * See the License for the specific language governing permissions and
158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * limitations under the License.
168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *****************************************************************************
188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*!
228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \file ih264d_thread_compute_bs.c
248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief
268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    Contains routines that for multi-thread decoder
278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Detailed_description
298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \date
318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *    20/02/2012
328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \author  ZR
348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S **************************************************************************
358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */
368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_error_handler.h"
378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_debug.h"
388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <string.h>
398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h"
408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_debug.h"
418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h"
428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_structs.h"
438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h"
448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_mb_utils.h"
458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_thread_compute_bs.h"
478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ithread.h"
488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_deblocking.h"
498ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen#include "ih264d_process_pslice.h"
508ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen#include "ih264d_process_intra_mb.h"
518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_mb_utils.h"
528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h"
538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_format_conv.h"
548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h"
558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD16 ih264d_update_csbp_8x8(UWORD16 u2_luma_csbp);
568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs2_horz_vert(UWORD32 *pu4_bs, /* Base pointer of BS table */
578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                               WORD32 u4_left_mb_csbp, /* csbp of left mb */
588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                               WORD32 u4_top_mb_csbp, /* csbp of top mb */
598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                               WORD32 u4_cur_mb_csbp, /* csbp of current mb */
608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                               const UWORD32 *pu4_packed_bs2, const UWORD16 *pu2_4x4_v2h_reorder);
618ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissenvoid ih264d_copy_intra_pred_line(dec_struct_t *ps_dec,
628ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                 dec_mb_info_t *ps_cur_mb_info,
638ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                 UWORD32 nmb_index);
648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define BS_MB_GROUP 4
668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define DEBLK_MB_GROUP 1
678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define FORMAT_CONV_MB_GROUP 4
688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Function Name : ih264d_compute_bs_non_mbaff_thread                                           */
728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Description   : This function computes the pointers of left,top & current*/
748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                : Nnz, MvPred & deblk_mb_t and supplies to FillBs function for*/
758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                : Boundary Strength Calculation .this function is used     */
768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                : BS being calculated in separate thread                   */
778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Inputs        : pointer to decoder context,cur_mb_info,u4_mb_num            */
788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Processing    :                                                          */
798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Outputs       : Produces the Boundary Strength for Current Mb            */
818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Returns       : None                                                     */
828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*  Revision History:                                                        */
848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                                                                           */
858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*                      ITTIAM                                               */
878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_compute_bs_non_mbaff_thread(dec_struct_t * ps_dec,
908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        dec_mb_info_t * ps_cur_mb_info,
918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        UWORD32 u4_mb_num)
928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Mvpred and Nnz for top and Courrent */
948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    mv_pred_t *ps_cur_mv_pred, *ps_top_mv_pred = NULL, *ps_left_mv_pred;
958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* deblk_mb_t Params */
968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    deblk_mb_t *ps_cur_mb_params; /*< Parameters of current MacroBlock */
978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    deblkmb_neighbour_t *ps_deblk_top_mb;
988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Reference Index to POC mapping*/
1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    void ** apv_map_ref_idx_to_poc;
1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_leftmbtype;
1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD16 u2_left_csbp, u2_top_csbp, u2_cur_csbp;
1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Set of flags */
1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_cur_mb_intra, u1_top_mb_typ, u4_cur_mb_fld;
1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u1_cur_mb_type;
1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 * pu4_bs_table;
1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Neighbour availability */
1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Initialization */
1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    const UWORD32 u2_mbx = ps_cur_mb_info->u2_mbx;
1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    const UWORD32 u2_mby = ps_cur_mb_info->u2_mby;
1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    const UWORD32 u1_pingpong = u2_mbx & 0x01;
1158ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
1168ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    PROFILE_DISABLE_BOUNDARY_STRENGTH()
1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_deblk_top_mb = ps_dec->ps_deblk_top_mb + u2_mbx;
1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Pointer assignment for Current DeblkMB, Current Mv Pred  */
1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_mb_params = ps_dec->ps_deblk_pic + u4_mb_num;
1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_mv_pred = ps_dec->s_cur_pic.ps_mv + (u4_mb_num << 4);
1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    apv_map_ref_idx_to_poc =
1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    (void **)ps_dec->ps_computebs_cur_slice->ppv_map_ref_idx_to_poc
1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    + 1;
1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u1_cur_mb_type = ps_cur_mb_params->u1_mb_type;
1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u1_top_mb_typ = ps_deblk_top_mb->u1_mb_type;
1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_deblk_top_mb->u1_mb_type = u1_cur_mb_type;
1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_cur_mb_params->u1_topmb_qp = ps_deblk_top_mb->u1_mb_qp;
1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_deblk_top_mb->u1_mb_qp = ps_cur_mb_params->u1_mb_qp;
1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_cur_mb_params->u1_left_mb_qp = ps_dec->deblk_left_mb[1].u1_mb_qp;
1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->deblk_left_mb[1].u1_mb_qp = ps_cur_mb_params->u1_mb_qp;
1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* if no deblocking required for current Mb then continue */
1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Check next Mbs   in Mb group                           */
1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_cur_mb_params->u1_deblocking_mode & MB_DISABLE_FILTERING)
1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        void ** pu4_map_ref_idx_to_poc_l1 = apv_map_ref_idx_to_poc +
1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        POC_LIST_L0_TO_L1_DIFF;
1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Store Parameter for Top MvPred refernce frame Address */
1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            void ** ppv_top_mv_pred_addr = ps_cur_mb_info->ps_curmb->u4_pic_addrress;
1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD8 * p1_refTop0 = (ps_cur_mv_pred + 12)->i1_ref_frame;
1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD8 * p1_refTop1 = (ps_cur_mv_pred + 14)->i1_ref_frame;
1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Store Left addresses for Next Mb   */
1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            void ** ppv_left_mv_pred_addr =
1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->ps_left_mvpred_addr[!u1_pingpong][1].u4_add;
1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD8 * p1_refleft0 = (ps_cur_mv_pred + 3)->i1_ref_frame;
1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_top_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refTop0[0]];
1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_top_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refTop0[1]];
1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_left_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]];
1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_top_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]];
1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_left_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]];
1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_top_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]];
1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_left_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refleft0[0]];
1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_left_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refleft0[1]];
1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            //}
1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Storing the leftMbtype for next Mb */
1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type;
1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        return;
1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Flag for extra left Edge */
1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_cur_mb_params->u1_single_call = 1;
1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Update the Left deblk_mb_t and Left MvPred Parameters           */
1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!u2_mbx)
1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_leftmbtype = 0;
1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Initialize the ps_left_mv_pred with Junk but Valid Location */
1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* to avoid invalid memory access                           */
1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* this is read only pointer                                */
1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_left_mv_pred = ps_cur_mv_pred + 3;
1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u4_leftmbtype = ps_dec->deblk_left_mb[1].u1_mb_type;
1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* Come to Left Most Edge of the MB */
1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_left_mv_pred = ps_cur_mv_pred - (1 << 4) + 3;
1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(!u2_mby)
1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        u1_top_mb_typ = 0;
1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* MvPred Pointer Calculation */
2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* CHANGED CODE */
2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_top_mv_pred = ps_cur_mv_pred - (ps_dec->u2_frm_wd_in_mbs << 4) + 12;
2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_cur_mb_intra = u1_cur_mb_type & D_INTRA_MB;
2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_cur_mb_fld = !!(u1_cur_mb_type & D_FLD_MB);
2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Compute BS function */
2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    pu4_bs_table = ps_cur_mb_params->u4_bs_table;
2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u2_cur_csbp = ps_cur_mb_info->ps_curmb->u2_luma_csbp;
2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u2_left_csbp = ps_cur_mb_info->ps_left_mb->u2_luma_csbp;
2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u2_top_csbp = ps_cur_mb_info->ps_top_mb->u2_luma_csbp;
2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Compute BS function */
2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_dec->ps_cur_sps->u1_profile_idc == HIGH_PROFILE_IDC)
2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_cur_mb_info->u1_tran_form8x8 == 1)
2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u2_cur_csbp = ih264d_update_csbp_8x8(
2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_cur_mb_info->ps_curmb->u2_luma_csbp);
2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_cur_mb_info->ps_left_mb->u1_tran_form8x8 == 1)
2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u2_left_csbp = ih264d_update_csbp_8x8(
2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_cur_mb_info->ps_left_mb->u2_luma_csbp);
2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_cur_mb_info->ps_top_mb->u1_tran_form8x8 == 1)
2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            u2_top_csbp = ih264d_update_csbp_8x8(
2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_cur_mb_info->ps_top_mb->u2_luma_csbp);
2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(u4_cur_mb_intra)
2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_bs_table[4] = 0x04040404;
2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_bs_table[0] = u4_cur_mb_fld ? 0x03030303 : 0x04040404;
2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_bs_table[1] = 0x03030303;
2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_bs_table[2] = 0x03030303;
2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_bs_table[3] = 0x03030303;
2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_bs_table[5] = 0x03030303;
2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_bs_table[6] = 0x03030303;
2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_bs_table[7] = 0x03030303;
2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    else
2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD32 u4_is_non16x16 = !!(u1_cur_mb_type & D_PRED_NON_16x16);
2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        UWORD32 u4_is_b =
2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (ps_dec->ps_computebs_cur_slice->slice_type == B_SLICE);
2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ih264d_fill_bs2_horz_vert(pu4_bs_table, u2_left_csbp, u2_top_csbp,
2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  u2_cur_csbp, gau4_ih264d_packed_bs2,
2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                  gau2_ih264d_4x4_v2h_reorder);
2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u4_leftmbtype & D_INTRA_MB)
2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu4_bs_table[4] = 0x04040404;
2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(u1_top_mb_typ & D_INTRA_MB)
2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            pu4_bs_table[0] = u4_cur_mb_fld ? 0x03030303 : 0x04040404;
2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_dec->pf_fill_bs1[u4_is_b][u4_is_non16x16](
2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_cur_mv_pred, ps_top_mv_pred, apv_map_ref_idx_to_poc,
2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        pu4_bs_table, ps_left_mv_pred,
2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        &(ps_dec->ps_left_mvpred_addr[u1_pingpong][1]),
2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        ps_cur_mb_info->ps_top_mb->u4_pic_addrress,
2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                        (4 >> u4_cur_mb_fld));
2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        void ** pu4_map_ref_idx_to_poc_l1 = apv_map_ref_idx_to_poc +
2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        POC_LIST_L0_TO_L1_DIFF;
2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Store Parameter for Top MvPred refernce frame Address */
2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            void ** ppv_top_mv_pred_addr = ps_cur_mb_info->ps_curmb->u4_pic_addrress;
2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD8 * p1_refTop0 = (ps_cur_mv_pred + 12)->i1_ref_frame;
2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD8 * p1_refTop1 = (ps_cur_mv_pred + 14)->i1_ref_frame;
2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Store Left addresses for Next Mb   */
2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            void ** ppv_left_mv_pred_addr =
2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                            ps_dec->ps_left_mvpred_addr[!u1_pingpong][1].u4_add;
2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            WORD8 * p1_refleft0 = (ps_cur_mv_pred + 3)->i1_ref_frame;
2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_top_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refTop0[0]];
2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_top_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refTop0[1]];
2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_left_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]];
2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_top_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]];
2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_left_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]];
2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_top_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]];
2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_left_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refleft0[0]];
2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ppv_left_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refleft0[1]];
3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* Storing the leftMbtype for next Mb */
3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type;
3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* For transform 8x8 disable deblocking of the intrernal edges of a 8x8 block */
3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    if(ps_cur_mb_info->u1_tran_form8x8)
3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_bs_table[1] = 0;
3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_bs_table[3] = 0;
3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_bs_table[5] = 0;
3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        pu4_bs_table[7] = 0;
3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3178ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_check_mb_map_deblk(dec_struct_t *ps_dec,
3198ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                    UWORD32 deblk_mb_grp,
3208ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                    tfr_ctxt_t *ps_tfr_cxt,
3218ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                    UWORD32 u4_check_mb_map)
3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 i = 0;
3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_mb_num;
3258ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD32 u4_cond;
3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    volatile UWORD8 *mb_map = ps_dec->pu1_recon_mb_map;
3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    const WORD32 i4_cb_qp_idx_ofst =
3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->ps_cur_pps->i1_chroma_qp_index_offset;
3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    const WORD32 i4_cr_qp_idx_ofst =
3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->ps_cur_pps->i1_second_chroma_qp_index_offset;
3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_wd_y, u4_wd_uv;
3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_field_pic_flag = ps_dec->ps_cur_slice->u1_field_pic_flag;
3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3358ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_wd_y = ps_dec->u2_frm_wd_y << u1_field_pic_flag;
3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    u4_wd_uv = ps_dec->u2_frm_wd_uv << u1_field_pic_flag;
3388ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    for(i = 0; i < deblk_mb_grp; i++)
3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3428ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        WORD32 nop_cnt = 8*128;
3438ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        while(u4_check_mb_map == 1)
3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
3458ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            u4_mb_num = ps_dec->u4_cur_deblk_mb_num;
3468ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            /*we wait for the right mb because of intra pred data dependency*/
3478ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            u4_mb_num = MIN(u4_mb_num + 1, (ps_dec->u4_deblk_mb_y + 1) * ps_dec->u2_frm_wd_in_mbs - 1);
3488ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            CHECK_MB_MAP_BYTE(u4_mb_num, mb_map, u4_cond);
3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3508ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            if(u4_cond)
3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
3528ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                break;
3538ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            }
3548ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            else
3558ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            {
3568ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                if(nop_cnt > 0)
3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
3588ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    nop_cnt -= 128;
3598ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    NOP(128);
3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
3638ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    nop_cnt = 8*128;
3648ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    ithread_yield();
3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
3678ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3698ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ih264d_deblock_mb_nonmbaff(ps_dec, ps_tfr_cxt,
3708ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                   i4_cb_qp_idx_ofst, i4_cr_qp_idx_ofst,
3718ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                    u4_wd_y, u4_wd_uv);
3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
3788ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissenvoid ih264d_recon_deblk_slice(dec_struct_t *ps_dec, tfr_ctxt_t *ps_tfr_cxt)
3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
3808ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    dec_mb_info_t *p_cur_mb;
3818ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD32 u4_max_addr;
3828ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    WORD32 i;
3838ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD32 u1_mb_aff;
3848ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD16 u2_slice_num;
3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_mb_num;
3868ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD16 u2_first_mb_in_slice;
3878ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD32 i2_pic_wdin_mbs;
3888ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD8 u1_num_mbsleft, u1_end_of_row;
3898ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD8 u1_mbaff;
3908ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD16 i16_mb_x, i16_mb_y;
3918ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    WORD32 j;
3928ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    dec_mb_info_t * ps_cur_mb_info;
3938ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD32 u1_slice_type, u1_B;
3948ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    WORD32 u1_skip_th;
3958ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD32 u1_ipcm_th;
3968ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    WORD32 ret;
3978ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    tfr_ctxt_t *ps_trns_addr;
3988ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD32 u4_frame_stride;
3998ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD32 x_offset, y_offset;
4008ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD32 u4_slice_end;
4018ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    pad_mgr_t *ps_pad_mgr ;
4028ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
4038ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    /*check for mb map of first mb in slice to ensure slice header is parsed*/
4048ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    while(1)
4058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
4068ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        UWORD32 u4_mb_num = ps_dec->cur_recon_mb_num;
4078ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        UWORD32 u4_cond = 0;
4088ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        WORD32 nop_cnt = 8*128;
4098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4108ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        CHECK_MB_MAP_BYTE(u4_mb_num, ps_dec->pu1_recon_mb_map, u4_cond);
4118ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        if(u4_cond)
4128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
4138ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            break;
4148ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
4158ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        else
4168ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
4178ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            if(nop_cnt > 0)
4188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
4198ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                nop_cnt -= 128;
4208ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                NOP(128);
4218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
4228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
4238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
4248ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                if(ps_dec->u4_output_present &&
4258ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                   (ps_dec->u4_fmt_conv_cur_row < ps_dec->s_disp_frame_info.u4_y_ht))
4268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                {
4278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->u4_fmt_conv_num_rows =
4288ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                    MIN(FMT_CONV_NUM_ROWS,
4298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                        (ps_dec->s_disp_frame_info.u4_y_ht
4308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                                        - ps_dec->u4_fmt_conv_cur_row));
4318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ih264d_format_convert(ps_dec, &(ps_dec->s_disp_op),
4328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ps_dec->u4_fmt_conv_cur_row,
4338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                          ps_dec->u4_fmt_conv_num_rows);
4348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    ps_dec->u4_fmt_conv_cur_row += ps_dec->u4_fmt_conv_num_rows;
4358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                }
4368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                else
4378ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                {
4388ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    nop_cnt = 8*128;
4398ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    ithread_yield();
4408ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                }
4418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
4428ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            DEBUG_THREADS_PRINTF("waiting for mb mapcur_dec_mb_num = %d,ps_dec->u2_cur_mb_addr  = %d\n",u2_cur_dec_mb_num,
4438ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                            ps_dec->u2_cur_mb_addr);
4448ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
4458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
4468ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    }
4478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4488ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    u4_max_addr = ps_dec->ps_cur_sps->u2_max_mb_addr;
4498ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    u1_mb_aff = ps_dec->ps_cur_slice->u1_mbaff_frame_flag;
4508ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    u2_first_mb_in_slice = ps_dec->ps_computebs_cur_slice->u4_first_mb_in_slice;
4518ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    i2_pic_wdin_mbs = ps_dec->u2_frm_wd_in_mbs;
4528ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    u1_mbaff = ps_dec->ps_cur_slice->u1_mbaff_frame_flag;
4538ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_pad_mgr = &ps_dec->s_pad_mgr;
4548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4558ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if(u2_first_mb_in_slice == 0)
4568ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ih264d_init_deblk_tfr_ctxt(ps_dec, ps_pad_mgr, ps_tfr_cxt,
4578ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                               ps_dec->u2_frm_wd_in_mbs, 0);
4588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4608ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    i16_mb_x = MOD(u2_first_mb_in_slice, i2_pic_wdin_mbs);
4618ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    i16_mb_y = DIV(u2_first_mb_in_slice, i2_pic_wdin_mbs);
4628ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    i16_mb_y <<= u1_mbaff;
4638ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->i2_recon_thread_mb_y = i16_mb_y;
4648ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    u4_frame_stride = ps_dec->u2_frm_wd_y
4658ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    << ps_dec->ps_cur_slice->u1_field_pic_flag;
4668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4678ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    x_offset = i16_mb_x << 4;
4688ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    y_offset = (i16_mb_y * u4_frame_stride) << 4;
4698ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_trns_addr = &ps_dec->s_tran_iprecon;
4708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4718ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_trns_addr->pu1_dest_y = ps_dec->s_cur_pic.pu1_buf1 + x_offset + y_offset;
4728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4738ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    u4_frame_stride = ps_dec->u2_frm_wd_uv
4748ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    << ps_dec->ps_cur_slice->u1_field_pic_flag;
4758ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    x_offset >>= 1;
4768ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    y_offset = (i16_mb_y * u4_frame_stride) << 3;
4778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4788ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    x_offset *= YUV420SP_FACTOR;
4798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4808ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_trns_addr->pu1_dest_u = ps_dec->s_cur_pic.pu1_buf2 + x_offset + y_offset;
4818ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_trns_addr->pu1_dest_v = ps_dec->s_cur_pic.pu1_buf3 + x_offset + y_offset;
4828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4838ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_trns_addr->pu1_mb_y = ps_trns_addr->pu1_dest_y;
4848ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_trns_addr->pu1_mb_u = ps_trns_addr->pu1_dest_u;
4858ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_trns_addr->pu1_mb_v = ps_trns_addr->pu1_dest_v;
4868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4878ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ps_dec->cur_recon_mb_num = u2_first_mb_in_slice << u1_mbaff;
4888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4898ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    u4_slice_end = 0;
4908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u4_bs_cur_slice_num_mbs = 0;
4918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ps_dec->u4_cur_bs_mb_num =
4928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                    (ps_dec->ps_computebs_cur_slice->u4_first_mb_in_slice)
4938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                    << u1_mb_aff;
4948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4958ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if(ps_dec->i1_recon_in_thread3_flag)
4968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
4978ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ps_dec->pv_proc_tu_coeff_data =
4988ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                (void *) ps_dec->ps_computebs_cur_slice->pv_tu_coeff_data_start;
4998ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    }
5008ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
5018ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    u1_slice_type = ps_dec->ps_computebs_cur_slice->slice_type;
5028ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
5038ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    u1_B = (u1_slice_type == B_SLICE);
5048ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
5058ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    u1_skip_th = ((u1_slice_type != I_SLICE) ?
5068ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                    (u1_B ? B_8x8 : PRED_8x8R0) : -1);
5078ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
5088ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    u1_ipcm_th = ((u1_slice_type != I_SLICE) ? (u1_B ? 23 : 5) : 0);
5098ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
5108ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
5118ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
5128ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    while(u4_slice_end != 1)
5138ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    {
5148ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        WORD32 recon_mb_grp,bs_mb_grp;
5158ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        WORD32 nop_cnt = 8*128;
5168ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        u1_num_mbsleft = ((i2_pic_wdin_mbs - i16_mb_x) << u1_mbaff);
5178ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        if(u1_num_mbsleft <= ps_dec->u1_recon_mb_grp)
5188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
5198ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            recon_mb_grp = u1_num_mbsleft;
5208ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            u1_end_of_row = 1;
5218ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            i16_mb_x = 0;
5228ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
5238ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        else
5248ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
5258ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            recon_mb_grp = ps_dec->u1_recon_mb_grp;
5268ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            u1_end_of_row = 0;
5278ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            i16_mb_x += (recon_mb_grp >> u1_mbaff);
5288ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
5298ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
5308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5318ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        while(1)
5328ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
5338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 u4_cond = 0;
5348ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            UWORD32 u4_mb_num = ps_dec->cur_recon_mb_num + recon_mb_grp - 1;
5358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5368ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            /*
5378ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen             * Wait for one extra mb of MC, because some chroma IQ-IT functions
5388ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen             * sometimes loads the pixels of the right mb and stores with the loaded
5398ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen             * values.
5408ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen             */
5418ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            u4_mb_num = MIN(u4_mb_num + 1, (ps_dec->i2_recon_thread_mb_y + 1) * i2_pic_wdin_mbs - 1);
5428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5438ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            CHECK_MB_MAP_BYTE(u4_mb_num, ps_dec->pu1_recon_mb_map, u4_cond);
5448ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            if(u4_cond)
5458ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            {
5468ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                break;
5478ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            }
5488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
5498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
5508ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                if(nop_cnt > 0)
5518ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                {
5528ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    nop_cnt -= 128;
5538ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    NOP(128);
5548ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                }
5558ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                else
5568ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                {
5578ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    if(ps_dec->u4_output_present &&
5588ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                       (ps_dec->u4_fmt_conv_cur_row < ps_dec->s_disp_frame_info.u4_y_ht))
5598ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    {
5608ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                        ps_dec->u4_fmt_conv_num_rows =
5618ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                        MIN(FMT_CONV_NUM_ROWS,
5628ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                            (ps_dec->s_disp_frame_info.u4_y_ht
5638ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                                            - ps_dec->u4_fmt_conv_cur_row));
5648ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                        ih264d_format_convert(ps_dec, &(ps_dec->s_disp_op),
5658ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                              ps_dec->u4_fmt_conv_cur_row,
5668ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                              ps_dec->u4_fmt_conv_num_rows);
5678ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                        ps_dec->u4_fmt_conv_cur_row += ps_dec->u4_fmt_conv_num_rows;
5688ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    }
5698ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    else
5708ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    {
5718ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                        nop_cnt = 8*128;
5728ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                        ithread_yield();
5738ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    }
5748ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                }
5758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
5768ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
5778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5788ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        for(j = 0; j < recon_mb_grp; j++)
5798ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
5808ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            GET_SLICE_NUM_MAP(ps_dec->pu2_slice_num_map, ps_dec->cur_recon_mb_num,
5818ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                              u2_slice_num);
5828ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
5838ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            if(u2_slice_num != ps_dec->u2_cur_slice_num_bs)
5848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
5858ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                u4_slice_end = 1;
5868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                break;
5878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
5888ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            if(ps_dec->i1_recon_in_thread3_flag)
5898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
5908ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_cur_mb_info = &ps_dec->ps_frm_mb_info[ps_dec->cur_recon_mb_num];
5918ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
5928ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                if(ps_cur_mb_info->u1_mb_type <= u1_skip_th)
5938ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                {
5948ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    ih264d_process_inter_mb(ps_dec, ps_cur_mb_info, j);
5958ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                }
5968ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                else if(ps_cur_mb_info->u1_mb_type != MB_SKIP)
5978ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                {
5988ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    if((u1_ipcm_th + 25) != ps_cur_mb_info->u1_mb_type)
5998ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    {
6008ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                        ps_cur_mb_info->u1_mb_type -= (u1_skip_th + 1);
6018ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                        ih264d_process_intra_mb(ps_dec, ps_cur_mb_info, j);
6028ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    }
6038ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                }
6048ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
6058ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ih264d_copy_intra_pred_line(ps_dec, ps_cur_mb_info, j);
6068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
6078ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            ps_dec->cur_recon_mb_num++;
6088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6108ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        if(j != recon_mb_grp)
6118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6128ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            u1_end_of_row = 0;
6138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6168ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            tfr_ctxt_t *ps_trns_addr = &ps_dec->s_tran_iprecon;
6178ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            UWORD16 u2_mb_y;
6188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6198ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            ps_trns_addr->pu1_dest_y += ps_trns_addr->u4_inc_y[u1_end_of_row];
6208ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            ps_trns_addr->pu1_dest_u += ps_trns_addr->u4_inc_uv[u1_end_of_row];
6218ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            ps_trns_addr->pu1_dest_v += ps_trns_addr->u4_inc_uv[u1_end_of_row];
6228ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
6238ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            if(u1_end_of_row)
6248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
6258ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_dec->i2_recon_thread_mb_y += (1 << u1_mbaff);
6268ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                u2_mb_y = ps_dec->i2_recon_thread_mb_y;
6278ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                y_offset = (u2_mb_y * u4_frame_stride) << 4;
6288ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_trns_addr->pu1_dest_y = ps_dec->s_cur_pic.pu1_buf1 + y_offset;
6298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6308ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                u4_frame_stride = ps_dec->u2_frm_wd_uv
6318ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                << ps_dec->ps_cur_slice->u1_field_pic_flag;
6328ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                y_offset = (u2_mb_y * u4_frame_stride) << 3;
6338ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_trns_addr->pu1_dest_u = ps_dec->s_cur_pic.pu1_buf2 + y_offset;
6348ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_trns_addr->pu1_dest_v = ps_dec->s_cur_pic.pu1_buf3 + y_offset;
6358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6368ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_trns_addr->pu1_mb_y = ps_trns_addr->pu1_dest_y;
6378ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_trns_addr->pu1_mb_u = ps_trns_addr->pu1_dest_u;
6388ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                ps_trns_addr->pu1_mb_v = ps_trns_addr->pu1_dest_v;
6398ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
6408ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            }
6418ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
6428ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
6438ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        bs_mb_grp = j;
6448ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        /* Compute BS for NMB group*/
6458ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        for(i = 0; i < bs_mb_grp; i++)
6468ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        {
6478ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            p_cur_mb = &ps_dec->ps_frm_mb_info[ps_dec->u4_cur_bs_mb_num];
6488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            DEBUG_THREADS_PRINTF("ps_dec->u4_cur_bs_mb_num = %d\n",ps_dec->u4_cur_bs_mb_num);
6508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ih264d_compute_bs_non_mbaff_thread(ps_dec, p_cur_mb,
6518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                                               ps_dec->u4_cur_bs_mb_num);
6528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u4_cur_bs_mb_num++;
6538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            ps_dec->u4_bs_cur_slice_num_mbs++;
6548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        if(ps_dec->u4_cur_bs_mb_num > u4_max_addr)
6588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6598ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            u4_slice_end = 1;
6608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /*deblock MB group*/
6638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
6648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            UWORD32 u4_num_mbs;
6658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if(ps_dec->u4_cur_bs_mb_num > ps_dec->u4_cur_deblk_mb_num)
6678ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            {
6688ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                if(u1_end_of_row)
6698ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                {
6708ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    u4_num_mbs = ps_dec->u4_cur_bs_mb_num
6718ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                    - ps_dec->u4_cur_deblk_mb_num;
6728ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                }
6738ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                else
6748ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                {
6758ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                    u4_num_mbs = ps_dec->u4_cur_bs_mb_num
6768ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                    - ps_dec->u4_cur_deblk_mb_num - 1;
6778ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                }
6788ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            }
6798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
6808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                u4_num_mbs = 0;
6818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6828ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            ih264d_check_mb_map_deblk(ps_dec, u4_num_mbs, ps_tfr_cxt,0);
6838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
6848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
6868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
6878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6888ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissenvoid ih264d_recon_deblk_thread(dec_struct_t *ps_dec)
6898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
6908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    tfr_ctxt_t s_tfr_ctxt;
6918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    tfr_ctxt_t *ps_tfr_cxt = &s_tfr_ctxt; // = &ps_dec->s_tran_addrecon;
6928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6948ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    UWORD32 yield_cnt = 0;
6958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6968ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    ithread_set_name("ih264d_recon_deblk_thread");
6978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    while(1)
6998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
7008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7018ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        DEBUG_THREADS_PRINTF(" Entering compute bs slice\n");
7028ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ih264d_recon_deblk_slice(ps_dec, ps_tfr_cxt);
7038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7048ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        DEBUG_THREADS_PRINTF(" Exit  compute bs slice \n");
7058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7068ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        if(ps_dec->cur_recon_mb_num > ps_dec->ps_cur_sps->u2_max_mb_addr)
7078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
7088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                break;
7098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
7108ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        else
7118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
7128ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            ps_dec->ps_computebs_cur_slice++;
7138ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen            ps_dec->u2_cur_slice_num_bs++;
7148ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        }
7158ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        DEBUG_THREADS_PRINTF("CBS thread:Got next slice/end of frame signal \n ");
7168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7178ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    }
7188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7198ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    if(ps_dec->u4_output_present &&
7208ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen       (3 == ps_dec->u4_num_cores) &&
7218ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen       (ps_dec->u4_fmt_conv_cur_row < ps_dec->s_disp_frame_info.u4_y_ht))
7228ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen    {
7238ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ps_dec->u4_fmt_conv_num_rows =
7248ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                        (ps_dec->s_disp_frame_info.u4_y_ht
7258ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                                        - ps_dec->u4_fmt_conv_cur_row);
7268ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ih264d_format_convert(ps_dec, &(ps_dec->s_disp_op),
7278ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                              ps_dec->u4_fmt_conv_cur_row,
7288ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen                              ps_dec->u4_fmt_conv_num_rows);
7298ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen        ps_dec->u4_fmt_conv_cur_row += ps_dec->u4_fmt_conv_num_rows;
7308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
7328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7338ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
7348ef4c3f6142028732a155cbfc1febd6ef5da72fdMarco Nelissen
7358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
7368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
7378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
738