Home | History | Annotate | Download | only in src
      1 /**
      2  *
      3  * File Name:  omxVCM4P2_BlockMatch_Integer_8x8.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  *
     12  * Description:
     13  * Contains modules for Block matching, a full search algorithm
     14  * is implemented
     15  *
     16  */
     17 
     18 #include "omxtypes.h"
     19 #include "armOMX.h"
     20 #include "omxVC.h"
     21 
     22 #include "armVC.h"
     23 #include "armCOMM.h"
     24 
     25 /**
     26  * Function:  omxVCM4P2_BlockMatch_Integer_8x8   (6.2.4.2.2)
     27  *
     28  * Description:
     29  * Performs an 8x8 block search; estimates motion vector and associated
     30  * minimum SAD.  Both the input and output motion vectors are represented
     31  * using half-pixel units, and therefore a shift left or right by 1 bit may be
     32  * required, respectively, to match the input or output MVs with other
     33  * functions that either generate output MVs or expect input MVs represented
     34  * using integer pixel units.
     35  *
     36  * Input Arguments:
     37  *
     38  *   pSrcRefBuf - pointer to the reference Y plane; points to the reference
     39  *            block that corresponds to the location of the current 8x8 block
     40  *            in the current plane.
     41  *   refWidth - width of the reference plane
     42  *   pRefRect - pointer to the valid reference plane rectangle; coordinates
     43  *            are specified relative to the image origin.  Rectangle
     44  *            boundaries may extend beyond image boundaries if the image has
     45  *            been padded.
     46  *   pSrcCurrBuf - pointer to the current block in the current macroblock
     47  *            buffer extracted from the original plane (linear array, 128
     48  *            entries); must be aligned on an 8-byte boundary.  The number of
     49  *            bytes between lines (step) is 16 bytes.
     50  *   pCurrPointPos - position of the current block in the current plane
     51  *   pSrcPreMV - pointer to predicted motion vector; NULL indicates no
     52  *            predicted MV
     53  *   pSrcPreSAD - pointer to SAD associated with the predicted MV (referenced
     54  *            by pSrcPreMV); may be set to NULL if unavailable.
     55  *   pMESpec - vendor-specific motion estimation specification structure;
     56  *            must have been allocated and then initialized using
     57  *            omxVCM4P2_MEInit prior to calling the block matching function.
     58  *
     59  * Output Arguments:
     60  *
     61  *   pDstMV - pointer to estimated MV
     62  *   pDstSAD - pointer to minimum SAD
     63  *
     64  * Return Value:
     65  *
     66  *    OMX_Sts_NoErr - no error
     67  *    OMX_Sts_BadArgErr - bad arguments.  Returned if one of the following
     68  *              conditions is true:
     69  *    -    at least one of the following pointers is NULL: pSrcRefBuf,
     70  *              pRefRect, pSrcCurrBuff, pCurrPointPos, pDstMV, pDstSAD or
     71  *              pMESpec, or
     72  *    -    pSrcCurrBuf is not 8-byte aligned
     73  *
     74  */
     75 
     76 OMXResult omxVCM4P2_BlockMatch_Integer_8x8(
     77      const OMX_U8 *pSrcRefBuf,
     78      OMX_INT refWidth,
     79      const OMXRect *pRefRect,
     80      const OMX_U8 *pSrcCurrBuf,
     81      const OMXVCM4P2Coordinate *pCurrPointPos,
     82      const OMXVCMotionVector *pSrcPreMV,
     83      const OMX_INT *pSrcPreSAD,
     84      void *pMESpec,
     85      OMXVCMotionVector *pDstMV,
     86      OMX_INT *pDstSAD
     87 )
     88 {
     89    OMX_U8 BlockSize = 8;
     90 
     91    /* Argument error checks */
     92    armRetArgErrIf(!armIs8ByteAligned(pSrcCurrBuf), OMX_Sts_BadArgErr);
     93 
     94    return ( armVCM4P2_BlockMatch_Integer(
     95      pSrcRefBuf,
     96      refWidth,
     97      pRefRect,
     98      pSrcCurrBuf,
     99      pCurrPointPos,
    100      pSrcPreMV,
    101      pSrcPreSAD,
    102      pMESpec,
    103      pDstMV,
    104      pDstSAD,
    105      BlockSize)
    106      );
    107 
    108 }
    109 
    110 /* End of file */
    111