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

Symbian

开发平台:

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