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*  icv_variance.c
2480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
2580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @brief
2680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  This file contains the functions to compute variance
2780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
2880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @author
2980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Ittiam
3080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
3180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @par List of Functions:
3280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  icv_variance_8x4()
3380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
3480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @remarks
3580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  None
3680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
3780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
3880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*/
3980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/*****************************************************************************/
4080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/* File Includes                                                             */
4180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/*****************************************************************************/
4280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/* System include files */
4380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include <stdio.h>
4480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include <stdint.h>
4580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include <string.h>
4680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include <stdlib.h>
4780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include <assert.h>
4880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
4980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
5080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/* User include files */
5180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "icv_datatypes.h"
5280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "icv_macros.h"
5380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "icv_platform_macros.h"
5480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar#include "icv.h"
5580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
5680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar/**
5780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
5880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
5980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @brief
6080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Computes variance of a given 8x4 block
6180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
6280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @par   Description
6380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Compute variance of a given 8x4 block
6480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
6580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] pu1_src
6680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Source
6780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
6880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] src_strd
6980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Source stride
7080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
7180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] wd
7280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Assumed to be 8
7380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
7480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @param[in] ht
7580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Assumed to be 4
7680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
7780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @returns
7880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*  Variance
7980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
8080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar* @remarks
8180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*
8280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*******************************************************************************
8380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar*/
8480a14110036632549a272c812f92b791fb08e87aHarish MahendrakarWORD32 icv_variance_8x4(UWORD8 *pu1_src, WORD32 src_strd, WORD32 wd, WORD32 ht)
8580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar{
8680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 sum;
8780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 sum_sqr;
8880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 blk_sz;
8980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 vrnc;
9080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 i;
9180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    WORD32 j;
9280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    UNUSED(wd);
9380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    UNUSED(ht);
9480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
9580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    ASSERT(wd == 8);
9680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    ASSERT(ht == 4);
9780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
9880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    sum     = 0;
9980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    sum_sqr = 0;
10080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
10180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    blk_sz = 8 * 4;
10280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
10380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /*************************************************************************/
10480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /* variance                                                              */
10580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /* var = (n * SUM(x_i^2) - (SUM(x_i))^2) / (n^2);                        */
10680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /*************************************************************************/
10780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
10880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /*************************************************************************/
10980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /* The outer-loop runs for BLK_HT/2 times, because it                    */
11080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /* calculates the variance only for field area not frame one.            */
11180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    /*************************************************************************/
11280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    for(j = 0; j < 4; j ++)
11380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    {
11480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        for(i = 0; i < 8; i++)
11580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        {
11680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            sum_sqr += (*pu1_src) * (*pu1_src);
11780a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar            sum     +=  *pu1_src++;
11880a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        }
11980a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar        pu1_src += (src_strd - 8);
12080a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    }
12180a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
12280a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    vrnc = ((sum_sqr * blk_sz) - (sum * sum)) / (blk_sz * blk_sz);
12380a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
12480a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar    return vrnc;
12580a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar}
12680a14110036632549a272c812f92b791fb08e87aHarish Mahendrakar
127