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

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 __HXCODEC_H_
  36. #define __HXCODEC_H_
  37. #include "hxtypes.h"
  38. #include "hxresult.h"
  39. #include "hxcom.h"
  40. #if !defined(BUILD_FOR_REALPRODUCER8)
  41. #define ADD_HXCODEC_GETIPNUNKNOWN
  42. #define ADD_HXCODEC_INPUT
  43. #if defined (_WIN32)
  44. #define HW_VIDEO_MEMORY_FRONTEND
  45. #endif
  46. #endif
  47. // rv30win.pcf and rv4xwin.pcf will define BUILD_FOR_REALPRODUCER8 if
  48. // an environment variable BUILD_FOR_REALPRODUCER8 exists
  49. #ifndef __cplusplus
  50. typedef _INTERFACE IHXCallback IHXCallback;
  51. #endif
  52. #ifdef __cplusplus
  53. #include "hxengin.h"
  54. extern "C" {            /* Assume C declarations for C++ */
  55. #endif /* __cplusplus */
  56. #if defined( _WIN32 ) || defined( _WINDOWS )
  57. #pragma pack(1)
  58. // disable warning on: zero-sized array in struct/union
  59. #pragma warning( disable : 4200 )
  60. #endif
  61. // Byte alignment settings for Mac
  62. #if defined( _MACINTOSH ) || defined(_MAC_UNIX)
  63. #pragma options align=mac68k
  64. #endif
  65. #ifdef __cplusplus
  66. class IHXUnknown;
  67. class IHX20Codec;
  68. class IHX20Stream;
  69. class IHX20MemoryAllocator;
  70. #else // !__cplusplus
  71. typedef void * IHXUnknown;
  72. typedef void * IHX20Codec;
  73. typedef void * IHX20Stream;
  74. typedef void * IHX20MemoryAllocator;
  75. #endif // __cplusplus
  76. typedef IHXUnknown* PIHXUnknown;
  77. typedef ULONG32 HX_IID;
  78. #define IID_IHXUnknown 0x00000000
  79. #define IID_IHX20Codec 0x00000001
  80. #define IID_IHX20Stream 0x00000002
  81. #define IID_IHX20MemoryAllocator 0x00000003
  82. typedef void *HXCODEC;
  83. typedef void *HXSTREAM;
  84. typedef void *HXMEMORY;
  85. typedef void *HXPACKETBUFF;
  86. typedef ULONG32 HX_MOFTAG;
  87. #define STRINGTOMOFTAG(str) (
  88. ((HX_MOFTAG)(unsigned char*)str[0])<<24 |
  89. ((HX_MOFTAG)(unsigned char*)str[1])<<16 |
  90. ((HX_MOFTAG)(unsigned char*)str[2])<<8 |
  91. ((HX_MOFTAG)(unsigned char*)str[3]))
  92. #define HXCODEC_INPUT  1 // Read: Codec, please fill out the input field
  93. #define HXCODEC_OUTPUT  2 // Read: Codec, please fill out the output field
  94. #define HXCODEC_API_VERSION  0x20000000 //(2.0 in PN Version format)
  95. #define HXCODEC_MAX_NAME_LENGTH  32
  96. // HXCODEC return values and errors
  97. //#define HXR_OK 0
  98. //#define HXR_OUTOFMEMORY 1
  99. #define HXCODEC_LOAD_ERR                MAKE_HX_RESULT(1, SS_DEC, 101)
  100. #define HXCODEC_INVALID_ERR             MAKE_HX_RESULT(1, SS_DEC, 102)
  101. #define HXCODEC_BAD_FORMAT_ERR          MAKE_HX_RESULT(1, SS_DEC, 103)
  102. #define HXCODEC_SETTINGS_ERR            MAKE_HX_RESULT(1, SS_DEC, 104)
  103. #define HXSTREAM_DATA_READY             MAKE_HX_RESULT(1, SS_DEC, 105)
  104. #define HXSTREAM_OPEN_ERR               MAKE_HX_RESULT(1, SS_DEC, 106)
  105. #define HXSTREAM_BUF_SIZE_ERR           MAKE_HX_RESULT(1, SS_DEC, 107)
  106. #define HXSTREAM_INVALID_ERR            MAKE_HX_RESULT(1, SS_DEC, 108)
  107. #define HXSTREAM_BAD_FORMAT_ERR         MAKE_HX_RESULT(1, SS_DEC, 109)
  108. #define HXSTREAM_NO_LOAD_BACKEND        MAKE_HX_RESULT(1, SS_DEC, 110)
  109. #define HXSTREAM_BAD_STATE              MAKE_HX_RESULT(1, SS_DEC, 111)
  110. #define HXSTREAM_PROP_NOT_SUPPORTED     MAKE_HX_RESULT(1, SS_DEC, 112)
  111. #define HXSTREAM_PROP_NOSET_AFTERINPUT  MAKE_HX_RESULT(1, SS_DEC, 113)
  112. #define HXCODEC_NOT_FOUND               MAKE_HX_RESULT(1, SS_DEC, 114)
  113. #define HX_NO_INTERFACE                 MAKE_HX_RESULT(1, SS_DEC, 4096)
  114. // Stream property flags
  115. #define SP_INTERPOLATE 0x00010000
  116. #define SP_SPEED_QUALITY 0x00010001 // ULONG32: 1=max speed, 100=max quality
  117. #define SP_LIVE 0x00010002 // BOOL: TRUE=live source, FALSE=static source
  118. #define SP_BITRATE 0x00010003 // ULONG32: bitrate to encode at
  119. #define SP_VARIABLE_FRAME_RATE 0x00010004 // BOOL: TRUE allow frame rate to vary, FALSE
  120. //  Fixed frame rate.
  121. #define SP_QUALITY_MOTION 0x00010005
  122. #define SP_DITHER         0x00010006 // ptr to dithering colors.
  123. #define SP_POSTFILTER 0x00010007
  124. #define SP_ADVANCED_MP 0x00010008 // Temporary for fiji-preview
  125. #define SP_TEMPORALINTERP 0x00010009
  126. #define SP_MAX_FRAMERATE 0x00010010
  127. #define SP_INLOOP_DEBLOCKING 0x0001000a
  128. #define SP_LASTENCODETIME 0x0001000B
  129. #define SP_CPUCONSUMPTION 0x0001000C
  130. #define SP_PRIORITY 0x0001000D
  131. #define SP_FORCEDMV 0x0001000E
  132. #define SP_HIGHDURESSMODE 0x0001000F
  133. #define SP_MAX_FRAMERATE 0x00010010
  134. #define SP_FRAMERATE 0x00010011
  135. #define SP_CODING_MODE              0x00010012
  136. #define SP_PREVIEW_MODE             0x00010013
  137. #define SP_QUALITY1             0x00010014
  138. #define SP_QUALITY2             0x00010015
  139. #define SP_QUALITY3             0x00010016
  140. #define SP_NEXT_FRAME_TIMESTAMP 0x00010017
  141. #define SP_WILL_ENCODE_FRAME 0x00010018
  142. #define SP_DECODER_CPU_SCALABILITY_STATUS 0x00010019
  143. #define SP_OUPUT_QUEUE_STATUS  0x0001001a
  144. #define SP_50_COMPATIBLE 0x0001001B
  145. #define SP_OUPUT_QUEUE_STATUS2  0x0001001c
  146. #define SP_SEEK 0x0001001d
  147. #define SP_DECODE_B_FRAMES 0x0001001e
  148. #define SP_CODEC_SETUP_DONE 0x0001001f  // pass TRUE for this prop when setup of stream properties is done
  149. #define SP_G2GOLD_COMPATIBLE 0x00010020 // Makes the stream compatible with G2 Gold players
  150. #define SP_ECC 0x00010021 // Sets the percentage of the bitstream dedicated to error correction
  151. #define ECC_NONE 0
  152. #define ECC_LOW 1
  153. #define ECC_MED 2
  154. #define ECC_HIGH 3
  155. #define SP_PREFILTERING_MODE 0x00010022 // Sets the prefiltering mode
  156. #define PREFILTERING_MODE_NONE 0
  157. #define PREFILTERING_MODE_LOW 1
  158. #define PREFILTERING_MODE_HIGH 2
  159. #define SP_ANALYSIS_FILENAME 0x00010023
  160. #define SP_MAXBITRATE 0x00010024
  161. #define SP_KEYFRAMERATE 0x00010025
  162. #define SP_NUMBFRAMES 0x00010026
  163. #define SP_MIN_REDUCEDFRAMERATE 0x00010027
  164. #define SP_TARGET_LATENCY 0x00010028
  165. #define SP_INTERLACE_PREFILTER  0x00010029
  166. #define SP_3_2_PULLDOWN_PREFILTER 0x0001002a
  167. #define SP_ALLOW_DIFFERENT_OUPUT_SIZES 0x0001002b
  168. #define SP_RESIZING_ACCURACY 0x0001002c
  169. #define SP_ALLOW_SIDEBANDINFO 0x0001002d //flag for allowing sideband info to be add to data stream
  170. #define SP_BITSTREAM_VERSION 0x0001002e //bit stream versioning
  171. #define SP_CALLBACKFUNCTION            0x0001002f      //so core can validate for secure content
  172. #define SP_BACKENDFUNCTIONPOINTERS     0x00010030     //so core can validate for secure content
  173. #define SP_QUALITY 0x00010031
  174. #define SP_AUTO_PREFILTER 0x00010032
  175. #define SP_COMPONENTGUID     0x00010033
  176. #define SP_BACKENDDECODERCOMPONENTGUID     0x00010034
  177. #define SP_HW_VIDEO_MEMORY 0x00010035
  178. #define SP_NOFULLDECODE 0x00010036
  179. #define SP_NODEBLOCKBFRAMES 0x00010037
  180. #define SP_COOP_MULTITASK_MODE 0x00010038
  181. #define SP_SECURE_MODE 0x00010039
  182. #define SP_DVPF_SURFACE         0x0001003a
  183. #define SP_LOADLEVEL 0x0001003b
  184. // co-operative multi-tasking callback
  185. typedef struct tag_HX_CMTM
  186. {
  187. ULONG32 ulInterval; // desired callback interval in ms (may not be obeyed)
  188. IHXCallback* pCallback;
  189. } HX_CMTM;
  190. // output queue status object
  191. typedef struct tag_HX_OQS
  192. {
  193.     ULONG32  queueDepth;  // current size of the queue
  194.     ULONG32  maxQueueDepth;  // desired maximum queue size 
  195. // decode is halted if more than this number of frames is
  196. // in the queue
  197.     ULONG32  oldestQueueElementTimeStamp;  // timestamp of the oldest thing in the queue
  198.     ULONG32  newestQueueElementTimeStamp;  // timestamp of the youngest thing in the queue
  199.     ULONG32  currentTimeStamp;  // current timestamp used to display elements of the queue
  200. } HX_OQS;
  201. // HX_OQS2 starts with HX_OQS so it can be used for either set property call, the new members
  202. // are just ignored by the SP_OUTPUT_QUEUE_STATUS handler
  203. typedef struct tag_HX_OQS2
  204. {
  205.     ULONG32  queueDepth;  // current size of the queue
  206.     ULONG32  maxQueueDepth;  // desired maximum queue size 
  207. // decode is halted if more than this number of frames is
  208. // in the queue
  209.     ULONG32  oldestQueueElementTimeStamp;  // timestamp of the oldest thing in the queue
  210.     ULONG32  newestQueueElementTimeStamp;  // timestamp of the youngest thing in the queue
  211.     ULONG32  currentTimeStamp;  // current timestamp used to display elements of the queue
  212.     ULONG32 nonFRUDroppedFrames;
  213.     ULONG32 TotalDroppedFrames;
  214. } HX_OQS2;
  215. /*  SPCODINGMODEs are the allowed values when setting the SP_CODING_MODE param in  */
  216. /*  PNStream_SetProperty  */
  217. #define SPCODINGMODE_VIDEO 0x00000000
  218. #define SPCODINGMODE_POWERPOINT 0x00000001
  219. #define SPCODINGMODE_HIGHDURESS 0x00000002
  220. #define SPCODINGMODE_SLIDESHOW 0x00000003
  221. #define SPCODINGMODE_ANALYSIS 0x00000004
  222. #define SPCODINGMODE_FROMFILE 0x00000005
  223. #define SPCODINGMODE_ENCODE   0x00000006
  224. /*  allowed values for SP_PREVIEW MODE are HX_RGB24_ID or HX_YUV420_ID  */
  225. // Flags used in the data_ready callback function
  226. #define HX_RELIABLE_FLAG 0x0001
  227. #define HX_KEYFRAME_FLAG 0x0002
  228. #define HX_LASTFRAME_FLAG 0x0004
  229. #define HX_INTERFRAME_MODE_FLAG 0x0008
  230. #define HX_INLOOP_DEBLOCKING_FLAG 0x0010
  231. #define HX_POSTFILTER_FLAG 0x0020 // refers to smoothing postfilter OR deblocking postfilter
  232. #define HX_FRU_FLAG 0x0040
  233. #define HX_SEGMENT_CONTAINS_OUTPUT_SIZE_FLAG 0x0100
  234. #define HX_SEGMENT_CONTAINS_OUTPUT_YUVDATA   0x0200
  235. /* 
  236.  * IMPORTANT!!
  237.  * Do not used flag value 0x0008 it is defined as follows in ravents.h
  238.  * #define HX_EVENT_FLAG 0x0008
  239. */
  240. // HX_MOF base Media object format struct
  241. typedef struct tag_HX_MOF
  242. {
  243. ULONG32  cbLength;  // size of structure in bytes
  244. HX_MOFTAG  moftag; // identifier of media format
  245. HX_MOFTAG  submoftag; // identifier of object format
  246. } HX_MOF;
  247. // Media Native HX_MOF struct
  248. typedef struct tag_HX_FORMAT_NATIVE
  249. {
  250. ULONG32 cbLength; // the size of this struct in bytes
  251. HX_MOFTAG  moftag; // always == HX_MEDIA_NATIVE
  252. HX_MOFTAG  submoftag; // media format identifier
  253. UINT8 data[1]; // format native initialization data
  254. } HX_FORMAT_NATIVE;
  255. // Generic Audio HX_MOF struct
  256. typedef struct tag_HX_FORMAT_AUDIO
  257. {
  258. ULONG32 cbLength; // the size of this struct in bytes
  259. HX_MOFTAG  moftag; // always == HX_MEDIA_AUDIO
  260. HX_MOFTAG  submoftag; // audio format identifier
  261. // General attributes of the audio stream independent of bitwise encoding
  262. UINT16 uiBitsPerSample; // number of bits per audio sample
  263. UINT16 uiNumChannels; // number of audio channels in stream
  264. UINT16 uiBytesPerSample; // number of bytes per sample
  265. ULONG32 ulSampleRate; // audio sample rate
  266. ULONG32 ulAvgBytesPerSec; // average bytes/sec of audio stream
  267. } HX_FORMAT_AUDIO;
  268. // Generic Image HX_MOF struct
  269. typedef struct tag_HX_FORMAT_IMAGE
  270. {
  271. ULONG32 cbLength; // the size of this struct in bytes
  272. HX_MOFTAG  moftag; // always == HX_MEDIA_IMAGE
  273. HX_MOFTAG  submoftag; // image format identifier
  274. // General attributes of the image stream independent of bitwise encoding
  275. UINT16 uiWidth; // width of the image in pixels
  276. UINT16 uiHeight; // height of the image in pixels
  277. UINT16 uiBitCount; // color depth in bits
  278. UINT16 uiPadWidth; // number of padded columns for codecs that 
  279. // need certian block sizes e.g. 8x8
  280. UINT16 uiPadHeight; // number of padded rows for codecs that 
  281. // need certian block sizes e.g. 8x8
  282. } HX_FORMAT_IMAGE;
  283. // Generic Image HX_MOF struct
  284. typedef struct tag_HX_FORMAT_IMAGE2
  285. {
  286. ULONG32 cbLength; // the size of this struct in bytes
  287. HX_MOFTAG  moftag; // always == HX_MEDIA_IMAGE
  288. HX_MOFTAG  submoftag; // image format identifier
  289. // General attributes of the image stream independent of bitwise encoding
  290. UINT16 uiWidth; // width of the image in pixels
  291. UINT16 uiHeight; // height of the image in pixels
  292. UINT16 uiBitCount; // color depth in bits
  293. UINT16 uiPadWidthLeft; // number of padded columns for codecs that 
  294. // need certian block sizes e.g. 8x8
  295. UINT16 uiPadHeightTop; // number of padded rows for codecs that 
  296. // need certian block sizes e.g. 8x8
  297. UINT16 uiPadWidthRight; // number of padded columns for codecs that 
  298. // need certian block sizes e.g. 8x8
  299. UINT16 uiPadHeightBottom; // number of padded rows for codecs that 
  300. // need certian block sizes e.g. 8x8
  301. } HX_FORMAT_IMAGE2;
  302. // Generic Video HX_MOF struct
  303. typedef struct tag_HX_FORMAT_VIDEO
  304. {
  305. ULONG32 cbLength; // the size of this struct in bytes
  306. HX_MOFTAG  moftag; // always == HX_MEDIA_VIDEO
  307. HX_MOFTAG  submoftag; // video format identifier
  308. // General attributes of the video stream independent of bitwise encoding
  309. UINT16 uiWidth; // width of the image in pixels
  310. UINT16 uiHeight; // height of the image in pixels
  311. UINT16 uiBitCount; // color depth in bits
  312. UINT16 uiPadWidth; // number of padded columns for codecs that 
  313. // need certian block sizes e.g. 8x8
  314. UINT16 uiPadHeight; // number of padded rows for codecs that 
  315. // need certian block sizes e.g. 8x8
  316. UFIXED32 framesPerSecond; // frames per second
  317. } HX_FORMAT_VIDEO;
  318. typedef struct tag_HX_FORMAT_TRANSFORM
  319. {
  320. ULONG32 cbLength; //total transform header length in bytes;
  321. HX_MOFTAG moftag; //always == HX_MEDIA_VIDEO
  322. HX_MOFTAG submoftag; //fourcc name of transform pluggin
  323. ULONG32 subcbLength; //size of specific opaque transform header in bytes
  324. INT32 viewLeft; //replicates HXxRect structure for initial viewing position
  325. INT32 viewTop;
  326. INT32 viewRight;
  327. INT32 viewBottom;
  328. } HX_FORMAT_TRANSFORM;
  329. // Unfortunately we did not 4 byte align the HX_FORMAT_VIDEO struct. Since this struct must be 26 bytes in size
  330. // we cannot do sizeof(HX_FORMAT_VIDEO) on several UNIX platforms and PowerPC macs. We are therefore going to
  331. // hardcode the size to 26 bytes.
  332. #define SIZE_OF_HX_FORMAT_VIDEO 26
  333. #define HX_FORMAT_PACKETIZER_SIZE (3 * sizeof(ULONG32))
  334. typedef BOOL (HXEXPORT_PTR FP_MEDIAFORMATSCALLBACK)(void *userData, 
  335. HX_MOF * pmof);
  336. #if defined(_MACINTOSH) || defined(_MAC_UNIX)
  337. #pragma export on
  338. #endif
  339. // HXCODEC_INIT struct used in HXStream_Open()
  340. typedef struct tag_HXCODEC_INIT
  341. {
  342. HX_MOF *pInMof;
  343. HX_MOF *pOutMof;
  344. HXMEMORY memoryRef;
  345. IUnknown* pContext;
  346. }HXCODEC_INIT;
  347. // HXCODEC_SETMENTINFO
  348. #ifndef TAG_HXCODEC_SEGMENTINFO
  349. #define TAG_HXCODEC_SEGMENTINFO
  350. typedef struct tag_HXCODEC_SEGMENTINFO
  351. {
  352. LONG32 bIsValid;
  353. ULONG32 ulSegmentOffset;
  354. } HXCODEC_SEGMENTINFO;
  355. #define HXCODEC_SEGMENTINFO_SIZE (8)
  356. #endif 
  357. // HXCODEC_SETMENTINFO
  358. /*
  359. typedef struct tag_HXCODEC_SEGMENTINFO
  360. {
  361. BOOL bIsValid;
  362. ULONG32 ulSegmentOffset;
  363. } HXCODEC_SEGMENTINFO;
  364. #define HXCODEC_SEGMENTINFO_SIZE (4 + sizeof(BOOL)) // BOOL is an int which changes size
  365. */
  366. // HXCODEC_DATA struct used in PNStream_Input() and data_callback functions.
  367. typedef struct tag_HXCODEC_DATA
  368. {
  369. ULONG32  dataLength;
  370. UCHAR *data;
  371. ULONG32 timestamp;
  372. UINT16 sequenceNum;
  373. UINT16 flags;
  374. BOOL lastPacket;
  375. ULONG32 numSegments;
  376. HXCODEC_SEGMENTINFO Segments[1];
  377. } HXCODEC_DATA;
  378. // Since this is an internal structure for which we don't know the alignment
  379. // changed to use sizeof srobinson 11/98
  380. #define HXCODEC_DATA_SIZE (sizeof(HXCODEC_DATA))
  381. #define HXCODEC_PTR_POPULATED_SIZE(x) (((UINT8*) (&((x)->Segments[(x)->numSegments]))) - ((UINT8*) (x)))
  382. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_Open)(HX_MOFTAG moftFormatTag,HXCODEC *codecRef);
  383. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_Close)(HXCODEC codecRef);
  384. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_GetUIName)(HXCODEC codecRef,char *nameBuf);
  385. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_GetVersion)(HXCODEC codecRef, ULONG32 *pVersion);
  386. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_QueryMediaFormat)(HXCODEC codecRef,HX_MOF * pmofIn, 
  387. HX_MOF * pmofOut, UINT16 ioDirection);
  388. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_PreferredMediaFormat)(HXCODEC codecRef,HX_MOF * pmofIn, 
  389. HX_MOF * pmofOut, UINT16 ioDirection);
  390. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_GetMediaFormats)(HXCODEC codecRef, UINT16 ioDirection, 
  391. FP_MEDIAFORMATSCALLBACK fpCallback, void *userData);
  392. #if defined ADD_HXCODEC_INPUT
  393. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_Input)(HXCODEC codecRef, HXCODEC_DATA *pData);
  394. #endif
  395. #if defined ADD_HXCODEC_GETIPNUNKNOWN
  396. PIHXUnknown HXEXPORT ENTRYPOINT(PNCodec_GetIPNUnknown)(HXCODEC codecRef);
  397. #endif
  398. // FP_STREAM_DATA typedef
  399. typedef HX_RESULT (HXEXPORT_PTR FP_STREAM_DATA)(HXSTREAM streamRef, 
  400. HXSTREAM fromstreamRef, HXCODEC_DATA *pData);
  401. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_StreamOpen)(HXCODEC codecRef,HXSTREAM *streamRef,HXCODEC_INIT
  402. *params);
  403. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_Close)(HXSTREAM streamRef);
  404. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_SetDataCallback)(HXSTREAM streamRef,HXSTREAM callbackRef,
  405. HXMEMORY memoryRef, FP_STREAM_DATA data_callback);
  406. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_GetProperty)(HXSTREAM streamRef, ULONG32 prop, 
  407. void *pValue);
  408. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_SetProperty)(HXSTREAM streamRef, ULONG32 prop, 
  409. void *pValue);
  410. #ifdef HW_VIDEO_MEMORY_FRONTEND
  411. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_PostProcess)(HXSTREAM streamRef, 
  412. HXCODEC_DATA *pncData,
  413. ULONG32 uCurrentTime,
  414. UCHAR *pDestBuffer,
  415. UINT32 uDestPitch,
  416. INT32 cidDestColorFormat);
  417. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_ReleaseFrame)(HXSTREAM streamRef, 
  418. HXCODEC_DATA *pncData);
  419. #endif
  420. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_GetStreamHeaderSize)(HXSTREAM streamRef,
  421. ULONG32 *puSize);
  422. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_GetStreamHeader)(HXSTREAM streamRef, HX_MOF *pHeader);
  423. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_Input)(HXSTREAM streamRef,HXSTREAM fromStreamRef,
  424. HXCODEC_DATA *pData);
  425. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_SetOutputPacketSize)(HXSTREAM streamRef,ULONG32 prefSize,
  426. ULONG32 maxSize,ULONG32 *actualSize);
  427. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_GetInputBufferSize)(HXSTREAM streamRef,ULONG32 *puSize);
  428. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_OpenSettingsBox)(HXSTREAM streamRef, void * platformData);
  429. PIHXUnknown HXEXPORT ENTRYPOINT(PNStream_GetIPNUnknown)(HXSTREAM streamRef);
  430. #if defined(_MACINTOSH) || defined(_MAC_UNIX)
  431. #pragma export off
  432. #endif
  433. #ifdef __cplusplus
  434. }
  435. #endif /* __cplusplus */
  436. #ifdef __cplusplus
  437. class IHXUnknown
  438. {
  439. public:
  440. virtual HX_RESULT QueryInterface(HX_IID iid, void** ppvObj) = 0;
  441. virtual ULONG32 AddRef() = 0;
  442. virtual ULONG32 Release() = 0;
  443. };
  444. class IHX20Codec : public IHXUnknown
  445. {
  446. public:
  447. virtual HX_RESULT PNCodec_Close() = 0;
  448. virtual HX_RESULT PNCodec_GetUIName(char *pnameBuf) = 0;
  449. virtual HX_RESULT PNCodec_GetVersion(ULONG32 *pVersion) = 0;
  450. virtual HX_RESULT PNCodec_QueryMediaFormat(HX_MOF * pmofIn,
  451. HX_MOF * pmofOut, UINT16 ioDirection) = 0;
  452. virtual HX_RESULT PNCodec_PreferredMediaFormat(HX_MOF * pmofIn,
  453. HX_MOF * pmofOut, UINT16 ioDirection) = 0;
  454. virtual HX_RESULT PNCodec_GetMediaFormats(UINT16 ioDirection, 
  455. FP_MEDIAFORMATSCALLBACK fpCallback, void *userData) = 0;
  456. virtual HX_RESULT PNCodec_StreamOpen(HXSTREAM * pStreamRef,
  457. HXCODEC_INIT * pParams) = 0;
  458. #if defined ADD_HXCODEC_INPUT
  459. virtual HX_RESULT PNCodec_Input(HXCODEC_DATA *pData) = 0;
  460. #endif
  461. #if defined ADD_HXCODEC_GETIPNUNKNOWN
  462.     virtual IHXUnknown * PNCodec_GetIPNUnknown() = 0;
  463. #endif
  464. };
  465. class IHX20Stream : public IHXUnknown
  466. {
  467. public:
  468. virtual HX_RESULT HXStream_Init(HXCODEC_INIT * pInitParams) = 0;
  469. virtual HX_RESULT PNStream_SetDataCallback(HXSTREAM callbackRef,
  470. HXMEMORY memoryRef, FP_STREAM_DATA fpDataCallback) = 0;
  471. virtual HX_RESULT PNStream_GetStreamHeaderSize(ULONG32 * puSize) = 0;
  472. virtual HX_RESULT PNStream_GetStreamHeader(HX_MOF * pmofStreamHeader) = 0;
  473. virtual HX_RESULT PNStream_Close() = 0;
  474. virtual HX_RESULT PNStream_Input(HXSTREAM fromStreamRef,
  475. HXCODEC_DATA * pData) = 0;
  476. virtual HX_RESULT PNStream_SetOutputPacketSize(ULONG32 PrefSize,
  477. ULONG32 MaxSize, ULONG32 *pActualSize) = 0;
  478. virtual HX_RESULT PNStream_GetInputBufferSize(ULONG32 * puSize) = 0;
  479. virtual HX_RESULT PNStream_SetProperty(ULONG32 prop, void *pValue) = 0;
  480. virtual HX_RESULT PNStream_GetProperty(ULONG32 prop, void *pValue) = 0;
  481. #ifdef HW_VIDEO_MEMORY_FRONTEND
  482. virtual HX_RESULT PNStream_PostProcess(
  483. HXCODEC_DATA *pncData,
  484. ULONG32 uCurrentTime,
  485. UCHAR *pDestBuffer,
  486. UINT32 uDestPitch,
  487. INT32 cidDestColorFormat) = 0;
  488. virtual HX_RESULT PNStream_ReleaseFrame(
  489. HXCODEC_DATA *pncData) = 0;
  490. #endif
  491. virtual HX_RESULT PNStream_OpenSettingsBox(void * platformData) = 0;
  492. virtual IHXUnknown * PNStream_GetIPNUnknown() = 0;
  493. };
  494. typedef struct allocatorProps
  495. {
  496. ULONG32 uBufferSize;
  497. ULONG32 nNumBuffers;
  498. } HX20ALLOCPROPS;
  499. class IHX20MemoryAllocator : public IHXUnknown
  500. {
  501. public:
  502. virtual UCHAR * GetPacketBuffer(IHXUnknown ** pPacketBuffer) = 0;
  503. virtual HX_RESULT SetProperties(HX20ALLOCPROPS* pRequest, HX20ALLOCPROPS* pActual) =  0;
  504. virtual HX_RESULT GetProperties(HX20ALLOCPROPS* pProps) = 0;
  505. virtual UINT16 AddRefPacketPtr(UCHAR * memPtr) = 0;
  506. virtual UINT16 ReleasePacketPtr(UCHAR * memPtr) = 0;
  507. };
  508. #define USER_DATA_REALAUDIO_SURROUND 0x00000001
  509. #endif // __cplusplus
  510. #if defined( _WIN32 ) || defined( _WINDOWS )
  511. #pragma pack()
  512. // Restore warnings
  513. #pragma warning( default : 4200 )
  514. #endif
  515. // Byte alignment settings for Mac
  516. #if defined( _MACINTOSH ) || defined(_MAC_UNIX)
  517. #pragma options align=reset
  518. #endif
  519. #endif // __HXCODEC_H_