18520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/****************************************************************************** 28520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * 38520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * Copyright (C) 2015 The Android Open Source Project 48520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * 58520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * Licensed under the Apache License, Version 2.0 (the "License"); 68520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * you may not use this file except in compliance with the License. 78520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * You may obtain a copy of the License at: 88520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * 98520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * http://www.apache.org/licenses/LICENSE-2.0 108520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * 118520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * Unless required by applicable law or agreed to in writing, software 128520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * distributed under the License is distributed on an "AS IS" BASIS, 138520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 148520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * See the License for the specific language governing permissions and 158520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * limitations under the License. 168520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * 178520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar ***************************************************************************** 188520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 198520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*/ 208520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/** 218520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar******************************************************************************* 228520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @file 238520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* ideint_cac.c 248520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 258520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @brief 268520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* This file include the definitions of the combing artifact check function 278520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* of the de-interlacer and some variant of that. 288520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 298520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @author 308520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Ittiam 318520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 328520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @par List of Functions: 338520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* cac_4x8() 348520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* ideint_cac() 358520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 368520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @remarks 378520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* In the de-interlacer workspace, cac is not a seperate assembly module as 388520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* it comes along with the de_int_decision() function. But in C-Model, to 398520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* keep the things cleaner, it was made to be a separate function during 408520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* cac experiments long after the assembly was written by Mudit. 418520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 428520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar******************************************************************************* 438520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*/ 448520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/*****************************************************************************/ 458520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/* File Includes */ 468520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/*****************************************************************************/ 478520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/* System include files */ 488520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include <stdio.h> 498520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include <stdint.h> 508520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include <string.h> 518520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include <stdlib.h> 528520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 538520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/* User include files */ 548520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "icv_datatypes.h" 558520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "icv_macros.h" 568520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "icv.h" 578520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "icv_variance.h" 588520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "icv_sad.h" 598520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "ideint.h" 608520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "ideint_defs.h" 618520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "ideint_structs.h" 628520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "ideint_cac.h" 638520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 648520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/** 658520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar******************************************************************************* 668520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 678520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @brief 688520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Combing artifact check function for 8x4 block 698520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 708520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @par Description 718520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Adjacent and alternate SADs are calculated by row based and column-based 728520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* collapsing. The adjacent and alternate SADs are then compared with some 738520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* biasing to get CAC 748520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 758520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] pu1_top 768520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Top field 778520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 788520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] pu1_bot 798520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Bottom field 808520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 818520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] top_strd 828520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Top field Stride 838520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 848520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] bot_strd 858520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Bottom field stride 868520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 878520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] pi4_adj_sad 888520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Pointer to return adjacent SAD 898520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 908520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] pi4_alt_sad 918520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Pointer to return alternate SAD 928520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 938520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @returns 948520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* combing artifact flag (1 = detected, 0 = not detected) 958520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 968520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @remarks 978520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 988520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar******************************************************************************* 998520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*/ 1008520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakarstatic WORD32 cac_4x8(UWORD8 *pu1_top, 1018520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_bot, 1028520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 top_strd, 1038520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 bot_strd) 1048520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar{ 1058520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 ca; 1068520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 adj; 1078520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 alt; 1088520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_tmp_top; 1098520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_tmp_bot; 1108520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 i; 1118520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 j; 1128520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_top_0; 1138520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_top_1; 1148520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_top_2; 1158520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_top_3; 1168520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_bot_0; 1178520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_bot_1; 1188520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_bot_2; 1198520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_bot_3; 1208520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 rsum_csum_thresh; 1218520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 sad_bias_mult_shift; 1228520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 sad_bias_additive; 1238520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1248520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 diff_sum; 1258520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 top_row_end_incr; 1268520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 bot_row_end_incr; 1278520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1288520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar ca = 0; 1298520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1308520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar adj = 0; 1318520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt = 0; 1328520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1338520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar rsum_csum_thresh = RSUM_CSUM_THRESH; 1348520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sad_bias_additive = SAD_BIAS_ADDITIVE; 1358520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sad_bias_mult_shift = SAD_BIAS_MULT_SHIFT; 1368520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1378520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 1388520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* In the adjacent sad calculation by row-method, the absolute */ 1398520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* difference is taken between the adjacent rows. The pixels of the diff */ 1408520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* row, thus obtained, are then summed up. If this sum of absolute */ 1418520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* differace (sad) is greater than a threshold value, it is added to the */ 1428520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* adjcacent SAD value. */ 1438520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 1448520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1458520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 1468520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Adj dif: Row based */ 1478520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 1488520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1498520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_tmp_top = pu1_top; 1508520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_tmp_bot = pu1_bot; 1518520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1528520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar top_row_end_incr = top_strd - SUB_BLK_WD; 1538520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar bot_row_end_incr = bot_strd - SUB_BLK_WD; 1548520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1558520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 1568520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* The outer-loop runs for BLK_HT/2 times, because one pixel */ 1578520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* is touched only once. */ 1588520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 1598520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar for(j = 0; j < BLK_HT; j += 4) 1608520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar { 1618520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 sum_1, sum_2, sum_3, sum_4; 1628520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 sum_diff; 1638520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1648520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*********************************************************************/ 1658520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Because the 8x4 is split into two halves of 4x4, the width of the */ 1668520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* block is now 4. */ 1678520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*********************************************************************/ 1688520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_1 = 0; 1698520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_2 = 0; 1708520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1718520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar for(i = 0; i < SUB_BLK_WD; i ++) 1728520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar { 1738520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_1 += *pu1_tmp_top++; 1748520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_2 += *pu1_tmp_bot++; 1758520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar } 1768520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1778520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_diff = ABS_DIF(sum_1, sum_2); 1788520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1798520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*********************************************************************/ 1808520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Thresholding. */ 1818520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*********************************************************************/ 1828520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar if(sum_diff >= rsum_csum_thresh) 1838520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar adj += sum_diff; 1848520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1858520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_tmp_top += top_row_end_incr; 1868520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_tmp_bot += bot_row_end_incr; 1878520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1888520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1898520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_3 = 0; 1908520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_4 = 0; 1918520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1928520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar for(i = 0; i < SUB_BLK_WD; i ++) 1938520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar { 1948520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_3 += *pu1_tmp_top++; 1958520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_4 += *pu1_tmp_bot++; 1968520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar } 1978520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1988520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_diff = ABS_DIF(sum_3, sum_4); 1998520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2008520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*********************************************************************/ 2018520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Thresholding. */ 2028520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*********************************************************************/ 2038520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar if(sum_diff >= rsum_csum_thresh) 2048520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar adj += sum_diff; 2058520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2068520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_tmp_top += top_row_end_incr; 2078520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_tmp_bot += bot_row_end_incr; 2088520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2098520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 2108520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Alt diff : Row based */ 2118520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 2128520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt += ABS_DIF(sum_1, sum_3); 2138520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt += ABS_DIF(sum_2, sum_4); 2148520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2158520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar } 2168520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2178520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 2188520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* In the adjacent sad calculation by column-method, the rows of both */ 2198520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* the fields are averaged separately and then summed across the column. */ 2208520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* The difference of the two values, thus obtained, is added to the */ 2218520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* adjacent sad value, if it is beyond the threshold. */ 2228520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 2238520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2248520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_top_0 = pu1_top; 2258520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_top_1 = pu1_top_0 + top_strd; 2268520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_top_2 = pu1_top_1 + top_strd; 2278520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_top_3 = pu1_top_2 + top_strd; 2288520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2298520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_bot_0 = pu1_bot; 2308520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_bot_1 = pu1_bot_0 + bot_strd; 2318520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_bot_2 = pu1_bot_1 + bot_strd; 2328520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_bot_3 = pu1_bot_2 + bot_strd; 2338520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2348520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 2358520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Adj dif: Col based */ 2368520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 2378520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum = 0; 2388520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2398520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 2408520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* As the DSP implementation of this modules is anyway going to assume */ 2418520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* the size of the block to the fixed (8x4 or two 4x4's), the height of */ 2428520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* block is also kept to be 8, to have a clean implementation. */ 2438520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 2448520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar for(i = 0; i < SUB_BLK_WD; i ++) 2458520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar { 2468520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 val_1; 2478520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 val_2; 2488520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 tmp_1, tmp_2; 2498520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 tmp_diff; 2508520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2518520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar tmp_1 = AVG(pu1_top_0[i], pu1_top_1[i]); 2528520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar tmp_2 = AVG(pu1_top_2[i], pu1_top_3[i]); 2538520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar val_1 = AVG(tmp_1, tmp_2); 2548520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2558520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar tmp_1 = AVG(pu1_bot_0[i], pu1_bot_1[i]); 2568520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar tmp_2 = AVG(pu1_bot_2[i], pu1_bot_3[i]); 2578520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar val_2 = AVG(tmp_1, tmp_2); 2588520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2598520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar tmp_diff = ABS_DIF(val_1, val_2); 2608520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2618520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar if(tmp_diff >= (rsum_csum_thresh >> 2)) 2628520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum += tmp_diff; 2638520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar } 2648520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2658520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2668520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar adj += diff_sum << 2; 2678520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2688520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 2698520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Alt diff : Col based */ 2708520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 2718520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum = 0; 2728520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2738520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar for(i = 0; i < SUB_BLK_WD; i ++) 2748520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar { 2758520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 val_1; 2768520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 val_2; 2778520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 tmp_1, tmp_2; 2788520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 tmp_diff; 2798520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2808520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar tmp_1 = AVG(pu1_top_0[i], pu1_bot_0[i]); 2818520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar tmp_2 = AVG(pu1_top_2[i], pu1_bot_2[i]); 2828520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar val_1 = AVG(tmp_1, tmp_2); 2838520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2848520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar tmp_1 = AVG(pu1_top_1[i], pu1_bot_1[i]); 2858520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar tmp_2 = AVG(pu1_top_3[i], pu1_bot_3[i]); 2868520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar val_2 = AVG(tmp_1, tmp_2); 2878520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2888520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar tmp_diff = ABS_DIF(val_1, val_2); 2898520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2908520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum += tmp_diff; 2918520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar } 2928520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2938520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 2948520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* because of the averaging used in place of summation, a factor of 4 is */ 2958520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* needed while adding the the diff_sum to the sad. */ 2968520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 2978520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2988520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt += diff_sum << 2; 2998520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 3008520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_top += SUB_BLK_WD; 3018520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_bot += SUB_BLK_WD; 3028520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 3038520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt += (alt >> sad_bias_mult_shift) + (sad_bias_additive >> 1); 3048520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar ca = (alt < adj); 3058520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 3068520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar return ca; 3078520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar} 3088520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 3098520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/** 3108520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar******************************************************************************* 3118520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 3128520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @brief 3138520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Combing artifact check function for 8x8 block 3148520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 3158520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @par Description 3168520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Determines CAC for 8x8 block by calling 8x4 CAC function 3178520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 3188520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] pu1_top 3198520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Top field 3208520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 3218520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] pu1_bot 3228520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Bottom field 3238520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 3248520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] top_strd 3258520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Top field Stride 3268520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 3278520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] bot_strd 3288520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Bottom field stride 3298520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 3308520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @returns 3318520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* combing artifact flag (1 = detected, 0 = not detected) 3328520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 3338520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @remarks 3348520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 3358520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar******************************************************************************* 3368520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*/ 3378520690e241ad92a07893e198b2df417fe045d79Harish MahendrakarWORD32 ideint_cac_8x8(UWORD8 *pu1_top, 3388520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_bot, 3398520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 top_strd, 3408520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 bot_strd) 3418520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar{ 3428520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 ca; /* combing artifact result */ 3438520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 k; 3448520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 3458520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar ca = 0; 3468520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 3478520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* This loop runs for the two halves of the 4x8 block. */ 3488520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /*************************************************************************/ 3498520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar for(k = 0; k < 2; k ++) 3508520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar { 3518520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar ca |= cac_4x8(pu1_top, pu1_bot, top_strd, bot_strd); 3528520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 3538520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_top += SUB_BLK_WD; 3548520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_bot += SUB_BLK_WD; 3558520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 3568520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* If Combing Artifact is detected, then return. Else continue to 3578520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * check the next half 3588520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar */ 3598520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar if(ca) 3608520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar return ca; 3618520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar } 3628520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 3638520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar return ca; 3648520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar} 3658520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 366