1/**
2 *
3 * File Name:  omxVCM4P10_InterpolateHalfVer_Luma.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 for 4x4 blocks
13 *
14 */
15
16#include "omxtypes.h"
17#include "armOMX.h"
18#include "omxVC.h"
19
20#include "armCOMM.h"
21#include "armVC.h"
22
23
24/**
25 * Function:  omxVCM4P10_InterpolateHalfVer_Luma   (6.3.5.5.2)
26 *
27 * Description:
28 * This function performs interpolation for two vertical 1/2-pel positions -
29 * (0, -1/2) and (0, 1/2) - around a full-pel position.
30 *
31 * Input Arguments:
32 *
33 *   pSrc - Pointer to top-left corner of block used to interpolate in the
34 *            reconstructed frame plane
35 *   iSrcStep - Step of the source buffer.
36 *   iDstStep - Step of the destination (interpolation) buffer; must be a
37 *            multiple of iWidth.
38 *   iWidth - Width of the current block; must be equal to either 4, 8, or 16
39 *   iHeight - Height of the current block; must be equal to either 4, 8, or 16
40 *
41 * Output Arguments:
42 *
43 *   pDstUp -Pointer to the interpolation buffer of the -pel position above
44 *            the current full-pel position (0, -1/2)
45 *                If iWidth==4, 4-byte alignment required.
46 *                If iWidth==8, 8-byte alignment required.
47 *                If iWidth==16, 16-byte alignment required.
48 *   pDstDown -Pointer to the interpolation buffer of the -pel position below
49 *            the current full-pel position (0, 1/2)
50 *                If iWidth==4, 4-byte alignment required.
51 *                If iWidth==8, 8-byte alignment required.
52 *                If iWidth==16, 16-byte alignment required.
53 *
54 * Return Value:
55 *
56 *    OMX_Sts_NoErr - no error
57 *    OMX_Sts_BadArgErr - bad arguments; returned if any of the following
58 *              conditions are true:
59 *    -    at least one of the following pointers is NULL:
60 *            pSrc, pDstUp, or pDstDown
61 *    -    iWidth or iHeight have values other than 4, 8, or 16
62 *    -    iWidth==4 but pDstUp and/or pDstDown is/are not aligned on a 4-byte boundary
63 *    -    iWidth==8 but pDstUp and/or pDstDown is/are not aligned on a 8-byte boundary
64 *    -    iWidth==16 but pDstUp and/or pDstDown is/are not aligned on a 16-byte boundary
65 *
66 */
67 OMXResult omxVCM4P10_InterpolateHalfVer_Luma(
68     const OMX_U8*    pSrc,
69     OMX_U32    iSrcStep,
70     OMX_U8*    pDstUp,
71     OMX_U8*    pDstDown,
72     OMX_U32    iDstStep,
73     OMX_U32    iWidth,
74     OMX_U32    iHeight
75)
76{
77    OMXResult   RetValue;
78
79    /* check for argument error */
80    armRetArgErrIf(pSrc == NULL, OMX_Sts_BadArgErr)
81    armRetArgErrIf(pDstUp == NULL, OMX_Sts_BadArgErr)
82    armRetArgErrIf(pDstDown == NULL, OMX_Sts_BadArgErr)
83    armRetArgErrIf((iWidth == 4) &&
84                   armNot4ByteAligned(pDstUp) &&
85                   armNot4ByteAligned(pDstDown), OMX_Sts_BadArgErr)
86    armRetArgErrIf((iWidth == 8) &&
87                   armNot8ByteAligned(pDstUp) &&
88                   armNot8ByteAligned(pDstDown), OMX_Sts_BadArgErr)
89    armRetArgErrIf((iWidth == 16) &&
90                   armNot16ByteAligned(pDstUp) &&
91                   armNot16ByteAligned(pDstDown), OMX_Sts_BadArgErr)
92
93    armRetArgErrIf((iHeight != 16) && (iHeight != 8)&& (iHeight != 4), OMX_Sts_BadArgErr)
94	armRetArgErrIf((iWidth != 16) && (iWidth != 8)&& (iWidth != 4), OMX_Sts_BadArgErr)
95
96    RetValue = armVCM4P10_InterpolateHalfVer_Luma(
97        pSrc - iSrcStep,
98        iSrcStep,
99        pDstUp,
100        iDstStep,
101        iWidth,
102        iHeight);
103
104    if (RetValue != OMX_Sts_NoErr)
105    {
106        return RetValue;
107    }
108
109    RetValue = armVCM4P10_InterpolateHalfVer_Luma(
110        pSrc,
111        iSrcStep,
112        pDstDown,
113        iDstStep,
114        iWidth,
115        iHeight);
116
117    return RetValue;
118}
119
120/*****************************************************************************
121 *                              END OF FILE
122 *****************************************************************************/
123
124