13306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* ------------------------------------------------------------------
23306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Copyright (C) 1998-2009 PacketVideo
33306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *
43306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Licensed under the Apache License, Version 2.0 (the "License");
53306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * you may not use this file except in compliance with the License.
63306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * You may obtain a copy of the License at
73306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *
83306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *      http://www.apache.org/licenses/LICENSE-2.0
93306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *
103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Unless required by applicable law or agreed to in writing, software
113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * distributed under the License is distributed on an "AS IS" BASIS,
123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * express or implied.
143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * See the License for the specific language governing permissions
153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * and limitations under the License.
163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * -------------------------------------------------------------------
173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong */
183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifndef motion_comp_h
193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define motion_comp_h
203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; INCLUDES
233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include "mp4dec_lib.h"
253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; MACROS
283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Define module specific macros here
293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; DEFINES
333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Include all pre-processor statements here.
343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* CBP Mask defines used in chrominance prediction */
363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define CBP_MASK_CHROMA_BLK4    0x2
373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define CBP_MASK_CHROMA_BLK5    0x1
383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* CBP Mask defines used in luminance prediction (MODE_INTER4V) */
403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define CBP_MASK_BLK0_MODE_INTER4V  0x20
413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define CBP_MASK_BLK1_MODE_INTER4V  0x10
423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define CBP_MASK_BLK2_MODE_INTER4V  0x08
433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define CBP_MASK_BLK3_MODE_INTER4V  0x04
443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* CBP Mask defines used in luminance prediction (MODE_INTER or MODE_INTER_Q) */
463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define CBP_MASK_MB_MODE_INTER  0x3c
473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; EXTERNAL VARIABLES REFERENCES
503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Declare variables used in this module but defined elsewhere
513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef __cplusplus
533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongextern "C"
543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{
553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define CLIP_RESULT(x)      if(x & -256){x = 0xFF & (~(x>>31));}
583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define ADD_AND_CLIP1(x)    x += (pred_word&0xFF); CLIP_RESULT(x);
593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define ADD_AND_CLIP2(x)    x += ((pred_word>>8)&0xFF); CLIP_RESULT(x);
603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define ADD_AND_CLIP3(x)    x += ((pred_word>>16)&0xFF); CLIP_RESULT(x);
613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define ADD_AND_CLIP4(x)    x += ((pred_word>>24)&0xFF); CLIP_RESULT(x);
623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define ADD_AND_CLIP(x,y)    {  x9 = ~(x>>8); \
643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            if(x9!=-1){ \
653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                                x9 = ((uint32)x9)>>24; \
663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                                y = x9|(y<<8); \
673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            } \
683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            else \
693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            {    \
703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                                y =  x|(y<<8); \
713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            } \
723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                            }
733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    static int (*const GetPredAdvBTable[2][2])(uint8*, uint8*, int, int) =
763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    {
773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {&GetPredAdvancedBy0x0, &GetPredAdvancedBy0x1},
783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {&GetPredAdvancedBy1x0, &GetPredAdvancedBy1x1}
793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    };
803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; SIMPLE TYPEDEF'S
833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; ENUMERATED TYPEDEF'S
873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; STRUCTURES TYPEDEF'S
913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; GLOBAL FUNCTION DEFINITIONS
953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; Function Prototype declaration
963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; END
1003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
1013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
1023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef __cplusplus
1043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong}
1053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
1063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
109