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

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 _CCODEC_H_
  36. #define _CCODEC_H_ 
  37. /****************************************************************************
  38.  *  Includes
  39.  */
  40. #if defined( _WIN32 ) || defined( _WINDOWS )
  41. #include <windows.h>
  42. #endif
  43. #include <stdlib.h>
  44. #include "racodec.h"
  45. // these are to set the #define for _MAX_PATH
  46. #ifndef _MAX_PATH
  47. #if defined ( _MACINTOSH ) || defined(_MAC_UNIX)
  48. #include "platform/mac/maclibrary.h"
  49. #elif defined (_UNIX)
  50. #include <stdlib.h>
  51. #ifndef _VXWORKS
  52. #include <sys/param.h>
  53. #endif
  54. #define _MAX_PATH       MAXPATHLEN
  55. #endif
  56. #endif // _MAX_PATH
  57. // Use DLLAccess instead of LoadLibrary, FreeLibrary, GetProcAddress
  58. // 07/24/98 JBH
  59. class DLLAccessBridge;
  60. #define CODEC_ID_LENGTH 4
  61. #define _MAX_DLL_NAME_LENGTH 256
  62. // Add Cookie API
  63. typedef void* RACODEC;
  64. // New Exportable Functions
  65. typedef HX_RESULT (HXEXPORT_PTR RA_OPEN_CODEC) (RACODEC* codecRef); // preview compatibility -  do NOT use
  66. typedef HX_RESULT (HXEXPORT_PTR RA_OPEN_CODEC2) (RACODEC* codecRef, const char* pCodecPath);
  67. typedef HX_RESULT (HXEXPORT_PTR RA_CLOSE_CODEC) (RACODEC codecRef);
  68. typedef HX_RESULT (HXEXPORT_PTR RA_SET_PASSWORD) (RACODEC codecRef, const char* password);
  69. typedef UINT16    (HXEXPORT_PTR RA_GET_NUM_FLAVORS) (RACODEC codecRef); // no error returned. zero flavors means there's a problem.
  70. typedef void*     (HXEXPORT_PTR RA_GET_FLAVOR_PROPERTY) (RACODEC codecRef, UINT16 flavorNum, UINT16 propNum, UINT16* propSize); // use IHXValues?
  71. typedef HX_RESULT (HXEXPORT_PTR RA_SET_FLAVOR) (RACODEC codecRef, UINT16 flavorNum);
  72. typedef HX_RESULT (HXEXPORT_PTR RA_INIT_ENCODER) (RACODEC codecRef, void* params);
  73. typedef HX_RESULT (HXEXPORT_PTR RA_ENCODE) (RACODEC codecRef, UINT16* inBuf, Byte* outBuf);
  74. typedef void (HXEXPORT_PTR RA_FREE_ENCODER) (RACODEC codecRef);
  75. typedef HX_RESULT (HXEXPORT_PTR RA_INIT_DECODER) (RACODEC codecRef, void* params);
  76. typedef HX_RESULT (HXEXPORT_PTR RA_DECODE) (RACODEC codecRef, Byte* inBuf, UINT32 inLength,
  77.  Byte* outBuf, UINT32* outLength, UINT32 userData);
  78. typedef HX_RESULT (HXEXPORT_PTR RA_FLUSH) (RACODEC codecRef, Byte* outBuf, UINT32* outLength);
  79. typedef void (HXEXPORT_PTR RA_FREE_DECODER) (RACODEC codecRef);
  80. typedef void (HXEXPORT_PTR RA_GET_BACKEND) (RACODEC codecRef, void*** ppFuncList);
  81. typedef void (HXEXPORT_PTR RA_GET_GUID) (UCHAR* pGUID);
  82. typedef void (HXEXPORT_PTR RA_GET_DECODE_GUID) (RACODEC codecRef, UCHAR* pGUID);
  83. typedef HX_RESULT (HXEXPORT_PTR RA_GO_SECURE) (RACODEC codecRef);
  84. class CCodec 
  85. {
  86. public:
  87.   /* class constructor and destructor */
  88. CCodec(char * pCodecID, 
  89.        IUnknown* pContext = NULL,
  90.        BOOL bDummy = FALSE);     // Reserved
  91. virtual ~CCodec ();
  92.   // Loads codec's DLL
  93. virtual HX_RESULT   LoadCodec();
  94.   // Unloads codec's DLL
  95. virtual void       FreeCodec();
  96.     // Encode & Decode functions
  97. UINT16     GetNumberOfFlavors (void);
  98. // GetFlavorProperty returns a point to the property requested and
  99. // sets size of the property in pPropertySize. The pointer returned
  100. // is valid until the next GetFlavorProperty is called or until the
  101. // destructor of the "CODEC" object is called.
  102. void*     GetFlavorProperty (UINT16 flavorIndex, UINT16 flavorProperty, UINT16* pPropertySize);
  103. HX_RESULT   SetFlavor (UINT16 flavorIndex);
  104. UINT16     GetCurrentFlavor (void) { return mCurrentFlavor; };
  105. char*     GetID (void) { return mCodecID; };
  106. HX_RESULT   GetLastError (void) { return mLastError; };
  107.     // Encoder Functions
  108. // platform dependent part of the init function
  109. HX_RESULT   InitEncoder (RAENCODER_INIT_PARAMS* params);
  110. // Encodes data from input buffer to output buffer.
  111. HX_RESULT   Encode (Byte* pInBuffer, Byte* pOutBuffer);
  112. // platform dependent part of the free function
  113. void     FreeEncoder (void);
  114.     // Decoder Functions
  115. // plaform dependent part of the init function
  116. HX_RESULT   InitDecoder (RADECODER_INIT_PARAMS* params, BOOL bSwitchable);
  117. // Decodes inLength bytes of data from input buffer, using userData if needed.
  118. // Returns outLength bytes of data in output buffer.
  119. virtual HX_RESULT   Decode (Byte* pInBuffer, UINT32 inLength, Byte* pOutBuffer, UINT32* pOutLength, UINT32 userData);
  120. // Flushes decoder stream and returns data (if available).
  121. // Called at seek, pause, or end of stream.
  122. HX_RESULT   Flush (Byte* pOutBuffer, UINT32* pOutLength);
  123. // platform dependent part of the free function
  124. virtual void     FreeDecoder (void);
  125. HX_RESULT     InitCodec(BOOL bWithVersion = FALSE);
  126. protected:
  127. #ifdef _WINDOWS
  128. BOOL        IsFileExist(const char * DecDllPath);
  129. BOOL        VerifyCodec();
  130. #endif
  131. IUnknown* m_pContext;
  132. char* m_pszFullDllPath;
  133. DLLAccessBridge* mpDLLAccess;
  134. #ifdef _MACINTOSH
  135. short DllVrefNum;
  136. LONG32   DllParID;
  137. #endif
  138. HX_RESULT mLastError;         // last error occured
  139. BOOL        mEncoderInited;     // Initialization flag
  140. BOOL        mDecoderInited;     // Initialization flag
  141. char        mCodecID[CODEC_ID_LENGTH + 1];/* Flawfinder: ignore */  // codec ID 
  142. char mDLLName[_MAX_DLL_NAME_LENGTH];
  143. Byte *  curProperty;
  144. UINT16 mCurrentFlavor;
  145. RACODEC mCodecRef;  // cookie
  146. RA_OPEN_CODEC2 fpOpenCodec; // only support NEW OpenCodec API w/ codecDir path
  147. RA_CLOSE_CODEC fpCloseCodec;
  148. RA_SET_PASSWORD fpSetPassword;
  149. RA_GET_NUM_FLAVORS fpGetNumFlavors;
  150. RA_GET_FLAVOR_PROPERTY fpGetFlavorProperty;
  151. RA_SET_FLAVOR fpSetFlavor;
  152. RA_INIT_ENCODER fpInitEncoder;
  153. RA_ENCODE fpEncode;
  154. RA_FREE_ENCODER fpFreeEncoder;
  155. RA_INIT_DECODER fpInitDecoder;
  156. RA_DECODE fpDecode;
  157. RA_FLUSH fpFlush;
  158. RA_FREE_DECODER fpFreeDecoder;
  159. };
  160. #endif // _CCODEC_H_