1/*
2 * Copyright (C) 2007-2008 ARM Limited
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 */
17/* ----------------------------------------------------------------
18 *
19 *
20 * File Name:  armVCM4P10_PredictIntraDC4x4.c
21 * OpenMAX DL: v1.0.2
22 * Revision:   9641
23 * Date:       Thursday, February 7, 2008
24 *
25 *
26 *
27 *
28 * H.264 4x4 intra prediction module
29 *
30 */
31
32#include "omxtypes.h"
33#include "armOMX.h"
34#include "omxVC.h"
35
36#include "armCOMM.h"
37#include "armVC.h"
38
39/*
40 * Description:
41 * Perform DC style intra prediction, averaging upper and left block
42 *
43 * Parameters:
44 * [in]	pSrcLeft		Pointer to the buffer of 16 left coefficients:
45 *								p[x, y] (x = -1, y = 0..3)
46 * [in]	pSrcAbove		Pointer to the buffer of 16 above coefficients:
47 *								p[x,y] (x = 0..3, y = -1)
48 * [in]	leftStep		Step of left coefficient buffer
49 * [in]	dstStep			Step of the destination buffer
50 * [in]	availability	Neighboring 16x16 MB availability flag
51 * [out]	pDst			Pointer to the destination buffer
52 *
53 * Return Value:
54 * None
55 */
56
57void armVCM4P10_PredictIntraDC4x4(
58     const OMX_U8* pSrcLeft,
59     const OMX_U8 *pSrcAbove,
60     OMX_U8* pDst,
61     OMX_INT leftStep,
62     OMX_INT dstStep,
63     OMX_S32 availability
64)
65{
66    int x, y, Sum=0, Count = 0;
67
68    if (availability & OMX_VC_LEFT)
69    {
70        for (y=0; y<4; y++)
71        {
72            Sum += pSrcLeft[y*leftStep];
73        }
74        Count++;
75    }
76    if (availability & OMX_VC_UPPER)
77    {
78        for (x=0; x<4; x++)
79        {
80            Sum += pSrcAbove[x];
81        }
82        Count++;
83    }
84    if (Count==0)
85    {
86        Sum = 128;
87    }
88    else if (Count==1)
89    {
90        Sum = (Sum + 2) >> 2;
91    }
92    else /* Count = 2 */
93    {
94        Sum = (Sum + 4) >> 3;
95    }
96    for (y=0; y<4; y++)
97    {
98        for (x=0; x<4; x++)
99        {
100            pDst[y*dstStep+x] = (OMX_U8)Sum;
101        }
102    }
103}
104