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

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. #ifndef _INC_HVENC
  36. #define _INC_HVENC      1
  37. #include "machine.h"
  38. #include "h261type.h" 
  39. //#define VvDbgMsg( msg )       VvDbg( msg )
  40. #define VvDbgMsg( msg )
  41. extern void VvDbg ( char *msg );
  42.  
  43. /* Temporal filter function id.s        */
  44. enum { Identity, NonLinear };
  45. /* MbInfo */
  46. typedef struct {
  47.     S16         predBits;               // Number of predicted bits per macroblock
  48.     S16         actYBits;               // Number of actual bits per macroblock (Y component)
  49.     S16         actCbBits;              // Number of actual bits per macroblock (Cb component)
  50.     S16         actCrBits;              // Number of actual bits per macroblock (Cr component)
  51.     S32         mse;                    // mse or var measure
  52.     S16         qStep;                  // Quantizer step used
  53.     S16         codingType;             // Intra, Inter, etc.
  54.     S16         cFlag;                  // True if any luma blocks to be coded
  55.     S16         dummy;
  56. } MbInfo;
  57.  
  58. /* FrameInfo */
  59. typedef struct {
  60.     S32         logSum;                 // Sum of variance or mse for coded blocks
  61.     S32         codedBlkCnt;            // Number of macroblocks to be coded
  62.     S32         qTargetBits;            // Goal Bits for q-step selection
  63. } FrameInfo; 
  64. /* COMPONENT - Image component descriptor */
  65. typedef struct {
  66.     S32         nhor;           // Active pels per row
  67.     S32         nvert;          // Number of rows
  68.     S32         hoffset;        // Bytes between rows i.e. active + non-active
  69.     S32         pOffset;        // Bytes between adjacent pels. If this is not 0 or 1,
  70.                                 // then the array is not packed. This is here to handle
  71.                                 // pictures at the application level. 
  72.     U32         ptrAlias;       // 16:16 alias to ptr (decoder only)
  73.     PIXEL       *ptr;    // Data
  74. } COMPONENT;
  75. /* PICTURE - Frame descriptor */
  76. typedef struct {
  77.     S32             color;          // 1 = Color is valid, 0 = luma only
  78.     S32             vXoffset;       // X offset for placing video data 0,8,16..
  79.     S32             vYoffset;       // Y offset for placing video data
  80.     S32             xSize   ;       // Active pels per row
  81.     S32             ySize;          // Active rows
  82.     S16             picLayout;      // Picture layout e.g. S422
  83.     S16             dummy;          // Dummy for alignment
  84.     COMPONENT       y;
  85.     COMPONENT       cb;
  86.     COMPONENT       cr;
  87.     TIME32          tTimestamp;     // Timestamp
  88. } PICTURE;
  89. /* PICTURE_DESCR - Descriptor for Picture layer information */
  90. #define MAX_PEI_COUNT       4
  91. typedef struct {
  92.     S32             codingMethod;   // 0 = H.261, 1 = H.263
  93.     S32             splitscreen;
  94.     S32             doccamera;
  95.     S32             fp_release;
  96.     S32             format;
  97.     S32             rows;
  98.     S32             cols;
  99.     S32             hi_res;
  100.     S32             tr;
  101.     S32             trPrev;         // Temp Reference for prev. P-frame
  102.     S32             ptype;
  103.     S32             interFrame;     // 0 = INTRA picture, otherwise INTER picture
  104.     S32             unrestrictedMv; // 0 = off, otherwise on
  105.     S32             advancedPred;   // 0 = off, otherwise on
  106.     S32             syntax_basedAC; // 0 = off, otherwise on
  107.     S32             PBframeMode;    // 0 = off, otherwise on
  108.     S32             reducedResUpdate;// 0 = off, otherwise QUANT for Reduced-res. Update mode
  109.     S32             deblockingFilterMode;// 0 = off, otherwise on
  110.     S32             advancedIntraMode;// 0 = off, otherwise on
  111.     S32             tempRefBframe;  // Present if PB-frame; add these 3 bits to TR for
  112.                                     // prev. P-frame to get TR for B-frame
  113.     S32             dbQuant;        // quantization info for B-pictures (2 bits)
  114.     S32             peiCount;
  115.     S32             cpm;            // continuous presence multipoint.
  116.     S32             decodingInProgress; // Set to FALSE if feeding new bitstream to decoder
  117.                                     // VvDecode will set it to TRUE if decoder "timed out",
  118.                                     // i.e., didn't finish decoding.  VvDecode needs to be
  119.                                     // called repeatedly until returning FALSE
  120.     U8              pSpare[MAX_PEI_COUNT]; // ;;;
  121. } PICTURE_DESCR;
  122. /* Temporary definition */
  123. typedef struct {
  124.     long    rows;               // Number of rows in a frame    
  125.     long    cols;               // Number of columns in a frame. For Spigot this should
  126.                                 // include y,u,v  e.g. 320 for 1/4
  127.     short   topSkip;            // Number of lines to skip on top of video
  128.     short   botSkip;            // Number of lines to skip on bottom of video.
  129.     short   vidType;            // Indicates video capture board type.
  130.     short   dummy;
  131.     S32     bNewDIB;
  132.     S32     xCur;
  133.     S32     yCur;
  134.     U32     histVal;            // Xth percentile (X is specified by H261EncoderParams.percentile).
  135.     S32     histCount;          // Number of samples in lumaHist.
  136.     S32     lumaHist[256];      // Holds histogram of raw luma data
  137.     unsigned char *dataPtr1; // Points to start of pixel data (not S422 marker)
  138.     unsigned char *dataPtr; // Points to start of pixel data (not S422 marker)
  139. } VIDEOFrame;
  140. /* Length of statistics arrays */
  141. #define NUM_TIMERS          7
  142. #define NUM_DCT_STATS       4
  143. /* Label time array */
  144. #define TFLT        0
  145. #define IVAR        1
  146. #define MEST        2
  147. #define PSEL        3
  148. #define QSEL        4
  149. #define DCTC        5
  150. #define VLCC        6
  151. /* Label DCT stats array */
  152. #define DCT_STAT_SKIPPED    0
  153. #define DCT_STAT_ZERO       1
  154. #define DCT_STAT_1ST_THREE  2
  155. #define DCT_STAT_MORE       3
  156. /* Macroblock "map" types and definition */
  157. #define DECODER_MAP     1   // decMB.type 
  158. #define MEST_MAP_X      2   // Motion estimation map type
  159. #define MEST_MAP_Y      3   // Motion estimation map type
  160. typedef struct {
  161.     S32     format;         // QCIF of CIF. Set by user.   
  162.     S32     type;           // 1 = decoder map (others TBD). Set by user.
  163.     U8      data[396];      // Array of data. 1 byte per macroblock. Declare
  164.                             // for CIF and use subset for QCIF.  
  165. } MBMap;
  166.  
  167. /*
  168.  * bit index -- 16:16 byte offset:bit number 
  169.  */
  170. typedef union VvBitIndex *lpVvBitIndex;
  171. typedef union VvBitIndex {
  172.     U32 l;
  173.     struct ww {
  174.         U16 bit;
  175.         U16 byte;
  176.     } ww;
  177. } VvBitIndex;
  178. /* Decoder statistics */
  179. typedef struct VvDecoderStats *lpVvDecoderStats;
  180. typedef struct VvDecoderStats {
  181.     S32 dwStartcodes;
  182.     S32 dwGobs;
  183.     S32 dwBadgobs;
  184.     S32 dwFirstBadgob;
  185.     S32 dwUpdateGobs;
  186.     S32 dwIntraFrame;
  187.     S32 dwPsc;
  188.     VvBitIndex pscIndex;    /* picture start code index */
  189.     S32 dwBframe;           /* Report whether B-frame is returned from VvDecode */
  190. } VvDecoderStats;
  191. /* Possible video board vendors types */ 
  192. enum { S422, YVU9, VLV3, VLV4, DIB };   // S422 = Video Spigot,  YVU9 = Intel Smart Recorder
  193.                                         // VLV3 = Captivator 4:1:1, VLV4 = Captivator Mono
  194.                                         // DIB = Device Independent Bitmap
  195. /* Misc defines*/
  196. #ifndef TRUE
  197. #define FALSE                       0
  198. #define TRUE                        1
  199. #endif
  200. #define NO_ERROR                    0L
  201. #define UNKNOWN_VIDTYPE             1
  202. #define VIDTYPE_NOT_SUPPORTED_YET   2
  203. //#define MAX_BITSTR_SIZE             32768
  204. #define MAX_BITSTR_SIZE             49512
  205. /* VvOpenEncoder and VvCloseEncoder     defines */
  206. #define MAX_NUM_ENCODERS    2
  207. #ifndef AP_VIDEORESIZING
  208. #define MAX_NUM_DECODERS    2
  209. #else
  210. #define MAX_NUM_DECODERS    20
  211. #endif
  212. /* VvOpenEncoder and VvCloseEncoder     error codes */
  213. #define MAX_ENCODERS_OPEN       MAX_NUM_ENCODERS + 10
  214. #define FAILED_MALLOC           MAX_NUM_ENCODERS + 11
  215. #define NO_ENCODERS_OPEN        MAX_NUM_ENCODERS + 12
  216. #define MAX_DECODERS_OPEN       MAX_NUM_ENCODERS + 13
  217. #define NO_DECODERS_OPEN        MAX_NUM_ENCODERS + 14
  218. #define UNKNOWN_PICTURE_FORMAT  MAX_NUM_ENCODERS + 15
  219.         
  220. #endif