omxVCM4P10_SADQuar_16x.c revision 0c1bc742181ded4930842b46e9507372f0b1b963
1/**
2 *
3 * File Name:  omxVCM4P10_SADQuar_16x.c
4 * OpenMAX DL: v1.0.2
5 * Revision:   9641
6 * Date:       Thursday, February 7, 2008
7 *
8 * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
9 *
10 *
11 * Description:
12 * This function will calculate SAD of pSrc with average of two Ref blocks
13 * of 16x16 or 16x8
14 *
15 */
16
17#include "omxtypes.h"
18#include "armOMX.h"
19#include "omxVC.h"
20
21#include "armVC.h"
22#include "armCOMM.h"
23
24/**
25 * Function:  omxVCM4P10_SADQuar_16x   (6.3.5.4.4)
26 *
27 * Description:
28 * This function calculates the SAD between one block (pSrc) and the average
29 * of the other two (pSrcRef0 and pSrcRef1) for 16x16 or 16x8 blocks.
30 * Rounding is applied according to the convention (a+b+1)>>1.
31 *
32 * Input Arguments:
33 *
34 *   pSrc - Pointer to the original block; must be aligned on a 16-byte
35 *            boundary.
36 *   pSrcRef0 - Pointer to reference block 0
37 *   pSrcRef1 - Pointer to reference block 1
38 *   iSrcStep - Step of the original block buffer; must be a multiple of 16
39 *   iRefStep0 - Step of reference block 0
40 *   iRefStep1 - Step of reference block 1
41 *   iHeight - Height of the block; must be equal to either 8 or 16
42 *
43 * Output Arguments:
44 *
45 *   pDstSAD -Pointer of result SAD
46 *
47 * Return Value:
48 *    OMX_Sts_NoErr, if the function runs without error.
49 *    OMX_Sts_BadArgErr - bad arguments: if one of the following cases occurs:
50 *    -    iHeight is not equal to either 8 or 16.
51 *    -    One of more of the following pointers is NULL: pSrc, pSrcRef0,
52 *              pSrcRef1, pDstSAD.
53 *    -    iSrcStep is not a multiple of 16
54 *    -    Any alignment restrictions are violated
55 *
56 */
57OMXResult omxVCM4P10_SADQuar_16x(
58	const OMX_U8* 	pSrc,
59    const OMX_U8* 	pSrcRef0,
60	const OMX_U8* 	pSrcRef1,
61    OMX_U32 	iSrcStep,
62    OMX_U32		iRefStep0,
63    OMX_U32		iRefStep1,
64    OMX_U32*	pDstSAD,
65    OMX_U32     iHeight
66)
67{
68    /* check for argument error */
69    armRetArgErrIf(pSrc == NULL, OMX_Sts_BadArgErr)
70    armRetArgErrIf(pSrcRef0 == NULL, OMX_Sts_BadArgErr)
71    armRetArgErrIf(pSrcRef1 == NULL, OMX_Sts_BadArgErr)
72    armRetArgErrIf(pDstSAD == NULL, OMX_Sts_BadArgErr)
73    armRetArgErrIf((iHeight != 16) && (iHeight != 8), OMX_Sts_BadArgErr)
74    armRetArgErrIf(armNot16ByteAligned(pSrc), OMX_Sts_BadArgErr)
75    armRetArgErrIf((iSrcStep == 0) || (iSrcStep & 15), OMX_Sts_BadArgErr)
76
77
78    return armVCM4P10_SADQuar
79        (pSrc, pSrcRef0, pSrcRef1, iSrcStep,
80        iRefStep0, iRefStep1, pDstSAD, iHeight, 16);
81}
82
83/*****************************************************************************
84 *                              END OF FILE
85 *****************************************************************************/
86
87