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