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

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 __H263VDEC_H__
  36. #define __H263VDEC_H__
  37. #include "hxtypes.h"
  38. //#include "hxcodec.h"
  39. #if defined(_MSC_VER)
  40. ///////////////////////////////////
  41. //
  42. // Begin 1-byte structure alignment
  43. //
  44. ///////////////////////////////////
  45. // RealVideo front end files use 1-byte structure alignment under MSVC,
  46. // but the backend is compiled with 8-byte alignment.
  47. // This pragma keeps the structure alignment independent of compiler options,
  48. // for all structures declared in this file.
  49. #pragma pack(push, 1)
  50. #endif
  51. // Byte alignment settings for Mac
  52. #if defined( _MACINTOSH )
  53. #pragma options align=mac68k
  54. #endif
  55. #ifdef __cplusplus
  56. extern "C" { /* Assume C declarations for C++ */
  57. #endif /* __cplusplus */
  58. #define RV_DECODE_MORE_FRAMES        0x00000001
  59. #define RV_DECODE_DONT_DRAW          0x00000002
  60. #define RV_DECODE_KEY_FRAME 0x00000004
  61.     // Indicates that the decompressed image is a key frame.
  62.     // Note that enhancement layer EI frames are not key frames, in the
  63.     // traditional sense, because they have dependencies on lower layer
  64.     // frames.
  65. #define RV_DECODE_B_FRAME 0x00000008
  66.     // Indicates that the decompressed image is a B frame.
  67.     // At most one of PIA_DDN_KEY_FRAME and PIA_DDN_B_FRAME will be set.
  68. #ifndef TAG_HXCODEC_SEGMENTINFO
  69. #define TAG_HXCODEC_SEGMENTINFO
  70. typedef struct tag_HXCODEC_SEGMENTINFO
  71. {
  72. LONG32 bIsValid;
  73. ULONG32 ulSegmentOffset;
  74. } HXCODEC_SEGMENTINFO;
  75. #define HXCODEC_SEGMENTINFO_SIZE (8)
  76. #endif
  77. typedef struct tag_H263DecoderInParams
  78. {
  79. ULONG32 dataLength;
  80. LONG32 bInterpolateImage;
  81. ULONG32 numDataSegments;
  82. HXCODEC_SEGMENTINFO *pDataSegments;
  83. ULONG32 flags;
  84.         // 'flags' should be initialized by the front-end before each
  85.         // invocation to decompress a frame.  It is not updated by the decoder.
  86.         //
  87.         // If it contains RV_DECODE_MORE_FRAMES, it informs the decoder
  88.         // that it is being called to extract the second or subsequent
  89.         // frame that the decoder is emitting for a given input frame.
  90.         // The front-end should set this only in response to seeing
  91.         // an RV_DECODE_MORE_FRAMES indication in H263DecoderOutParams.
  92.         //
  93.         // If it contains RV_DECODE_DONT_DRAW, it informs the decoder
  94.         // that it should decode the image (in order to produce a valid
  95.         // reference frame for subsequent decoding), but that no image
  96.         // should be returned.  This provides a "hurry-up" mechanism.
  97. ULONG32 timestamp;
  98. } H263DecoderInParams;
  99. typedef struct tag_H263DecoderOutParams
  100. {
  101. ULONG32 numFrames;
  102. ULONG32 notes;
  103.         // 'notes' is assigned by the transform function during each call to
  104.         // decompress a frame.  If upon return the notes parameter contains
  105.         // the indication RV_DECODE_MORE_FRAMES, then the front-end
  106.         // should invoke the decoder again to decompress the same image.
  107.         // For this additional invocation, the front-end should first set
  108.         // the RV_DECODE_MORE_FRAMES bit in the 'H263DecoderInParams.flags'
  109.         // member, to indicate to the decoder that it is being invoked to
  110.         // extract the next frame.
  111.         // The front-end should continue invoking the decoder until the
  112.         // RV_DECODE_MORE_FRAMES bit is not set in the 'notes' member.
  113.         // For each invocation to decompress a frame in the same "MORE_FRAMES"
  114.         // loop, the front-end should send in the same input image.
  115.         //
  116.         // If the decoder has no frames to return for display, 'numFrames' will
  117.         // be set to zero.  To avoid redundancy, the decoder does *not* set
  118.         // the RV_DECODE_DONT_DRAW bit in 'notes' in this case.
  119. ULONG32 timestamp;
  120.         // The 'temporal_offset' parameter is used in conjunction with the
  121.         // RV_DECODE_MORE_FRAMES note, to assist the front-end in
  122.         // determining when to display each returned frame.
  123.         // If the decoder sets this to T upon return, the front-end should
  124.         // attempt to display the returned image T milliseconds relative to
  125.         // the front-end's idea of the presentation time corresponding to
  126.         // the input image.
  127.         // Be aware that this is a signed value, and will typically be
  128.         // negative.
  129. ULONG32 width;
  130. ULONG32 height;
  131. // Width and height of the returned frame.
  132. // This is the width and the height as signalled in the bitstream.
  133. } H263DecoderOutParams;
  134. typedef struct tagHXV10_INIT
  135. {
  136. UINT16 outtype;
  137. UINT16 pels;
  138. UINT16 lines;
  139. UINT16 nPadWidth; /* number of columns of padding on right to get 16 x 16 block*/
  140. UINT16 nPadHeight; /* number of rows of padding on bottom to get 16 x 16 block*/
  141. UINT16 pad_to_32;   // to keep struct member alignment independent of
  142.                     // compiler options
  143. ULONG32 ulInvariants;
  144.     // ulInvariants specifies the invariant picture header bits
  145. LONG32 packetization;
  146. ULONG32 ulStreamVersion;
  147. } HXV10_INIT;
  148. typedef HX_RESULT (HXEXPORT_PTR FPTRANSFORMINIT)(void * pH263Init,void **global);
  149. typedef HX_RESULT (HXEXPORT_PTR FPTRANSFORMFREE)(void *global);
  150. typedef HX_RESULT (HXEXPORT_PTR FPTRANSFORMHXV10TOYUV)(UCHAR *pH263Packets, 
  151. UCHAR *pDecodedFrameBuffer, void *pInputParams, 
  152. void *pOutputParams,void *global);
  153. HX_RESULT HXEXPORT HXVtoYUV420Transform(UCHAR *pRV10Packets, 
  154. UCHAR *pDecodedFrameBuffer, void *pInputParams, 
  155. void *pOutputParams,void *global);
  156. HX_RESULT HXEXPORT HXVtoYUV420Init(HXV10_INIT * pHxv10Init,void **global);
  157. HX_RESULT HXEXPORT HXVtoYUV420Free(void *global);
  158. #ifdef __cplusplus
  159. } /* Assume C declarations for C++ */
  160. #endif /* __cplusplus */
  161. #if defined(_MSC_VER)
  162. #pragma pack(pop)
  163. ///////////////////////////////////
  164. //
  165. // End 1-byte structure alignment
  166. //
  167. ///////////////////////////////////
  168. #endif
  169. // Byte alignment settings for Mac
  170. #if defined( _MACINTOSH )
  171. #pragma options align=reset
  172. #endif
  173. #endif // __H263VDEC_H__