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