10c1bc742181ded4930842b46e9507372f0b1b963James Dong/**
20c1bc742181ded4930842b46e9507372f0b1b963James Dong *
30c1bc742181ded4930842b46e9507372f0b1b963James Dong * File Name:  armVCCOMM_Average.c
40c1bc742181ded4930842b46e9507372f0b1b963James Dong * OpenMAX DL: v1.0.2
50c1bc742181ded4930842b46e9507372f0b1b963James Dong * Revision:   9641
60c1bc742181ded4930842b46e9507372f0b1b963James Dong * Date:       Thursday, February 7, 2008
70c1bc742181ded4930842b46e9507372f0b1b963James Dong *
80c1bc742181ded4930842b46e9507372f0b1b963James Dong * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
90c1bc742181ded4930842b46e9507372f0b1b963James Dong *
100c1bc742181ded4930842b46e9507372f0b1b963James Dong *
110c1bc742181ded4930842b46e9507372f0b1b963James Dong * Description:
120c1bc742181ded4930842b46e9507372f0b1b963James Dong * This function will calculate Average of two blocks if size iWidth X iHeight
130c1bc742181ded4930842b46e9507372f0b1b963James Dong *
140c1bc742181ded4930842b46e9507372f0b1b963James Dong */
150c1bc742181ded4930842b46e9507372f0b1b963James Dong
160c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "omxtypes.h"
170c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armOMX.h"
180c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "omxVC.h"
190c1bc742181ded4930842b46e9507372f0b1b963James Dong
200c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armCOMM.h"
210c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armVC.h"
220c1bc742181ded4930842b46e9507372f0b1b963James Dong
230c1bc742181ded4930842b46e9507372f0b1b963James Dong/**
240c1bc742181ded4930842b46e9507372f0b1b963James Dong * Function: armVCCOMM_Average
250c1bc742181ded4930842b46e9507372f0b1b963James Dong *
260c1bc742181ded4930842b46e9507372f0b1b963James Dong * Description:
270c1bc742181ded4930842b46e9507372f0b1b963James Dong * This function calculates the average of two blocks and stores the result.
280c1bc742181ded4930842b46e9507372f0b1b963James Dong *
290c1bc742181ded4930842b46e9507372f0b1b963James Dong * Remarks:
300c1bc742181ded4930842b46e9507372f0b1b963James Dong *
310c1bc742181ded4930842b46e9507372f0b1b963James Dong *	[in]	pPred0			Pointer to the top-left corner of reference block 0
320c1bc742181ded4930842b46e9507372f0b1b963James Dong *	[in]	pPred1			Pointer to the top-left corner of reference block 1
330c1bc742181ded4930842b46e9507372f0b1b963James Dong *	[in]	iPredStep0	    Step of reference block 0
340c1bc742181ded4930842b46e9507372f0b1b963James Dong *	[in]	iPredStep1	    Step of reference block 1
350c1bc742181ded4930842b46e9507372f0b1b963James Dong *	[in]	iDstStep 		Step of the destination buffer
360c1bc742181ded4930842b46e9507372f0b1b963James Dong *	[in]	iWidth			Width of the blocks
370c1bc742181ded4930842b46e9507372f0b1b963James Dong *	[in]	iHeight			Height of the blocks
380c1bc742181ded4930842b46e9507372f0b1b963James Dong *	[out]	pDstPred		Pointer to the destination buffer
390c1bc742181ded4930842b46e9507372f0b1b963James Dong *
400c1bc742181ded4930842b46e9507372f0b1b963James Dong * Return Value:
410c1bc742181ded4930842b46e9507372f0b1b963James Dong * Standard OMXResult value.
420c1bc742181ded4930842b46e9507372f0b1b963James Dong *
430c1bc742181ded4930842b46e9507372f0b1b963James Dong */
440c1bc742181ded4930842b46e9507372f0b1b963James Dong OMXResult armVCCOMM_Average (
450c1bc742181ded4930842b46e9507372f0b1b963James Dong	 const OMX_U8* 	    pPred0,
460c1bc742181ded4930842b46e9507372f0b1b963James Dong	 const OMX_U8* 	    pPred1,
470c1bc742181ded4930842b46e9507372f0b1b963James Dong	 OMX_U32		iPredStep0,
480c1bc742181ded4930842b46e9507372f0b1b963James Dong	 OMX_U32		iPredStep1,
490c1bc742181ded4930842b46e9507372f0b1b963James Dong	 OMX_U8*		pDstPred,
500c1bc742181ded4930842b46e9507372f0b1b963James Dong	 OMX_U32		iDstStep,
510c1bc742181ded4930842b46e9507372f0b1b963James Dong	 OMX_U32		iWidth,
520c1bc742181ded4930842b46e9507372f0b1b963James Dong	 OMX_U32		iHeight
530c1bc742181ded4930842b46e9507372f0b1b963James Dong)
540c1bc742181ded4930842b46e9507372f0b1b963James Dong{
550c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_U32     x, y;
560c1bc742181ded4930842b46e9507372f0b1b963James Dong
570c1bc742181ded4930842b46e9507372f0b1b963James Dong    /* check for argument error */
580c1bc742181ded4930842b46e9507372f0b1b963James Dong    armRetArgErrIf(pPred0 == NULL, OMX_Sts_BadArgErr)
590c1bc742181ded4930842b46e9507372f0b1b963James Dong    armRetArgErrIf(pPred1 == NULL, OMX_Sts_BadArgErr)
600c1bc742181ded4930842b46e9507372f0b1b963James Dong    armRetArgErrIf(pDstPred == NULL, OMX_Sts_BadArgErr)
610c1bc742181ded4930842b46e9507372f0b1b963James Dong
620c1bc742181ded4930842b46e9507372f0b1b963James Dong    for (y = 0; y < iHeight; y++)
630c1bc742181ded4930842b46e9507372f0b1b963James Dong    {
640c1bc742181ded4930842b46e9507372f0b1b963James Dong        for (x = 0; x < iWidth; x++)
650c1bc742181ded4930842b46e9507372f0b1b963James Dong        {
660c1bc742181ded4930842b46e9507372f0b1b963James Dong            pDstPred [y * iDstStep + x] =
670c1bc742181ded4930842b46e9507372f0b1b963James Dong                (OMX_U8)(((OMX_U32)pPred0 [y * iPredStep0 + x] +
680c1bc742181ded4930842b46e9507372f0b1b963James Dong                                  pPred1 [y * iPredStep1 + x] + 1) >> 1);
690c1bc742181ded4930842b46e9507372f0b1b963James Dong        }
700c1bc742181ded4930842b46e9507372f0b1b963James Dong    }
710c1bc742181ded4930842b46e9507372f0b1b963James Dong
720c1bc742181ded4930842b46e9507372f0b1b963James Dong    return OMX_Sts_NoErr;
730c1bc742181ded4930842b46e9507372f0b1b963James Dong}
740c1bc742181ded4930842b46e9507372f0b1b963James Dong
750c1bc742181ded4930842b46e9507372f0b1b963James Dong/*****************************************************************************
760c1bc742181ded4930842b46e9507372f0b1b963James Dong *                              END OF FILE
770c1bc742181ded4930842b46e9507372f0b1b963James Dong *****************************************************************************/
780c1bc742181ded4930842b46e9507372f0b1b963James Dong
79