h261func.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:15k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: h261func.h,v 1.2.40.1 2004/07/09 01:56:22 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef _INC_H261FUNC
  50. #define _INC_H261FUNC   1 
  51. //  dct.c
  52. extern void Dct2( PIXEL x[], int xdim, S16 y[8][8] );
  53. extern void Dct2Diff( PIXEL x[], int xdim, PIXEL pred[], S16 y[64] );
  54. extern void InitDctTables ( void );
  55. extern void Dct8x8ssDiff( PIXEL x[], int xdim, PIXEL pred[], S16 y[8*8],
  56.                           int hSize,    // 16: normal DCT; otherwise: mirror input horizontally
  57.                           int vSize     // 16: normal DCT; otherwise: mirror input vertically
  58.                           );
  59. //  dct4x4.c
  60. extern void Dct4x4( PIXEL x[], int xdim, S16 y[4][4]);
  61. extern void Dct4x4Diff( PIXEL x[], int xdim, PIXEL pred[], S16 y[4][4]);
  62. //  h261dec.c
  63. extern int  H261Decode( H261Decoder * s );
  64. extern int  BsDiff( BS_PTR bs1, BS_PTR bs2 );   // Compute # bits in segment bs1 - bs2
  65. extern void InitFindSC( void );
  66. extern int  checksym( SYMBOL sym, int type, char routine[] );
  67. //  h261enc.c
  68. extern int H261Encode( H261Encoder * s, H261PicDescriptor d, TIME32 time0[], S32 DCTStats[] );
  69. extern int H261Recon( H261Encoder * s, H261PicDescriptor d );
  70. //  h261err.c
  71. extern void H261ErrMsg( char s[] );
  72. //  h263dec.c
  73. extern int  DecPicLayer263( BS_PTR * bs, int nbits, PICTURE_DESCR * pic,
  74.                             GOB_DESCR * gob, int * decPtype );
  75. extern void InitMvTabs( int trD, int trB,
  76.                         int tabMvF[], int tabMvB[]  // [UMV_MIN:UMV_MAX]
  77.                         );
  78. extern int  DecGobLayer263( BS_PTR * bs, int nbits, GOB_DESCR * gob, int * gfid );
  79. extern int  DecMbLayer263(  BS_PTR * bs,    // Bitstream pointer
  80.                             int nbits,      // Bits to decode (incl. trailing startcode)
  81.                             GOB_DESCR * gob,        // GOB descriptor
  82.                             MACROBLOCK_DESCR mb[],  // Packed array of "gob->num_mb" MB descr.
  83.                             int interFrame, // 0: ptype=INTRA, otherwise ptype=INTER
  84.                             int PBframe,    // 0: not PB frame, otherwise PB frame
  85.                             int unrestrictedMv, // 0: -16/+15.5 motion, otherwise +/- 31.5
  86.                             int advancedIntraMode, // 0 off else on
  87.                             SYMBOL sym[],   // symbol array
  88.                             int maxsym      // size of symbol array
  89.                             );
  90. extern void GetMvBframe( MACROBLOCK_DESCR *mb, int unrestrictedMv,
  91.                          int tabMvF[], int tabMvB[]  // [UMV_MIN:UMV_MAX]
  92.                          );
  93. //  idct.c
  94. extern void InitReconTables( void );
  95. extern void Idct2( SYMBOL sym[], int nsym, PIXEL x[], int xdim, S16 recon[], int clean );
  96. extern void Idct2Sum( SYMBOL sym[], int nsym, PIXEL x[], int xdim, S16 recon[], int clean );
  97. extern void Idct2_s16( int intra, SYMBOL sym[], int nsym, S16 x[], int xdim, S16 recon[] );
  98. //  intercod.c
  99. extern U8  ReconStep[];
  100. extern int InterCode( PICTURE *pic, PICTURE *pred, MACROBLOCK_DESCR * mb, int masking,
  101.                         SYMBOL sym[] );
  102. extern int IntraCode( PICTURE *pic, MACROBLOCK_DESCR * mb, SYMBOL sym[], long mbDiff, int codingMethod );
  103. extern void InitQuantTables( void );
  104. extern int Code32x32( PICTURE *pic, PICTURE *pred, MACROBLOCK_DESCR * mb, int masking,
  105.                         SYMBOL sym[], int intraFlag );
  106. //  predsel.c
  107. extern void InitPred( void );
  108. extern int PredSelect( H261PicDescriptor *d, PICTURE *oldOut, PICTURE *newIn,
  109.                        int mbhor, int mbvert, MACROBLOCK_DESCR mb[], GOB_DESCR gob[],
  110.                        PICTURE *pred, int dct_thresh, H261Stats *stats,
  111.                        S32 weight_1, S32 weight_2, S32 sendGobHeaders );
  112. extern int var16( PIXEL pic[], int xdim, int phase, long var[4] );
  113. extern int err16( PIXEL new[], PIXEL old[], int xdim, int phase, int err[4] );
  114. extern int  LoopFilter( MACROBLOCK_DESCR *mb, PICTURE *prev_pic, PICTURE *pic );
  115. // mcomp.c
  116. extern int  MotionComp( MACROBLOCK_DESCR *mb, PICTURE *prev_pic, PICTURE *pic );
  117. extern void MotionComp263( MACROBLOCK_DESCR * mb, // Describes block to be motion-compensated
  118.                             PICTURE * prevPic,  // Describes previous picture used to form MC
  119.                             PICTURE * pic       // Output picture where MC block is placed
  120.                             );
  121. extern void OverlapMC( MACROBLOCK_DESCR * mb,   // Describes block to be motion-compensated
  122.                         int     PBframe,    // Non-zero if PB frame
  123.                         PICTURE * prevPic,  // Describes previous picture used to form MC
  124.                         PICTURE * pic,      // Output picture where MC block is placed
  125.                         int     mbWidth,    // Macroblocks per row
  126.                         int     mbOffset,   // Row offset; (mb-mbOffset) is neighbor on top
  127.                         int     overlap[4]  // Returns YES or NO to indicate whether overlap
  128.                                             // was done in each 8x8 subblock
  129.                         );
  130. extern int PointingOutside( int col1, int col2, // First and last column of block
  131.                             int row1, int row2, // First and last row of block
  132.                             int mvX, int mvY,   // Motion vector; one fractional bit
  133.                             int nCols, int nRows    // Picture size
  134.                             );
  135. extern void PredBframe( MACROBLOCK_DESCR * mb,  // Macroblock to be predicted
  136.                         PICTURE * prevPic,      // Prev. picture (forward pred)
  137.                         PICTURE * nextPic,      // Next P-picture (backward pred)
  138.                         PICTURE * Bpic          // Output picture where pred is placed
  139.                         );
  140. extern void PredBdist( MACROBLOCK_DESCR * mb,  // Macroblock to be predicted
  141.                         PICTURE * prevPic,      // Prev. picture (forward pred)
  142.                         PICTURE * nextPic,      // Next P-picture (backward pred)
  143.                         PICTURE * Bpic          // Output picture where pred is placed
  144.                         );
  145. //  mest.c
  146. extern int  MotionEst( PICTURE *new_in, PICTURE *old_in, int mbhor, int mbvert,
  147.    MACROBLOCK_DESCR Mb[], int unrestrictedMv, int advancedPred, S32 *mvSum );
  148. extern int  RefineMotionVector( MACROBLOCK_DESCR *mb,   // MB descriptor; contains initial MV
  149.                                 PIXEL new[],    // Upper left pixel of new 16x16 block
  150.                                 PIXEL old[],    // Old block (no motion comp)
  151.                                 int xdim,       // Line offset for "new" and "old"
  152.                                 int phase,      // Phase used for computing "mc_err"
  153.                                 int mc_err,     // Error for initial motion vector
  154.                                 int err[4],     // Error for each 8x8 block; submit values for
  155.                                                 // initial mv; returns values for chosen mv
  156.                                 int horPredOnly );   // 1-D prediction for mv?
  157. extern int  TryInter4V( MACROBLOCK_DESCR mb[],  // MB descriptor array; mb[0] is current mb;
  158.                                                 // use surrounding mb's to get mv candidates
  159.                                                 // Note: "past" mv's have a fractional bit
  160.                         PIXEL new[],    // Upper left pixel of new 16x16 block
  161.                         PIXEL old[],    // Old block (no motion comp)
  162.                         int xdim,       // Line offset for "new" and "old"
  163.                         int phase,      // Phase used for computing "mc_err"
  164.                         int mc_err,     // Error for initial motion vector
  165.                         int errMc[4],   // Error for each 8x8 block with INTER mv (undefined
  166.                                         //  if mv=0); returns values for chosen mv/mv's
  167.                         int err[4],     // Error for each 8x8 block with mv=0
  168.                                         //  We are assuming that sum(err) > sum(errMc)
  169.                         int sqQuant     // QUANT^2; needed for INTER4V decision
  170.                         );
  171. extern int UmvErr( PIXEL new[], PIXEL old[], int xdim, int phase, int errvec[4],
  172.                    int size, int col, int row, int mvX, int mvY );
  173. extern int RefineMvReducedResMode( MACROBLOCK_DESCR *mb,// MB descriptor; contains initial MV
  174.                                    int blk,     // Subblock (0,1,2,or 3)
  175.                                    PIXEL new[], // Upper left pixel of new 16x16 or 8x8 block
  176.                                    PIXEL old[], // Old block (no motion comp)
  177.                                    int xdim,    // Line offset for "new" and "old"
  178.                                    int phase,   // Phase used for computing "mc_err"
  179.                                    int col, int row // (x,y) position for upper left corner
  180.                                    );
  181. //  enc
  182. extern void MvPred( MACROBLOCK_DESCR mb[],
  183.                     int blk,        // specify block: UL, UR, LL, LR, or WHOLE 
  184.                     int mbhor,      // offset from previous row of MBs
  185.                     int horPredOnly, 
  186.                     int *mvX, int *mvY );
  187. //  vld.c
  188. extern U8 Get8Bits( BS_PTR bs );
  189. extern void IncBsPtr( BS_PTR * bs, int incr );
  190. extern int FLDecSymbol( BS_PTR * bs,        // Bitstream pointer; incremented by this routine
  191.                         int bits,           // Symbol length
  192.                         int * numBits,      // Max # bits to decode; decremented by this routine
  193.                         int * value         // Returns decoded symbol
  194.                         );
  195. extern int VLDecSymbol( BS_PTR * bs,        // Bitstream pointer; incremented by this routine
  196.                         int tabNum,         // Use dectable[tabNum] for decoding
  197.                         int * numBits,      // Max # bits to decode; decremented by this routine
  198.                         SYMBOL * sym        // Returns decoded symbol
  199.                         );
  200. extern void InitDecodeTable( void );
  201. //  quant2.c
  202. extern int QuantSelect ( S32 codedBlkCnt, H261CodingControl * cntrl, int num_mb,
  203.                          MACROBLOCK_DESCR mb[], MbInfo mbStats[], long *logSum, S32 color,
  204.                          int reducedResUpdate );
  205. extern void InitLogTab ( void );
  206.                       
  207. // getImgParms().
  208. extern S16 getImgParms( short format, short *numGOBS, short *numMBs, long *imgSize,
  209.             long *lumaSize, long *chromaLineLength, long *chromaRows, long *maxsym);
  210. // vdecopcl.c
  211. extern int AllocVarStructsDecoder( H261Decoder *dec, short formatCap_or_numMBs );
  212. extern void FreeVarStructsDecoder( H261Decoder *dec );
  213. // recongob.c
  214. extern int ReconGob( GOB_DESCR * gob, MACROBLOCK_DESCR mb[],
  215.                      PICTURE * prev_pic, PICTURE * pic, PICTURE * Bpic, 
  216.                      int advancedPred, int PBframe, int PBframeCap, int reducedResUpdate,
  217.                      int advancedIntraMode, H261DecState *state, int maxComp );
  218. extern int ConcealGob( GOB_DESCR * gob, MACROBLOCK_DESCR mb[], int reducedResUpdate,
  219.                        PICTURE * prev_pic, PICTURE * pic );
  220. extern void ReconIntra( MACROBLOCK_DESCR * mb, PICTURE * pic, int clean);
  221. extern void ReconAdvancedIntra( MACROBLOCK_DESCR * mb, PICTURE * pic, int clean);
  222. extern void ReconInter( MACROBLOCK_DESCR * mb, PICTURE * pic, int clean );
  223. extern S8 ReducedResMvComponent( S8 x );
  224. extern void MotionComp32x32( MACROBLOCK_DESCR * mb, // Describes block to be motion-compensated
  225.                             PICTURE * prevPic,  // Describes previous picture used to form MC
  226.                             PICTURE * pic       // Output picture where MC block is placed
  227.                             );
  228. extern void Overlap32x32( MACROBLOCK_DESCR * mb,   // Describes block to be motion-compensated
  229.                         PICTURE * prevPic,  // Describes previous picture used to form MC
  230.                         PICTURE * pic,      // Output picture where MC block is placed
  231.                         int     mbWidth,    // Macroblocks per row
  232.                         int     mbOffset,   // Row offset; (mb-mbOffset) is neighbor on top
  233.                         int     overlap[4]  // Returns YES or NO to indicate whether overlap
  234.                                             // was done in each 8x8 subblock
  235.                         );
  236. extern void Fill32x32( MACROBLOCK_DESCR * mb, PICTURE * pic, PIXEL value );
  237. extern void ReconReducedResMb( MACROBLOCK_DESCR * mb,   // Macroblock to be reconstructed
  238.                                PICTURE * pic,   // Input: motioncomp. prediction;
  239.                                                 // output: reconstr. picture
  240.                                int intra,       // INTER block if zero, otherwise INTRA
  241.                                PICTURE * tempPic// Use for temporary storage
  242.                                );
  243. //  Routines used for debugging
  244. extern void printsym( SYMBOL sym );
  245. extern void sprintsym( SYMBOL sym, char s[], int sBufLen );
  246. extern void sprinttype( int symtype, char s[] , int sBufLen);
  247. extern void printstate( int state );
  248. #endif