1 /****************************************************************************** 2 * 3 * Copyright (C) 2015 The Android Open Source Project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ***************************************************************************** 18 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19 */ 20 /** 21 ******************************************************************************* 22 * @file 23 * icv_sad.c 24 * 25 * @brief 26 * This file contains the functions to compute SAD 27 * 28 * @author 29 * Ittiam 30 * 31 * @par List of Functions: 32 * sad_8x4() 33 * 34 * @remarks 35 * None 36 * 37 ******************************************************************************* 38 */ 39 /*****************************************************************************/ 40 /* File Includes */ 41 /*****************************************************************************/ 42 /* System include files */ 43 #include <stdio.h> 44 #include <stdint.h> 45 #include <string.h> 46 #include <stdlib.h> 47 #include <assert.h> 48 49 /* User include files */ 50 #include "icv_datatypes.h" 51 #include "icv_macros.h" 52 #include "icv_platform_macros.h" 53 #include "icv.h" 54 55 /** 56 ******************************************************************************* 57 * 58 * @brief 59 * Compute 8x4 SAD 60 * 61 * @par Description 62 * Compute 8x4 sum of absolute differences between source and reference block 63 * 64 * @param[in] pu1_src 65 * Source buffer 66 * 67 * @param[in] pu1_ref 68 * Reference buffer 69 * 70 * @param[in] src_strd 71 * Source stride 72 * 73 * @param[in] ref_strd 74 * Reference stride 75 * 76 * @param[in] wd 77 * Assumed to be 8 78 * 79 * @param[in] ht 80 * Assumed to be 4 81 82 * @returns 83 * SAD 84 * 85 * @remarks 86 * 87 ******************************************************************************* 88 */ 89 WORD32 icv_sad_8x4(UWORD8 *pu1_src, 90 UWORD8 *pu1_ref, 91 WORD32 src_strd, 92 WORD32 ref_strd, 93 WORD32 wd, 94 WORD32 ht) 95 { 96 WORD32 sad; 97 WORD32 i; 98 WORD32 j; 99 UNUSED(wd); 100 UNUSED(ht); 101 102 ASSERT(wd == 8); 103 ASSERT(ht == 4); 104 105 sad = 0; 106 107 for(j = 0; j < 4; j++) 108 { 109 for(i = 0; i < 8; i++) 110 { 111 WORD32 src; 112 WORD32 ref; 113 114 src = *pu1_src++; 115 ref = *pu1_ref++; 116 117 sad += ABS_DIF(src, ref); 118 } 119 pu1_src += (src_strd - 8); 120 pu1_ref += (ref_strd - 8); 121 } 122 123 return sad; 124 } 125