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#include "ih264_typedefs.h" 228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_macros.h" 238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_platform_macros.h" 248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_structs.h" 258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_defs.h" 268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_deblocking.h" 278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "string.h" 288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_debug.h" 298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264d_tables.h" 308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SUWORD16 ih264d_update_csbp_8x8(UWORD16 u2_luma_csbp) 328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD16 u2_mod_csbp; 348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_mod_csbp = u2_luma_csbp; 368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u2_mod_csbp & 0x0033) 388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_mod_csbp |= 0x0033; 408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u2_mod_csbp & 0x00CC) 438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_mod_csbp |= 0x00CC; 458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u2_mod_csbp & 0x3300) 488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_mod_csbp |= 0x3300; 508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u2_mod_csbp & 0xCC00) 538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_mod_csbp |= 0xCC00; 558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return u2_mod_csbp; 588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_fill_bs2_horz_vert */ 638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function fills boundray strength (=2) for all horz */ 658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* and vert edges of current mb based on coded sub block */ 668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pattern of current, top and left mb */ 678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : */ 688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu4_bs : Base pointer of BS table which gets updated */ 698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_left_mb_csbp : left mb's coded sub block pattern */ 708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_top_mb_csbp : top mb's coded sub block pattern */ 718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_cur_mb_csbp : current mb's coded sub block pattern */ 728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : */ 758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* csbp for each 4x4 block in a mb is bit packet in reverse */ 778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* raster scan order for each mb as shown below: */ 788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0. */ 798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* BS=2 for a 4x4 edge if any of adjacent blocks forming edge */ 818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* are coded. Keeping this in mind, bs=2 for all horz and vert */ 828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* edges can be derived using a lookup table for each edge */ 838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* after "ORing" the csbp values as follows: */ 848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* (C means current Mb, T means top mb and L means left mb) */ 858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* All Horz edges: */ 878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 15C|14C|13C|12C|11C|10C|9C|8C|7C|6C|5C|4C|3C |2C |1C |0C */ 888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* (or with) 11C|10C| 9C| 8C| 7C|6C |5C|4C|3C|2C|1C|0C|15T|14T|13T|12T */ 898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* -----BS[3]-----|----BS[2]----|---BS[1]---|----BS[0]-----| */ 908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* All Vert edges: */ 928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 15C|14C|13C|12C|11C|10C|9C| 8C|7C|6C|5C|4C|3C |2C |1C |0C */ 938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* (or with) 14C|13C|12C|15L|10C| 9C|8C|11L|6C|5C|4C|7L|2C |1C |0C |3L */ 948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Do 4x4 transpose of resulting pattern to get vertBS[4]-BS[7] */ 958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 16 10 2008 Jay Draft */ 1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CSBP_LEFT_BLOCK_MASK 0x1111 1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define CSBP_RIGHT_BLOCK_MASK 0x8888 1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs2_horz_vert(UWORD32 *pu4_bs, /* Base pointer of BS table */ 1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_left_mb_csbp, /* csbp of left mb */ 1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_top_mb_csbp, /* csbp of top mb */ 1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_cur_mb_csbp, /* csbp of current mb */ 1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 *pu4_packed_bs2, const UWORD16 *pu2_4x4_v2h_reorder) 1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*u4_nbr_horz_csbp=11C|10C|9C|8C|7C|6C|5C|4C|3C|2C|1C|0C|15T|14T|13T|12T */ 1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_nbr_horz_csbp = (u4_cur_mb_csbp << 4) | (u4_top_mb_csbp >> 12); 1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_horz_bs2_dec = u4_cur_mb_csbp | u4_nbr_horz_csbp; 1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*u4_left_mb_masked_csbp = 15L|0|0|0|11L|0|0|0|7L|0|0|0|3L|0|0|0 */ 1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_left_mb_masked_csbp = u4_left_mb_csbp & CSBP_RIGHT_BLOCK_MASK; 1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*u4_cur_mb_masked_csbp =14C|13C|12C|x|10C|9C|8C|x|6C|5C|4C|x|2C|1C|0C|x */ 1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_cur_mb_masked_csbp = (u4_cur_mb_csbp << 1) 1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S & (~CSBP_LEFT_BLOCK_MASK); 1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*u4_nbr_vert_csbp=14C|13C|12C|15L|10C|9C|8C|11L|6C|5C|4C|7L|2C|1C|0C|3L */ 1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_nbr_vert_csbp = (u4_cur_mb_masked_csbp) 1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (u4_left_mb_masked_csbp >> 3); 1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_vert_bs2_dec = u4_cur_mb_csbp | u4_nbr_vert_csbp; 1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_reordered_vert_bs2_dec, u4_temp; 1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S PROFILE_DISABLE_BOUNDARY_STRENGTH() 1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill horz edges (0,1,2,3) boundary strengths 2 using look up table */ 1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[0] = pu4_packed_bs2[u4_horz_bs2_dec & 0xF]; 1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[1] = pu4_packed_bs2[(u4_horz_bs2_dec >> 4) & 0xF]; 1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[2] = pu4_packed_bs2[(u4_horz_bs2_dec >> 8) & 0xF]; 1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[3] = pu4_packed_bs2[(u4_horz_bs2_dec >> 12) & 0xF]; 1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Do 4x4 tranpose of u4_vert_bs2_dec by using look up table for reorder */ 1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_reordered_vert_bs2_dec = pu2_4x4_v2h_reorder[u4_vert_bs2_dec & 0xF]; 1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_temp = pu2_4x4_v2h_reorder[(u4_vert_bs2_dec >> 4) & 0xF]; 1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_reordered_vert_bs2_dec |= (u4_temp << 1); 1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_temp = pu2_4x4_v2h_reorder[(u4_vert_bs2_dec >> 8) & 0xF]; 1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_reordered_vert_bs2_dec |= (u4_temp << 2); 1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_temp = pu2_4x4_v2h_reorder[(u4_vert_bs2_dec >> 12) & 0xF]; 1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_reordered_vert_bs2_dec |= (u4_temp << 3); 1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill vert edges (4,5,6,7) boundary strengths 2 using look up table */ 1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*************************************************************************/ 1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[4] = pu4_packed_bs2[u4_reordered_vert_bs2_dec & 0xF]; 1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[5] = pu4_packed_bs2[(u4_reordered_vert_bs2_dec >> 4) & 0xF]; 1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[6] = pu4_packed_bs2[(u4_reordered_vert_bs2_dec >> 8) & 0xF]; 1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[7] = pu4_packed_bs2[(u4_reordered_vert_bs2_dec >> 12) & 0xF]; 1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_fill_bs1_16x16mb_pslice */ 1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function fills boundray strength (=1) for those */ 1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* horz and vert mb edges of 16x16mb which are set to 0 by */ 1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264d_fill_bs2_horz_vert. This function is used for p slices */ 1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : If any motion vector component of adjacent 4x4 blocks */ 1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* differs by more than 1 integer pel or if reference */ 1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pictures are different, Bs is set to 1. */ 1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 16 10 2008 Jay Draft */ 1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs1_16x16mb_pslice(mv_pred_t *ps_cur_mv_pred, 1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_top_mv_pred, 2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **ppv_map_ref_idx_to_poc, 2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bs_table, /* pointer to the BsTable array */ 2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_leftmost_mv_pred, 2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S neighbouradd_t *ps_left_addr, 2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **u4_pic_addrress, /* picture address for BS calc */ 2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_ver_mvlimit) 2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_q_mv0, i2_q_mv1; 2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_p_mv0, i2_p_mv1; 2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void *pv_cur_pic_addr0, *pv_cur_pic_addr1; 2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void *pv_nbr_pic_addr0, *pv_nbr_pic_addr1; 2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **ppv_map_ref_idx_to_poc_l0; //,*ppv_map_ref_idx_to_poc_l1; 2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 i; 2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_horz = pu4_bs_table[0]; 2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_vert = pu4_bs_table[4]; 2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S PROFILE_DISABLE_BOUNDARY_STRENGTH() 2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_map_ref_idx_to_poc_l0 = ppv_map_ref_idx_to_poc; 2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_q_mv0 = ps_cur_mv_pred->i2_mv[0]; 2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_q_mv1 = ps_cur_mv_pred->i2_mv[1]; 2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_cur_pic_addr0 = ppv_map_ref_idx_to_poc_l0[ps_cur_mv_pred->i1_ref_frame[0]]; 2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_cur_pic_addr1 = 0; 2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************/ 2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Computing Bs for the top edge */ 2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************/ 2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 4; i++, ps_top_mv_pred++) 2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_idx = 24 - (i << 3); 2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************/ 2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* check if Bs is already set */ 2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************/ 2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!((u4_bs_horz >> u4_idx) & 0xf)) 2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Bs is not set, use left edge and current edge mvs and */ 2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* reference pictures addresses to evaluate Bs==1 */ 2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_temp1; 2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs; 2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If any motion vector component differs by more than 1 */ 2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* integer pel or if reference pictures are different Bs */ 2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* is set to 1. Note that this condition shall be met for*/ 2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/ 2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_p_mv0 = ps_top_mv_pred->i2_mv[0]; 2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_p_mv1 = ps_top_mv_pred->i2_mv[1]; 2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr0 = u4_pic_addrress[i & 2]; 2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr1 = u4_pic_addrress[1 + (i & 2)]; 2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_temp1 = ((ABS((i2_p_mv0 - i2_q_mv0)) >= 4) || 2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS((i2_p_mv1 - i2_q_mv1)) >= i4_ver_mvlimit)); 2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = ((pv_cur_pic_addr0 != pv_nbr_pic_addr0) 2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (pv_cur_pic_addr1 != pv_nbr_pic_addr1) 2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || u4_bs_temp1); 2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_horz |= (u4_bs << u4_idx); 2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[0] = u4_bs_horz; 2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***********************************/ 2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Computing Bs for the left edge */ 2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***********************************/ 2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 4; i++, ps_leftmost_mv_pred += 4) 2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_idx = 24 - (i << 3); 2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************/ 2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* check if Bs is already set */ 2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************/ 2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!((u4_bs_vert >> u4_idx) & 0xf)) 2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************/ 2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Bs is not set, evalaute conditions for Bs=1 */ 2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************/ 2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_temp1; 2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs; 2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If any motion vector component differs by more than 1 */ 2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* integer pel or if reference pictures are different Bs */ 2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* is set to 1. Note that this condition shall be met for*/ 2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/ 2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_p_mv0 = ps_leftmost_mv_pred->i2_mv[0]; 2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_p_mv1 = ps_leftmost_mv_pred->i2_mv[1]; 2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr0 = ps_left_addr->u4_add[i & 2]; 2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr1 = ps_left_addr->u4_add[1 + (i & 2)]; 2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_temp1 = 2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_p_mv0 - i2_q_mv0)) 2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv1 - i2_q_mv1)) 3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit)); 3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = ((pv_cur_pic_addr0 != pv_nbr_pic_addr0) 3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (pv_cur_pic_addr1 != pv_nbr_pic_addr1) 3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || u4_bs_temp1); 3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_vert |= (u4_bs << u4_idx); 3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[4] = u4_bs_vert; 3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_fill_bs1_non16x16mb_pslice */ 3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function fills boundray strength (=1) for those */ 3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* horz and vert edges of non16x16mb which are set to 0 by */ 3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264d_fill_bs2_horz_vert. This function is used for p slices */ 3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : If any motion vector component of adjacent 4x4 blocks */ 3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* differs by more than 1 integer pel or if reference */ 3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pictures are different, Bs is set to 1. */ 3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 16 10 2008 Jay Draft */ 3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs1_non16x16mb_pslice(mv_pred_t *ps_cur_mv_pred, 3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_top_mv_pred, 3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **ppv_map_ref_idx_to_poc, 3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bs_table, /* pointer to the BsTable array */ 3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_leftmost_mv_pred, 3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S neighbouradd_t *ps_left_addr, 3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **u4_pic_addrress, 3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_ver_mvlimit) 3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 edge; 3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **ppv_map_ref_idx_to_poc_l0; //,*ppv_map_ref_idx_to_poc_l1; 3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S PROFILE_DISABLE_BOUNDARY_STRENGTH() 3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_map_ref_idx_to_poc_l0 = ppv_map_ref_idx_to_poc; 3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; edge++, ps_top_mv_pred = ps_cur_mv_pred - 4) 3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Each iteration of this loop fills the four BS values of one HORIZ */ 3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* edge and one BS value for each of the four VERT edges. */ 3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i; 3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_vert_idx = 24 - (edge << 3); 3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_horz = pu4_bs_table[edge]; 3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_left_mv_pred = ps_leftmost_mv_pred + (edge << 2); 3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 4; i++, ps_top_mv_pred++, ps_cur_mv_pred++) 3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_cur_mv0, i2_cur_mv1; 3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_cur_ref0; 3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void *pv_cur_pic_addr0, *pv_cur_pic_addr1 = 0; 3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void *pv_nbr_pic_addr0, *pv_nbr_pic_addr1; 3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /******************************************************/ 3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Each iteration of this inner loop computes a HORIZ */ 3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* and a VERT BS value for a 4x4 block */ 3778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /******************************************************/ 3788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_vert = (pu4_bs_table[i + 4] >> u4_vert_idx) & 0xf; 3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_horz_idx = 24 - (i << 3); 3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*****************************************************/ 3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* check if vert Bs for this block is already set */ 3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*****************************************************/ 3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u4_bs_vert) 3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_left_mv0, i2_left_mv1; 3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Bs is not set, use left edge and current edge mvs and */ 3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* reference pictures addresses to evaluate Bs==1 */ 3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_left_mv0 = ps_left_mv_pred->i2_mv[0]; 3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_left_mv1 = ps_left_mv_pred->i2_mv[1]; 3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_cur_mv0 = ps_cur_mv_pred->i2_mv[0]; 3958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_cur_mv1 = ps_cur_mv_pred->i2_mv[1]; 3968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_cur_ref0 = ps_cur_mv_pred->i1_ref_frame[0]; 3988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_cur_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_cur_ref0]; 4008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i) 4018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_left_ref0 = ps_left_mv_pred->i1_ref_frame[0]; 4038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_left_ref0]; 4048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr1 = 0; 4058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 4078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr0 = ps_left_addr->u4_add[edge & 2]; 4098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr1 = ps_left_addr->u4_add[1 + (edge & 2)]; 4108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_temp1; 4148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 4158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If any motion vector component differs by more than 1 */ 4168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* integer pel or if reference pictures are different Bs */ 4178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* is set to 1. Note that this condition shall be met for*/ 4188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/ 4198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 4208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_temp1 = 4228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_left_mv0 - i2_cur_mv0)) 4238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 4248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv1 4258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv1)) 4268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit)); 4278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_vert = ((pv_nbr_pic_addr0 != pv_cur_pic_addr0) 4298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (pv_nbr_pic_addr1 != pv_cur_pic_addr1) 4308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || u4_bs_temp1); 4318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[i + 4] |= (u4_bs_vert << u4_vert_idx); 4338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*****************************************************/ 4378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* check if horz Bs for this block is already set */ 4388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*****************************************************/ 4398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!((u4_bs_horz >> u4_horz_idx) & 0xf)) 4408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_top_mv0, i2_top_mv1; 4428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 4438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Bs is not set, use top edge and current edge mvs and */ 4448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* reference pictures addresses to evaluate Bs==1 */ 4458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 4468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_cur_mv0 = ps_cur_mv_pred->i2_mv[0]; 4478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_cur_mv1 = ps_cur_mv_pred->i2_mv[1]; 4488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_cur_ref0 = ps_cur_mv_pred->i1_ref_frame[0]; 4508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_top_mv0 = ps_top_mv_pred->i2_mv[0]; 4528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_top_mv1 = ps_top_mv_pred->i2_mv[1]; 4538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_cur_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_cur_ref0]; 4558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(edge) 4568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_top_ref0 = ps_top_mv_pred->i1_ref_frame[0]; 4588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_top_ref0]; 4598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr1 = 0; 4608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 4628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr0 = u4_pic_addrress[i & 2]; 4648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr1 = u4_pic_addrress[1 + (i & 2)]; 4658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_temp1; 4698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs; 4708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 4718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If any motion vector component differs by more than 1 */ 4728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* integer pel or if reference pictures are different Bs */ 4738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* is set to 1. Note that this condition shall be met for*/ 4748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/ 4758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 4768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_temp1 = 4788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_top_mv0 - i2_cur_mv0)) 4798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 4808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_top_mv1 4818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv1)) 4828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit)); 4838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = ((pv_nbr_pic_addr0 != pv_cur_pic_addr0) 4858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (pv_nbr_pic_addr1 != pv_cur_pic_addr1) 4868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || u4_bs_temp1); 4878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_horz |= (u4_bs << u4_horz_idx); 4898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_left_mv_pred = ps_cur_mv_pred; 4938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[edge] = u4_bs_horz; 4968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 4988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 5008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_fill_bs1_16x16mb_bslice */ 5028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function fills boundray strength (=1) for those */ 5048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* horz and vert mb edges of 16x16mb which are set to 0 by */ 5058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264d_fill_bs2_horz_vert. This function is used for b slices */ 5068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 5088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 5098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : If any motion vector component of adjacent 4x4 blocks */ 5108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* differs by more than 1 integer pel or if reference */ 5118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pictures are different, Bs is set to 1. */ 5128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 5148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 5158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 5178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 5198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 5218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 16 10 2008 Jay Draft */ 5228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 5248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs1_16x16mb_bslice(mv_pred_t *ps_cur_mv_pred, 5258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_top_mv_pred, 5268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **ppv_map_ref_idx_to_poc, 5278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bs_table, /* pointer to the BsTable array */ 5288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_leftmost_mv_pred, 5298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S neighbouradd_t *ps_left_addr, 5308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **u4_pic_addrress, 5318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_ver_mvlimit) 5328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 5338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_q_mv0, i2_q_mv1, i2_q_mv2, i2_q_mv3; 5348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_p_mv0, i2_p_mv1, i2_p_mv2, i2_p_mv3; 5358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void *pv_cur_pic_addr0, *pv_cur_pic_addr1; 5368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void *pv_nbr_pic_addr0, *pv_nbr_pic_addr1; 5378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **ppv_map_ref_idx_to_poc_l0, **ppv_map_ref_idx_to_poc_l1; 5388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 i; 5398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_horz = pu4_bs_table[0]; 5408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_vert = pu4_bs_table[4]; 5418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S PROFILE_DISABLE_BOUNDARY_STRENGTH() 5438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_map_ref_idx_to_poc_l0 = ppv_map_ref_idx_to_poc; 5458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_map_ref_idx_to_poc_l1 = ppv_map_ref_idx_to_poc + POC_LIST_L0_TO_L1_DIFF; 5468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_q_mv0 = ps_cur_mv_pred->i2_mv[0]; 5478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_q_mv1 = ps_cur_mv_pred->i2_mv[1]; 5488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_q_mv2 = ps_cur_mv_pred->i2_mv[2]; 5498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_q_mv3 = ps_cur_mv_pred->i2_mv[3]; 5508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_cur_pic_addr0 = ppv_map_ref_idx_to_poc_l0[ps_cur_mv_pred->i1_ref_frame[0]]; 5518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_cur_pic_addr1 = ppv_map_ref_idx_to_poc_l1[ps_cur_mv_pred->i1_ref_frame[1]]; 5528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************/ 5548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Computing Bs for the top edge */ 5558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************/ 5568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 4; i++, ps_top_mv_pred++) 5578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_idx = 24 - (i << 3); 5598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************/ 5618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* check if Bs is already set */ 5628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************/ 5638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!((u4_bs_horz >> u4_idx) & 0xf)) 5648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 5668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Bs is not set, use left edge and current edge mvs and */ 5678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* reference pictures addresses to evaluate Bs==1 */ 5688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 5698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_temp1, u4_bs_temp2; 5708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs; 5718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 5738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If any motion vector component differs by more than 1 */ 5748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* integer pel or if reference pictures are different Bs */ 5758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* is set to 1. Note that this condition shall be met for*/ 5768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/ 5778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 5788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_p_mv0 = ps_top_mv_pred->i2_mv[0]; 5798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_p_mv1 = ps_top_mv_pred->i2_mv[1]; 5808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_p_mv2 = ps_top_mv_pred->i2_mv[2]; 5818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_p_mv3 = ps_top_mv_pred->i2_mv[3]; 5828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr0 = u4_pic_addrress[i & 2]; 5838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr1 = u4_pic_addrress[1 + (i & 2)]; 5848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_temp1 = 5868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_p_mv0 - i2_q_mv0)) 5878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 5888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv1 - i2_q_mv1)) 5898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit) 5908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv2 - i2_q_mv2)) 5918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 5928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv3 - i2_q_mv3)) 5938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit)); 5948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_temp2 = 5968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_p_mv0 - i2_q_mv2)) 5978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 5988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv1 - i2_q_mv3)) 5998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit) 6008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv2 - i2_q_mv0)) 6018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 6028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv3 - i2_q_mv1)) 6038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit)); 6048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = ((pv_cur_pic_addr0 != pv_nbr_pic_addr0) 6068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (pv_cur_pic_addr1 != pv_nbr_pic_addr1) 6078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || u4_bs_temp1) 6088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ((pv_cur_pic_addr0 != pv_nbr_pic_addr1) 6098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (pv_cur_pic_addr1 6108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != pv_nbr_pic_addr0) 6118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || u4_bs_temp2); 6128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_horz |= (u4_bs << u4_idx); 6148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[0] = u4_bs_horz; 6178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***********************************/ 6198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Computing Bs for the left edge */ 6208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /***********************************/ 6218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 4; i++, ps_leftmost_mv_pred += 4) 6228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_idx = 24 - (i << 3); 6248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************/ 6268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* check if Bs is already set */ 6278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************/ 6288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!((u4_bs_vert >> u4_idx) & 0xf)) 6298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************/ 6318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Bs is not set, evalaute conditions for Bs=1 */ 6328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************/ 6338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_temp1, u4_bs_temp2; 6348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs; 6358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 6368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If any motion vector component differs by more than 1 */ 6378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* integer pel or if reference pictures are different Bs */ 6388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* is set to 1. Note that this condition shall be met for*/ 6398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/ 6408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 6418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_p_mv0 = ps_leftmost_mv_pred->i2_mv[0]; 6438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_p_mv1 = ps_leftmost_mv_pred->i2_mv[1]; 6448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_p_mv2 = ps_leftmost_mv_pred->i2_mv[2]; 6458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_p_mv3 = ps_leftmost_mv_pred->i2_mv[3]; 6468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr0 = ps_left_addr->u4_add[i & 2]; 6478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr1 = ps_left_addr->u4_add[1 + (i & 2)]; 6488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_temp1 = 6508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_p_mv0 - i2_q_mv0)) 6518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 6528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv1 - i2_q_mv1)) 6538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit) 6548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv2 - i2_q_mv2)) 6558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 6568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv3 - i2_q_mv3)) 6578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit)); 6588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_temp2 = 6608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_p_mv0 - i2_q_mv2)) 6618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 6628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv1 - i2_q_mv3)) 6638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit) 6648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv2 - i2_q_mv0)) 6658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 6668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_p_mv3 - i2_q_mv1)) 6678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit)); 6688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = ((pv_cur_pic_addr0 != pv_nbr_pic_addr0) 6708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (pv_cur_pic_addr1 != pv_nbr_pic_addr1) 6718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || u4_bs_temp1) 6728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ((pv_cur_pic_addr0 != pv_nbr_pic_addr1) 6738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (pv_cur_pic_addr1 6748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != pv_nbr_pic_addr0) 6758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || u4_bs_temp2); 6768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_vert |= (u4_bs << u4_idx); 6788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[4] = u4_bs_vert; 6818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 6838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 6848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 6868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_fill_bs1_non16x16mb_bslice */ 6888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function fills boundray strength (=1) for those */ 6908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* horz and vert edges of non16x16mb which are set to 0 by */ 6918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264d_fill_bs2_horz_vert. This function is used for b slices */ 6928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 6948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 6958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : If any motion vector component of adjacent 4x4 blocks */ 6968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* differs by more than 1 integer pel or if reference */ 6978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pictures are different, Bs is set to 1. */ 6988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 7008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 7018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 7038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 7058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 7078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 16 10 2008 Jay Draft */ 7088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 7108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs1_non16x16mb_bslice(mv_pred_t *ps_cur_mv_pred, 7118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_top_mv_pred, 7128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **ppv_map_ref_idx_to_poc, 7138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 *pu4_bs_table, /* pointer to the BsTable array */ 7148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_leftmost_mv_pred, 7158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S neighbouradd_t *ps_left_addr, 7168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **u4_pic_addrress, 7178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_ver_mvlimit) 7188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 7198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 edge; 7208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **ppv_map_ref_idx_to_poc_l0, **ppv_map_ref_idx_to_poc_l1; 7218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_map_ref_idx_to_poc_l0 = ppv_map_ref_idx_to_poc; 7228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_map_ref_idx_to_poc_l1 = ppv_map_ref_idx_to_poc + POC_LIST_L0_TO_L1_DIFF; 7238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S PROFILE_DISABLE_BOUNDARY_STRENGTH() 7258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; edge++, ps_top_mv_pred = ps_cur_mv_pred - 4) 7278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 7298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Each iteration of this loop fills the four BS values of one HORIZ */ 7308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* edge and one BS value for each of the four VERT edges. */ 7318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 7328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i; 7338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_vert_idx = 24 - (edge << 3); 7348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_horz = pu4_bs_table[edge]; 7358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_left_mv_pred = ps_leftmost_mv_pred + (edge << 2); 7368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 4; i++, ps_top_mv_pred++, ps_cur_mv_pred++) 7388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_cur_mv0, i2_cur_mv1, i16_curMv2, i16_curMv3; 7408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_cur_ref0, i1_cur_ref1; 7418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void *pv_cur_pic_addr0, *pv_cur_pic_addr1; 7428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void *pv_nbr_pic_addr0, *pv_nbr_pic_addr1; 7438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /******************************************************/ 7458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Each iteration of this inner loop computes a HORIZ */ 7468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* and a VERT BS value for a 4x4 block */ 7478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /******************************************************/ 7488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_vert = (pu4_bs_table[i + 4] >> u4_vert_idx) & 0xf; 7498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_horz_idx = 24 - (i << 3); 7508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*****************************************************/ 7528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* check if vert Bs for this block is already set */ 7538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*****************************************************/ 7548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u4_bs_vert) 7558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_left_mv0, i2_left_mv1, i2_left_mv2, i2_left_mv3; 7578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 7588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Bs is not set, use left edge and current edge mvs and */ 7598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* reference pictures addresses to evaluate Bs==1 */ 7608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 7618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_left_mv0 = ps_left_mv_pred->i2_mv[0]; 7628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_left_mv1 = ps_left_mv_pred->i2_mv[1]; 7638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_left_mv2 = ps_left_mv_pred->i2_mv[2]; 7648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_left_mv3 = ps_left_mv_pred->i2_mv[3]; 7658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_cur_mv0 = ps_cur_mv_pred->i2_mv[0]; 7678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_cur_mv1 = ps_cur_mv_pred->i2_mv[1]; 7688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_curMv2 = ps_cur_mv_pred->i2_mv[2]; 7698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_curMv3 = ps_cur_mv_pred->i2_mv[3]; 7708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_cur_ref0 = ps_cur_mv_pred->i1_ref_frame[0]; 7718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_cur_ref1 = ps_cur_mv_pred->i1_ref_frame[1]; 7728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_cur_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_cur_ref0]; 7738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_cur_pic_addr1 = ppv_map_ref_idx_to_poc_l1[i1_cur_ref1]; 7748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i) 7768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_left_ref0, i1_left_ref1; 7788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_left_ref0 = ps_left_mv_pred->i1_ref_frame[0]; 7798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_left_ref1 = ps_left_mv_pred->i1_ref_frame[1]; 7808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_left_ref0]; 7818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr1 = ppv_map_ref_idx_to_poc_l1[i1_left_ref1]; 7828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 7848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr0 = ps_left_addr->u4_add[edge & 2]; 7868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr1 = ps_left_addr->u4_add[1 + (edge & 2)]; 7878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_temp1, u4_bs_temp2; 7918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 7928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If any motion vector component differs by more than 1 */ 7938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* integer pel or if reference pictures are different Bs */ 7948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* is set to 1. Note that this condition shall be met for*/ 7958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/ 7968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 7978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_temp1 = 7998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_left_mv0 - i2_cur_mv0)) 8008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 8018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv1 8028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv1)) 8038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit) 8048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv2 8058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i16_curMv2)) 8068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 8078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv3 8088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i16_curMv3)) 8098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit)); 8108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_temp2 = 8128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_left_mv0 - i16_curMv2)) 8138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 8148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv1 8158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i16_curMv3)) 8168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit) 8178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv2 8188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv0)) 8198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 8208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv3 8218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv1)) 8228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit)); 8238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_vert = 8258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((pv_nbr_pic_addr0 != pv_cur_pic_addr0) 8268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (pv_nbr_pic_addr1 8278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != pv_cur_pic_addr1) 8288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || u4_bs_temp1) 8298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ((pv_nbr_pic_addr0 8308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != pv_cur_pic_addr1) 8318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (pv_nbr_pic_addr1 8328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != pv_cur_pic_addr0) 8338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || u4_bs_temp2); 8348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[i + 4] |= (u4_bs_vert << u4_vert_idx); 8368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*****************************************************/ 8408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* check if horz Bs for this block is already set */ 8418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*****************************************************/ 8428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!((u4_bs_horz >> u4_horz_idx) & 0xf)) 8438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_top_mv0, i2_top_mv1, i16_topMv2, i16_topMv3; 8458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 8468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If Bs is not set, use top edge and current edge mvs and */ 8478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* reference pictures addresses to evaluate Bs==1 */ 8488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 8498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_cur_mv0 = ps_cur_mv_pred->i2_mv[0]; 8508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_cur_mv1 = ps_cur_mv_pred->i2_mv[1]; 8518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_curMv2 = ps_cur_mv_pred->i2_mv[2]; 8528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_curMv3 = ps_cur_mv_pred->i2_mv[3]; 8538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_cur_ref0 = ps_cur_mv_pred->i1_ref_frame[0]; 8548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_cur_ref1 = ps_cur_mv_pred->i1_ref_frame[1]; 8558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_top_mv0 = ps_top_mv_pred->i2_mv[0]; 8578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_top_mv1 = ps_top_mv_pred->i2_mv[1]; 8588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_topMv2 = ps_top_mv_pred->i2_mv[2]; 8598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_topMv3 = ps_top_mv_pred->i2_mv[3]; 8608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_cur_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_cur_ref0]; 8618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_cur_pic_addr1 = ppv_map_ref_idx_to_poc_l1[i1_cur_ref1]; 8628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(edge) 8638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_top_ref0, i1_top_ref1; 8658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_top_ref0 = ps_top_mv_pred->i1_ref_frame[0]; 8668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_top_ref1 = ps_top_mv_pred->i1_ref_frame[1]; 8678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr0 = ppv_map_ref_idx_to_poc_l0[i1_top_ref0]; 8688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr1 = ppv_map_ref_idx_to_poc_l1[i1_top_ref1]; 8698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 8718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr0 = u4_pic_addrress[i & 2]; 8738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pv_nbr_pic_addr1 = u4_pic_addrress[1 + (i & 2)]; 8748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_temp1, u4_bs_temp2; 8788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs; 8798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* If any motion vector component differs by more than 1 */ 8818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* integer pel or if reference pictures are different Bs */ 8828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* is set to 1. Note that this condition shall be met for*/ 8838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* both (fwd-fwd,bwd-bwd) and (fwd-bwd,bwd-fwd) direction*/ 8848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************/ 8858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_temp1 = 8878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_top_mv0 - i2_cur_mv0)) 8888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 8898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_top_mv1 8908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv1)) 8918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit) 8928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i16_topMv2 8938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i16_curMv2)) 8948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 8958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i16_topMv3 8968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i16_curMv3)) 8978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit)); 8988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_temp2 = 9008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_top_mv0 - i16_curMv2)) 9018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 9028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_top_mv1 9038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i16_curMv3)) 9048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit) 9058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i16_topMv2 9068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv0)) 9078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 9088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i16_topMv3 9098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv1)) 9108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= i4_ver_mvlimit)); 9118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = 9138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((pv_nbr_pic_addr0 != pv_cur_pic_addr0) 9148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (pv_nbr_pic_addr1 9158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != pv_cur_pic_addr1) 9168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || u4_bs_temp1) 9178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ((pv_nbr_pic_addr0 9188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != pv_cur_pic_addr1) 9198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (pv_nbr_pic_addr1 9208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != pv_cur_pic_addr0) 9218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || u4_bs_temp2); 9228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_horz |= (u4_bs << u4_horz_idx); 9248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_left_mv_pred = ps_cur_mv_pred; 9288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[edge] = u4_bs_horz; 9318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 9338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 9358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_fill_bs_xtra_left_edge_cur_fld */ 9378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function fills boundray strength (= 2 or 1) for */ 9398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* xtra left mb edge when cur mb is field and left mb is */ 9408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* frame. */ 9418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : */ 9428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 9448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : */ 9458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 9488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 9498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 9518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 9538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 9558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 16 10 2008 Jay Draft */ 9568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 9588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs_xtra_left_edge_cur_fld(UWORD32 *pu4_bs, /* Base pointer of BS table */ 9598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_left_mb_t_csbp, /* left mbpair's top csbp */ 9608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_left_mb_b_csbp, /* left mbpair's bottom csbp*/ 9618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_cur_mb_csbp, /* csbp of current mb */ 9628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_cur_mb_top /* is top or bottom mb */ 9638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ) 9658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 9668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 *pu4_packed_bs = (const UWORD32 *)gau4_ih264d_packed_bs2; 9678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_cur, u4_left, u4_or; 9688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UNUSED(u4_cur_mb_top); 9698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S PROFILE_DISABLE_BOUNDARY_STRENGTH() 9718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_left_mb_t_csbp = ((u4_left_mb_t_csbp & 0x0008) >> 3) 9738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_left_mb_t_csbp & 0x0080) >> 6) 9748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_left_mb_t_csbp & 0x0800) >> 9) 9758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_left_mb_t_csbp & 0x8000) >> 12); 9768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_left_mb_b_csbp = ((u4_left_mb_b_csbp & 0x0008) << 1) 9788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_left_mb_b_csbp & 0x0080) >> 2) 9798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_left_mb_b_csbp & 0x0800) >> 5) 9808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_left_mb_b_csbp & 0x8000) >> 8); 9818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 9838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* u4_cur = 0|0|0|0|0|0|0|0|12C|12C|8C|8C|4C|4C|0C|0C */ 9848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 9858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_cur = (u4_cur_mb_csbp & 0x0001) + ((u4_cur_mb_csbp & 0x0001) << 1) 9868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_cur_mb_csbp & 0x0010) >> 2) 9878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_cur_mb_csbp & 0x0010) >> 1) 9888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_cur_mb_csbp & 0x0100) >> 4) 9898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_cur_mb_csbp & 0x0100) >> 3) 9908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_cur_mb_csbp & 0x1000) >> 6) 9918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_cur_mb_csbp & 0x1000) >> 5); 9928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 9948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* u4_left =0|0|0|0|0|0|0|0|15Lb|11Lb|7Lb|3Lb|15Lt|11Lt|7Lt|3Lt */ 9958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 9968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_left = u4_left_mb_t_csbp + u4_left_mb_b_csbp; 9978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_or = (u4_cur | u4_left); 9998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 10008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill vert edges (4,9) boundary strengths using look up table */ 10018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 10028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_packed_bs += 16; 10038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[4] = pu4_packed_bs[u4_or & 0xF]; 10048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[9] = pu4_packed_bs[(u4_or >> 4)]; 10058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 10068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 10088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_fill_bs_xtra_left_edge_cur_frm */ 10108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function fills boundray strength (= 2 or 1) for */ 10128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* xtra left mb edge when cur mb is frame and left mb is */ 10138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* field. */ 10148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : */ 10158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 10178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : */ 10188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 10218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 10228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 10248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 10268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 10288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 16 10 2008 Jay Draft */ 10298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 10318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs_xtra_left_edge_cur_frm(UWORD32 *pu4_bs, /* Base pointer of BS table */ 10328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_left_mb_t_csbp, /* left mbpair's top csbp */ 10338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_left_mb_b_csbp, /* left mbpair's bottom csbp*/ 10348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_cur_mb_csbp, /* csbp of current mb */ 10358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_cur_mb_bot /* is top or bottom mb */ 10368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ) 10388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 10398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 *pu4_packed_bs = (const UWORD32 *)gau4_ih264d_packed_bs2; 10408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_cur, u4_left, u4_or; 10418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_right_shift = (u4_cur_mb_bot << 3); 10428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S PROFILE_DISABLE_BOUNDARY_STRENGTH() 10448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_left_mb_t_csbp >>= u4_right_shift; 10468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_left_mb_b_csbp >>= u4_right_shift; 10478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_left_mb_t_csbp = ((u4_left_mb_t_csbp & 0x08) >> 3) 10498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_left_mb_t_csbp & 0x08) >> 2) 10508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_left_mb_t_csbp & 0x80) >> 5) 10518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_left_mb_t_csbp & 0x80) >> 4); 10528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_left_mb_b_csbp = ((u4_left_mb_b_csbp & 0x08) << 1) 10548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_left_mb_b_csbp & 0x08) << 2) 10558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_left_mb_b_csbp & 0x80) >> 1) 10568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_left_mb_b_csbp & 0x80)); 10578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_cur = ((u4_cur_mb_csbp & 0x0001)) + ((u4_cur_mb_csbp & 0x0010) >> 3) 10598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_cur_mb_csbp & 0x0100) >> 6) 10608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + ((u4_cur_mb_csbp & 0x1000) >> 9); 10618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_cur += (u4_cur << 4); 10638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_left = u4_left_mb_t_csbp + u4_left_mb_b_csbp; 10658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_or = (u4_cur | u4_left); 10678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 10688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill vert edges (4,9) boundary strengths using look up table */ 10698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 10708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_packed_bs += 16; 10718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[4] = pu4_packed_bs[u4_or & 0xF]; 10728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[9] = pu4_packed_bs[(u4_or >> 4)]; 10738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 10748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 10768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_fill_bs_xtra_top_edge */ 10788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function fills boundray strength (= 2 or 1) for */ 10808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* xtra top mb edge when cur mb is top mb of frame mb pair */ 10818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* and top mbpair is field coded. */ 10828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : */ 10838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : <Does it use any global variables?> */ 10858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : */ 10868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : <What does the function produce?> */ 10898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : <What does the function return?> */ 10908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : <List any issues or problems with this function> */ 10928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 10948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 10968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 16 10 2008 Jay Draft */ 10978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 10998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs_xtra_top_edge(UWORD32 *pu4_bs, /* Base pointer of BS table */ 11008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_topmb_t_csbp, /* top mbpair's top csbp */ 11018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_topmb_b_csbp, /* top mbpair's bottom csbp*/ 11028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_cur_mb_csbp /* csbp of current mb */ 11038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ) 11058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 11068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 *pu4_packed_bs = (const UWORD32 *)gau4_ih264d_packed_bs2; 11078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_or; 11088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_cur_mb_csbp &= 0xf; 11108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_topmb_t_csbp >>= 12; 11118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_topmb_b_csbp >>= 12; 11128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_or = (u4_cur_mb_csbp | u4_topmb_t_csbp); 11148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 11158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill vert edges (0,8) boundary strengths using look up table */ 11168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 11178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_packed_bs += 16; 11188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[8] = pu4_packed_bs[u4_or]; 11198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_or = (u4_cur_mb_csbp | u4_topmb_b_csbp); 11218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs[0] = pu4_packed_bs[u4_or]; 11228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 11238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 11258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_compute_bs_non_mbaff */ 11278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function computes the pointers of left,top & current*/ 11298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* : Nnz, MvPred & deblk_mb_t and supplies to FillBs function for*/ 11308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* : Boundary Strength Calculation */ 11318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 11328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This functions calls deblock MB in the MB increment order*/ 11338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : Produces the Boundary Strength for Current Mb */ 11358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 11368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 11388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 11408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ITTIAM */ 11418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 11428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_compute_bs_non_mbaff(dec_struct_t * ps_dec, 11448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t * ps_cur_mb_info, 11458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD16 u2_mbxn_mb) 11468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 11478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Mvpred and Nnz for top and Courrent */ 11488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_cur_mv_pred, *ps_top_mv_pred = NULL, *ps_left_mv_pred; 11498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* deblk_mb_t Params */ 11508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S deblk_mb_t *ps_cur_mb_params; /*< Parameters of current MacroBlock */ 11518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S deblkmb_neighbour_t *ps_deblk_top_mb; 11528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Reference Index to POC mapping*/ 11548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** apv_map_ref_idx_to_poc; 11558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_leftmbtype; 11568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD16 u2_left_csbp, u2_top_csbp, u2_cur_csbp; 11588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Set of flags */ 11608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_cur_mb_intra, u1_top_mb_typ, u4_cur_mb_fld; 11618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u1_cur_mb_type; 11628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 * pu4_bs_table; 11638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Neighbour availability */ 11658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Initialization */ 11668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u2_mbx = ps_cur_mb_info->u2_mbx; 11678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u2_mby = ps_cur_mb_info->u2_mby; 11688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u1_pingpong = u2_mbx & 0x01; 11698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S PROFILE_DISABLE_BOUNDARY_STRENGTH() 11718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_deblk_top_mb = ps_dec->ps_deblk_top_mb + u2_mbx; 11738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Pointer assignment for Current DeblkMB, Current Mv Pred */ 11768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params = ps_dec->ps_deblk_mbn + u2_mbxn_mb; 11778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mv_pred = ps_dec->ps_mv_cur + (u2_mbxn_mb << 4); 11788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S apv_map_ref_idx_to_poc = ps_dec->ppv_map_ref_idx_to_poc + 1; 11808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_cur_mb_type = ps_cur_mb_params->u1_mb_type; 11818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_top_mb_typ = ps_deblk_top_mb->u1_mb_type; 11828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_deblk_top_mb->u1_mb_type = u1_cur_mb_type; 11838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 mb_qp_temp; 11868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u1_topmb_qp = ps_deblk_top_mb->u1_mb_qp; 11888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_deblk_top_mb->u1_mb_qp = ps_cur_mb_params->u1_mb_qp; 11898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u1_left_mb_qp = ps_dec->deblk_left_mb[1].u1_mb_qp; 11918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->deblk_left_mb[1].u1_mb_qp = ps_cur_mb_params->u1_mb_qp; 11928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* if no deblocking required for current Mb then continue */ 11968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Check next Mbs in Mb group */ 11978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_params->u1_deblocking_mode & MB_DISABLE_FILTERING) 11988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** pu4_map_ref_idx_to_poc_l1 = apv_map_ref_idx_to_poc + 12008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S POC_LIST_L0_TO_L1_DIFF; 12018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Store Parameter for Top MvPred refernce frame Address */ 12038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** ppv_top_mv_pred_addr = ps_cur_mb_info->ps_curmb->u4_pic_addrress; 12058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 * p1_refTop0 = (ps_cur_mv_pred + 12)->i1_ref_frame; 12068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 * p1_refTop1 = (ps_cur_mv_pred + 14)->i1_ref_frame; 12078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Store Left addresses for Next Mb */ 12098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** ppv_left_mv_pred_addr = 12108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_left_mvpred_addr[!u1_pingpong][1].u4_add; 12118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 * p1_refleft0 = (ps_cur_mv_pred + 3)->i1_ref_frame; 12128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refTop0[0]]; 12158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refTop0[1]]; 12168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]]; 12188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]]; 12198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]]; 12208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]]; 12218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refleft0[0]]; 12238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refleft0[1]]; 12248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //} 12258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Storing the leftMbtype for next Mb */ 12268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type; 12278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 12308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Flag for extra left Edge */ 12338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u1_single_call = 1; 12348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Update the Left deblk_mb_t and Left MvPred Parameters */ 12368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u2_mbx) 12378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_leftmbtype = 0; 12398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Initialize the ps_left_mv_pred with Junk but Valid Location */ 12418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* to avoid invalid memory access */ 12428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* this is read only pointer */ 12438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_left_mv_pred = ps_dec->ps_mv_cur + 3; 12448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 12468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_leftmbtype = ps_dec->deblk_left_mb[1].u1_mb_type; 12488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Come to Left Most Edge of the MB */ 12508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_left_mv_pred = (u2_mbxn_mb) ? 12518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_mv_cur + ((u2_mbxn_mb - 1) << 4) + 3 : 12528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_mv_left + 3; 12538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u2_mby) 12568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_top_mb_typ = 0; 12578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* MvPred Pointer Calculation */ 12598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* CHANGED CODE */ 12608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_top_mv_pred = ps_cur_mv_pred - (ps_dec->u2_frm_wd_in_mbs << 4) + 12; 12618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_cur_mb_intra = u1_cur_mb_type & D_INTRA_MB; 12638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_cur_mb_fld = !!(u1_cur_mb_type & D_FLD_MB); 12648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Compute BS function */ 12658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table = ps_cur_mb_params->u4_bs_table; 12668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_cur_csbp = ps_cur_mb_info->ps_curmb->u2_luma_csbp; 12688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_left_csbp = ps_cur_mb_info->ps_left_mb->u2_luma_csbp; 12698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_top_csbp = ps_cur_mb_info->ps_top_mb->u2_luma_csbp; 12708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Compute BS function */ 12718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->ps_cur_sps->u1_profile_idc == HIGH_PROFILE_IDC) 12728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_tran_form8x8 == 1) 12748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_cur_csbp = ih264d_update_csbp_8x8( 12768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_curmb->u2_luma_csbp); 12778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->ps_left_mb->u1_tran_form8x8 == 1) 12808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_left_csbp = ih264d_update_csbp_8x8( 12828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_left_mb->u2_luma_csbp); 12838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->ps_top_mb->u1_tran_form8x8 == 1) 12868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_top_csbp = ih264d_update_csbp_8x8( 12888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_top_mb->u2_luma_csbp); 12898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_cur_mb_intra) 12928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[4] = 0x04040404; 12958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[0] = u4_cur_mb_fld ? 0x03030303 : 0x04040404; 12968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[1] = 0x03030303; 12978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[2] = 0x03030303; 12988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[3] = 0x03030303; 12998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[5] = 0x03030303; 13008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[6] = 0x03030303; 13018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[7] = 0x03030303; 13028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 13048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_is_non16x16 = !!(u1_cur_mb_type & D_PRED_NON_16x16); 13068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_is_b = ps_dec->u1_B; 13078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_bs2_horz_vert( 13098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table, u2_left_csbp, u2_top_csbp, u2_cur_csbp, 13108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (const UWORD32 *)(gau4_ih264d_packed_bs2), 13118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (const UWORD16 *)(gau2_ih264d_4x4_v2h_reorder)); 13128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_leftmbtype & D_INTRA_MB) 13148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[4] = 0x04040404; 13158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_top_mb_typ & D_INTRA_MB) 13178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[0] = u4_cur_mb_fld ? 0x03030303 : 0x04040404; 13188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_fill_bs1[u4_is_b][u4_is_non16x16]( 13208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mv_pred, ps_top_mv_pred, apv_map_ref_idx_to_poc, 13218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table, ps_left_mv_pred, 13228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S &(ps_dec->ps_left_mvpred_addr[u1_pingpong][1]), 13238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_top_mb->u4_pic_addrress, 13248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (4 >> u4_cur_mb_fld)); 13258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** pu4_map_ref_idx_to_poc_l1 = apv_map_ref_idx_to_poc + 13298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S POC_LIST_L0_TO_L1_DIFF; 13308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Store Parameter for Top MvPred refernce frame Address */ 13328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** ppv_top_mv_pred_addr = ps_cur_mb_info->ps_curmb->u4_pic_addrress; 13348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 * p1_refTop0 = (ps_cur_mv_pred + 12)->i1_ref_frame; 13358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 * p1_refTop1 = (ps_cur_mv_pred + 14)->i1_ref_frame; 13368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Store Left addresses for Next Mb */ 13388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** ppv_left_mv_pred_addr = 13398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_left_mvpred_addr[!u1_pingpong][1].u4_add; 13408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 * p1_refleft0 = (ps_cur_mv_pred + 3)->i1_ref_frame; 13418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refTop0[0]]; 13438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refTop0[1]]; 13448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]]; 13468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]]; 13478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]]; 13488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]]; 13498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refleft0[0]]; 13518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refleft0[1]]; 13528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Storing the leftMbtype for next Mb */ 13548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type; 13558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* For transform 8x8 disable deblocking of the intrernal edges of a 8x8 block */ 13608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_tran_form8x8) 13618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[1] = 0; 13638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[3] = 0; 13648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[5] = 0; 13658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[7] = 0; 13668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 13688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 13708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264d_compute_bs_mbaff */ 13728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function computes the pointers of left,top & current*/ 13748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* : Nnz, MvPred & deblk_mb_t and supplies to FillBs function for*/ 13758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* : Boundary Strength Calculation */ 13768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : <What inputs does the function take?> */ 13778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This functions calls deblock MB in the MB increment order*/ 13788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : Produces the Boundary Strength for Current Mb */ 13808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 13818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 13838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 13858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ITTIAM */ 13868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 13878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_compute_bs_mbaff(dec_struct_t * ps_dec, 13898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t * ps_cur_mb_info, 13908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD16 u2_mbxn_mb) 13918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 13928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Mvpred and Nnz for top and Courrent */ 13938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_cur_mv_pred, *ps_top_mv_pred = NULL, *ps_left_mv_pred; 13948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* deblk_mb_t Params */ 13958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S deblk_mb_t *ps_cur_mb_params; /*< Parameters of current MacroBlock */ 13968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S neighbouradd_t * ps_left_ngbr; 13978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S deblkmb_neighbour_t *ps_deblk_top_mb; 13988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Reference Index to POC mapping*/ 13998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** apv_map_ref_idx_to_poc; 14008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_leftmbtype; 14028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD16 u2_left_csbp, u2_top_csbp, u2_cur_csbp; 14058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Set of flags */ 14078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_cur_mb_intra, u4_cur_mb_fld, u4_top_mb_fld, u1_top_mb_typ, u4_left_mb_fld; 14088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u1_cur_mb_type; 14098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 * pu4_bs_table; 14108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u4_bot_mb = (1 - ps_cur_mb_info->u1_topmb); 14118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Initialization */ 14128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u2_mbx = ps_cur_mb_info->u2_mbx; 14138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u2_mby = ps_cur_mb_info->u2_mby; 14148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Load From u1_pingpong and Store in !u1_pingpong */ 14158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u1_pingpong = u2_mbx & 0x01; 14168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S PROFILE_DISABLE_BOUNDARY_STRENGTH() 14188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_deblk_top_mb = ps_dec->ps_deblk_top_mb + (u2_mbx << 1); 14208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************/ 14238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Initialize the left Mb type */ 14248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Left MvPred */ 14258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************/ 14268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u2_mbx) 14288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 14308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Initialize the ps_left_mv_pred with Junk but Valid Location */ 14318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* to avoid invalid memory access */ 14328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* this is read only pointer */ 14338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************************/ 14348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_left_mv_pred = ps_dec->ps_mv_cur + 16; 14358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 14378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Come to Left Most Edge of the MB */ 14398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_left_mv_pred = (u2_mbxn_mb) ? 14408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_mv_cur + ((u2_mbxn_mb - 1) << 5) + 3 : 14418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_mv_left + 3; 14428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_left_mv_pred += (u4_bot_mb << 4); 14448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_leftmbtype = ps_dec->deblk_left_mb[u4_bot_mb].u1_mb_type; 14478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_left_ngbr = &(ps_dec->ps_left_mvpred_addr[u1_pingpong][u4_bot_mb]); 14498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************/ 14518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Pointer Assignment for Current Mb Parameters */ 14528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Pointer Assignment for Current MvPred */ 14538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /************************************************/ 14548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params = ps_dec->ps_deblk_mbn + (u2_mbxn_mb << 1) + u4_bot_mb; 14558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_cur_mb_type = ps_cur_mb_params->u1_mb_type; 14568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mv_pred = ps_dec->ps_mv_cur + (u2_mbxn_mb << 5); 14588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mv_pred += (u4_bot_mb << 4); 14598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /********************************************/ 14618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Pointer Assignment for Top Mb Parameters */ 14628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Pointer Assignment for Top MvPred and */ 14638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Pointer Assignment for Top Nnz */ 14648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /********************************************/ 14658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* CHANGED CODE */ 14678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_top_mv_pred = ps_cur_mv_pred - (ps_dec->u2_frm_wd_in_mbs << 5) + 12; 14688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_cur_mb_fld = !!(u1_cur_mb_type & D_FLD_MB); 14708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_left_mb_fld = !!(ps_dec->deblk_left_mb[0].u1_mb_type & D_FLD_MB); 14718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_left_mb_fld != u4_cur_mb_fld) 14738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Flag for extra left Edge */ 14758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u1_single_call = 0; 14768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_bot_mb) 14788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_left_ngbr--; 14808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_left_mv_pred -= 16; 14818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 14848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u1_single_call = 1; 14858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S apv_map_ref_idx_to_poc = ps_dec->ppv_map_ref_idx_to_poc + 1; 14878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_cur_mb_fld) 14888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_bot_mb) 14908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S apv_map_ref_idx_to_poc += BOT_LIST_FLD_L0; 14928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 14948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S apv_map_ref_idx_to_poc += TOP_LIST_FLD_L0; 14968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**********************************************************/ 15008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* if no deblocking required for current Mb then continue */ 15018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /**********************************************************/ 15028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_params->u1_deblocking_mode & MB_DISABLE_FILTERING) 15038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** pu4_map_ref_idx_to_poc_l1 = apv_map_ref_idx_to_poc + 15058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S POC_LIST_L0_TO_L1_DIFF; 15068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Store Parameter for Top MvPred refernce frame Address */ 15098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** ppv_top_mv_pred_addr = ps_cur_mb_info->ps_curmb->u4_pic_addrress; 15118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** ppv_left_mv_pred_addr = 15128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_left_mvpred_addr[!u1_pingpong][u4_bot_mb].u4_add; 15138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 * p1_refTop0 = (ps_cur_mv_pred + 12)->i1_ref_frame; 15148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 * p1_refTop1 = (ps_cur_mv_pred + 14)->i1_ref_frame; 15158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 * p1_refLeft0 = (ps_cur_mv_pred + 3)->i1_ref_frame; 15168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refTop0[0]]; 15178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refTop0[1]]; 15188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]]; 15198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]]; 15208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]]; 15218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]]; 15228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refLeft0[0]]; 15238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refLeft0[1]]; 15248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_bot_mb) 15268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* store The Left Mb Type*/ 15288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->deblk_left_mb[0].u1_mb_type = 15298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ps_cur_mb_params - 1)->u1_mb_type; 15308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type; 15318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_deblk_top_mb[u4_bot_mb].u1_mb_type = u1_cur_mb_type; 15348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 15358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u2_mby) 15388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_top_mb_typ = ps_deblk_top_mb[1].u1_mb_type; 15408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_top_mb_fld = !!(u1_top_mb_typ & D_FLD_MB); 15418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u4_bot_mb) 15438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_top_mb_fld & u4_cur_mb_fld) 15458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_top_mb_typ = ps_deblk_top_mb[0].u1_mb_type; 15468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 15478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_top_mv_pred += 16; 15498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 15538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_top_mb_fld = u4_cur_mb_fld; 15558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_top_mb_typ = 0; 15568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_bot_mb & !u4_cur_mb_fld) 15598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_top_mb_typ = ps_deblk_top_mb[0].u1_mb_type; 15618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_top_mb_fld = u4_cur_mb_fld; 15628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_top_mv_pred = ps_cur_mv_pred - 4; 15638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table = ps_cur_mb_params->u4_bs_table; 15668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_cur_mb_intra = u1_cur_mb_type & D_INTRA_MB; 15678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_cur_csbp = ps_cur_mb_info->ps_curmb->u2_luma_csbp; 15698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_left_csbp = ps_cur_mb_info->ps_left_mb->u2_luma_csbp; 15708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_top_csbp = ps_cur_mb_info->ps_top_mb->u2_luma_csbp; 15718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Compute BS function */ 15728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->ps_cur_sps->u1_profile_idc == HIGH_PROFILE_IDC) 15738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_tran_form8x8 == 1) 15768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_cur_csbp = ih264d_update_csbp_8x8( 15788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_curmb->u2_luma_csbp); 15798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->ps_left_mb->u1_tran_form8x8 == 1) 15828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_left_csbp = ih264d_update_csbp_8x8( 15848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_left_mb->u2_luma_csbp); 15858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->ps_top_mb->u1_tran_form8x8 == 1) 15888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u2_top_csbp = ih264d_update_csbp_8x8( 15908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_top_mb->u2_luma_csbp); 15918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_cur_mb_intra) 15948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[4] = 0x04040404; 15978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((0 == u4_cur_mb_fld) && (0 == u4_top_mb_fld)) 15988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[0] = 0x04040404; 16008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 16028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[0] = 0x03030303; 16048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[1] = 0x03030303; 16078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[2] = 0x03030303; 16088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[3] = 0x03030303; 16098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[5] = 0x03030303; 16108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[6] = 0x03030303; 16118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[7] = 0x03030303; 16128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 16148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill Bs of xtra top and left edge unconditionally to avoid checks */ 16158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /*********************************************************************/ 16168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[8] = 0x03030303; 16178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[9] = 0x04040404; 16188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 16208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_is_non16x16 = !!(u1_cur_mb_type & D_PRED_NON_16x16); 16228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_is_b = ps_dec->u1_B; 16238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_bs2_horz_vert( 16258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table, u2_left_csbp, u2_top_csbp, u2_cur_csbp, 16268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (const UWORD32 *)(gau4_ih264d_packed_bs2), 16278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (const UWORD16 *)(gau2_ih264d_4x4_v2h_reorder)); 16288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_leftmbtype & D_INTRA_MB) 16308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[4] = 0x04040404; 16318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_top_mb_typ & D_INTRA_MB) 16338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[0] = u4_cur_mb_fld ? 0x03030303 : 0x04040404; 16348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if(u4_cur_mb_fld != u4_top_mb_fld) 16358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************/ 16378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Setting BS for mixed mode edge=1 when (Bs!=2) */ 16388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /****************************************************/ 16398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[0] = (pu4_bs_table[0] >> 1) + 0x01010101; 16408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Call to Compute Boundary Strength for Extra Left Edge */ 16448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u2_mbx 16458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && !(ps_cur_mb_params->u1_deblocking_mode 16468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S & MB_DISABLE_LEFT_EDGE)) 16478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_cur_mb_fld != u4_left_mb_fld) 16498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_left_mb_t_csbp = 16518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_left_mb[0].u2_luma_csbp; 16528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_left_mb_b_csbp = 16538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_left_mb[1].u2_luma_csbp; 16548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(1 == ps_cur_mb_info->ps_left_mb[0].u1_tran_form8x8) 16558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_left_mb_t_csbp = (UWORD32)ih264d_update_csbp_8x8( 16578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD16)u4_left_mb_t_csbp); 16588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(1 == ps_cur_mb_info->ps_left_mb[1].u1_tran_form8x8) 16618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_left_mb_b_csbp = (UWORD32)ih264d_update_csbp_8x8( 16638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD16)u4_left_mb_b_csbp); 16648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_fill_bs_xtra_left_edge[u4_cur_mb_fld]( 16668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table, u4_left_mb_t_csbp, 16678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_left_mb_b_csbp, u2_cur_csbp, u4_bot_mb); 16688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->deblk_left_mb[0].u1_mb_type & D_INTRA_MB) 16708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[4] = 0x04040404; 16718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_dec->deblk_left_mb[1].u1_mb_type & D_INTRA_MB) 16738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[9] = 0x04040404; 16748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Call to Compute Boundary Strength for Extra Top Edge */ 16788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u2_mby 16798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && !(ps_cur_mb_params->u1_deblocking_mode 16808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S & MB_DISABLE_TOP_EDGE)) 16818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((((!u4_bot_mb) & (!u4_cur_mb_fld)) && u4_top_mb_fld)) 16838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_topmb_t_csbp = 16858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_top_mb[-1].u2_luma_csbp; 16868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_topmb_b_csbp = 16878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_top_mb[0].u2_luma_csbp; 16888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(1 == ps_cur_mb_info->ps_top_mb[-1].u1_tran_form8x8) 16898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_topmb_t_csbp = (UWORD32)ih264d_update_csbp_8x8( 16918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD16)u4_topmb_t_csbp); 16928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(1 == ps_cur_mb_info->ps_top_mb[0].u1_tran_form8x8) 16958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_topmb_b_csbp = (UWORD32)ih264d_update_csbp_8x8( 16978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (UWORD16)u4_topmb_b_csbp); 16988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264d_fill_bs_xtra_top_edge(pu4_bs_table, u4_topmb_t_csbp, 17008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_topmb_b_csbp, u2_cur_csbp); 17018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_deblk_top_mb[0].u1_mb_type & D_INTRA_MB) 17038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[8] = 0x03030303; 17048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_deblk_top_mb[1].u1_mb_type & D_INTRA_MB) 17068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[0] = 0x03030303; 17078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->pf_fill_bs1[u4_is_b][u4_is_non16x16]( 17128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mv_pred, ps_top_mv_pred, apv_map_ref_idx_to_poc, 17138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table, ps_left_mv_pred, ps_left_ngbr, 17148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_info->ps_top_mb->u4_pic_addrress, 17158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (4 >> u4_cur_mb_fld)); 17168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** pu4_map_ref_idx_to_poc_l1 = apv_map_ref_idx_to_poc + 17208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S POC_LIST_L0_TO_L1_DIFF; 17218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Store Parameter for Top MvPred refernce frame Address */ 17248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** ppv_top_mv_pred_addr = ps_cur_mb_info->ps_curmb->u4_pic_addrress; 17258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void ** ppv_left_mv_pred_addr = 17268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->ps_left_mvpred_addr[!u1_pingpong][u4_bot_mb].u4_add; 17278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 * p1_refTop0 = (ps_cur_mv_pred + 12)->i1_ref_frame; 17288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 * p1_refTop1 = (ps_cur_mv_pred + 14)->i1_ref_frame; 17298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 * p1_refLeft0 = (ps_cur_mv_pred + 3)->i1_ref_frame; 17308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refTop0[0]]; 17318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refTop0[1]]; 17328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]]; 17338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[2] = apv_map_ref_idx_to_poc[p1_refTop1[0]]; 17348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]]; 17358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_top_mv_pred_addr[3] = pu4_map_ref_idx_to_poc_l1[p1_refTop1[1]]; 17368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[0] = apv_map_ref_idx_to_poc[p1_refLeft0[0]]; 17378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_left_mv_pred_addr[1] = pu4_map_ref_idx_to_poc_l1[p1_refLeft0[1]]; 17388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u4_bot_mb) 17408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* store The Left Mb Type*/ 17428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->deblk_left_mb[0].u1_mb_type = 17438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ps_cur_mb_params - 1)->u1_mb_type; 17448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type; 17458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_deblk_top_mb[u4_bot_mb].u1_mb_type = u1_cur_mb_type; 17488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* For transform 8x8 disable deblocking of the intrernal edges of a 8x8 block */ 17508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_info->u1_tran_form8x8) 17518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[1] = 0; 17538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[3] = 0; 17548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[5] = 0; 17558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[7] = 0; 17568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 17598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 17638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 17648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_fill_bs_for_mb \endif 17658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 17668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 17678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Determines the boundary strength (Bs), for the complete MB. Bs is 17688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * determined for each block boundary between two neighbouring 4x4 17698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * luma blocks, then packed in a UWORD32, first Bs placed in MSB and 17708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * so on. Such packed Bs values for all 8 edges are kept in an array. 17718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 17728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 17738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Returns the packed boundary strength(Bs) MSB -> LSB Bs0|Bs1|Bs2|Bs3 17748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 17758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 17768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 17778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs_for_mb(deblk_mb_t * ps_cur_mb_params, 17798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S deblk_mb_t * ps_top_mb_params, 17808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S deblk_mb_t * ps_left_mb_params, 17818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_cur_mv_pred, 17828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_top_mv_pred, 17838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *puc_cur_nnz, 17848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *puc_top_nnz, 17858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **ppv_map_ref_idx_to_poc, 17868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 ui_mbAff, 17878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 ui_bs_table[], /* pointer to the BsTable array */ 17888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_leftmost_mv_pred, 17898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S neighbouradd_t *ps_left_addr, 17908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S neighbouradd_t *ps_top_add) 17918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 17928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs_horz = 0; 17938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 edge, u1_top_intra = 0, u1_left_intra = 0; 17948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S mv_pred_t *ps_left_mv_pred; 17958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_cur_mv0, i2_cur_mv1, i16_curMv2, i16_curMv3; 17968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_left_mv0, i2_left_mv1, i2_left_mv2, i2_left_mv3; 17978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 i2_top_mv0, i2_top_mv1, i16_topMv2, i16_topMv3; 17988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i1_cur_ref0, i1_cur_ref1, i1_left_ref0, i1_left_ref1, i1_top_ref0, i1_top_ref1; 17998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_cur_nnz, uc_left_nnz, uc_top_nnz, u1_mb_type, uc_Bslice; 18008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **ppv_map_ref_idx_to_poc_l0, **ppv_map_ref_idx_to_poc_l1; 18018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_temp; 18028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_cur_mb_fld, uc_top_mb_fld; 18038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 c_mv_limit; 18048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_mb_type = ps_cur_mb_params->u1_mb_type; 18068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_Bslice = u1_mb_type & D_B_SLICE; 18078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_map_ref_idx_to_poc_l0 = ppv_map_ref_idx_to_poc; 18088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ppv_map_ref_idx_to_poc_l1 = ppv_map_ref_idx_to_poc + POC_LIST_L0_TO_L1_DIFF; 18098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_top_mb_params = ps_top_mb_params ? ps_top_mb_params : ps_cur_mb_params; 18118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_top_intra = ps_top_mb_params->u1_mb_type & D_INTRA_MB; 18128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_left_intra = ps_left_mb_params->u1_mb_type & D_INTRA_MB; 18138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_table[4] = 0x04040404; //Default for INTRA MB Boundary edges. 18158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_cur_mb_fld = (ps_cur_mb_params->u1_mb_type & D_FLD_MB) >> 7; 18168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_top_mb_fld = (ps_top_mb_params->u1_mb_type & D_FLD_MB) >> 7; 18178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S c_mv_limit = 4 >> uc_cur_mb_fld; 18198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((0 == uc_cur_mb_fld) && (0 == uc_top_mb_fld)) 18208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_table[0] = 0x04040404; 18228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 18248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_table[0] = 0x03030303; 18268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; 18298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S edge++, ps_top_mv_pred = ps_cur_mv_pred - 4, puc_top_nnz = 18308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_cur_nnz - 4) 18318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //Each iteration of this loop fills the four BS values of one HORIZ edge and 18338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //one BS value for each of the four VERT edges. 18348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0; 18358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_bs_horiz, uc_bs_vert; 18368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 ui_cnd; 18378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void *ui_ref_pic_addr[4]; 18388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_mixed_mode_edge; 18398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_mixed_mode_edge = 0; 18418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_temp = (ui_mbAff << 4) + 13; 18438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_cur_nnz = *(puc_cur_nnz - uc_temp); 18458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_left_mv_pred = ps_leftmost_mv_pred + (edge << 2); 18468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 4; i++, ps_top_mv_pred++, ps_cur_mv_pred++) 18488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //Each iteration of this inner loop computes a HORIZ 18508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //and a VERT BS value for a 4x4 block 18518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_left_nnz = uc_cur_nnz; 18538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_cur_nnz = *puc_cur_nnz++; 18548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_top_nnz = *puc_top_nnz++; 18558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //VERT edge is assigned BS values first 18578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_cnd = !(uc_left_nnz || uc_cur_nnz); 18588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_vert = 2; 18598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ui_cnd) 18618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_left_mv0 = ps_left_mv_pred->i2_mv[0]; 18638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_left_mv1 = ps_left_mv_pred->i2_mv[1]; 18648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_left_mv2 = ps_left_mv_pred->i2_mv[2]; 18658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_left_mv3 = ps_left_mv_pred->i2_mv[3]; 18668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_cur_mv0 = ps_cur_mv_pred->i2_mv[0]; 18688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_cur_mv1 = ps_cur_mv_pred->i2_mv[1]; 18698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_curMv2 = ps_cur_mv_pred->i2_mv[2]; 18708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_curMv3 = ps_cur_mv_pred->i2_mv[3]; 18718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_cur_ref0 = ps_cur_mv_pred->i1_ref_frame[0]; 18728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_cur_ref1 = ps_cur_mv_pred->i1_ref_frame[1]; 18738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_ref_pic_addr[2] = ppv_map_ref_idx_to_poc_l0[i1_cur_ref0]; 18748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_ref_pic_addr[3] = ppv_map_ref_idx_to_poc_l1[i1_cur_ref1]; 18758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i) 18778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_left_ref0 = ps_left_mv_pred->i1_ref_frame[0]; 18798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_left_ref1 = ps_left_mv_pred->i1_ref_frame[1]; 18808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_ref_pic_addr[0] = ppv_map_ref_idx_to_poc_l0[i1_left_ref0]; 18818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_ref_pic_addr[1] = ppv_map_ref_idx_to_poc_l1[i1_left_ref1]; 18828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 18848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_ref_pic_addr[0] = ps_left_addr->u4_add[edge & 2]; 18868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_ref_pic_addr[1] = ps_left_addr->u4_add[1 + (edge & 2)]; 18878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!uc_Bslice) 18898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_vert = 18918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ui_ref_pic_addr[0] != ui_ref_pic_addr[2]) 18928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv0 18938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv0)) 18948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 18958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv1 18968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv1)) 18978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= (UWORD8)c_mv_limit); 18988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 19008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_bs_temp1, uc_bs_temp2; 19028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_vert = 1; 19048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_temp1 = 19068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_left_mv0 - i2_cur_mv0)) 19078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 19088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv1 19098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv1)) 19108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= (UWORD8)c_mv_limit) 19118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv2 19128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i16_curMv2)) 19138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 19148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv3 19158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i16_curMv3)) 19168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= (UWORD8)c_mv_limit)); 19178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_temp2 = 19198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_left_mv0 - i16_curMv2)) 19208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 19218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv1 19228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i16_curMv3)) 19238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= (UWORD8)c_mv_limit) 19248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv2 19258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv0)) 19268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 19278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_left_mv3 19288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv1)) 19298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= (UWORD8)c_mv_limit)); 19308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_vert = 19328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (((ui_ref_pic_addr[0] != ui_ref_pic_addr[2]) 19338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (ui_ref_pic_addr[1] 19348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != ui_ref_pic_addr[3])) 19358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (uc_bs_temp1)) 19368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && (((ui_ref_pic_addr[0] 19378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != ui_ref_pic_addr[3]) 19388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (ui_ref_pic_addr[1] 19398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != ui_ref_pic_addr[2])) 19408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (uc_bs_temp2)); 19418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //Fill the VERT BS, only if valid i.e., 19458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //if it is a non-edge OR it is an edge, which is not yet filled 19468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_vert = (!i && u1_left_intra) ? 4 : uc_bs_vert; 19478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_table[i + 4] = (ui_bs_table[i + 4] << 8) | uc_bs_vert; 19488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //HORIZ edge is assigned BS values next 19508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_cnd = !(uc_top_nnz || uc_cur_nnz); 19518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_horiz = 2; 19528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ui_cnd) 19548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_mixed_mode_edge = 19568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (0 == edge) ? (uc_top_mb_fld != uc_cur_mb_fld) : 0; 19578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_cnd = 1 - uc_mixed_mode_edge; 19588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_horiz = uc_mixed_mode_edge; 19598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ui_cnd) 19628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_cur_mv0 = ps_cur_mv_pred->i2_mv[0]; 19648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_cur_mv1 = ps_cur_mv_pred->i2_mv[1]; 19658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_curMv2 = ps_cur_mv_pred->i2_mv[2]; 19668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_curMv3 = ps_cur_mv_pred->i2_mv[3]; 19678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_cur_ref0 = ps_cur_mv_pred->i1_ref_frame[0]; 19688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_cur_ref1 = ps_cur_mv_pred->i1_ref_frame[1]; 19698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_top_mv0 = ps_top_mv_pred->i2_mv[0]; 19718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i2_top_mv1 = ps_top_mv_pred->i2_mv[1]; 19728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_topMv2 = ps_top_mv_pred->i2_mv[2]; 19738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i16_topMv3 = ps_top_mv_pred->i2_mv[3]; 19748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_ref_pic_addr[2] = ppv_map_ref_idx_to_poc_l0[i1_cur_ref0]; 19758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_ref_pic_addr[3] = ppv_map_ref_idx_to_poc_l1[i1_cur_ref1]; 19768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(edge) 19778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_top_ref0 = ps_top_mv_pred->i1_ref_frame[0]; 19798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i1_top_ref1 = ps_top_mv_pred->i1_ref_frame[1]; 19808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_ref_pic_addr[0] = ppv_map_ref_idx_to_poc_l0[i1_top_ref0]; 19818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_ref_pic_addr[1] = ppv_map_ref_idx_to_poc_l1[i1_top_ref1]; 19828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 19848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_ref_pic_addr[0] = ps_top_add->u4_add[i & 2]; 19868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_ref_pic_addr[1] = ps_top_add->u4_add[1 + (i & 2)]; 19878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!uc_Bslice) 19898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_horiz = 19918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ui_ref_pic_addr[0] != ui_ref_pic_addr[2]) 19928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_top_mv0 19938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv0)) 19948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 19958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_top_mv1 19968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv1)) 19978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= (UWORD8)c_mv_limit); 19988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 20008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_bs_temp1, uc_bs_temp2; 20028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_horiz = 1; 20048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_temp1 = 20068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_top_mv0 - i2_cur_mv0)) 20078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 20088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_top_mv1 20098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv1)) 20108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= (UWORD8)c_mv_limit) 20118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i16_topMv2 20128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i16_curMv2)) 20138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 20148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i16_topMv3 20158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i16_curMv3)) 20168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= (UWORD8)c_mv_limit)); 20178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_temp2 = 20198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((ABS((i2_top_mv0 - i16_curMv2)) 20208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 20218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i2_top_mv1 20228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i16_curMv3)) 20238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= (UWORD8)c_mv_limit) 20248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i16_topMv2 20258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv0)) 20268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= 4) 20278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S | (ABS((i16_topMv3 20288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S - i2_cur_mv1)) 20298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >= (UWORD8)c_mv_limit)); 20308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_bs_horiz = 20328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (((ui_ref_pic_addr[0] != ui_ref_pic_addr[2]) 20338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (ui_ref_pic_addr[1] 20348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != ui_ref_pic_addr[3])) 20358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (uc_bs_temp1)) 20368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && (((ui_ref_pic_addr[0] 20378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != ui_ref_pic_addr[3]) 20388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (ui_ref_pic_addr[1] 20398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S != ui_ref_pic_addr[2])) 20408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S || (uc_bs_temp2)); 20418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_left_mv_pred = ps_cur_mv_pred; 20458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs_horz = (u4_bs_horz << 8) + uc_bs_horiz; 20468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //Fill the HORIZ BS, only if valid i.e., 20488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S //if it is a non-edge OR it is an edge, which is not yet filled 20498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(edge || (!edge && !u1_top_intra)) 20508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_table[edge] = u4_bs_horz; 20518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 20538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 20558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 20568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_fill_bs_for_extra_left_edge \endif 20578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 20588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 20598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Fills the boundary strength (Bs), for the top extra edge. ock 20608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 20618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 20628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Returns the packed boundary strength(Bs) MSB -> LSB Bs0|Bs1|Bs2|Bs3 20638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 20648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 20658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 20668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs_for_extra_left_edge(deblk_mb_t *ps_cur_deblk_mb, 20678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S deblk_mb_t *ps_leftDeblkMb, 20688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8* puc_cur_nnz, 20698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_botMb) 20708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 20718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Set the Flag in uc_deblocking_mode variable of current MB*/ 20728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* for mixed mode edge*/ 20738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_deblk_mb->u1_single_call = 0; 20748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_deblk_mb->u1_mb_type & D_INTRA_MB) 20768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_deblk_mb->u4_bs_table[4] = 0x04040404; 20788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_deblk_mb->u4_bs_table[9] = 0x04040404; 20798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if((ps_leftDeblkMb->u1_mb_type & D_INTRA_MB) 20818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ((ps_leftDeblkMb + 1)->u1_mb_type & D_INTRA_MB)) 20828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_deblk_mb->u4_bs_table[4] = 0x04040404; 20848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_deblk_mb->u4_bs_table[9] = 0x04040404; 20858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 20878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Get strengths of left MB edge */ 20898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs; 20908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_Bs; 20918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i; 20928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 ui_curMbFld; 20938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *puc_left_nnz; 20948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 ui_bs_left_edge[2]; 20958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_curMbFld = (ps_cur_deblk_mb->u1_mb_type & D_FLD_MB) >> 7; 20978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_left_nnz = puc_cur_nnz - 29; 20998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ui_curMbFld == 0) && uc_botMb) 21008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_left_nnz -= 8; 21028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else if(ui_curMbFld && uc_botMb) 21048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_left_nnz -= 16; 21068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ui_curMbFld) 21098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_leftDeblkMb->u1_mb_type & D_INTRA_MB) 21118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_left_edge[0] = 0x04040404; 21138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_left_nnz += 16; 21148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_cur_nnz += 8; 21158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 21178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = 0; 21198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 4; i > 0; i--) 21208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_Bs = ((*puc_cur_nnz || *puc_left_nnz)) ? 2 : 1; 21228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = (u4_bs << 8) | uc_Bs; 21238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_left_nnz += 4; 21248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i & 0x01) 21258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_cur_nnz += 4; 21268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_left_edge[0] = u4_bs; 21288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ps_leftDeblkMb + 1)->u1_mb_type & D_INTRA_MB) 21318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_left_edge[1] = 0x04040404; 21338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 21358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = 0; 21378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 4; i > 0; i--) 21388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_Bs = ((*puc_cur_nnz || *puc_left_nnz)) ? 2 : 1; 21408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = (u4_bs << 8) | uc_Bs; 21418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_left_nnz += 4; 21428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i & 0x01) 21438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_cur_nnz += 4; 21448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_left_edge[1] = u4_bs; 21468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 21498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *puc_curNnzB, *puc_leftNnzB; 21518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_curNnzB = puc_cur_nnz; 21528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_leftNnzB = puc_left_nnz + 16; 21538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_leftDeblkMb->u1_mb_type & D_INTRA_MB) 21548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_left_edge[0] = 0x04040404; 21568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 21588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = 0; 21608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 4; i > 0; i--, puc_cur_nnz += 4) 21618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_Bs = ((*puc_cur_nnz || *puc_left_nnz)) ? 2 : 1; 21638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = (u4_bs << 8) | uc_Bs; 21648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i & 0x01) 21658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_left_nnz += 4; 21668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_left_edge[0] = u4_bs; 21688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ps_leftDeblkMb + 1)->u1_mb_type & D_INTRA_MB) 21718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_left_edge[1] = 0x04040404; 21738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 21758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = 0; 21778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 4; i > 0; i--, puc_curNnzB += 4) 21788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 21798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_Bs = ((*puc_curNnzB || *puc_leftNnzB)) ? 2 : 1; 21808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = (u4_bs << 8) | uc_Bs; 21818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(i & 0x01) 21828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S puc_leftNnzB += 4; 21838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ui_bs_left_edge[1] = u4_bs; 21858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Copy The Values in Cur Deblk Mb Parameters */ 21888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_deblk_mb->u4_bs_table[4] = ui_bs_left_edge[0]; 21898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_deblk_mb->u4_bs_table[9] = ui_bs_left_edge[1]; 21908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 21918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 21938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 21948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*! 21958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 21968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \if Function name : ih264d_fill_bs_for_extra_top_edge \endif 21978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 21988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \brief 21998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Fills the boundary strength (Bs), for the top extra edge. ock 22008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 22018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * \return 22028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Returns the packed boundary strength(Bs) MSB -> LSB Bs0|Bs1|Bs2|Bs3 22038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 22048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ************************************************************************** 22058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S */ 22068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs_for_extra_top_edge(deblk_mb_t *ps_cur_mb_params, 22078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_Edge0_mb_typ, 22088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_Edge1_mb_typ, 22098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_curNnz, 22108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_topNnz) 22118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 22128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs; 22138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 uc_Bs; 22148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i; 22158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_cur_nnz_tmp; 22168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_top_nnz_tmp; 22178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_top_edge; 22188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_top_mb_type; 22198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(u1_top_edge = 0; u1_top_edge < 2; u1_top_edge++) 22208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_top_mb_type = u1_top_edge ? u1_Edge1_mb_typ : u1_Edge0_mb_typ; 22228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_cur_nnz_tmp = pu1_curNnz; 22238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_top_nnz_tmp = pu1_topNnz + (u1_top_edge << 2); 22248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ps_cur_mb_params->u1_mb_type & D_INTRA_MB) 22268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + (u1_top_mb_type & D_INTRA_MB)) 22278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = 0x03030303; 22298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 22318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = 0; 22338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 4; i > 0; i--, pu1_cur_nnz_tmp += 1, pu1_top_nnz_tmp += 1) 22348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S uc_Bs = ((*pu1_cur_nnz_tmp || *pu1_top_nnz_tmp)) ? 2 : 1; 22368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u4_bs = (u4_bs << 8) | uc_Bs; 22378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(u1_top_edge) 22408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u4_bs_table[0] = u4_bs; 22418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 22428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u4_bs_table[8] = u4_bs; 22438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 22458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs_mbedge_4(dec_struct_t * ps_dec, 22488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t * ps_cur_mb_info, 22498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD16 u2_mbxn_mb) 22508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 22518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* deblk_mb_t Params */ 22538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S deblk_mb_t *ps_cur_mb_params; /*< Parameters of current MacroBlock */ 22548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S deblkmb_neighbour_t *ps_deblk_top_mb; 22558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 * pu4_bs_table; 22568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_cur_mb_type; 22578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Neighbour availability */ 22598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Initialization */ 22608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u2_mbx = ps_cur_mb_info->u2_mbx; 22618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u2_mby = ps_cur_mb_info->u2_mby; 22628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u1_pingpong = u2_mbx & 0x01; 22638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_deblk_top_mb = ps_dec->ps_deblk_top_mb + u2_mbx; 22648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Pointer assignment for Current DeblkMB, Current Mv Pred */ 22678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params = ps_dec->ps_deblk_mbn + u2_mbxn_mb; 22688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_cur_mb_type = ps_cur_mb_params->u1_mb_type; 22708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_deblk_top_mb->u1_mb_type = u1_cur_mb_type; 22728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 mb_qp_temp; 22758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u1_topmb_qp = ps_deblk_top_mb->u1_mb_qp; 22778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_deblk_top_mb->u1_mb_qp = ps_cur_mb_params->u1_mb_qp; 22788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u1_left_mb_qp = ps_dec->deblk_left_mb[1].u1_mb_qp; 22808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->deblk_left_mb[1].u1_mb_qp = ps_cur_mb_params->u1_mb_qp; 22818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u1_single_call = 1; 22858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type; 22878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* if no deblocking required for current Mb then continue */ 22888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Check next Mbs in Mb group */ 22898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_params->u1_deblocking_mode & MB_DISABLE_FILTERING) 22908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 22918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Storing the leftMbtype for next Mb */ 22928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 22938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 22948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Compute BS function */ 22968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table = ps_cur_mb_params->u4_bs_table; 22978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 22988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[4] = 0x04040404; 22998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[0] = 0x04040404; 23008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[1] = 0; 23018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[2] = 0; 23028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[3] = 0; 23038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[5] = 0; 23048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[6] = 0; 23058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[7] = 0; 23068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 23088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264d_fill_bs_mbedge_2(dec_struct_t * ps_dec, 23108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S dec_mb_info_t * ps_cur_mb_info, 23118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD16 u2_mbxn_mb) 23128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 23138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* deblk_mb_t Params */ 23158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S deblk_mb_t *ps_cur_mb_params; /*< Parameters of current MacroBlock */ 23168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S deblkmb_neighbour_t *ps_deblk_top_mb; 23178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 * pu4_bs_table; 23188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_cur_mb_type; 23198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Neighbour availability */ 23218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Initialization */ 23228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u2_mbx = ps_cur_mb_info->u2_mbx; 23238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u2_mby = ps_cur_mb_info->u2_mby; 23248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD32 u1_pingpong = u2_mbx & 0x01; 23258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_deblk_top_mb = ps_dec->ps_deblk_top_mb + u2_mbx; 23268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Pointer assignment for Current DeblkMB, Current Mv Pred */ 23298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params = ps_dec->ps_deblk_mbn + u2_mbxn_mb; 23308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_cur_mb_type = ps_cur_mb_params->u1_mb_type; 23328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_deblk_top_mb->u1_mb_type = u1_cur_mb_type; 23348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 mb_qp_temp; 23378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u1_topmb_qp = ps_deblk_top_mb->u1_mb_qp; 23398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_deblk_top_mb->u1_mb_qp = ps_cur_mb_params->u1_mb_qp; 23408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u1_left_mb_qp = ps_dec->deblk_left_mb[1].u1_mb_qp; 23428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->deblk_left_mb[1].u1_mb_qp = ps_cur_mb_params->u1_mb_qp; 23438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_cur_mb_params->u1_single_call = 1; 23478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_dec->deblk_left_mb[1].u1_mb_type = ps_cur_mb_params->u1_mb_type; 23498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* if no deblocking required for current Mb then continue */ 23508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Check next Mbs in Mb group */ 23518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ps_cur_mb_params->u1_deblocking_mode & MB_DISABLE_FILTERING) 23528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Storing the leftMbtype for next Mb */ 23548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return; 23558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Compute BS function */ 23588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table = ps_cur_mb_params->u4_bs_table; 23598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 23618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 top_mb_csbp, left_mb_csbp, cur_mb_csbp; 23628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 top_edge, left_edge; 23638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S top_mb_csbp = ps_cur_mb_info->ps_top_mb->u2_luma_csbp; 23658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S left_mb_csbp = ps_cur_mb_info->ps_left_mb->u2_luma_csbp; 23668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S cur_mb_csbp = ps_cur_mb_info->ps_curmb->u2_luma_csbp; 23678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S top_mb_csbp = top_mb_csbp >> 12; 23698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S top_edge = top_mb_csbp | (cur_mb_csbp & 0xf); 23708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(top_edge) 23728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[0] = 0x02020202; 23738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 23748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[0] = 0; 23758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S cur_mb_csbp = cur_mb_csbp & CSBP_LEFT_BLOCK_MASK; 23778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S left_mb_csbp = left_mb_csbp & CSBP_RIGHT_BLOCK_MASK; 23788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S left_edge = cur_mb_csbp | left_mb_csbp; 23808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(left_edge) 23828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[4] = 0x02020202; 23838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 23848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[4] = 0; 23858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[1] = 0; 23878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[2] = 0; 23888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[3] = 0; 23898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[5] = 0; 23908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[6] = 0; 23918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu4_bs_table[7] = 0; 23928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 23938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 23948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 2395