h261type.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:7k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35.  
  36. #ifndef _INC_H261TYPE
  37. #define _INC_H261TYPE   1
  38. #include "machine.h"
  39. //typedef signed char       S8;         // 8 bits signed
  40. //typedef unsigned char     U8;         // 8 bits unsigned
  41. //typedef short int         S16;        // 16 bits signed
  42. //typedef unsigned short int U16;       // 16 bits unsigned
  43. //typedef long int          S32;        // 32 bits signed
  44. //typedef unsigned long int U32;        // 32 bits unsigned
  45. //typedef unsigned char     PIXEL;      // 8 bits unsigned
  46. /* SYMBOL - Symbol descriptor */
  47. typedef struct {
  48.     S8              value;
  49.     S8              type;
  50. } SYMBOL;
  51. /* BS_PTR - Pointer to current position in bitstream */
  52. typedef struct {
  53.     U8          *byteptr;    // Points to current byte
  54.     int          bitptr;     // Number of bits already consumed/processed in
  55.                                 // current byte, i.e., points at bit (7-bitptr)
  56. } BS_PTR;
  57. /* BLOCK_DESCR - Descriptor for symbols in a block */
  58. typedef struct {
  59.     SYMBOL      *sym;        // Points to array of run-level pairs
  60.     int          nsym;       // Number of run-level pairs in array
  61.     int          intraVar;   // Block variance
  62.     int          predErr;    // Prediction error (undefined for INTRA blocks)
  63. } BLOCK_DESCR;
  64. /* MACROBLOCK_DESCR - 256-byte descriptor for MB, that consists of 6 blocks */
  65. /*** NOTE! This structure MUST be 256 bytes in size for efficiency.  ***/
  66. typedef struct {
  67.     BLOCK_DESCR     block[6];
  68.     BLOCK_DESCR     Bblock[6];  // Descriptors for B-blocks
  69.     U32             codedCount; // Number of times macroblock has been coded
  70.     int             lumaVar;    // Average of 4 luminance block variances (intraVar)
  71.     int             dquant;     // H.263: differential value for quant
  72.     int             quality;    // Quality index used to select "quant" and HF attenuation
  73.     U8              mtype;
  74.     U8              active;     // Indicates active part of picture for INTRA blocks;
  75.                                 // Undefined for other MTYPEs
  76.     U8              quant; // Quantizer step
  77.     U8              cbp; // Coded block pattern
  78.     U8              x;          // mb_column
  79.     U8              y;          // mb_row
  80.     S8              mv_x;       // Hor. component of motion vector
  81.     S8              mv_y;       // Vert. component of motion vector
  82.     S8              mvd_x;      // Hor. motion vector difference
  83.     S8              mvd_y;      // Vert. motion vector difference
  84.     U8              modB;       // Mode for B-blocks; defined for PB frames only    
  85.     U8              intra_mode; // Intra prediction mode; defined for advanced intra mode only
  86.     S8              blkMvX[4];  // Hor. motion for 8x8 blocks; defined when mtype=INTER4V
  87.     S8              blkMvY[4];  // Vert. motion for 8x8 blocks
  88.     S8              blkDiffX[4]; // Hor. mv diff. for 8x8 blocks (mtype=INTER4V)
  89.     S8              blkDiffY[4]; // Vert. mv difference for 8x8 blocks
  90.     U8              Bquant;     // quant for B-frame
  91.     U8              cbpB;       // Coded block pattern for B-blocks; defined if modB > 1
  92.     S8              mvdB_x;     // Mv data for B-macroblock; defined if modB > 0
  93.     S8              mvdB_y;
  94.     S8              blkMvFx[4]; // Hor. motion for forward prediction of B-frame
  95.     S8              blkMvFy[4]; // Vert. motion for forward prediction of B-frame
  96.     S8              blkMvBx[4]; // Hor. motion for backward prediction of B-frame
  97.     S8              blkMvBy[4]; // Vert. motion for backward prediction of B-frame
  98. } MACROBLOCK_DESCR;
  99. /* GOB_DESCR - Descriptor for Group Of Block */
  100. typedef struct {
  101.     int                     gn;         // GOB Number
  102.     int                     next_gn;    // Next GOB Number
  103.     int                     gquant;
  104.     int                     gei;
  105.     int                     num_mb;     // Number of macroblocks
  106.     MACROBLOCK_DESCR        *mb;       // Origin of macroblock array
  107.     int                     first_col;  // First MB in GOB
  108.     int                     first_row;
  109.     int                     mb_width;   // MBs per row
  110.     int                     mb_offset;  // Row offset
  111.     int                     num_gspare;
  112.     S8                      *gspare;
  113. } GOB_DESCR;
  114. /*  ENCTABENTRY - Variable length code */
  115. typedef struct {
  116.     U32             code;   // Variable length code, starting in MSB; max 25 bits
  117.     int             len;    // of bits
  118. } ENCTABENTRY;
  119. #define DCT_8X8_SCALE       2                       /* DCT_SCALE**2 */
  120. #define QTABLE_MAX_MAGN     (2048*DCT_8X8_SCALE)    /* 2048 * DCT_SCALE**2 */
  121. #define MAX_Q_INDEX         127
  122.                      /* Largest qz output */
  123. /* Dimensions for Qtab */
  124. #define QUALITY_STEPS       (31)
  125. #define MASKING_STEPS       (1)
  126. /* Structures for table-based quantization */
  127. typedef struct QTab {
  128.     S8  qVal[(1+2*QTABLE_MAX_MAGN)];
  129. } QTab;
  130. typedef struct QTab *pQTab;
  131.                  
  132. typedef struct QMatrix {
  133.     int     maxCoeff;           // last coeff to quantize [1,64]
  134.     pQTab   qCoeffTabs[64];     // tables
  135. } QMatrix;
  136. typedef struct QMatrix *pQMatrix;
  137. // typedef for region-of-interest rectangle
  138. typedef struct {
  139.     S32 left;
  140.     S32 top;
  141.     S32 right;
  142.     S32 bottom;
  143. } ROI_RECT;
  144. #endif