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 idct_h
193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define idct_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#define INTEGER_IDCT
363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef FAST_IDCT
383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifndef INTEGER_IDCT
393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define INTEGER_IDCT
403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef FAST_IDCT
443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef __cplusplus
453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongextern "C"
463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{
473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctrow0(int16 *blk, uint8 *pred, uint8 *dst, int width);
493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctrow1(int16 *blk, uint8 *pred, uint8 *dst, int width);
503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctrow2(int16 *blk, uint8 *pred, uint8 *dst, int width);
513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctrow3(int16 *blk, uint8 *pred, uint8 *dst, int width);
523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctrow4(int16 *blk, uint8 *pred, uint8 *dst, int width);
533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctcol0(int16 *blk);
543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctcol1(int16 *blk);
553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctcol2(int16 *blk);
563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctcol3(int16 *blk);
573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctcol4(int16 *blk);
583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctrow0_intra(int16 *blk, PIXEL *comp, int width);
603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctrow1_intra(int16 *blk, PIXEL *comp, int width);
613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctrow2_intra(int16 *blk, PIXEL *comp, int width);
623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctrow3_intra(int16 *blk, PIXEL *comp, int width);
633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    void idctrow4_intra(int16 *blk, PIXEL *comp, int width);
643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef __cplusplus
653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong}
663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* this code assumes ">>" to be a two's-complement arithmetic */
703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* right shift: (-2)>>1 == -1 , (-3)>>1 == -2                 */
713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* a positive real constant is converted to an integer scaled by 2048 */
733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* or equivalent to left shift by 11 */
743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define W1 2841                 /* 2048*sqrt(2)*cos(1*pi/16) */
763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define W2 2676                 /* 2048*sqrt(2)*cos(2*pi/16) */
773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define W3 2408                 /* 2048*sqrt(2)*cos(3*pi/16) */
783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define W5 1609                 /* 2048*sqrt(2)*cos(5*pi/16) */
793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define W6 1108                 /* 2048*sqrt(2)*cos(6*pi/16) */
803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define W7 565                  /* 2048*sqrt(2)*cos(7*pi/16) */
813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define W1mW7 2276
823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define W1pW7 3406
833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define W5mW3 -799
843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define mW3mW5 -4017
853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define mW2mW6 -3784
863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#define W2mW6 1568
873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* left shift by 11 is to maintain the accuracy of the decimal point */
893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* for the transform coefficients (W1,...W7) */
903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; EXTERNAL VARIABLES REFERENCES
933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Declare variables used in this module but defined elsewhere
943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; SIMPLE TYPEDEF'S
983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; ENUMERATED TYPEDEF'S
1023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; STRUCTURES TYPEDEF'S
1063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1093306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; GLOBAL FUNCTION DEFINITIONS
1103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Function Prototype declaration
1113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; END
1153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
1173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
119