10c1bc742181ded4930842b46e9507372f0b1b963James Dong/**
20c1bc742181ded4930842b46e9507372f0b1b963James Dong *
30c1bc742181ded4930842b46e9507372f0b1b963James Dong * File Name:  armVCCOMM_SAD.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 SAD for NxM blocks
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
220c1bc742181ded4930842b46e9507372f0b1b963James Dong/**
230c1bc742181ded4930842b46e9507372f0b1b963James Dong * Function: armVCCOMM_SAD
240c1bc742181ded4930842b46e9507372f0b1b963James Dong *
250c1bc742181ded4930842b46e9507372f0b1b963James Dong * Description:
260c1bc742181ded4930842b46e9507372f0b1b963James Dong * This function calculate the SAD for NxM blocks.
270c1bc742181ded4930842b46e9507372f0b1b963James Dong *
280c1bc742181ded4930842b46e9507372f0b1b963James Dong * Remarks:
290c1bc742181ded4930842b46e9507372f0b1b963James Dong *
300c1bc742181ded4930842b46e9507372f0b1b963James Dong * [in]		pSrcOrg		Pointer to the original block
310c1bc742181ded4930842b46e9507372f0b1b963James Dong * [in]		iStepOrg	Step of the original block buffer
320c1bc742181ded4930842b46e9507372f0b1b963James Dong * [in]		pSrcRef		Pointer to the reference block
330c1bc742181ded4930842b46e9507372f0b1b963James Dong * [in]		iStepRef	Step of the reference block buffer
340c1bc742181ded4930842b46e9507372f0b1b963James Dong * [in]		iHeight		Height of the block
350c1bc742181ded4930842b46e9507372f0b1b963James Dong * [in]		iWidth		Width of the block
360c1bc742181ded4930842b46e9507372f0b1b963James Dong * [out]	pDstSAD		Pointer of result SAD
370c1bc742181ded4930842b46e9507372f0b1b963James Dong *
380c1bc742181ded4930842b46e9507372f0b1b963James Dong * Return Value:
390c1bc742181ded4930842b46e9507372f0b1b963James Dong * Standard OMXResult value.
400c1bc742181ded4930842b46e9507372f0b1b963James Dong *
410c1bc742181ded4930842b46e9507372f0b1b963James Dong */
420c1bc742181ded4930842b46e9507372f0b1b963James DongOMXResult armVCCOMM_SAD(
430c1bc742181ded4930842b46e9507372f0b1b963James Dong	const OMX_U8* 	pSrcOrg,
440c1bc742181ded4930842b46e9507372f0b1b963James Dong	OMX_U32 	iStepOrg,
450c1bc742181ded4930842b46e9507372f0b1b963James Dong	const OMX_U8* 	pSrcRef,
460c1bc742181ded4930842b46e9507372f0b1b963James Dong	OMX_U32 	iStepRef,
470c1bc742181ded4930842b46e9507372f0b1b963James Dong	OMX_S32*	pDstSAD,
480c1bc742181ded4930842b46e9507372f0b1b963James Dong	OMX_U32		iHeight,
490c1bc742181ded4930842b46e9507372f0b1b963James Dong	OMX_U32		iWidth
500c1bc742181ded4930842b46e9507372f0b1b963James Dong)
510c1bc742181ded4930842b46e9507372f0b1b963James Dong{
520c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_INT     x, y;
530c1bc742181ded4930842b46e9507372f0b1b963James Dong
540c1bc742181ded4930842b46e9507372f0b1b963James Dong    /* check for argument error */
550c1bc742181ded4930842b46e9507372f0b1b963James Dong    armRetArgErrIf(pSrcOrg == NULL, OMX_Sts_BadArgErr)
560c1bc742181ded4930842b46e9507372f0b1b963James Dong    armRetArgErrIf(pSrcRef == NULL, OMX_Sts_BadArgErr)
570c1bc742181ded4930842b46e9507372f0b1b963James Dong    armRetArgErrIf(pDstSAD == NULL, OMX_Sts_BadArgErr)
580c1bc742181ded4930842b46e9507372f0b1b963James Dong
590c1bc742181ded4930842b46e9507372f0b1b963James Dong    *pDstSAD = 0;
600c1bc742181ded4930842b46e9507372f0b1b963James Dong    for (y = 0; y < iHeight; y++)
610c1bc742181ded4930842b46e9507372f0b1b963James Dong    {
620c1bc742181ded4930842b46e9507372f0b1b963James Dong        for (x = 0; x < iWidth; x++)
630c1bc742181ded4930842b46e9507372f0b1b963James Dong        {
640c1bc742181ded4930842b46e9507372f0b1b963James Dong            *pDstSAD += armAbs(pSrcOrg [(y * iStepOrg) + x] -
650c1bc742181ded4930842b46e9507372f0b1b963James Dong                       pSrcRef [(y * iStepRef) + x]);
660c1bc742181ded4930842b46e9507372f0b1b963James Dong        }
670c1bc742181ded4930842b46e9507372f0b1b963James Dong    }
680c1bc742181ded4930842b46e9507372f0b1b963James Dong
690c1bc742181ded4930842b46e9507372f0b1b963James Dong    return OMX_Sts_NoErr;
700c1bc742181ded4930842b46e9507372f0b1b963James Dong}
710c1bc742181ded4930842b46e9507372f0b1b963James Dong
720c1bc742181ded4930842b46e9507372f0b1b963James Dong/*****************************************************************************
730c1bc742181ded4930842b46e9507372f0b1b963James Dong *                              END OF FILE
740c1bc742181ded4930842b46e9507372f0b1b963James Dong *****************************************************************************/
750c1bc742181ded4930842b46e9507372f0b1b963James Dong
76