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

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. ///////////////////
  36. // include files
  37. #include "hxtypes.h"
  38. #include "hxresult.h"
  39. #include "hxassert.h"
  40. #include "hxcodec.h"
  41. #include "dllpath.h"
  42. #include "hxmtypes.h"
  43. #include "hxheap.h"
  44. #ifdef _DEBUG
  45. #undef HX_THIS_FILE
  46. static const char HX_THIS_FILE[] = __FILE__;
  47. #endif
  48. ENABLE_DLLACCESS_PATHS(RV20);
  49. HX_RESULT RV20CreateInstance(IHXUnknown *pUnkOuter, HX_IID riid, void **ppv);
  50. ///////////////////
  51. // local definitions
  52. /////////////////////////////////////////////////////////////////////////////
  53. //
  54. // Function:
  55. //
  56. // PNCodec_Open
  57. //
  58. // Purpose:
  59. // PNCodec_Open() attempts to load a codec whose type is specified 
  60. // by moftFormatTag.  Some currently used codec HX_MOFTAGs are:
  61. // RA_FORMAT_3_ID RealAudio 14.4 audio codec
  62. // RA_FORMAT_4_ID RealAudio 28.8 audio codec 
  63. //
  64. // Parameters:
  65. // moftFormatTag - the 4 byte codec identifier
  66. // codecRef - the HXCODEC reference is returned in codecRef. 
  67. // You will need to use this  reference in all future HXCodec_XXX() functions.
  68. //
  69. // Return:
  70. // S_OK - loading of codec was successful.
  71. // HXR_OUTOFMEMORY - insufficient memory to load codec.
  72. // HXCODEC_LOAD_ERR - unable to load codec.
  73. //
  74. // Notes:
  75. //
  76. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_Open)(HX_MOFTAG moftFormatTag, HXCODEC *pcodecRef)
  77. {
  78. HX_TRACE("PNCodec_Open()rn");
  79. HX_RESULT theErr = S_OK;
  80. HX_ASSERT_VALID_PTR(pcodecRef);
  81. *pcodecRef = NULL;
  82. theErr = RV20CreateInstance(NULL, moftFormatTag, pcodecRef);
  83. return(theErr);
  84. }
  85. /////////////////////////////////////////////////////////////////////////////
  86. //
  87. // Function:
  88. //
  89. // PNCodec_Close
  90. //
  91. // Purpose:
  92. // PNCodec_Close() closes a codec referenced by codecRef.
  93. // Note: After calling PNCodec_Close(), codecRef is no longer a valid 
  94. // codec reference.
  95. //
  96. // Parameters:
  97. // codecRef - the codec reference returned by PNCodec_Open().
  98. //
  99. // Return:
  100. //
  101. //
  102. // Notes:
  103. //
  104. //
  105. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_Close)(HXCODEC codecRef)
  106. {
  107. HX_TRACE("PNCodec_Close()rn");
  108. HX_ASSERT_VALID_PTR(codecRef);
  109. IHX20Codec* pCodecObj = (IHX20Codec *)codecRef;
  110. return pCodecObj->PNCodec_Close();
  111. }
  112. /////////////////////////////////////////////////////////////////////////////
  113. //
  114. // Function:
  115. //
  116. // PNCodec_GetUIName
  117. //
  118. // Purpose:
  119. //
  120. //
  121. // Parameters:
  122. //
  123. //
  124. // Return:
  125. //
  126. //
  127. // Notes:
  128. //
  129. //
  130. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_GetUIName)(HXCODEC codecRef, char *pnameBuf)
  131. {
  132. HX_TRACE("PNCodec_GetUIName()rn");
  133. HX_ASSERT_VALID_PTR(codecRef);
  134. IHX20Codec* pCodecObj = (IHX20Codec *)codecRef;
  135. return pCodecObj->PNCodec_GetUIName(pnameBuf);
  136. }
  137. /////////////////////////////////////////////////////////////////////////////
  138. //
  139. // Function:
  140. //
  141. // PNCodec_GetVersion
  142. //
  143. // Purpose:
  144. //
  145. //
  146. // Parameters:
  147. //
  148. //
  149. // Return:
  150. //
  151. //
  152. // Notes:
  153. //
  154. //
  155. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_GetVersion)(HXCODEC codecRef, ULONG32 *pVersion)
  156. {
  157. HX_TRACE("PNCodec_GetVersion()rn");
  158. HX_ASSERT_VALID_PTR(codecRef);
  159. IHX20Codec* pCodecObj = (IHX20Codec *)codecRef;
  160. return pCodecObj->PNCodec_GetVersion(pVersion);
  161. }
  162. /////////////////////////////////////////////////////////////////////////////
  163. //
  164. // Function:
  165. //
  166. // PNCodec_QueryMediaFormat
  167. //
  168. // Purpose:
  169. //
  170. //
  171. // Parameters:
  172. //
  173. //
  174. // Return:
  175. //
  176. //
  177. // Notes:
  178. //
  179. //
  180. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_QueryMediaFormat)(HXCODEC codecRef, HX_MOF * pmofIn,
  181. HX_MOF * pmofOut, UINT16 ioDirection)
  182. {
  183. HX_TRACE("PNCodec_QueryMediaFormat()rn");
  184. HX_ASSERT_VALID_PTR(codecRef);
  185. IHX20Codec* pCodecObj = (IHX20Codec *)codecRef;
  186. return pCodecObj->PNCodec_QueryMediaFormat(pmofIn, pmofOut, ioDirection);
  187. }
  188. /////////////////////////////////////////////////////////////////////////////
  189. //
  190. // Function:
  191. //
  192. // PNCodec_PreferredMediaFormat
  193. //
  194. // Purpose:
  195. // ioDirection Either HXCODEC_INPUT or HXCODEC_OUTPUT, HXCODEC_INPUT
  196. // specifies the pmofOut is filled out with the desired
  197. // output format and we want to find out what the perferred
  198. // input media format is.
  199. //
  200. // Parameters:
  201. //
  202. //
  203. // Return:
  204. //
  205. //
  206. // Notes:
  207. //
  208. //
  209. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_PreferredMediaFormat)(HXCODEC codecRef, HX_MOF * pmofIn,
  210. HX_MOF * pmofOut, UINT16 ioDirection)
  211. {
  212. HX_TRACE("HXCodec_PerferredMediaFormat()rn");
  213. HX_ASSERT_VALID_PTR(codecRef);
  214. IHX20Codec* pCodecObj = (IHX20Codec *)codecRef;
  215. return pCodecObj->PNCodec_PreferredMediaFormat(pmofIn, pmofOut, ioDirection);
  216. }
  217. /////////////////////////////////////////////////////////////////////////////
  218. //
  219. // Function:
  220. //
  221. // PNCodec_GetMediaFormats
  222. //
  223. // Purpose:
  224. //
  225. //
  226. // Parameters:
  227. //
  228. //
  229. // Return:
  230. //
  231. //
  232. // Notes:
  233. //
  234. //
  235. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_GetMediaFormats)(HXCODEC codecRef, UINT16 ioDirection,
  236. FP_MEDIAFORMATSCALLBACK fpCallback, void *userData)
  237. {
  238. HX_TRACE("PNCodec_GetMediaFormats()rn");
  239. HX_ASSERT_VALID_PTR(codecRef);
  240. IHX20Codec* pCodecObj = (IHX20Codec *)codecRef;
  241. return pCodecObj->PNCodec_GetMediaFormats(ioDirection, fpCallback, 
  242. userData);
  243. }
  244. /////////////////////////////////////////////////////////////////////////////
  245. //
  246. // Function:
  247. //
  248. // PNCodec_StreamOpen
  249. //
  250. // Purpose:
  251. //
  252. //
  253. // Parameters:
  254. //
  255. //
  256. // Return:
  257. //
  258. //
  259. // Notes:
  260. //
  261. //
  262. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_StreamOpen)(HXCODEC codecRef, HXSTREAM * pStreamRef,
  263. HXCODEC_INIT * pParams)
  264. {
  265. HX_TRACE("PNCodec_StreamOpen()rn");
  266. HX_ASSERT_VALID_PTR(codecRef);
  267. IHX20Codec* pCodecObj = (IHX20Codec *)codecRef;
  268. return pCodecObj->PNCodec_StreamOpen(pStreamRef, pParams);
  269. }
  270. #ifdef ADD_HXCODEC_INPUT
  271. /////////////////////////////////////////////////////////////////////////////
  272. //
  273. // Function:
  274. //
  275. // PNCodec_Input
  276. //
  277. // Purpose:
  278. //
  279. //
  280. // Parameters:
  281. //
  282. //
  283. // Return:
  284. //
  285. //
  286. // Notes:
  287. //
  288. //
  289. HX_RESULT HXEXPORT ENTRYPOINT(PNCodec_Input)(HXCODEC codecRef, HXCODEC_DATA * pData)
  290. {
  291. HX_TRACE("HXCodec_()rn");
  292. HX_ASSERT_VALID_PTR(codecRef);
  293. IHX20Codec* pCodecObj = (IHX20Codec *)codecRef;
  294. return pCodecObj->PNCodec_Input(pData);
  295. }
  296. #endif
  297. #if defined ADD_HXCODEC_GETIPNUNKNOWN
  298. IHXUnknown * HXEXPORT ENTRYPOINT(PNCodec_GetIPNUnknown)(HXCODEC codecRef)
  299. {
  300. HX_TRACE("PNCodec_GetIPNUnknown()rn");
  301. HX_ASSERT_VALID_PTR(codecRef);
  302. IHX20Codec* pCodecObj = (IHX20Codec *)codecRef;
  303. return pCodecObj->PNCodec_GetIPNUnknown();
  304. }
  305. #endif
  306. /////////////////////////////////////////////////////////////////////////////
  307. //
  308. // Function:
  309. //
  310. // PNStream_OpenSettingsBox
  311. //
  312. // Purpose:
  313. //
  314. //
  315. // Parameters:
  316. //
  317. //
  318. // Return:
  319. //
  320. //
  321. // Notes:
  322. //
  323. //
  324. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_OpenSettingsBox)(HXSTREAM streamRef, void * platformData)
  325. {
  326. HX_TRACE("PNStream_OpenSettingsBox()rn");
  327. HX_ASSERT_VALID_PTR(streamRef);
  328. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  329. return pStreamObj->PNStream_OpenSettingsBox(platformData);
  330. }
  331. /////////////////////////////////////////////////////////////////////////////
  332. //
  333. // Function:
  334. //
  335. // PNStream_GetIPNUnknown
  336. //
  337. // Purpose:
  338. //
  339. //
  340. // Parameters:
  341. //
  342. //
  343. // Return:
  344. //
  345. //
  346. // Notes:
  347. //
  348. //
  349. IHXUnknown * HXEXPORT ENTRYPOINT(PNStream_GetIPNUnknown)(HXSTREAM streamRef)
  350. {
  351. HX_TRACE("PNStream_GetIPNUnknown()rn");
  352. HX_ASSERT_VALID_PTR(streamRef);
  353. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  354. return pStreamObj->PNStream_GetIPNUnknown();
  355. }
  356. /////////////////////////////////////////////////////////////////////////////
  357. //
  358. // Function:
  359. //
  360. // PNStream_SetDataCallback
  361. //
  362. // Purpose:
  363. //
  364. //
  365. // Parameters:
  366. //
  367. //
  368. // Return:
  369. //
  370. //
  371. // Notes:
  372. //
  373. //
  374. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_SetDataCallback)(HXSTREAM streamRef, 
  375. HXSTREAM callbackRef, HXMEMORY memoryRef, FP_STREAM_DATA fpDataCallback)
  376. {
  377. HX_TRACE("PNStream_SetDataCallback()rn");
  378. HX_ASSERT_VALID_PTR(streamRef);
  379. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  380. return pStreamObj->PNStream_SetDataCallback(callbackRef, memoryRef,
  381. fpDataCallback);
  382. }
  383. /////////////////////////////////////////////////////////////////////////////
  384. //
  385. // Function:
  386. //
  387. // PNStream_SetProperty
  388. //
  389. // Purpose:
  390. //
  391. //
  392. // Parameters:
  393. //
  394. //
  395. // Return:
  396. //
  397. //
  398. // Notes:
  399. //
  400. //
  401. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_SetProperty)(HXSTREAM streamRef, ULONG32 prop,
  402. void *pValue)
  403. {
  404. HX_TRACE("PNStream_SetProperty()rn");
  405. HX_ASSERT_VALID_PTR(streamRef);
  406. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  407. return pStreamObj->PNStream_SetProperty(prop, pValue);
  408. }
  409. /////////////////////////////////////////////////////////////////////////////
  410. //
  411. // Function:
  412. //
  413. // PNStream_GetProperty
  414. //
  415. // Purpose:
  416. //
  417. //
  418. // Parameters:
  419. //
  420. //
  421. // Return:
  422. //
  423. //
  424. // Notes:
  425. //
  426. //
  427. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_GetProperty)(HXSTREAM streamRef, ULONG32 prop,
  428. void *pValue)
  429. {
  430. HX_TRACE("PNStream_GetProperty()rn");
  431. HX_ASSERT_VALID_PTR(streamRef);
  432. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  433. return pStreamObj->PNStream_GetProperty(prop, pValue);
  434. }
  435. #ifdef HW_VIDEO_MEMORY_FRONTEND
  436. /////////////////////////////////////////////////////////////////////////////
  437. //
  438. // Function:
  439. //
  440. // PNStream_PostProcess
  441. //
  442. // Purpose:
  443. //
  444. //
  445. // Parameters:
  446. //
  447. //
  448. // Return:
  449. //
  450. //
  451. // Notes:
  452. //
  453. //
  454. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_PostProcess)(HXSTREAM streamRef, 
  455. HXCODEC_DATA *pncData,
  456. ULONG32 uCurrentTime,
  457. UCHAR *pDestBuffer,
  458. UINT32 uDestPitch,
  459. INT32 cidDestColorFormat)
  460. {
  461. HX_TRACE("PNStream_PostProcess()rn");
  462. HX_ASSERT_VALID_PTR(streamRef);
  463. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  464. return pStreamObj->PNStream_PostProcess(pncData,
  465. uCurrentTime,
  466. pDestBuffer,
  467. uDestPitch,
  468. cidDestColorFormat);
  469. }
  470. /////////////////////////////////////////////////////////////////////////////
  471. //
  472. // Function:
  473. //
  474. // PNStream_ReleaseFrame
  475. //
  476. // Purpose:
  477. //
  478. //
  479. // Parameters:
  480. //
  481. //
  482. // Return:
  483. //
  484. //
  485. // Notes:
  486. //
  487. //
  488. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_ReleaseFrame)(HXSTREAM streamRef, 
  489. HXCODEC_DATA *pncData)
  490. {
  491. HX_TRACE("PNStream_ReleaseFrame()rn");
  492. HX_ASSERT_VALID_PTR(streamRef);
  493. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  494. return pStreamObj->PNStream_ReleaseFrame(pncData);
  495. }
  496. #endif
  497. /////////////////////////////////////////////////////////////////////////////
  498. //
  499. // Function:
  500. //
  501. // PNStream_Close
  502. //
  503. // Purpose:
  504. //
  505. //
  506. // Parameters:
  507. //
  508. //
  509. // Return:
  510. //
  511. //
  512. // Notes:
  513. //
  514. //
  515. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_Close)(HXSTREAM streamRef)
  516. {
  517. HX_TRACE("PNStream_Close()rn");
  518. HX_ASSERT_VALID_PTR(streamRef);
  519. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  520. return pStreamObj->PNStream_Close();
  521. }
  522. /////////////////////////////////////////////////////////////////////////////
  523. //
  524. // Function:
  525. //
  526. // PNStream_GetStreamHeaderSize
  527. //
  528. // Purpose:
  529. //
  530. //
  531. // Parameters:
  532. //
  533. //
  534. // Return:
  535. //
  536. //
  537. // Notes:
  538. //
  539. //
  540. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_GetStreamHeaderSize)(HXSTREAM streamRef, 
  541. ULONG32 * puSize)
  542. {
  543. HX_TRACE("PNStream_GetStreamHeaderSize()rn");
  544. HX_ASSERT_VALID_PTR(streamRef);
  545. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  546. return pStreamObj->PNStream_GetStreamHeaderSize(puSize);
  547. }
  548. /////////////////////////////////////////////////////////////////////////////
  549. //
  550. // Function:
  551. //
  552. // PNStream_GetStreamHeader
  553. //
  554. // Purpose:
  555. //
  556. //
  557. // Parameters:
  558. //
  559. //
  560. // Return:
  561. //
  562. //
  563. // Notes:
  564. //
  565. //
  566. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_GetStreamHeader)(HXSTREAM streamRef, HX_MOF * pHeader)
  567. {
  568. HX_TRACE("PNStream_GetStreamHeaderSize()rn");
  569. HX_ASSERT_VALID_PTR(streamRef);
  570. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  571. return pStreamObj->PNStream_GetStreamHeader(pHeader);
  572. }
  573. /////////////////////////////////////////////////////////////////////////////
  574. //
  575. // Function:
  576. //
  577. // PNStream_Input
  578. //
  579. // Purpose:
  580. //
  581. //
  582. // Parameters:
  583. //
  584. //
  585. // Return:
  586. //
  587. //
  588. // Notes:
  589. //
  590. //
  591. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_Input)(HXSTREAM streamRef, HXSTREAM fromStreamRef,
  592. HXCODEC_DATA * pData)
  593. {
  594. HX_TRACE("HXStream_()rn");
  595. HX_ASSERT_VALID_PTR(streamRef);
  596. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  597. return pStreamObj->PNStream_Input(fromStreamRef, pData);
  598. }
  599. /////////////////////////////////////////////////////////////////////////////
  600. //
  601. // Function:
  602. //
  603. // PNStream_SetOutputPacketSize
  604. //
  605. // Purpose:
  606. //
  607. //
  608. // Parameters:
  609. //
  610. //
  611. // Return:
  612. //
  613. //
  614. // Notes:
  615. //
  616. //
  617. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_SetOutputPacketSize)(HXSTREAM streamRef, 
  618. ULONG32 PrefSize, ULONG32 MaxSize, ULONG32 *pActualSize)
  619. {
  620. HX_TRACE("PNStream_SetOutputPacketSize()rn");
  621. HX_ASSERT_VALID_PTR(streamRef);
  622. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  623. return pStreamObj->PNStream_SetOutputPacketSize(PrefSize, MaxSize, 
  624. pActualSize);
  625. }
  626. /////////////////////////////////////////////////////////////////////////////
  627. //
  628. // Function:
  629. //
  630. // PNStream_GetInputBufferSize
  631. //
  632. // Purpose:
  633. //
  634. //
  635. // Parameters:
  636. //
  637. //
  638. // Return:
  639. //
  640. //
  641. // Notes:
  642. //
  643. //
  644. HX_RESULT HXEXPORT ENTRYPOINT(PNStream_GetInputBufferSize)(HXSTREAM streamRef, 
  645. ULONG32 * puSize)
  646. {
  647. HX_TRACE("HXStream_()rn");
  648. HX_ASSERT_VALID_PTR(streamRef);
  649. IHX20Stream* pStreamObj = (IHX20Stream *)streamRef;
  650. return pStreamObj->PNStream_GetInputBufferSize(puSize);
  651. }