18d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/****************************************************************************** 28d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 38d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Copyright (C) 2015 The Android Open Source Project 48d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 58d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Licensed under the Apache License, Version 2.0 (the "License"); 68d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * you may not use this file except in compliance with the License. 78d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * You may obtain a copy of the License at: 88d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 98d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * http://www.apache.org/licenses/LICENSE-2.0 108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Unless required by applicable law or agreed to in writing, software 128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * distributed under the License is distributed on an "AS IS" BASIS, 138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * See the License for the specific language governing permissions and 158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * limitations under the License. 168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ***************************************************************************** 188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**************************************************************************** */ 218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* File Name : ih264_deblk_edge_filters.c */ 238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : Contains function definitions for deblocking */ 258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* List of Functions : ih264_deblk_luma_vert_bs4() */ 278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_luma_horz_bs4() */ 288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_luma_vert_bslt4() */ 298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_luma_horz_bslt4() */ 308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_luma_vert_bs4_mbaff() */ 318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_luma_vert_bslt4_mbaff() */ 328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_chroma_vert_bs4_bp() */ 338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_chroma_horz_bs4_bp() */ 348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_chroma_vert_bslt4_bp() */ 358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_chroma_horz_bslt4_bp() */ 368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_chroma_vert_bs4_mbaff_bp() */ 378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_chroma_vert_bslt4_mbaff_bp() */ 388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_chroma_vert_bs4() */ 398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_chroma_horz_bs4() */ 408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_chroma_vert_bslt4() */ 418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_chroma_horz_bslt4() */ 428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_chroma_vert_bs4_mbaff() */ 438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ih264_deblk_chroma_vert_bslt4_mbaff() */ 448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues / Problems : None */ 468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History : */ 488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 28 11 2013 Ittiam Draft */ 518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 29 12 2014 Kaushik Added double-call vertical */ 528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Senthoor deblocking and high profile */ 538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* deblocking functions */ 548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/******************************************************************************/ 568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* File Includes */ 598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* System include files */ 628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stdio.h> 638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* User include files */ 658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_typedefs.h" 668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_platform_macros.h" 678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_deblk_edge_filters.h" 688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_macros.h" 698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Definitions */ 728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_luma_vert_bs4() */ 778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a luma block */ 798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* vertical edge when the boundary strength is set to 4. */ 808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 */ 828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha - alpha value for the boundary */ 848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta - beta value for the boundary */ 858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This operation is described in Sec. 8.7.2.4 under the */ 898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* title "Filtering process for edges for bS equal to 4" in */ 908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ITU T Rec H.264. */ 918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 28 11 2013 Ittiam Draft */ 1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_luma_vert_bs4(UWORD8 *pu1_src, 1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha, 1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta) 1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p3, p2, p1, p0, q0, q1, q2, q3; 1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p3, pos_p2, pos_p1, pos_p0; 1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_q0, pos_q1, pos_q2,pos_q3; 1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 a_p, a_q; /* threshold variables */ 1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 blk_strd = src_strd << 2; /* block_increment = src_strd * 4 */ 1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp; 1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = 1; 1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q2 = 2; 1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q3 = 3; 1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = -1; 1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = -2; 1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p2 = -3; 1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p3 = -4; 1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; edge++, pu1_src += blk_strd) 1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp = pu1_src; 1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 4; ++i, pu1_src_temp += src_strd) 1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0 = pu1_src_temp[pos_q0]; 1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1 = pu1_src_temp[pos_q1]; 1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0 = pu1_src_temp[pos_p0]; 1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1 = pu1_src_temp[pos_p1]; 1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0 - q0) >= alpha) || 1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1 - q0) >= beta) || 1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1 - p0) >= beta)) 1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p2 = pu1_src_temp[pos_p2]; 1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p3 = pu1_src_temp[pos_p3]; 1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q2 = pu1_src_temp[pos_q2]; 1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q3 = pu1_src_temp[pos_q3]; 1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(p0 - q0) < ((alpha >> 2) + 2)) 1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Threshold Variables */ 1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S a_p = (UWORD8)ABS(p2 - p0); 1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S a_q = (UWORD8)ABS(q2 - q0); 1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(a_p < beta) 1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0', p1', p2' */ 1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p0] = ((p2 + X2(p1) + X2(p0) + X2(q0) + q1 1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + 4) >> 3); 1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p1] = ((p2 + p1 + p0 + q0 + 2) >> 2); 1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p2] = 1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((X2(p3) + X3(p2) + p1 + p0 + q0 1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + 4) >> 3); 1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0'*/ 1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p0] = ((X2(p1) + p0 + q1 + 2) >> 2); 1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(a_q < beta) 1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0', q1', q2' */ 1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q0] = (p1 + X2(p0) + X2(q0) + X2(q1) + q2 1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + 4) >> 3; 1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q1] = (p0 + q0 + q1 + q2 + 2) >> 2; 1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q2] = (X2(q3) + X3(q2) + q1 + q0 + p0 + 4) 1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >> 3; 1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0'*/ 1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q0] = (X2(q1) + q0 + p1 + 2) >> 2; 1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0', q0'*/ 1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p0] = ((X2(p1) + p0 + q1 + 2) >> 2); 1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q0] = (X2(q1) + q0 + p1 + 2) >> 2; 1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_luma_horz_bs4() */ 1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a luma block */ 1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* horizontal edge when the boundary strength is set to 4. */ 2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 */ 2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha - alpha value for the boundary */ 2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta - beta value for the boundary */ 2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This operation is described in Sec. 8.7.2.4 under the */ 2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* title "Filtering process for edges for bS equal to 4" in */ 2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ITU T Rec H.264. */ 2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 28 11 2013 Ittiam Draft */ 2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_luma_horz_bs4(UWORD8 *pu1_src, 2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha, 2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta) 2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p3, p2, p1, p0, q0, q1, q2, q3; 2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p3, pos_p2, pos_p1, pos_p0, pos_q0, pos_q1, 2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q2, pos_q3; 2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 a_p, a_q; /* threshold variables */ 2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p3; /* pointer to the src sample p3 */ 2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p3_temp; 2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp; 2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p3 = pu1_src - (src_strd << 2); 2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = src_strd; 2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q2 = X2(src_strd); 2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q3 = X3(src_strd); 2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = X3(src_strd); 2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = X2(src_strd); 2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p2 = src_strd; 2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p3 = 0; 2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; edge++, pu1_src += 4, pu1_p3 += 4) 2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp = pu1_src; 2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p3_temp = pu1_p3; 2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 4; ++i, pu1_src_temp++, pu1_p3_temp++) 2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0 = pu1_src_temp[pos_q0]; 2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1 = pu1_src_temp[pos_q1]; 2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0 = pu1_p3_temp[pos_p0]; 2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1 = pu1_p3_temp[pos_p1]; 2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0 - q0) >= alpha) || 2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1 - q0) >= beta) || 2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1 - p0) >= beta)) 2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p2 = pu1_p3_temp[pos_p2]; 2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p3 = pu1_p3_temp[pos_p3]; 2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q2 = pu1_src_temp[pos_q2]; 2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q3 = pu1_src_temp[pos_q3]; 2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(p0 - q0) < ((alpha >> 2) + 2)) 2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Threshold Variables */ 2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S a_p = ABS(p2 - p0); 2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S a_q = ABS(q2 - q0); 2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((a_p < beta)) 2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0', p1', p2' */ 2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p3_temp[pos_p0] = (p2 + X2(p1) + X2(p0) + X2(q0) + q1 2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + 4) >> 3; 2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p3_temp[pos_p1] = (p2 + p1 + p0 + q0 + 2) >> 2; 2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p3_temp[pos_p2] = 2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (X2(p3) + X3(p2) + p1 + p0 + q0 2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + 4) >> 3; 2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0'*/ 2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p3_temp[pos_p0] = (X2(p1) + p0 + q1 + 2) >> 2; 2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(a_q < beta) 2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0', q1', q2' */ 2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q0] = (p1 + X2(p0) + X2(q0) + X2(q1) 2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + q2 + 4) >> 3; 2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q1] = (p0 + q0 + q1 + q2 + 2) >> 2; 2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q2] = (X2(q3) + X3(q2) + q1 + q0 + p0 2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + 4) >> 3; 3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0'*/ 3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q0] = (X2(q1) + q0 + p1 + 2) >> 2; 3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0', q0'*/ 3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p3_temp[pos_p0] = (X2(p1) + p0 + q1 + 2) >> 2; 3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q0] = (X2(q1) + q0 + p1 + 2) >> 2; 3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_chroma_vert_bs4_bp() */ 3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a chroma block */ 3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* vertical edge when the boundary strength is set to 4. */ 3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 of U */ 3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha - alpha value for the boundary */ 3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta - beta value for the boundary */ 3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This operation is described in Sec. 8.7.2.4 under the */ 3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* title "Filtering process for edges for bS equal to 4" in */ 3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ITU T Rec H.264. */ 3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 28 11 2013 Ittiam Draft */ 3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_chroma_vert_bs4_bp(UWORD8 *pu1_src, 3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha, 3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta) 3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_u = pu1_src; /* pointer to the src sample q0 of U */ 3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_v = pu1_src + 1; /* pointer to the src sample q0 of V */ 3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p1_u, p0_u, q0_u, q1_u, p1_v, p0_v, q0_v, q1_v; 3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 blk_strd = src_strd << 1; /* block_increment = src_strd * 2 */ 3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p1, pos_p0, pos_q0, pos_q1; 3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp_u, *pu1_src_temp_v; 3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = 2; 3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = -2; 3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = -4; 3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; 3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S edge++, pu1_src_u += blk_strd, pu1_src_v += blk_strd) 3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u = pu1_src_u; 3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v = pu1_src_v; 3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; ++i, pu1_src_temp_u += src_strd, pu1_src_temp_v += 3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S src_strd) 3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_u = pu1_src_temp_u[pos_q0]; 3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_u = pu1_src_temp_u[pos_q1]; 3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_u = pu1_src_temp_u[pos_p0]; 3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_u = pu1_src_temp_u[pos_p1]; 3778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_v = pu1_src_temp_v[pos_q0]; 3788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_v = pu1_src_temp_v[pos_q1]; 3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_v = pu1_src_temp_v[pos_p0]; 3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_v = pu1_src_temp_v[pos_p1]; 3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_u - q0_u) < alpha) && 3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_u - q0_u) < beta) && 3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_u - p0_u) < beta)) 3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_p0] = ((X2(p1_u) + p0_u + q1_u + 2) >> 2); 3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_q0] = (X2(q1_u) + q0_u + p1_u + 2) >> 2; 3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 3948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_v - q0_v) < alpha) && 3958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_v - q0_v) < beta) && 3968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_v - p0_v) < beta)) 3978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 3998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_p0] = ((X2(p1_v) + p0_v + q1_v + 2) >> 2); 4008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 4018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_q0] = (X2(q1_v) + q0_v + p1_v + 2) >> 2; 4028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 4068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 4088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_chroma_horz_bs4_bp() */ 4108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a chroma block */ 4128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* horizontal edge when the boundary strength is set to 4. */ 4138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 of U */ 4158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 4168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha - alpha value for the boundary */ 4178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta - beta value for the boundary */ 4188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 4208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This operation is described in Sec. 8.7.2.4 under the */ 4228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* title "Filtering process for edges for bS equal to 4" in */ 4238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ITU T Rec H.264. */ 4248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 4268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 4288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 4308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 4328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 4348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 28 11 2013 Ittiam Draft */ 4358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 4368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 4378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_chroma_horz_bs4_bp(UWORD8 *pu1_src, 4388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 4398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha, 4408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta) 4418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 4428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_u = pu1_src; /* pointer to the src sample q0 of U */ 4438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_v = pu1_src + 1; /* pointer to the src sample q0 of V */ 4448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p1_u, p0_u, q0_u, q1_u, p1_v, p0_v, q0_v, q1_v; 4458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p1, pos_p0, pos_q0, pos_q1; 4468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp_u, *pu1_src_temp_v; 4478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p1_u; /* pointer to the src sample p1 of U */ 4488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p1_v; /* pointer to the src sample p1 of U */ 4498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p1_temp_u, *pu1_p1_temp_v; 4508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 4518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_u = pu1_src_u - (src_strd << 1); 4538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_v = pu1_src_v - (src_strd << 1); 4548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 4558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = src_strd; 4568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = src_strd; 4578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = 0; 4588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; edge++, pu1_src_u += 4, pu1_p1_u += 4, 4608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_v += 4, pu1_p1_v += 4) 4618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u = pu1_src_u; 4638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_u = pu1_p1_u; 4648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v = pu1_src_v; 4658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_v = pu1_p1_v; 4668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; ++i, pu1_src_temp_u += 2, pu1_p1_temp_u += 2, 4678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v += 2, pu1_p1_temp_v += 2) 4688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_u = pu1_src_temp_u[pos_q0]; 4708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_u = pu1_src_temp_u[pos_q1]; 4718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_u = pu1_p1_temp_u[pos_p0]; 4728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_u = pu1_p1_temp_u[pos_p1]; 4738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_v = pu1_src_temp_v[pos_q0]; 4758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_v = pu1_src_temp_v[pos_q1]; 4768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_v = pu1_p1_temp_v[pos_p0]; 4778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_v = pu1_p1_temp_v[pos_p1]; 4788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 4808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_u - q0_u) < alpha) && 4818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_u - q0_u) < beta) && 4828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_u - p0_u) < beta)) 4838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 4858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_u[pos_p0] = (X2(p1_u) + p0_u + q1_u + 2) >> 2; 4868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 4878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_q0] = (X2(q1_u) + q0_u + p1_u + 2) >> 2; 4888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 4898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 4918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_v - q0_v) < alpha) && 4928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_v - q0_v) < beta) && 4938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_v - p0_v) < beta)) 4948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 4958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 4968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_v[pos_p0] = (X2(p1_v) + p0_v + q1_v + 2) >> 2; 4978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 4988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_q0] = (X2(q1_v) + q0_v + p1_v + 2) >> 2; 4998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 5028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 5038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 5058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_luma_vert_bslt4() */ 5078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a luma block */ 5098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* vertical edge when the boundary strength is less than 4. */ 5108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 */ 5128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 5138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha - alpha value for the boundary */ 5148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta - beta value for the boundary */ 5158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_bs - packed Boundary strength array */ 5168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab - tc0_table */ 5178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 5198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This operation is described in Sec. 8.7.2.3 under the */ 5218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* title "Filtering process for edges for bS less than 4" */ 5228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in ITU T Rec H.264. */ 5238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 5258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 5278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 5298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 5318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 5338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 28 11 2013 Ittiam Draft */ 5348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 5358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 5368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_luma_vert_bslt4(UWORD8 *pu1_src, 5378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 5388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha, 5398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta, 5408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs, 5418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cliptab) 5428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 5438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 5448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p2, p1, p0, q0, q1, q2; 5458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p2, pos_p1, pos_p0, pos_q0, pos_q1, pos_q2; 5468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 a_p, a_q; /* threshold variables */ 5478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 blk_strd = src_strd << 2; /* block_increment = src_strd * 4 */ 5488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp; 5498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 delta; 5508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 tc; 5518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 val; 5528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 tc0, u1_bs; 5538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 5558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = 1; 5568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q2 = 2; 5578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = -1; 5588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = -2; 5598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p2 = -3; 5608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; edge++, pu1_src += blk_strd) 5628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp = pu1_src; 5648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 5658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_bs = (UWORD8)((u4_bs >> ((3 - edge) << 3)) & 0x0ff); 5668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_bs) 5678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 5688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc0 */ 5698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tc0 = pu1_cliptab[u1_bs]; 5708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 4; ++i, pu1_src_temp += src_strd) 5718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 5728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0 = pu1_src_temp[pos_q0]; 5738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1 = pu1_src_temp[pos_q1]; 5748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0 = pu1_src_temp[pos_p0]; 5758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1 = pu1_src_temp[pos_p1]; 5768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 5788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0 - q0) >= alpha) || 5798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1 - q0) >= beta) || 5808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1 - p0) >= beta)) 5818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 5828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q2 = pu1_src_temp[pos_q2]; 5848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p2 = pu1_src_temp[pos_p2]; 5858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S a_p = ABS(p2 - p0); 5878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S a_q = ABS(q2 - q0); 5888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc */ 5908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tc = tc0 + (a_p < beta) + (a_q < beta); 5918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0 - p0) << 2) + (p1 - q1) + 4) >> 3); 5938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tc, tc, val); 5948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 5958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 5968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0 + delta; 5978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p0] = CLIP_U8(val); 5988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 5998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0 - delta; 6008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q0] = CLIP_U8(val); 6018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Luma only */ 6038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(a_p < beta) 6048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p1' */ 6068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((p2 + ((p0 + q0 + 1) >> 1) - (p1 << 1)) >> 1); 6078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p1] += CLIP3(-tc0, tc0, val); 6088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(a_q < beta) 6118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q1' */ 6138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((q2 + ((p0 + q0 + 1) >> 1) - (q1 << 1)) >> 1); 6148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q1] += CLIP3(-tc0, tc0, val); 6158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 6188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 6198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 6218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_chroma_vert_bslt4_bp() */ 6238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a chroma block */ 6258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* vertical edge when the boundary strength is less than 4. */ 6268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 of U */ 6288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 6298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha - alpha value for the boundary */ 6308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta - beta value for the boundary */ 6318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_bs - packed Boundary strength array */ 6328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab - tc0_table */ 6338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 6358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This operation is described in Sec. 8.7.2.3 under the */ 6378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* title "Filtering process for edges for bS less than 4" */ 6388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in ITU T Rec H.264. */ 6398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 6418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 6438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 6458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 6478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 6498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 28 11 2013 Ittiam Draft */ 6508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 6518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 6528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_chroma_vert_bslt4_bp(UWORD8 *pu1_src, 6538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 6548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha, 6558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta, 6568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs, 6578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cliptab) 6588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 6598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_u = pu1_src; /* Pointer to the src sample q0 of plane U*/ 6608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_v = pu1_src + 1; /* Pointer to the src sample q0 of plane V*/ 6618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p1_u, p0_u, q0_u, q1_u, p1_v, p0_v, q0_v, q1_v; 6628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 blk_strd = src_strd << 1; /* block_increment = src_strd * (4 >> 1)*/ 6638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p1, pos_p0, pos_q0, pos_q1; 6648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp_u, *pu1_src_temp_v; 6658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 6668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 delta; 6678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 tc; 6688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 val; 6698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 tc0, u1_bs; 6708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 6728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = 2; 6738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = -2; 6748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = -4; 6758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; 6778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S edge++, pu1_src_u += blk_strd, pu1_src_v += blk_strd) 6788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u = pu1_src_u; 6808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v = pu1_src_v; 6818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 6828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_bs = (UWORD8)((u4_bs >> ((3 - edge) << 3)) & 0x0ff); 6838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_bs) 6848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 6858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc0 */ 6868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tc0 = pu1_cliptab[u1_bs]; 6878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tc = tc0 + 1; 6888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; ++i, pu1_src_temp_u += src_strd, pu1_src_temp_v += 6898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S src_strd) 6908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 6918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_u = pu1_src_temp_u[pos_q0]; 6928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_u = pu1_src_temp_u[pos_q1]; 6938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_u = pu1_src_temp_u[pos_p0]; 6948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_u = pu1_src_temp_u[pos_p1]; 6958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 6968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_v = pu1_src_temp_v[pos_q0]; 6978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_v = pu1_src_temp_v[pos_q1]; 6988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_v = pu1_src_temp_v[pos_p0]; 6998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_v = pu1_src_temp_v[pos_p1]; 7008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 7028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_u - q0_u) < alpha) && 7038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_u - q0_u) < beta) && 7048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_u - p0_u) < beta)) 7058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0_u - p0_u) << 2) + (p1_u - q1_u) + 4) >> 3); 7078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tc, tc, val); 7088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 7098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0_u + delta; 7108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_p0] = CLIP_U8(val); 7118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 7128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0_u - delta; 7138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_q0] = CLIP_U8(val); 7148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 7178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_v - q0_v) < alpha) && 7188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_v - q0_v) < beta) && 7198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_v - p0_v) < beta)) 7208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0_v - p0_v) << 2) + (p1_v - q1_v) + 4) >> 3); 7228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tc, tc, val); 7238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 7248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0_v + delta; 7258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_p0] = CLIP_U8(val); 7268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 7278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0_v - delta; 7288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_q0] = CLIP_U8(val); 7298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 7328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 7338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 7358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_luma_horz_bslt4() */ 7378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a luma block */ 7398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* horizontal edge when boundary strength is less than 4. */ 7408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 */ 7428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 7438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha - alpha value for the boundary */ 7448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta - beta value for the boundary */ 7458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_bs - packed Boundary strength array */ 7468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab - tc0_table */ 7478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 7498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This operation is described in Sec. 8.7.2.3 under the */ 7518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* title "Filtering process for edges for bS less than 4" */ 7528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in ITU T Rec H.264. */ 7538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 7558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 7578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 7598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 7618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 7638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 28 11 2013 Ittiam Draft */ 7648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 7658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 7668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_luma_horz_bslt4(UWORD8 *pu1_src, 7678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 7688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha, 7698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta, 7708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs, 7718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cliptab) 7728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 7738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p2, p1, p0, q0, q1, q2; 7748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p2, pos_p1, pos_p0, pos_q0, pos_q1, pos_q2; 7758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 a_p, a_q; /* Threshold variables */ 7768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p2; /* Pointer to the src sample p2 */ 7778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p2_temp; 7788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp; 7798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 7808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 delta; 7818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 tc; 7828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 val; 7838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 tc0, u1_bs; 7848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p2 = pu1_src - (src_strd << 2); 7868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 7878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = src_strd; 7888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q2 = X2(src_strd); 7898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = X3(src_strd); 7908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = X2(src_strd); 7918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p2 = src_strd; 7928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; edge++, pu1_src += 4, pu1_p2 += 4) 7948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 7958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp = pu1_src; 7968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p2_temp = pu1_p2; 7978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 7988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 7998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_bs = (UWORD8)((u4_bs >> ((3 - edge) << 3)) & 0x0ff); 8008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_bs) 8018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 8028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc0 */ 8038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tc0 = pu1_cliptab[u1_bs]; 8048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 4; ++i, pu1_src_temp++, pu1_p2_temp++) 8068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0 = pu1_src_temp[pos_q0]; 8088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1 = pu1_src_temp[pos_q1]; 8098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0 = pu1_p2_temp[pos_p0]; 8108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1 = pu1_p2_temp[pos_p1]; 8118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 8138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0 - q0) >= alpha) || 8148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1 - q0) >= beta) || 8158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1 - p0) >= beta)) 8168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 8178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q2 = pu1_src_temp[pos_q2]; 8198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p2 = pu1_p2_temp[pos_p2]; 8208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S a_p = ABS(p2 - p0); 8228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S a_q = ABS(q2 - q0); 8238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc */ 8258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tc = tc0 + (a_p < beta) + (a_q < beta); 8268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0 - p0) << 2) + (p1 - q1) + 4) >> 3); 8278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tc, tc, val); 8288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 8298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0 + delta; 8308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p2_temp[pos_p0] = CLIP_U8(val); 8318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 8328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0 - delta; 8338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q0] = CLIP_U8(val); 8348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Luma */ 8368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(a_p < beta) 8378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p1' */ 8398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((p2 + ((p0 + q0 + 1) >> 1) - (p1 << 1)) >> 1); 8408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p2_temp[pos_p1] += CLIP3(-tc0, tc0, val); 8418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(a_q < beta) 8448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 8458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q1' */ 8468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((q2 + ((p0 + q0 + 1) >> 1) - (q1 << 1)) >> 1); 8478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q1] += CLIP3(-tc0, tc0, val); 8488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 8518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 8528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 8538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 8548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 8558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_chroma_horz_bslt4_bp() */ 8568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 8578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a chroma block */ 8588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* horizontal edge when boundary strength is less than 4. */ 8598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 8608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 of U */ 8618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 8628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha - alpha value for the boundary */ 8638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta - beta value for the boundary */ 8648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_bs - packed Boundary strength array */ 8658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab - tc0_table */ 8668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 8678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 8688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 8698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This operation is described in Sec. 8.7.2.3 under the */ 8708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* title "Filtering process for edges for bS less than 4" */ 8718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in ITU T Rec H.264. */ 8728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 8738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 8748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 8758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 8768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 8778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 8788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 8798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 8808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 8818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 8828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 28 11 2013 Ittiam Draft */ 8838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 8848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 8858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_chroma_horz_bslt4_bp(UWORD8 *pu1_src, 8868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 8878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha, 8888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta, 8898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs, 8908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cliptab) 8918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 8928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_u = pu1_src; /* Pointer to the src sample q0 of plane U*/ 8938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_v = pu1_src + 1; /* Pointer to the src sample q0 of plane V*/ 8948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p1_u, p0_u, q0_u, q1_u, p1_v, p0_v, q0_v, q1_v; 8958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p1, pos_p0, pos_q0, pos_q1; 8968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp_u, *pu1_src_temp_v; 8978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p1_u; /* Pointer to the src sample p1 of plane U*/ 8988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p1_v; /* Pointer to the src sample p1 of plane V*/ 8998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p1_temp_u, *pu1_p1_temp_v; 9008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 9018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 delta; 9028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 tc; 9038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 val; 9048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_bs; 9058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 tc0; 9068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_u = pu1_src_u - (src_strd << 1); 9088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_v = pu1_src_v - (src_strd << 1); 9098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 9108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = src_strd; 9118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = src_strd; 9128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = 0; 9138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; edge++, pu1_src_u += 4, pu1_p1_u += 4, 9158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_v += 4, pu1_p1_v += 4) 9168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u = pu1_src_u; 9188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_u = pu1_p1_u; 9198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v = pu1_src_v; 9208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_v = pu1_p1_v; 9218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 9238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_bs = (UWORD8)((u4_bs >> ((3 - edge) << 3)) & 0x0ff); 9248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_bs) 9258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 9268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc0 */ 9278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tc0 = pu1_cliptab[u1_bs]; 9288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; ++i, pu1_src_temp_u += 2, pu1_p1_temp_u += 2, 9308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v += 2, pu1_p1_temp_v += 2) 9318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_u = pu1_src_temp_u[pos_q0]; 9338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_u = pu1_src_temp_u[pos_q1]; 9348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_u = pu1_p1_temp_u[pos_p0]; 9358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_u = pu1_p1_temp_u[pos_p1]; 9368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_v = pu1_src_temp_v[pos_q0]; 9388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_v = pu1_src_temp_v[pos_q1]; 9398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_v = pu1_p1_temp_v[pos_p0]; 9408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_v = pu1_p1_temp_v[pos_p1]; 9418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc */ 9438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tc = tc0 + 1; 9448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 9458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(p0_u - q0_u) < alpha && ABS(q1_u - q0_u) < beta 9468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ABS(p1_u - p0_u) < beta) 9478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0_u - p0_u) << 2) + (p1_u - q1_u) + 4) >> 3); 9498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tc, tc, val); 9508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 9518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0_u + delta; 9528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_u[pos_p0] = CLIP_U8(val); 9538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 9548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0_u - delta; 9558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_q0] = CLIP_U8(val); 9568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 9588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(p0_v - q0_v) < alpha && ABS(q1_v - q0_v) < beta 9598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ABS(p1_v - p0_v) < beta) 9608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 9618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0_v - p0_v) << 2) + (p1_v - q1_v) + 4) >> 3); 9628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tc, tc, val); 9638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 9648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0_v + delta; 9658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_v[pos_p0] = CLIP_U8(val); 9668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 9678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0_v - delta; 9688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_q0] = CLIP_U8(val); 9698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 9728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 9738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 9758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Definitions for vertical edge deblocking for double-call */ 9768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 9778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 9788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 9798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_luma_vert_bs4_mbaff() */ 9818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a luma block */ 9838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* vertical edge when boundary strength is set to 4. */ 9848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 */ 9868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 9878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha - alpha value for the boundary */ 9888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta - beta value for the boundary */ 9898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 9918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : When the function is called twice, this operation is as */ 9938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* described in Sec. 8.7.2.3 under the title "Filtering */ 9948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* process for edges for bS equal to 4" in ITU T Rec H.264. */ 9958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 9978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 9988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 9998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 10018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 10038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 10058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 29 12 2014 Kaushik Draft */ 10068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Senthoor */ 10078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 10088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 10098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_luma_vert_bs4_mbaff(UWORD8 *pu1_src, 10108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 10118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha, 10128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta) 10138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 10148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p3, p2, p1, p0, q0, q1, q2, q3; 10158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p3, pos_p2, pos_p1, pos_p0; 10168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_q0, pos_q1, pos_q2, pos_q3; 10178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 a_p, a_q; /* threshold variables */ 10188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 blk_strd = src_strd << 1; /* block_increment = src_strd * 2 */ 10198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp; 10208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 10218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 10238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = 1; 10248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q2 = 2; 10258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q3 = 3; 10268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = -1; 10278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = -2; 10288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p2 = -3; 10298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p3 = -4; 10308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; edge++, pu1_src += blk_strd) 10328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp = pu1_src; 10348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; ++i, pu1_src_temp += src_strd) 10358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0 = pu1_src_temp[pos_q0]; 10378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1 = pu1_src_temp[pos_q1]; 10388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0 = pu1_src_temp[pos_p0]; 10398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1 = pu1_src_temp[pos_p1]; 10408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 10428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0 - q0) >= alpha) || 10438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1 - q0) >= beta) || 10448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1 - p0) >= beta)) 10458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 10468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p2 = pu1_src_temp[pos_p2]; 10488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p3 = pu1_src_temp[pos_p3]; 10498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q2 = pu1_src_temp[pos_q2]; 10508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q3 = pu1_src_temp[pos_q3]; 10518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(p0 - q0) < ((alpha >> 2) + 2)) 10538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Threshold Variables */ 10558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S a_p = (UWORD8)ABS(p2 - p0); 10568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S a_q = (UWORD8)ABS(q2 - q0); 10578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(a_p < beta) 10598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0', p1', p2' */ 10618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p0] = ((p2 + X2(p1) + X2(p0) + X2(q0) + q1 10628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + 4) >> 3); 10638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p1] = ((p2 + p1 + p0 + q0 + 2) >> 2); 10648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p2] = 10658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ((X2(p3) + X3(p2) + p1 + p0 + q0 10668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + 4) >> 3); 10678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 10698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0'*/ 10718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p0] = ((X2(p1) + p0 + q1 + 2) >> 2); 10728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(a_q < beta) 10758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0', q1', q2' */ 10778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q0] = (p1 + X2(p0) + X2(q0) + X2(q1) + q2 10788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S + 4) >> 3; 10798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q1] = (p0 + q0 + q1 + q2 + 2) >> 2; 10808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q2] = (X2(q3) + X3(q2) + q1 + q0 + p0 + 4) 10818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S >> 3; 10828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 10848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0'*/ 10868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q0] = (X2(q1) + q0 + p1 + 2) >> 2; 10878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 10908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 10918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0', q0'*/ 10928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p0] = ((X2(p1) + p0 + q1 + 2) >> 2); 10938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q0] = (X2(q1) + q0 + p1 + 2) >> 2; 10948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 10978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 10988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 10998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 11008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_chroma_vert_bs4_mbaff_bp() */ 11028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a chroma block */ 11048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* vertical edge when boundary strength is set to 4. */ 11058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 of U */ 11078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 11088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha - alpha value for the boundary */ 11098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta - beta value for the boundary */ 11108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 11128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : When the function is called twice, this operation is as */ 11148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* described in Sec. 8.7.2.3 under the title "Filtering */ 11158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* process for edges for bS equal to 4" in ITU T Rec H.264. */ 11168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 11188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 11208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 11228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 11248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 11268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 29 12 2014 Kaushik Draft */ 11278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Senthoor */ 11288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 11308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_chroma_vert_bs4_mbaff_bp(UWORD8 *pu1_src, 11318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 11328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha, 11338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta) 11348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 11358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_u = pu1_src; /* Pointer to the src sample q0 of U */ 11368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_v = pu1_src + 1; /* Pointer to the src sample q0 of V */ 11378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p1_u, p0_u, q0_u, q1_u, p1_v, p0_v, q0_v, q1_v; 11388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 blk_strd = src_strd; 11398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p1, pos_p0, pos_q0, pos_q1; 11408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp_u, *pu1_src_temp_v; 11418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 edge; 11428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 11448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = 2; 11458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = -2; 11468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = -4; 11478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; 11498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S edge++, pu1_src_u += blk_strd, pu1_src_v += blk_strd) 11508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u = pu1_src_u; 11528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v = pu1_src_v; 11538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_u = pu1_src_temp_u[pos_q0]; 11558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_u = pu1_src_temp_u[pos_q1]; 11568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_u = pu1_src_temp_u[pos_p0]; 11578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_u = pu1_src_temp_u[pos_p1]; 11588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_v = pu1_src_temp_v[pos_q0]; 11598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_v = pu1_src_temp_v[pos_q1]; 11608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_v = pu1_src_temp_v[pos_p0]; 11618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_v = pu1_src_temp_v[pos_p1]; 11628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 11648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_u - q0_u) < alpha) && 11658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_u - q0_u) < beta) && 11668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_u - p0_u) < beta)) 11678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 11698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_p0] = ((X2(p1_u) + p0_u + q1_u + 2) >> 2); 11708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 11718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_q0] = (X2(q1_u) + q0_u + p1_u + 2) >> 2; 11728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 11758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(p0_v - q0_v) < alpha && ABS(q1_v - q0_v) < beta 11768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ABS(p1_v - p0_v) < beta) 11778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 11788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 11798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_p0] = ((X2(p1_v) + p0_v + q1_v + 2) >> 2); 11808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 11818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_q0] = (X2(q1_v) + q0_v + p1_v + 2) >> 2; 11828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 11848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 11858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 11868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 11878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_luma_vert_bslt4_mbaff() */ 11898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a luma block */ 11918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* vertical edge when boundary strength is less than 4. */ 11928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 11938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 */ 11948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 11958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha - alpha value for the boundary */ 11968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta - beta value for the boundary */ 11978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_bs - packed Boundary strength array */ 11988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab - tc0_table */ 11998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 12008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 12018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 12028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : When the function is called twice, this operation is as */ 12038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* described in Sec. 8.7.2.3 under the title "Filtering */ 12048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* process for edges for bS less than 4" in ITU T Rec H.264.*/ 12058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 12068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 12078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 12088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 12098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 12108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 12118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 12128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 12138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 12148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 12158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 29 12 2014 Kaushik Draft */ 12168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Senthoor */ 12178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 12188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 12198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_luma_vert_bslt4_mbaff(UWORD8 *pu1_src, 12208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 12218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha, 12228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta, 12238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs, 12248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cliptab) 12258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 12268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 12278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p2, p1, p0, q0, q1, q2; 12288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p2, pos_p1, pos_p0, pos_q0, pos_q1, pos_q2; 12298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 a_p, a_q; /* Threshold variables */ 12308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 blk_strd = src_strd << 1; /* block_increment = src_strd * 2 */ 12318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp; 12328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 delta; 12338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 tc; 12348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 val; 12358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 tc0, u1_bs; 12368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 12388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = 1; 12398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q2 = 2; 12408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = -1; 12418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = -2; 12428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p2 = -3; 12438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; edge++, pu1_src += blk_strd) 12458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp = pu1_src; 12478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 12488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_bs = (UWORD8)((u4_bs >> ((3 - edge) << 3)) & 0x0ff); 12498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_bs) 12508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 12518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc0 */ 12528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tc0 = pu1_cliptab[u1_bs]; 12538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; ++i, pu1_src_temp += src_strd) 12548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0 = pu1_src_temp[pos_q0]; 12568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1 = pu1_src_temp[pos_q1]; 12578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0 = pu1_src_temp[pos_p0]; 12588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1 = pu1_src_temp[pos_p1]; 12598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 12618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0 - q0) >= alpha) || 12628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1 - q0) >= beta) || 12638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1 - p0) >= beta)) 12648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 12658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q2 = pu1_src_temp[pos_q2]; 12678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p2 = pu1_src_temp[pos_p2]; 12688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S a_p = ABS(p2 - p0); 12708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S a_q = ABS(q2 - q0); 12718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc */ 12738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tc = tc0 + (a_p < beta) + (a_q < beta); 12748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0 - p0) << 2) + (p1 - q1) + 4) >> 3); 12768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tc, tc, val); 12778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 12788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0 + delta; 12798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p0] = CLIP_U8(val); 12808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 12818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0 - delta; 12828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q0] = CLIP_U8(val); 12838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Luma only */ 12858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(a_p < beta) 12868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p1' */ 12888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((p2 + ((p0 + q0 + 1) >> 1) - (p1 << 1)) >> 1); 12898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_p1] += CLIP3(-tc0, tc0, val); 12908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 12928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(a_q < beta) 12938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 12948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q1' */ 12958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((q2 + ((p0 + q0 + 1) >> 1) - (q1 << 1)) >> 1); 12968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp[pos_q1] += CLIP3(-tc0, tc0, val); 12978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 12998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 13018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 13038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_chroma_vert_bslt4_mbaff_bp() */ 13058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a chroma block */ 13078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* vertical edge when boundary strength is less than 4. */ 13088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 of U */ 13108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 13118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha - alpha value for the boundary */ 13128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta - beta value for the boundary */ 13138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_bs - packed Boundary strength array */ 13148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab - tc0_table */ 13158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 13178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : When the function is called twice, this operation is as */ 13198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* described in Sec. 8.7.2.3 under the title "Filtering */ 13208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* process for edges for bS less than 4" in ITU T Rec H.264.*/ 13218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 13238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 13258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 13278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 13298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 13318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 29 12 2014 Kaushik Draft */ 13328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Senthoor */ 13338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 13348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 13358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_chroma_vert_bslt4_mbaff_bp(UWORD8 *pu1_src, 13368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 13378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha, 13388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta, 13398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs, 13408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cliptab) 13418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 13428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_u = pu1_src; /* Pointer to the src sample q0 of plane U*/ 13438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_v = pu1_src + 1; /* Pointer to the src sample q0 of plane V*/ 13448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p1_u, p0_u, q0_u, q1_u, p1_v, p0_v, q0_v, q1_v; 13458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 blk_strd = src_strd; 13468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p1, pos_p0, pos_q0, pos_q1; 13478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp_u, *pu1_src_temp_v; 13488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 edge; 13498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 delta; 13508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 tc; 13518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 val; 13528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 tc0, u1_bs; 13538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 13558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = 2; 13568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = -2; 13578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = -4; 13588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; 13608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S edge++, pu1_src_u += blk_strd, pu1_src_v += blk_strd) 13618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u = pu1_src_u; 13638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v = pu1_src_v; 13648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 13658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_bs = (UWORD8)((u4_bs >> ((3 - edge) << 3)) & 0x0ff); 13668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_bs) 13678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 13688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc0 */ 13698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tc0 = pu1_cliptab[u1_bs]; 13708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tc = tc0 + 1; 13718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_u = pu1_src_temp_u[pos_q0]; 13738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_u = pu1_src_temp_u[pos_q1]; 13748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_u = pu1_src_temp_u[pos_p0]; 13758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_u = pu1_src_temp_u[pos_p1]; 13768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_v = pu1_src_temp_v[pos_q0]; 13788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_v = pu1_src_temp_v[pos_q1]; 13798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_v = pu1_src_temp_v[pos_p0]; 13808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_v = pu1_src_temp_v[pos_p1]; 13818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 13838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_u - q0_u) < alpha) && 13848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_u - q0_u) < beta) && 13858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_u - p0_u) < beta)) 13868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 13878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0_u - p0_u) << 2) + (p1_u - q1_u) + 4) >> 3); 13888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tc, tc, val); 13898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 13908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0_u + delta; 13918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_p0] = CLIP_U8(val); 13928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 13938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0_u - delta; 13948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_q0] = CLIP_U8(val); 13958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 13968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 13978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 13988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_v - q0_v) < alpha) && 13998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_v - q0_v) < beta) && 14008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_v - p0_v) < beta)) 14018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0_v - p0_v) << 2) + (p1_v - q1_v) + 4) >> 3); 14038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tc, tc, val); 14048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 14058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0_v + delta; 14068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_p0] = CLIP_U8(val); 14078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 14088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0_v - delta; 14098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_q0] = CLIP_U8(val); 14108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 14128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 14138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 14158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Definitions for chroma deblocking in high profile */ 14168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 14178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 14198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_chroma_vert_bs4() */ 14218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a chroma block */ 14238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* vertical edge when the boundary strength is set to 4 in */ 14248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* high profile. */ 14258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 of U */ 14278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 14288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha_cb - alpha value for the boundary in U */ 14298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta_cb - beta value for the boundary in U */ 14308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha_cr - alpha value for the boundary in V */ 14318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta_cr - beta value for the boundary in V */ 14328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 14348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This operation is described in Sec. 8.7.2.4 under the */ 14368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* title "Filtering process for edges for bS equal to 4" in */ 14378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ITU T Rec H.264 with alpha and beta values different in */ 14388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* U and V. */ 14398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 14418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 14438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 14458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 14478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 14498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 29 12 2014 Kaushik Draft */ 14508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Senthoor */ 14518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 14528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 14538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_chroma_vert_bs4(UWORD8 *pu1_src, 14548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 14558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha_cb, 14568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta_cb, 14578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha_cr, 14588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta_cr) 14598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 14608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_u = pu1_src; /* Pointer to the src sample q0 of U */ 14618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_v = pu1_src + 1; /* Pointer to the src sample q0 of V */ 14628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p1_u, p0_u, q0_u, q1_u, p1_v, p0_v, q0_v, q1_v; 14638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 blk_strd = src_strd << 1; /* block_increment = src_strd * 2*/ 14648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p1, pos_p0, pos_q0, pos_q1; 14658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp_u, *pu1_src_temp_v; 14668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 14678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 14698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = 2; 14708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = -2; 14718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = -4; 14728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; 14748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S edge++, pu1_src_u += blk_strd, pu1_src_v += blk_strd) 14758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u = pu1_src_u; 14778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v = pu1_src_v; 14788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; ++i, pu1_src_temp_u += src_strd, pu1_src_temp_v += 14798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S src_strd) 14808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_u = pu1_src_temp_u[pos_q0]; 14828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_u = pu1_src_temp_u[pos_q1]; 14838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_u = pu1_src_temp_u[pos_p0]; 14848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_u = pu1_src_temp_u[pos_p1]; 14858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_v = pu1_src_temp_v[pos_q0]; 14868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_v = pu1_src_temp_v[pos_q1]; 14878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_v = pu1_src_temp_v[pos_p0]; 14888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_v = pu1_src_temp_v[pos_p1]; 14898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 14908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 14918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_u - q0_u) < alpha_cb) && 14928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_u - q0_u) < beta_cb) && 14938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_u - p0_u) < beta_cb)) 14948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 14958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 14968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_p0] = ((X2(p1_u) + p0_u + q1_u + 2) >> 2); 14978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 14988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_q0] = (X2(q1_u) + q0_u + p1_u + 2) >> 2; 14998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 15028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_v - q0_v) < alpha_cr) && 15038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_v - q0_v) < beta_cr) && 15048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_v - p0_v) < beta_cr)) 15058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 15078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_p0] = ((X2(p1_v) + p0_v + q1_v + 2) >> 2); 15088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 15098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_q0] = (X2(q1_v) + q0_v + p1_v + 2) >> 2; 15108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 15138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 15148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 15168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_chroma_horz_bs4() */ 15188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a chroma block */ 15208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* horizontal edge when the boundary strength is set to 4 */ 15218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in high profile. */ 15228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 of U */ 15248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 15258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha_cb - alpha value for the boundary in U */ 15268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta_cb - beta value for the boundary in U */ 15278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha_cr - alpha value for the boundary in V */ 15288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta_cr - beta value for the boundary in V */ 15298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 15318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This operation is described in Sec. 8.7.2.4 under the */ 15338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* title "Filtering process for edges for bS equal to 4" in */ 15348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* ITU T Rec H.264 with alpha and beta values different in */ 15358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* U and V. */ 15368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 15388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 15408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 15428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 15448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 15468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 29 12 2014 Kaushik Draft */ 15478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Senthoor */ 15488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 15498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 15508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_chroma_horz_bs4(UWORD8 *pu1_src, 15518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 15528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha_cb, 15538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta_cb, 15548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha_cr, 15558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta_cr) 15568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 15578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_u = pu1_src; /* Pointer to the src sample q0 of U */ 15588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_v = pu1_src + 1; /* Pointer to the src sample q0 of V */ 15598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p1_u, p0_u, q0_u, q1_u, p1_v, p0_v, q0_v, q1_v; 15608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p1, pos_p0, pos_q0, pos_q1; 15618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp_u, *pu1_src_temp_v; 15628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p1_u; /* Pointer to the src sample p1 of U */ 15638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p1_v; /* Pointer to the src sample p1 of U */ 15648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p1_temp_u, *pu1_p1_temp_v; 15658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 15668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_u = pu1_src_u - (src_strd << 1); 15688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_v = pu1_src_v - (src_strd << 1); 15698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 15708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = src_strd; 15718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = src_strd; 15728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = 0; 15738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; edge++, pu1_src_u += 4, pu1_p1_u += 4, pu1_src_v += 15758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 4, pu1_p1_v += 4) 15768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u = pu1_src_u; 15788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_u = pu1_p1_u; 15798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v = pu1_src_v; 15808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_v = pu1_p1_v; 15818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; ++i, pu1_src_temp_u += 2, pu1_p1_temp_u += 2, 15828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v += 2, pu1_p1_temp_v += 2) 15838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_u = pu1_src_temp_u[pos_q0]; 15858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_u = pu1_src_temp_u[pos_q1]; 15868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_u = pu1_p1_temp_u[pos_p0]; 15878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_u = pu1_p1_temp_u[pos_p1]; 15888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_v = pu1_src_temp_v[pos_q0]; 15908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_v = pu1_src_temp_v[pos_q1]; 15918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_v = pu1_p1_temp_v[pos_p0]; 15928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_v = pu1_p1_temp_v[pos_p1]; 15938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 15948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 15958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(p0_u - q0_u) < alpha_cb && ABS(q1_u - q0_u) < beta_cb 15968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ABS(p1_u - p0_u) < beta_cb) 15978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 15988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 15998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_u[pos_p0] = (X2(p1_u) + p0_u + q1_u + 2) >> 2; 16008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 16018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_q0] = (X2(q1_u) + q0_u + p1_u + 2) >> 2; 16028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 16058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(p0_v - q0_v) < alpha_cr && ABS(q1_v - q0_v) < beta_cr 16068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ABS(p1_v - p0_v) < beta_cr) 16078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 16098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_v[pos_p0] = (X2(p1_v) + p0_v + q1_v + 2) >> 2; 16108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 16118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_q0] = (X2(q1_v) + q0_v + p1_v + 2) >> 2; 16128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 16158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 16168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 16188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_chroma_vert_bslt4() */ 16208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a chroma block */ 16228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* vertical edge when the boundary strength is less than 4 */ 16238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in high profile. */ 16248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 of U */ 16268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 16278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha_cb - alpha value for the boundary in U */ 16288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta_cb - beta value for the boundary in U */ 16298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha_cr - alpha value for the boundary in V */ 16308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta_cr - beta value for the boundary in V */ 16318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_bs - packed Boundary strength array */ 16328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab_cb - tc0_table for U */ 16338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab_cr - tc0_table for V */ 16348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 16368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This operation is described in Sec. 8.7.2.3 under the */ 16388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* title "Filtering process for edges for bS less than 4" */ 16398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in ITU T Rec H.264 with alpha and beta values different */ 16408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in U and V. */ 16418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 16438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 16458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 16478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 16498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 16518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 29 12 2014 Kaushik Draft */ 16528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Senthoor */ 16538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 16548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 16558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_chroma_vert_bslt4(UWORD8 *pu1_src, 16568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 16578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha_cb, 16588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta_cb, 16598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha_cr, 16608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta_cr, 16618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs, 16628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cliptab_cb, 16638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cliptab_cr) 16648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 16658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_u = pu1_src; /* Pointer to the src sample q0 of plane U*/ 16668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_v = pu1_src + 1; /* Pointer to the src sample q0 of plane V*/ 16678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p1_u, p0_u, q0_u, q1_u, p1_v, p0_v, q0_v, q1_v; 16688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 blk_strd = src_strd << 1; /* block_increment = src_strd * 2 */ 16698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p1, pos_p0, pos_q0, pos_q1; 16708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp_u, *pu1_src_temp_v; 16718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 16728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 delta; 16738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 tcb, tcr; 16748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 val; 16758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 tcb0, tcr0, u1_bs; 16768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 16788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = 2; 16798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = -2; 16808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = -4; 16818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 16828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; 16838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S edge++, pu1_src_u += blk_strd, pu1_src_v += blk_strd) 16848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u = pu1_src_u; 16868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v = pu1_src_v; 16878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 16888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_bs = (UWORD8)((u4_bs >> ((3 - edge) << 3)) & 0x0ff); 16898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_bs) 16908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 16918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc0 */ 16928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tcb0 = pu1_cliptab_cb[u1_bs]; 16938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tcr0 = pu1_cliptab_cr[u1_bs]; 16948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tcb = tcb0 + 1; 16958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tcr = tcr0 + 1; 16968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; ++i, pu1_src_temp_u += src_strd, pu1_src_temp_v += 16978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S src_strd) 16988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 16998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_u = pu1_src_temp_u[pos_q0]; 17008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_u = pu1_src_temp_u[pos_q1]; 17018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_u = pu1_src_temp_u[pos_p0]; 17028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_u = pu1_src_temp_u[pos_p1]; 17038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_v = pu1_src_temp_v[pos_q0]; 17058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_v = pu1_src_temp_v[pos_q1]; 17068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_v = pu1_src_temp_v[pos_p0]; 17078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_v = pu1_src_temp_v[pos_p1]; 17088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 17108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(p0_u - q0_u) < alpha_cb && ABS(q1_u - q0_u) < beta_cb 17118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ABS(p1_u - p0_u) < beta_cb) 17128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0_u - p0_u) << 2) + (p1_u - q1_u) + 4) >> 3); 17148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tcb, tcb, val); 17158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 17168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0_u + delta; 17178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_p0] = CLIP_U8(val); 17188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 17198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0_u - delta; 17208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_q0] = CLIP_U8(val); 17218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 17248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(p0_v - q0_v) < alpha_cr && ABS(q1_v - q0_v) < beta_cr 17258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ABS(p1_v - p0_v) < beta_cr) 17268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 17278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0_v - p0_v) << 2) + (p1_v - q1_v) + 4) >> 3); 17288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tcr, tcr, val); 17298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 17308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0_v + delta; 17318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_p0] = CLIP_U8(val); 17328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 17338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0_v - delta; 17348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_q0] = CLIP_U8(val); 17358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 17388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 17398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 17408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 17418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 17428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_chroma_horz_bslt4() */ 17438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 17448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a chroma block */ 17458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* horizontal edge when the boundary strength is less than */ 17468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 4 in high profile. */ 17478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 17488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 of U */ 17498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 17508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha_cb - alpha value for the boundary in U */ 17518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta_cb - beta value for the boundary in U */ 17528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha_cr - alpha value for the boundary in V */ 17538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta_cr - beta value for the boundary in V */ 17548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_bs - packed Boundary strength array */ 17558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab_cb - tc0_table for U */ 17568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab_cr - tc0_table for V */ 17578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 17588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 17598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 17608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : This operation is described in Sec. 8.7.2.3 under the */ 17618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* title "Filtering process for edges for bS less than 4" */ 17628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in ITU T Rec H.264 with alpha and beta values different */ 17638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* in U and V. */ 17648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 17658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 17668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 17678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 17688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 17698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 17708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 17718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 17728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 17738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 17748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 29 12 2014 Kaushik Draft */ 17758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Senthoor */ 17768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 17778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 17788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_chroma_horz_bslt4(UWORD8 *pu1_src, 17798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 17808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha_cb, 17818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta_cb, 17828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha_cr, 17838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta_cr, 17848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs, 17858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cliptab_cb, 17868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cliptab_cr) 17878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 17888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_u = pu1_src; /* Pointer to the src sample q0 of plane U*/ 17898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_v = pu1_src + 1; /* Pointer to the src sample q0 of plane V*/ 17908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p1_u, p0_u, q0_u, q1_u, p1_v, p0_v, q0_v, q1_v; 17918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p1, pos_p0, pos_q0, pos_q1; 17928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp_u, *pu1_src_temp_v; 17938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p1_u; /* Pointer to the src sample p1 of plane U*/ 17948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p1_v; /* Pointer to the src sample p1 of plane V*/ 17958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_p1_temp_u, *pu1_p1_temp_v; 17968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 i = 0, edge; 17978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 delta; 17988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 tcb, tcr; 17998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 val; 18008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 u1_bs; 18018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 tcb0, tcr0; 18028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_u = pu1_src_u - (src_strd << 1); 18048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_v = pu1_src_v - (src_strd << 1); 18058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 18068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = src_strd; 18078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = src_strd; 18088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = 0; 18098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; edge++, pu1_src_u += 4, pu1_p1_u += 4, 18118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_v += 4, pu1_p1_v += 4) 18128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u = pu1_src_u; 18148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_u = pu1_p1_u; 18158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v = pu1_src_v; 18168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_v = pu1_p1_v; 18178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 18198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_bs = (UWORD8)((u4_bs >> ((3 - edge) << 3)) & 0x0ff); 18208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_bs) 18218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 18228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc0 */ 18238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tcb0 = pu1_cliptab_cb[u1_bs]; 18248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tcr0 = pu1_cliptab_cr[u1_bs]; 18258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < 2; ++i, pu1_src_temp_u += 2, pu1_p1_temp_u += 2, 18278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v += 2, pu1_p1_temp_v += 2) 18288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_u = pu1_src_temp_u[pos_q0]; 18308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_u = pu1_src_temp_u[pos_q1]; 18318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_u = pu1_p1_temp_u[pos_p0]; 18328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_u = pu1_p1_temp_u[pos_p1]; 18338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_v = pu1_src_temp_v[pos_q0]; 18358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_v = pu1_src_temp_v[pos_q1]; 18368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_v = pu1_p1_temp_v[pos_p0]; 18378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_v = pu1_p1_temp_v[pos_p1]; 18388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc */ 18408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tcb = tcb0 + 1; 18418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tcr = tcr0 + 1; 18428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 18438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(p0_u - q0_u) < alpha_cb && ABS(q1_u - q0_u) < beta_cb 18448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ABS(p1_u - p0_u) < beta_cb) 18458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0_u - p0_u) << 2) + (p1_u - q1_u) + 4) >> 3); 18478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tcb, tcb, val); 18488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 18498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0_u + delta; 18508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_u[pos_p0] = CLIP_U8(val); 18518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 18528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0_u - delta; 18538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_q0] = CLIP_U8(val); 18548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 18568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(ABS(p0_v - q0_v) < alpha_cr && ABS(q1_v - q0_v) < beta_cr 18578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S && ABS(p1_v - p0_v) < beta_cr) 18588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 18598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0_v - p0_v) << 2) + (p1_v - q1_v) + 4) >> 3); 18608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tcr, tcr, val); 18618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 18628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0_v + delta; 18638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_p1_temp_v[pos_p0] = CLIP_U8(val); 18648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 18658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0_v - delta; 18668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_q0] = CLIP_U8(val); 18678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 18708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 18718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 18728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 18738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_chroma_vert_bs4_mbaff() */ 18758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a chroma block */ 18778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* vertical edge when boundary strength is set to 4 in high */ 18788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* profile. */ 18798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 of U */ 18818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 18828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha_cb - alpha value for the boundary in U */ 18838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta_cb - beta value for the boundary in U */ 18848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha_cr - alpha value for the boundary in V */ 18858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta_cr - beta value for the boundary in V */ 18868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_bs - packed Boundary strength array */ 18878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab_cb - tc0_table for U */ 18888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab_cr - tc0_table for V */ 18898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 18918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : When the function is called twice, this operation is as */ 18938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* described in Sec. 8.7.2.4 under the title "Filtering */ 18948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* process for edges for bS equal to 4" in ITU T Rec H.264 */ 18958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* with alpha and beta values different in U and V. */ 18968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 18988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 18998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 19008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 19028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 19048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 19068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 29 12 2014 Kaushik Draft */ 19078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Senthoor */ 19088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 19108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_chroma_vert_bs4_mbaff(UWORD8 *pu1_src, 19118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 19128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha_cb, 19138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta_cb, 19148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha_cr, 19158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta_cr) 19168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 19178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_u = pu1_src; /* Pointer to the src sample q0 of U */ 19188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_v = pu1_src + 1; /* Pointer to the src sample q0 of V */ 19198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p1_u, p0_u, q0_u, q1_u, p1_v, p0_v, q0_v, q1_v; 19208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 blk_strd = src_strd; 19218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p1, pos_p0, pos_q0, pos_q1; 19228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp_u, *pu1_src_temp_v; 19238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 edge; 19248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 19268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = 2; 19278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = -2; 19288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = -4; 19298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; 19318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S edge++, pu1_src_u += blk_strd, pu1_src_v += blk_strd) 19328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u = pu1_src_u; 19348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v = pu1_src_v; 19358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_u = pu1_src_temp_u[pos_q0]; 19368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_u = pu1_src_temp_u[pos_q1]; 19378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_u = pu1_src_temp_u[pos_p0]; 19388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_u = pu1_src_temp_u[pos_p1]; 19398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_v = pu1_src_temp_v[pos_q0]; 19408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_v = pu1_src_temp_v[pos_q1]; 19418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_v = pu1_src_temp_v[pos_p0]; 19428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_v = pu1_src_temp_v[pos_p1]; 19438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 19458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_u - q0_u) < alpha_cb) && 19468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_u - q0_u) < beta_cb) && 19478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_u - p0_u) < beta_cb)) 19488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 19508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_p0] = ((X2(p1_u) + p0_u + q1_u + 2) >> 2); 19518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 19528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_q0] = (X2(q1_u) + q0_u + p1_u + 2) >> 2; 19538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 19568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_v - q0_v) < alpha_cr) && 19578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_v - q0_v) < beta_cr) && 19588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_v - p0_v) < beta_cr)) 19598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 19608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 19618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_p0] = ((X2(p1_v) + p0_v + q1_v + 2) >> 2); 19628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 19638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_q0] = (X2(q1_v) + q0_v + p1_v + 2) >> 2; 19648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 19668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 19678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 19688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 19698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Name : ih264_deblk_chroma_vert_bslt4_mbaff() */ 19718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Description : This function performs filtering of a chroma block */ 19738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* vertical edge when boundary strength is less than 4 in */ 19748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* high profile. */ 19758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Inputs : pu1_src - pointer to the src sample q0 of U */ 19778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* src_strd - source stride */ 19788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha_cb - alpha value for the boundary in U */ 19798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta_cb - beta value for the boundary in U */ 19808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* alpha_cr - alpha value for the boundary in V */ 19818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* beta_cr - beta value for the boundary in V */ 19828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* u4_bs - packed Boundary strength array */ 19838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab_cb - tc0_table for U */ 19848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* pu1_cliptab_cr - tc0_table for V */ 19858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Globals : None */ 19878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Processing : When the function is called twice, this operation is as */ 19898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* described in Sec. 8.7.2.4 under the title "Filtering */ 19908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* process for edges for bS less than 4" in ITU T Rec H.264 */ 19918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* with alpha and beta values different in U and V. */ 19928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Outputs : None */ 19948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Returns : None */ 19968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Issues : None */ 19988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 19998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Revision History: */ 20008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 20028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* 29 12 2014 Kaushik Draft */ 20038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Senthoor */ 20048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* */ 20058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 20068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264_deblk_chroma_vert_bslt4_mbaff(UWORD8 *pu1_src, 20078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 src_strd, 20088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha_cb, 20098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta_cb, 20108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 alpha_cr, 20118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 beta_cr, 20128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 u4_bs, 20138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cliptab_cb, 20148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S const UWORD8 *pu1_cliptab_cr) 20158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 20168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_u = pu1_src; /* Pointer to the src sample q0 of plane U*/ 20178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_v = pu1_src + 1; /* Pointer to the src sample q0 of plane V*/ 20188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 p1_u, p0_u, q0_u, q1_u, p1_v, p0_v, q0_v, q1_v; 20198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 blk_strd = src_strd; 20208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 pos_p1, pos_p0, pos_q0, pos_q1; 20218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 *pu1_src_temp_u, *pu1_src_temp_v; 20228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 edge; 20238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 delta; 20248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD8 tcb, tcr; 20258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD16 val; 20268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD8 tcb0, tcr0, u1_bs; 20278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q0 = 0; 20298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_q1 = 2; 20308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p0 = -2; 20318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pos_p1 = -4; 20328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(edge = 0; edge < 4; 20348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S edge++, pu1_src_u += blk_strd, pu1_src_v += blk_strd) 20358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u = pu1_src_u; 20378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v = pu1_src_v; 20388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 20398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S u1_bs = (UWORD8)((u4_bs >> ((3 - edge) << 3)) & 0x0ff); 20408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if(!u1_bs) 20418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S continue; 20428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* tc0 */ 20438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tcb0 = pu1_cliptab_cb[u1_bs]; 20448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tcr0 = pu1_cliptab_cr[u1_bs]; 20458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tcb = tcb0 + 1; 20468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S tcr = tcr0 + 1; 20478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_u = pu1_src_temp_u[pos_q0]; 20488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_u = pu1_src_temp_u[pos_q1]; 20498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_u = pu1_src_temp_u[pos_p0]; 20508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_u = pu1_src_temp_u[pos_p1]; 20518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q0_v = pu1_src_temp_v[pos_q0]; 20538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S q1_v = pu1_src_temp_v[pos_q1]; 20548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p0_v = pu1_src_temp_v[pos_p0]; 20558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S p1_v = pu1_src_temp_v[pos_p1]; 20568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 20588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_u - q0_u) < alpha_cb) && 20598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_u - q0_u) < beta_cb) && 20608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_u - p0_u) < beta_cb)) 20618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0_u - p0_u) << 2) + (p1_u - q1_u) + 4) >> 3); 20638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tcb, tcb, val); 20648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 20658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0_u + delta; 20668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_p0] = CLIP_U8(val); 20678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 20688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0_u - delta; 20698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_u[pos_q0] = CLIP_U8(val); 20708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 20728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Filter Decision */ 20738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if((ABS(p0_v - q0_v) < alpha_cr) && 20748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(q1_v - q0_v) < beta_cr) && 20758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S (ABS(p1_v - p0_v) < beta_cr)) 20768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 20778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = ((((q0_v - p0_v) << 2) + (p1_v - q1_v) + 4) >> 3); 20788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S delta = CLIP3(-tcr, tcr, val); 20798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* p0' */ 20808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = p0_v + delta; 20818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_p0] = CLIP_U8(val); 20828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* q0' */ 20838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S val = q0_v - delta; 20848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S pu1_src_temp_v[pos_q0] = CLIP_U8(val); 20858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 20878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 2088