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