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*/
89WORD32 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