Coverage Report

Created: 2025-07-18 06:17

/src/libmpeg2/common/icv_variance.c
Line
Count
Source
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_variance.c
24
*
25
* @brief
26
*  This file contains the functions to compute variance
27
*
28
* @author
29
*  Ittiam
30
*
31
* @par List of Functions:
32
*  icv_variance_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
50
/* User include files */
51
#include "icv_datatypes.h"
52
#include "icv_macros.h"
53
#include "icv_platform_macros.h"
54
#include "icv.h"
55
56
/**
57
*******************************************************************************
58
*
59
* @brief
60
*  Computes variance of a given 8x4 block
61
*
62
* @par   Description
63
*  Compute variance of a given 8x4 block
64
*
65
* @param[in] pu1_src
66
*  Source
67
*
68
* @param[in] src_strd
69
*  Source stride
70
*
71
* @param[in] wd
72
*  Assumed to be 8
73
*
74
* @param[in] ht
75
*  Assumed to be 4
76
*
77
* @returns
78
*  Variance
79
*
80
* @remarks
81
*
82
*******************************************************************************
83
*/
84
WORD32 icv_variance_8x4(UWORD8 *pu1_src, WORD32 src_strd, WORD32 wd, WORD32 ht)
85
16.1M
{
86
16.1M
    WORD32 sum;
87
16.1M
    WORD32 sum_sqr;
88
16.1M
    WORD32 blk_sz;
89
16.1M
    WORD32 vrnc;
90
16.1M
    WORD32 i;
91
16.1M
    WORD32 j;
92
16.1M
    UNUSED(wd);
93
16.1M
    UNUSED(ht);
94
95
16.1M
    ASSERT(wd == 8);
96
16.2M
    ASSERT(ht == 4);
97
98
16.5M
    sum     = 0;
99
16.5M
    sum_sqr = 0;
100
101
16.5M
    blk_sz = 8 * 4;
102
103
    /*************************************************************************/
104
    /* variance                                                              */
105
    /* var = (n * SUM(x_i^2) - (SUM(x_i))^2) / (n^2);                        */
106
    /*************************************************************************/
107
108
    /*************************************************************************/
109
    /* The outer-loop runs for BLK_HT/2 times, because it                    */
110
    /* calculates the variance only for field area not frame one.            */
111
    /*************************************************************************/
112
82.3M
    for(j = 0; j < 4; j ++)
113
65.7M
    {
114
590M
        for(i = 0; i < 8; i++)
115
524M
        {
116
524M
            sum_sqr += (*pu1_src) * (*pu1_src);
117
524M
            sum     +=  *pu1_src++;
118
524M
        }
119
65.7M
        pu1_src += (src_strd - 8);
120
65.7M
    }
121
122
16.5M
    vrnc = ((sum_sqr * blk_sz) - (sum * sum)) / (blk_sz * blk_sz);
123
124
16.5M
    return vrnc;
125
16.2M
}
126