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

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_DLLINDEX
  36. #define _INC_DLLINDEX   1
  37. #include "h261type.h"
  38. #include "hvenc.h"
  39. typedef enum coderState {
  40.     framePreProcessed,
  41.     frameCoding,
  42.     frameReconstructed
  43. } coderState;
  44. /* The H261CodingControl struct passes bitrate control information from
  45.  * "the outside world" to the H261 encoder.
  46. */
  47. typedef struct {
  48.     long    qTargetBits; // This is the number of bits the coder should try to produce for
  49.                         // the current frame. We will use R(video) * 1/Target_Frame_Rate.
  50.                         // Typically targetBits is within +/- 20% of actual bits acheived.
  51.     long    minBits;    // Minimum number of bits to generate for the current
  52.                         // frame. Used to avoid under-run condition. 
  53.     long    maxBits;    // Maximum number of bits to generate for current frame.
  54.     S32     effFactor;  // Efficiency factor (used in QuantSelect).
  55.     short   maxQuant;   // Maximum quantizer step to use.
  56.     short   minQuant;   // Minimum quantizer step to use.
  57.     S32     K3;         // MahKeeNack controls:
  58.     S32     KAll;
  59.     S32     Min3;
  60.     S32     MinAll;
  61.     S32     weight_1;   // Tweak factors for coding type decision.
  62.     S32     weight_2;
  63.     S32     sendGobHeaders;
  64.     S32     prevBits;       // Bits produced in last frame (used by QuantSelect)
  65.     S32     prevQuality;    // Quant/"quality" in last frame (used by QuantSelect)
  66.     double  prevK;          // K value computed in last frame (used by QuantSelect)
  67.     unsigned short  vidType;    // Frame type
  68. } H261CodingControl;
  69. /* The H261Stats struct retains information the coder uses to
  70.  *  regulate its output.
  71. */
  72. typedef struct {
  73.     MbInfo      *mi;                // Array of MbInfo structures
  74.     FrameInfo   fi;                 // Frame information structure for tuning 
  75.     long        prevTargetBits;     // Target bits for last frame
  76.     long        prevTotalBits;      // Total bits generated for last frame
  77.     long        *GOBError;          // Error for each GOB
  78.     long        *GOBBits;           // Number of bits generated for each GOB
  79.     long        frame_counter;      // Incremented after each picture to generate
  80.                                     // "phases" for subsampling etc. No need to initialize. 
  81.     short       *GOBQuant;          // Quantizer step used for each GOB 
  82.     double      SNR;                // Signal To Noise Ratio of last frame
  83.     S32         mvSum;              // Sum of magnitude of all motion vectors
  84. } H261Stats;                
  85.                                                                                 
  86. /* The H261Encoder struct defines the I/O and steady-state data
  87.  * for the H261 encoder.
  88.  * NOTE: This stucture is only passed as a pointer, so we don't worry about its size. md 02.24.94
  89. */
  90. typedef struct h261enc *H261EncoderPtr;
  91. typedef struct h261enc {
  92.     PICTURE             newIn;      // New input frame (second input frame if PBframeMode)
  93.     PICTURE             oldIn;      // Old input frame/prediction/newOut
  94.     PICTURE             oldOut;     // Old output frame
  95.     PICTURE             B_In;       // First input frame (if PBframeMode)
  96.     PICTURE             BPred;      // Temporary array used for B-frame encoding
  97.     BS_PTR              bsStart;    // Points to start of bitstream 
  98.     BS_PTR              bsEnd;      // Updated bitstream pointer
  99.     H261CodingControl   cntrl;      // Coding control structure
  100.     H261Stats           stats;      // Coder statistics
  101.     GOB_DESCR           *gob;       // Array of GOB descriptors
  102.     MACROBLOCK_DESCR    *mb;        // Array of MB descriptors
  103.     long                *mbDiff;    // Sq. diff between newIn and oldIn for each MB
  104.     long                *blkIntra;  // 8x8 block variances
  105.     SYMBOL              *sym;       // Work array to hold Run-Level symbols
  106.                                     // Possible to use same area for oldOut and sym 
  107.                                     // (although sym is larger for worst-case)
  108.     long                maxsym;     // Dimension of sym[]
  109.     BS_PTR              bsAbs;      // Points to fixed bitstream area.
  110.     short               formatCap;  // CIF or QCIF
  111.     short               dummy;      // struct alignment 
  112.     int                 ptype;      // PTYPE field of last bitstream
  113.     int                 gfid;       // GFID field of last bitstream
  114.     int                 trPrev;     // Hold on to Temp Reference for prev. picture
  115.     enum coderState     state;      // coder state
  116.     MBMap               mestMap[2]; // Map of motion vector macroblock types.
  117. } H261Encoder; 
  118. /* The H261PicDescriptor struct passes picture layer information from
  119.  *  "the outside world" to the coder.
  120. */
  121. typedef struct {
  122.     unsigned short  temporalRef;    // Temporal reference. 5 bits indicating number of
  123.                                     // frames "skipped" ( see H.261 standard )
  124.     unsigned short  fastUpdate;     // Fast update request, 1 = do entire frame Intra
  125.     unsigned short  splitScreen;    // 0 = off, 1 = on
  126.     unsigned short  docCamera;      // 0 = off, 1 = on
  127.     unsigned short  format;         // 0 = QCIF, 1 = CIF, 2 = other
  128.     unsigned short  hiRes;          // 0 = on, 1 = off 
  129.     unsigned short  codingMethod;   // 0 = H.261, 1 = H.263
  130.     unsigned short  unrestrictedMv; // 0 = off, 1 = on
  131.     unsigned short  advancedPred;   // 0 = off, 1 = on
  132.     unsigned short  syntax_basedAC; // 0 = off, 1 = on
  133.     unsigned short  PBframeMode;    // 0 = off, 1 = on
  134.     unsigned short  reducedResUpdate;       // 0 = off, 1 = on
  135.     unsigned short  deblockingFilterMode;   // 0 = off, 1 = on
  136.     unsigned short  advancedIntraMode;      // 0 = off, 1 = on
  137.     unsigned short  tempRefBframe;  // Present if PB-frame; add these 3 bits to TR for
  138.                                     // prev. P-frame to get TR for B-frame
  139.     unsigned short  dbQuant;        // Quantization info for B-pictures (2 bits)
  140.     unsigned long   width;          // Width of luma 
  141.     unsigned long   height;         // Height of luma
  142.     unsigned long   peiCount;       // Number of p
  143. unsigned long forcedUpdateThresh; // Number of Inter Coded Frames before Intra update
  144.     unsigned long   fastUpdateGOB;          // 1 = Fast Update a subset of GOBs
  145.     unsigned long   fastUpdateFirstGOB;     // First GOB to intracode
  146.     unsigned long   fastUpdateNumberGOBs;   // Number of GOB
  147.     unsigned char   pSpare[MAX_PEI_COUNT]; /* Flawfinder: ignore */
  148. } H261PicDescriptor;
  149. // H261DecState contains state variables to support decoding in "chunks"
  150. #define SC_MAX              (50)    // Max # of startcodes to process per call
  151. typedef struct {
  152.     BS_PTR  bspStartCode[SC_MAX];   // Position of startcodes ("start")
  153.     int     gobNumber[SC_MAX];      // GOB numbers following each startcode ("gn")
  154.     int     nStartCodes;            // Number of startcodes found ("num_sc")
  155.     int     currentStartCode;       // Startcode currently processed ("sc")
  156.     GOB_DESCR   currentGob; // Can refer to several GOBs, if GOB headers are left out ("gob")
  157.     int     mbnum;          // internal variable in recon_gob
  158.     int     col;            // internal variable in recon_gob
  159.     int     i;              // internal variable in recon_gob
  160.     int     actComp;        // Keeps track of amount of computations
  161. } H261DecState;
  162. /* The H261Decoder struct defines the I/O for the H261 decoder.
  163.  * NOTE: This stucture is only passed as a pointer, so we don't worry about its size. md 02.24.94
  164. */
  165. #define DECODER_STATUS_SIZE 4
  166. typedef struct { 
  167.     BS_PTR              bsStart;    // Start of bitstream
  168.     BS_PTR              bsEnd;      // End of bitstream
  169.     BS_PTR              newBs;      // Returns next "bsStart"
  170.     BS_PTR              bsAbs;      // Points to fixed bitstream area.
  171.     MACROBLOCK_DESCR *  mb;         // Work array: describes each macroblock
  172.     int                 maxMbnum;   // Dimension of mb[] array
  173.     SYMBOL *            sym;        // Work array for symbol decoding
  174.     int                 maxSym;     // Dimension of sym[] array
  175.     H261DecState        state;      // State variables to support decoding with "timeout"
  176.     int                 maxComp;    // Return when actComp exceeds this number
  177.                                     // Set to zero to decode without "timeout"
  178.     PICTURE             oldOut;     // Old output frame (predictor input)
  179.     PICTURE             newOut;     // New output frame (second output if PBframeMode)
  180.     PICTURE             B_Out;      // First output frame (if PBframeMode)
  181.     PICTURE             prevOldOut; // Doublebuffering of output frames
  182.     PICTURE *           pNewPic;    // Points to most recent output frame
  183.     PICTURE *           pPrevPic;   // Points to previous output frame
  184.     PICTURE             convertPic; // Used for any necessary upsampling after decoding
  185.     PICTURE_DESCR       pic_layer;  // Returns Picture layer info
  186.     S32                 next_gob;   // I/O: Next GOB to process. Search for PSC if 0.
  187.     VvDecoderStats      status;     // Return status
  188.     short               formatCap;  // CIF or QCIF 
  189.     unsigned short      codingMethod;   // 0 = H.261, 1 = H.263
  190.     S32                 PBframeCap; // If 0: don't reconstruct B frame (just parse the bits)
  191.     S32                 pendingFrame;   // Set to 1 when returning B-frame, otherwise 0
  192.     int                 ptype;      // PTYPE field of last bitstream
  193.     int                 gfid;       // GFID field of last bitstream
  194.     MBMap               decMB;      // Map of decoded macroblock types.
  195. } H261Decoder; 
  196. /* Use this frame definition until videoCompressionStreamHandler is written */
  197. typedef struct frame *FramePtr;
  198. typedef struct frame {
  199.     unsigned long   lpData;     // Point to data (cannot use * because of DLL hooey)
  200.     unsigned long   width;      // Width of luma 
  201.     unsigned long   height;     // Height of luma
  202.     unsigned long   imgSize;    // Total Size of Image Data
  203.     unsigned long   imgOffset;  // Offset to image data
  204.     unsigned short  chromaDiv;  // To get size of chroma planes
  205.     unsigned short  vidType;    // Frame type
  206. } Frame;
  207. /* Misc defines*/
  208. #define NO_ERROR            0L
  209. #define UNKNOWN_VIDTYPE     1
  210. #define VIDTYPE_NOT_SUPPORTED_YET   2
  211. /* VvOpenEncoder and VvCloseEncoder defines */
  212. #define MAX_NUM_ENCODERS    2
  213. #ifndef AP_VIDEORESIZING
  214.   #define MAX_NUM_DECODERS    2
  215. #else
  216.   #define MAX_NUM_DECODERS    20
  217. #endif
  218. /* VvOpenEncoder and VvCloseEncoder error codes */
  219. #define MAX_ENCODERS_OPEN       MAX_NUM_ENCODERS + 10
  220. #define FAILED_MALLOC           MAX_NUM_ENCODERS + 11
  221. #define NO_ENCODERS_OPEN        MAX_NUM_ENCODERS + 12
  222. #define MAX_DECODERS_OPEN       MAX_NUM_ENCODERS + 13
  223. #define NO_DECODERS_OPEN        MAX_NUM_ENCODERS + 14
  224. #define UNKNOWN_PICTURE_FORMAT  MAX_NUM_ENCODERS + 15
  225.                 
  226. #endif