180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/******************************************************************************
280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar *
380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar * Copyright (C) 2015 The Android Open Source Project
480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar *
580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar * Licensed under the Apache License, Version 2.0 (the "License");
680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar * you may not use this file except in compliance with the License.
780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar * You may obtain a copy of the License at:
880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar *
980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar * http://www.apache.org/licenses/LICENSE-2.0
1080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar *
1180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar * Unless required by applicable law or agreed to in writing, software
1280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar * distributed under the License is distributed on an "AS IS" BASIS,
1380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar * See the License for the specific language governing permissions and
1580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar * limitations under the License.
1680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar *
1780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar *****************************************************************************
1880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
1980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*/
2080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/**
2180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
2280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @file
2380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  ideint_utils.c
2480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
2580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @brief
2680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  This file contains the definitions of the core  processing of the de
2780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* interlacer.
2880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
2980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @author
3080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Ittiam
3180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
3280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @par List of Functions:
3380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  ideint_weave_pic()
3480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  init_bob_indices()
3580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  ideint_weave_blk()
3680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  ideint_spatial_filter()
3780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
3880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @remarks
3980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  None
4080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
4180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
4280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*/
4380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/*****************************************************************************/
4480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/* File Includes                                                             */
4580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/*****************************************************************************/
4680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/* System include files */
4780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include <stdio.h>
4880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include <stdint.h>
4980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include <string.h>
5080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include <stdlib.h>
5180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include <assert.h>
5280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
5380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
5480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/* User include files */
5580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "icv_datatypes.h"
5680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "icv_macros.h"
5780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "icv_platform_macros.h"
5880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "icv.h"
5980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "icv_variance.h"
6080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "icv_sad.h"
6180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "ideint.h"
6280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "ideint_defs.h"
6380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "ideint_structs.h"
6480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "ideint_utils.h"
6580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "ideint_cac.h"
6680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
6780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/**
6880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
6980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
7080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @brief
7180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Weaves two fields to produce a frame
7280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
7380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @par   Description
7480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Weaves two fields to produce a frame
7580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
7680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] ps_src_top
7780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Top field source
7880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
7980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] ps_src_bot
8080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Bottom field source
8180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
8280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] ps_dst_frm
8380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Destination frame
8480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
8580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @returns
8680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*   0 on Success
8780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
8880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @remarks
8980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
9080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
9180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*/
9280a14110036632549a272c812f92b791fb08e87aHarish MahendrakarWORD32 ideint_weave_pic(icv_pic_t *ps_src_top,
9380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                        icv_pic_t *ps_src_bot,
9480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                        icv_pic_t *ps_dst_frm,
9580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                        WORD32 start_row,
9680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                        WORD32 num_rows)
9780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar{
9880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    UWORD8 *pu1_src, *pu1_dst;
9980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 i, j, num_comp;
10080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    icv_pic_t *ps_src_fld;
10180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 fld;
10280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    icv_pic_t *ps_src_flds[2];
10380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
10480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    num_comp = 3;
10580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    ps_src_flds[0] = ps_src_top;
10680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    ps_src_flds[1] = ps_src_bot;
10780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
10880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    for(fld = 0; fld < 2; fld++)
10980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    {
11080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        ps_src_fld = ps_src_flds[fld];
11180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        for(i = 0; i < num_comp; i++)
11280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        {
11380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            WORD32 src_strd;
11480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            WORD32 dst_strd;
11580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            WORD32 comp_row_start, comp_row_end;
11680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            comp_row_start = start_row;
11780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            comp_row_end = comp_row_start + num_rows;
11880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            if(i)
11980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            {
12080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                comp_row_start >>= 1;
12180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                comp_row_end >>= 1;
12280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            }
12380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
12480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            comp_row_end = MIN(comp_row_end, ps_dst_frm->ai4_ht[i]);
12580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
12680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            pu1_src = ps_src_fld->apu1_buf[i];
12780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            pu1_dst = ps_dst_frm->apu1_buf[i];
12880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
12980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            src_strd = ps_src_fld->ai4_strd[i];
13080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            dst_strd = ps_dst_frm->ai4_strd[i];
13180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
13280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            /* If source field is bottom, increment destination */
13380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            pu1_dst += fld * dst_strd;
13480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
13580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            /* In case input and output are pointing to same buffer, then no need to copy */
13680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            if((pu1_src != pu1_dst) || ((2 * dst_strd) != src_strd))
13780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            {
13880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                pu1_dst += ps_dst_frm->ai4_strd[i] * comp_row_start;
13980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                pu1_src += ps_src_fld->ai4_strd[i] * comp_row_start / 2;
14080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
14180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                for(j = comp_row_start; j < comp_row_end; j += 2)
14280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                {
14380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                    memcpy(pu1_dst, pu1_src, ps_dst_frm->ai4_wd[i]);
14480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                    pu1_dst += ps_dst_frm->ai4_strd[i] * 2;
14580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                    pu1_src += ps_src_fld->ai4_strd[i];
14680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                }
14780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            }
14880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        }
14980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    }
15080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    return 0;
15180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar}
15280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
15380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
15480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/**
15580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
15680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
15780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @brief
15880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Weaves a 8x8 block
15980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
16080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @par   Description
16180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Weaves a 8x8 block from two fields
16280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
16380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] pu1_top
16480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Top field source
16580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
16680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] pu1_bot
16780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Bottom field source
16880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
16980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] pu1_dst
17080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Destination
17180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
17280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] dst_strd
17380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Destination stride
17480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
17580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] src_strd
17680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Source stride
17780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
17880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @returns
17980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  0 on success
18080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
18180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @remarks
18280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
18380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
18480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*/
18580a14110036632549a272c812f92b791fb08e87aHarish MahendrakarWORD32 ideint_weave_blk(UWORD8 *pu1_top,
18680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                        UWORD8 *pu1_bot,
18780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                        UWORD8 *pu1_dst,
18880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                        WORD32 dst_strd,
18980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                        WORD32 src_strd,
19080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                        WORD32 wd,
19180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                        WORD32 ht)
19280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar{
19380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 j;
19480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
19580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    for(j = 0; j < ht; j += 2)
19680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    {
19780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        memcpy(pu1_dst, pu1_top, wd);
19880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_dst += dst_strd;
19980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_top += src_strd;
20080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
20180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        memcpy(pu1_dst, pu1_bot, wd);
20280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_dst += dst_strd;
20380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_bot += src_strd;
20480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    }
20580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    return 0;
20680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar}
20780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
20880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/**
20980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
21080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
21180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @brief
21280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Copy a boundary block and pad
21380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
21480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @par   Description
21580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Copies a block on one of the boundaries and pads
21680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
21780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] pu1_top
21880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Top field source
21980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
22080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] pu1_bot
22180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Bottom field source
22280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
22380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] pu1_pad
22480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Padded destination
22580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
22680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] cur_strd
22780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Stride for pu1_top and pu1_bot
22880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
22980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] row
23080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Current block's row
23180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
23280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] col
23380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Current block's column
23480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
23580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] num_blks_y
23680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Number of blocks in Y direction
23780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
23880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] num_blks_x
23980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Number of blocks in X direction
24080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
24180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @returns
24280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  None
24380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
24480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @remarks
24580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
24680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
24780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*/
24880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakarvoid ideint_pad_blk(UWORD8 *pu1_top,
24980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                    UWORD8 *pu1_bot,
25080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                    UWORD8 *pu1_pad,
25180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                    WORD32 cur_strd,
25280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                    WORD32 row,
25380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                    WORD32 col,
25480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                    WORD32 num_blks_y,
25580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                    WORD32 num_blks_x,
25680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                    WORD32 blk_wd,
25780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                    WORD32 blk_ht)
25880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar{
25980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 i;
26080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 num_cols, num_rows;
26180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    UWORD8 *pu1_dst;
26280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    UWORD8 *pu1_src_top;
26380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    UWORD8 *pu1_src_bot;
26480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
26580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    num_rows = blk_ht + 4;
26680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    num_cols = blk_wd + 4;
26780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
26880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    pu1_src_top = pu1_top - cur_strd - 2;
26980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    pu1_src_bot = pu1_bot - cur_strd - 2;
27080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    pu1_dst = pu1_pad;
27180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
27280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    if(0 == col)
27380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    {
27480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        num_cols -= 2;
27580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_dst += 2;
27680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_src_top += 2;
27780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_src_bot += 2;
27880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    }
27980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
28080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    if(0 == row)
28180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    {
28280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        num_rows -= 2;
28380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_dst += 2 * (BLK_WD + 4);
28480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_src_top += cur_strd;
28580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_src_bot += cur_strd;
28680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    }
28780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
28880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    if((num_blks_x - 1) == col)
28980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        num_cols -= 2;
29080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
29180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    if((num_blks_y - 1) == row)
29280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        num_rows -= 2;
29380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
29480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    for(i = 0; i < num_rows; i += 2)
29580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    {
29680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        memcpy(pu1_dst, pu1_src_top, num_cols);
29780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_dst += (BLK_WD + 4);
29880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
29980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        memcpy(pu1_dst, pu1_src_bot, num_cols);
30080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_dst += (BLK_WD + 4);
30180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
30280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_src_top += cur_strd;
30380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_src_bot += cur_strd;
30480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    }
30580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
30680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
30780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /* Pad Left */
30880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    if(0 == col)
30980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    {
31080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar       for(i = 0; i < (BLK_HT + 4); i++)
31180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar       {
31280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar           WORD32 ofst = i * (BLK_WD + 4) + 2;
31380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar           pu1_pad[ofst - 1] = pu1_pad[ofst];
31480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar           pu1_pad[ofst - 2] = pu1_pad[ofst];
31580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar       }
31680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    }
31780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
31880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /* Pad right */
31980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    if((num_blks_x - 1) == col)
32080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    {
32180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar       for(i = 0; i < (BLK_HT + 4); i++)
32280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar       {
32380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar           WORD32 ofst =  i * (BLK_WD + 4) + 2 + blk_wd - 1;
32480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar           WORD32 size = (BLK_WD - blk_wd) + 2;
32580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar           /* Padding on right should include padding for boundary
32680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            * blocks when width is non-multiple of 8
32780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            */
32880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar           memset(&pu1_pad[ofst + 1], pu1_pad[ofst], size);
32980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar       }
33080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    }
33180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
33280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /* Pad Top */
33380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    if(0 == row)
33480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    {
33580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        WORD32 src_ofst = 2 * (BLK_WD + 4);
33680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        WORD32 dst_ofst = 0;
33780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        memcpy(pu1_pad + dst_ofst, pu1_pad + src_ofst, (BLK_WD + 4));
33880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        src_ofst += (BLK_WD + 4);
33980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        dst_ofst += (BLK_WD + 4);
34080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        memcpy(pu1_pad + dst_ofst, pu1_pad + src_ofst, (BLK_WD + 4));
34180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    }
34280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
34380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /* Pad Bottom */
34480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    if((num_blks_y - 1) == row)
34580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    {
34680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        WORD32 src_ofst = (0 + blk_ht) * (BLK_WD + 4);
34780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        WORD32 dst_ofst = (1 + blk_ht) * (BLK_WD + 4);
34880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        WORD32 size = (BLK_HT - blk_ht) + 2;
34980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
35080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /* Padding on bottom should include padding for boundary
35180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar         * blocks when height is non-multiple of 8
35280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar         */
35380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        for(i = 0; i < size; i++)
35480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        {
35580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            memcpy(pu1_pad + dst_ofst, pu1_pad + src_ofst, (BLK_WD + 4));
35680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            dst_ofst += (BLK_WD + 4);
35780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        }
35880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    }
35980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar}
36080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
36180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/**
36280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
36380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
36480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @brief
36580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Performs spatial edge adaptive filtering
36680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
36780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @par   Description
36880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Performs spatial edge adaptive filtering by detecting edge direction
36980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
37080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] pu1_src
37180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Source buffer
37280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
37380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] pu1_out
37480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Destination buffer
37580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
37680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] src_strd
37780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Source stride
37880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
37980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] out_strd
38080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Destination stride
38180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
38280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @returns
38380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* None
38480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
38580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @remarks
38680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
38780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
38880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*/
38980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakarvoid ideint_spatial_filter(UWORD8 *pu1_src,
39080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                           UWORD8 *pu1_out,
39180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                           WORD32 src_strd,
39280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                           WORD32 out_strd)
39380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar{
39480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 i;
39580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 j;
39680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 k;
39780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
39880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /*********************************************************************/
39980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /* This loop is for the two halves inside the 8x4 block.             */
40080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /*********************************************************************/
40180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    for(k = 0; k < 2; k++)
40280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    {
40380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        WORD32 adiff[3] = {0, 0, 0};
40480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        WORD32 shift;
40580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        WORD32 dir_45_le_90, dir_45_le_135, dir_135_le_90;
40680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        UWORD8 *pu1_row_1, *pu1_row_2, *pu1_dst;
40780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
40880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /*****************************************************************/
40980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /* Direction detection                                           */
41080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /*****************************************************************/
41180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_row_1 = pu1_src;
41280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_row_2 = pu1_src + src_strd;
41380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
41480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /*****************************************************************/
41580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /* Calculating the difference along each of the 3 directions.    */
41680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /*****************************************************************/
41780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        for(j = 0; j < SUB_BLK_HT; j ++)
41880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        {
41980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            for(i = 0; i < SUB_BLK_WD; i++)
42080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            {
42180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                adiff[0] += ABS_DIF(pu1_row_1[i], pu1_row_2[i]); /*  90 */
42280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
42380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                adiff[1] += ABS_DIF(pu1_row_1[i - 1], pu1_row_2[i + 1]); /* 135 */
42480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
42580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                adiff[2] += ABS_DIF(pu1_row_1[i + 1], pu1_row_2[i - 1]); /*  45 */
42680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            }
42780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            pu1_row_1 += src_strd;
42880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            pu1_row_2 += src_strd;
42980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        }
43080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
43180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /*****************************************************************/
43280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /* Applying bias, to make the diff comparision more robust.      */
43380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /*****************************************************************/
43480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        adiff[0] *= EDGE_BIAS_0;
43580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        adiff[1] *= EDGE_BIAS_1;
43680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        adiff[2] *= EDGE_BIAS_1;
43780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
43880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /*****************************************************************/
43980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /* comapring the diffs */
44080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /*****************************************************************/
44180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        dir_45_le_90  = (adiff[2] <= adiff[0]);
44280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        dir_45_le_135 = (adiff[2] <= adiff[1]);
44380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        dir_135_le_90 = (adiff[1] <= adiff[0]);
44480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
44580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /*****************************************************************/
44680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /* Direction selection. */
44780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /*****************************************************************/
44880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        shift = 0;
44980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        if(1 == dir_45_le_135)
45080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        {
45180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            if(1 == dir_45_le_90)
45280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                shift = 1;
45380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        }
45480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        else
45580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        {
45680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            if(1 == dir_135_le_90)
45780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                shift = -1;
45880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        }
45980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
46080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /*****************************************************************/
46180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /* Directional interpolation */
46280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        /*****************************************************************/
46380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_row_1 = pu1_src + shift;
46480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_row_2 = pu1_src + src_strd - shift;
46580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_dst   = pu1_out;
46680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
46780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        for(j = 0; j < SUB_BLK_HT; j++)
46880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        {
46980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            for(i = 0; i < SUB_BLK_WD; i++)
47080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            {
47180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar                pu1_dst[i] = (UWORD8)AVG(pu1_row_1[i], pu1_row_2[i]);
47280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            }
47380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            pu1_row_1 += src_strd;
47480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            pu1_row_2 += src_strd;
47580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            pu1_dst   += out_strd;
47680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        }
47780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
47880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_out += SUB_BLK_WD;
47980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_src += SUB_BLK_WD;
48080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    }
48180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar}
48280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
483