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

Symbian

开发平台:

Visual C++

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