home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 9 / CD_ASCQ_09_1193.iso / news / 4441 / mpegcode / src / headers / dct.h < prev    next >
C/C++ Source or Header  |  1993-09-27  |  3KB  |  83 lines

  1. /*===========================================================================*
  2.  * dct.h                                     *
  3.  *                                         *
  4.  *    DCT procedures                                 *
  5.  *                                         *
  6.  *===========================================================================*/
  7.  
  8. /*
  9.  * Copyright (c) 1993 The Regents of the University of California.
  10.  * All rights reserved.
  11.  *
  12.  * Permission to use, copy, modify, and distribute this software and its
  13.  * documentation for any purpose, without fee, and without written agreement is
  14.  * hereby granted, provided that the above copyright notice and the following
  15.  * two paragraphs appear in all copies of this software.
  16.  *
  17.  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
  18.  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  19.  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
  20.  * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  21.  *
  22.  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
  23.  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  24.  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  25.  * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
  26.  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  27.  */
  28.  
  29.  
  30. #ifndef DCT_INCLUDED
  31. #define DCT_INCLUDED
  32.  
  33.  
  34. #include "ansi.h"
  35.  
  36.  
  37.  
  38. #define DCTSIZE     8   /* you really don't want to change this */
  39. #define DCTSIZE_SQ 64   /* you really don't want to change this */
  40.  
  41. #define DCTSIZE2    DCTSIZE*DCTSIZE
  42. typedef short DCTELEM;
  43. typedef DCTELEM DCTBLOCK[DCTSIZE2];
  44. typedef DCTELEM DCTBLOCK_2D[DCTSIZE][DCTSIZE];
  45.  
  46.  
  47. /*  
  48.  *  from mfwddct.c:
  49.  */
  50. extern void mp_fwd_dct_block _ANSI_ARGS_((DCTBLOCK_2D b));
  51.  
  52. /* jrevdct.c */
  53. extern void init_pre_idct _ANSI_ARGS_((void ));
  54. extern void j_rev_dct_sparse _ANSI_ARGS_((DCTBLOCK data , int pos ));
  55. extern void j_rev_dct _ANSI_ARGS_((DCTBLOCK data ));
  56. extern void j_rev_dct_sparse _ANSI_ARGS_((DCTBLOCK data , int pos ));
  57. extern void j_rev_dct _ANSI_ARGS_((DCTBLOCK data ));
  58.  
  59.  
  60. /* We assume that right shift corresponds to signed division by 2 with
  61.  * rounding towards minus infinity.  This is correct for typical "arithmetic
  62.  * shift" instructions that shift in copies of the sign bit.  But some
  63.  * C compilers implement >> with an unsigned shift.  For these machines you
  64.  * must define RIGHT_SHIFT_IS_UNSIGNED.
  65.  * RIGHT_SHIFT provides a proper signed right shift of an int32 quantity.
  66.  * It is only applied with constant shift counts.  SHIFT_TEMPS must be
  67.  * included in the variables of any routine using RIGHT_SHIFT.
  68.  */
  69.  
  70. #ifdef RIGHT_SHIFT_IS_UNSIGNED
  71. #define SHIFT_TEMPS     int32 shift_temp;
  72. #define RIGHT_SHIFT(x,shft)  \
  73.         ((shift_temp = (x)) < 0 ? \
  74.          (shift_temp >> (shft)) | ((~((int32) 0)) << (32-(shft))) : \
  75.          (shift_temp >> (shft)))
  76. #else
  77. #define SHIFT_TEMPS
  78. #define RIGHT_SHIFT(x,shft)     ((x) >> (shft))
  79. #endif
  80.  
  81.  
  82. #endif DCT_INCLUDED
  83.