102f5b5447de349216a40086ca6061efefb5a3025James Dong/* ------------------------------------------------------------------
202f5b5447de349216a40086ca6061efefb5a3025James Dong * Copyright (C) 1998-2009 PacketVideo
302f5b5447de349216a40086ca6061efefb5a3025James Dong *
402f5b5447de349216a40086ca6061efefb5a3025James Dong * Licensed under the Apache License, Version 2.0 (the "License");
502f5b5447de349216a40086ca6061efefb5a3025James Dong * you may not use this file except in compliance with the License.
602f5b5447de349216a40086ca6061efefb5a3025James Dong * You may obtain a copy of the License at
702f5b5447de349216a40086ca6061efefb5a3025James Dong *
802f5b5447de349216a40086ca6061efefb5a3025James Dong *      http://www.apache.org/licenses/LICENSE-2.0
902f5b5447de349216a40086ca6061efefb5a3025James Dong *
1002f5b5447de349216a40086ca6061efefb5a3025James Dong * Unless required by applicable law or agreed to in writing, software
1102f5b5447de349216a40086ca6061efefb5a3025James Dong * distributed under the License is distributed on an "AS IS" BASIS,
1202f5b5447de349216a40086ca6061efefb5a3025James Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
1302f5b5447de349216a40086ca6061efefb5a3025James Dong * express or implied.
1402f5b5447de349216a40086ca6061efefb5a3025James Dong * See the License for the specific language governing permissions
1502f5b5447de349216a40086ca6061efefb5a3025James Dong * and limitations under the License.
1602f5b5447de349216a40086ca6061efefb5a3025James Dong * -------------------------------------------------------------------
1702f5b5447de349216a40086ca6061efefb5a3025James Dong */
1802f5b5447de349216a40086ca6061efefb5a3025James Dong#ifndef idct_h
1902f5b5447de349216a40086ca6061efefb5a3025James Dong#define idct_h
2002f5b5447de349216a40086ca6061efefb5a3025James Dong
2102f5b5447de349216a40086ca6061efefb5a3025James Dong/*----------------------------------------------------------------------------
2202f5b5447de349216a40086ca6061efefb5a3025James Dong; INCLUDES
2302f5b5447de349216a40086ca6061efefb5a3025James Dong----------------------------------------------------------------------------*/
2402f5b5447de349216a40086ca6061efefb5a3025James Dong#include "mp4dec_lib.h"
2502f5b5447de349216a40086ca6061efefb5a3025James Dong
2602f5b5447de349216a40086ca6061efefb5a3025James Dong/*----------------------------------------------------------------------------
2702f5b5447de349216a40086ca6061efefb5a3025James Dong; MACROS
2802f5b5447de349216a40086ca6061efefb5a3025James Dong; Define module specific macros here
2902f5b5447de349216a40086ca6061efefb5a3025James Dong----------------------------------------------------------------------------*/
3002f5b5447de349216a40086ca6061efefb5a3025James Dong
3102f5b5447de349216a40086ca6061efefb5a3025James Dong/*----------------------------------------------------------------------------
3202f5b5447de349216a40086ca6061efefb5a3025James Dong; DEFINES
3302f5b5447de349216a40086ca6061efefb5a3025James Dong; Include all pre-processor statements here.
3402f5b5447de349216a40086ca6061efefb5a3025James Dong----------------------------------------------------------------------------*/
3502f5b5447de349216a40086ca6061efefb5a3025James Dong#define INTEGER_IDCT
3602f5b5447de349216a40086ca6061efefb5a3025James Dong
3702f5b5447de349216a40086ca6061efefb5a3025James Dong#ifdef FAST_IDCT
3802f5b5447de349216a40086ca6061efefb5a3025James Dong#ifndef INTEGER_IDCT
3902f5b5447de349216a40086ca6061efefb5a3025James Dong#define INTEGER_IDCT
4002f5b5447de349216a40086ca6061efefb5a3025James Dong#endif
4102f5b5447de349216a40086ca6061efefb5a3025James Dong#endif
4202f5b5447de349216a40086ca6061efefb5a3025James Dong
4302f5b5447de349216a40086ca6061efefb5a3025James Dong#ifdef FAST_IDCT
4402f5b5447de349216a40086ca6061efefb5a3025James Dong#ifdef __cplusplus
4502f5b5447de349216a40086ca6061efefb5a3025James Dongextern "C"
4602f5b5447de349216a40086ca6061efefb5a3025James Dong{
4702f5b5447de349216a40086ca6061efefb5a3025James Dong#endif
4802f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctrow0(int16 *blk, uint8 *pred, uint8 *dst, int width);
4902f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctrow1(int16 *blk, uint8 *pred, uint8 *dst, int width);
5002f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctrow2(int16 *blk, uint8 *pred, uint8 *dst, int width);
5102f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctrow3(int16 *blk, uint8 *pred, uint8 *dst, int width);
5202f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctrow4(int16 *blk, uint8 *pred, uint8 *dst, int width);
5302f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctcol0(int16 *blk);
5402f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctcol1(int16 *blk);
5502f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctcol2(int16 *blk);
5602f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctcol3(int16 *blk);
5702f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctcol4(int16 *blk);
5802f5b5447de349216a40086ca6061efefb5a3025James Dong
5902f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctrow0_intra(int16 *blk, PIXEL *comp, int width);
6002f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctrow1_intra(int16 *blk, PIXEL *comp, int width);
6102f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctrow2_intra(int16 *blk, PIXEL *comp, int width);
6202f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctrow3_intra(int16 *blk, PIXEL *comp, int width);
6302f5b5447de349216a40086ca6061efefb5a3025James Dong    void idctrow4_intra(int16 *blk, PIXEL *comp, int width);
6402f5b5447de349216a40086ca6061efefb5a3025James Dong#ifdef __cplusplus
6502f5b5447de349216a40086ca6061efefb5a3025James Dong}
6602f5b5447de349216a40086ca6061efefb5a3025James Dong#endif
6702f5b5447de349216a40086ca6061efefb5a3025James Dong#endif
6802f5b5447de349216a40086ca6061efefb5a3025James Dong
6902f5b5447de349216a40086ca6061efefb5a3025James Dong/* this code assumes ">>" to be a two's-complement arithmetic */
7002f5b5447de349216a40086ca6061efefb5a3025James Dong/* right shift: (-2)>>1 == -1 , (-3)>>1 == -2                 */
7102f5b5447de349216a40086ca6061efefb5a3025James Dong
7202f5b5447de349216a40086ca6061efefb5a3025James Dong/* a positive real constant is converted to an integer scaled by 2048 */
7302f5b5447de349216a40086ca6061efefb5a3025James Dong/* or equivalent to left shift by 11 */
7402f5b5447de349216a40086ca6061efefb5a3025James Dong
7502f5b5447de349216a40086ca6061efefb5a3025James Dong#define W1 2841                 /* 2048*sqrt(2)*cos(1*pi/16) */
7602f5b5447de349216a40086ca6061efefb5a3025James Dong#define W2 2676                 /* 2048*sqrt(2)*cos(2*pi/16) */
7702f5b5447de349216a40086ca6061efefb5a3025James Dong#define W3 2408                 /* 2048*sqrt(2)*cos(3*pi/16) */
7802f5b5447de349216a40086ca6061efefb5a3025James Dong#define W5 1609                 /* 2048*sqrt(2)*cos(5*pi/16) */
7902f5b5447de349216a40086ca6061efefb5a3025James Dong#define W6 1108                 /* 2048*sqrt(2)*cos(6*pi/16) */
8002f5b5447de349216a40086ca6061efefb5a3025James Dong#define W7 565                  /* 2048*sqrt(2)*cos(7*pi/16) */
8102f5b5447de349216a40086ca6061efefb5a3025James Dong#define W1mW7 2276
8202f5b5447de349216a40086ca6061efefb5a3025James Dong#define W1pW7 3406
8302f5b5447de349216a40086ca6061efefb5a3025James Dong#define W5mW3 -799
8402f5b5447de349216a40086ca6061efefb5a3025James Dong#define mW3mW5 -4017
8502f5b5447de349216a40086ca6061efefb5a3025James Dong#define mW2mW6 -3784
8602f5b5447de349216a40086ca6061efefb5a3025James Dong#define W2mW6 1568
8702f5b5447de349216a40086ca6061efefb5a3025James Dong
8802f5b5447de349216a40086ca6061efefb5a3025James Dong/* left shift by 11 is to maintain the accuracy of the decimal point */
8902f5b5447de349216a40086ca6061efefb5a3025James Dong/* for the transform coefficients (W1,...W7) */
9002f5b5447de349216a40086ca6061efefb5a3025James Dong
9102f5b5447de349216a40086ca6061efefb5a3025James Dong/*----------------------------------------------------------------------------
9202f5b5447de349216a40086ca6061efefb5a3025James Dong; EXTERNAL VARIABLES REFERENCES
9302f5b5447de349216a40086ca6061efefb5a3025James Dong; Declare variables used in this module but defined elsewhere
9402f5b5447de349216a40086ca6061efefb5a3025James Dong----------------------------------------------------------------------------*/
9502f5b5447de349216a40086ca6061efefb5a3025James Dong
9602f5b5447de349216a40086ca6061efefb5a3025James Dong/*----------------------------------------------------------------------------
9702f5b5447de349216a40086ca6061efefb5a3025James Dong; SIMPLE TYPEDEF'S
9802f5b5447de349216a40086ca6061efefb5a3025James Dong----------------------------------------------------------------------------*/
9902f5b5447de349216a40086ca6061efefb5a3025James Dong
10002f5b5447de349216a40086ca6061efefb5a3025James Dong/*----------------------------------------------------------------------------
10102f5b5447de349216a40086ca6061efefb5a3025James Dong; ENUMERATED TYPEDEF'S
10202f5b5447de349216a40086ca6061efefb5a3025James Dong----------------------------------------------------------------------------*/
10302f5b5447de349216a40086ca6061efefb5a3025James Dong
10402f5b5447de349216a40086ca6061efefb5a3025James Dong/*----------------------------------------------------------------------------
10502f5b5447de349216a40086ca6061efefb5a3025James Dong; STRUCTURES TYPEDEF'S
10602f5b5447de349216a40086ca6061efefb5a3025James Dong----------------------------------------------------------------------------*/
10702f5b5447de349216a40086ca6061efefb5a3025James Dong
10802f5b5447de349216a40086ca6061efefb5a3025James Dong/*----------------------------------------------------------------------------
10902f5b5447de349216a40086ca6061efefb5a3025James Dong; GLOBAL FUNCTION DEFINITIONS
11002f5b5447de349216a40086ca6061efefb5a3025James Dong; Function Prototype declaration
11102f5b5447de349216a40086ca6061efefb5a3025James Dong----------------------------------------------------------------------------*/
11202f5b5447de349216a40086ca6061efefb5a3025James Dong
11302f5b5447de349216a40086ca6061efefb5a3025James Dong/*----------------------------------------------------------------------------
11402f5b5447de349216a40086ca6061efefb5a3025James Dong; END
11502f5b5447de349216a40086ca6061efefb5a3025James Dong----------------------------------------------------------------------------*/
11602f5b5447de349216a40086ca6061efefb5a3025James Dong#endif
11702f5b5447de349216a40086ca6061efefb5a3025James Dong
11802f5b5447de349216a40086ca6061efefb5a3025James Dong
119