Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

dynacodec.h

Go to the documentation of this file.
00001 /* 00002 * dynacodec.h 00003 * 00004 * Dynamic codec loading 00005 * 00006 * Open H323 Library 00007 * 00008 * Copyright (c) 2003 Equivalence Pty. Ltd. 00009 * 00010 * The contents of this file are subject to the Mozilla Public License 00011 * Version 1.0 (the "License"); you may not use this file except in 00012 * compliance with the License. You may obtain a copy of the License at 00013 * http://www.mozilla.org/MPL/ 00014 * 00015 * Software distributed under the License is distributed on an "AS IS" 00016 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 00017 * the License for the specific language governing rights and limitations 00018 * under the License. 00019 * 00020 * The Original Code is Open H323 Library. 00021 * 00022 * The Initial Developer of the Original Code is Equivalence Pty. Ltd. 00023 * 00024 * Contributor(s): ______________________________________. 00025 * 00026 * $Log: dynacodec.h,v $ 00027 * Revision 1.2 2003/04/30 04:57:13 craigs 00028 * Changed interface to DLL codec to improve Opal compatibility 00029 * 00030 * Revision 1.1 2003/04/27 23:48:24 craigs 00031 * Initial version 00032 * 00033 */ 00034 00035 #ifndef _OPALDYNACODEC 00036 #define _OPALDYNACODEC 00037 00038 extern "C" { 00039 #include "dllcodec.h" 00040 }; 00041 00042 #include "h323caps.h" 00043 00045 00046 class OpalDLLCodecRec; 00047 00048 class OpalDynaCodecDLL : public PDynaLink 00049 { 00050 public: 00051 PCLASSINFO(OpalDynaCodecDLL, PDynaLink); 00052 00053 OpalDynaCodecDLL(const PFilePath & codec); 00054 BOOL Load(); 00055 00056 OpalDLLCodecInfo * EnumerateCodecs(unsigned * count); 00057 00058 static BOOL LoadCodecs(); 00059 static BOOL LoadCodecs(const PDirectory & dir); 00060 static BOOL LoadCodec(const PFilePath & file); 00061 00062 static PINDEX AddAudioCapabilities(H323EndPoint & ep, 00063 PINDEX descriptorNum, 00064 PINDEX simultaneousNum, 00065 H323Capabilities & capabilities); 00066 00067 static PINDEX AddVideoCapabilities(H323EndPoint & ep, 00068 PINDEX descriptorNum, 00069 PINDEX simultaneousNum, 00070 H323Capabilities & capabilities); 00071 00072 static PINDEX AddCapabilities(H323EndPoint & ep, 00073 PINDEX descriptorNum, 00074 PINDEX simultaneousNum, 00075 H323Capabilities & capabilities, 00076 const PString & type); 00077 00078 static PDirectory defaultCodecDir; 00079 00080 protected: 00081 OpalDLLCodecInfo * (*EnumerateCodecsFn)(unsigned apiVersion, unsigned * count); 00082 static PMutex mutex; 00083 static BOOL inited; 00084 int referenceCount; 00085 }; 00086 00088 00089 class OpalDLLCodecRec : public PObject { 00090 PCLASSINFO(OpalDLLCodecRec, PObject); 00091 public: 00092 OpalDLLCodecRec(OpalDynaCodecDLL & _encoder, 00093 const PStringToString & _attributes, 00094 const OpalDLLCodecInfo & _encoderCodeInfo, 00095 OpalMediaFormat * _mediaFormat); 00096 00097 void * CreateContext() const; 00098 void DestroyContext(void * context) const; 00099 00100 H323Capability * CreateCapability(H323EndPoint & ep) const; 00101 00102 void SetParameter(const PString & attribute, const PString & value) const; 00103 PString GetParameter(const PString & attribute, const char * defValue = NULL) const; 00104 00105 OpalDynaCodecDLL & encoder; 00106 PStringToString attributes; 00107 OpalDLLCodecInfo info; 00108 00109 OpalMediaFormat * mediaFormat; 00110 //H323Capability * capability; 00111 //PString h323Name; 00112 }; 00113 00115 00116 class OpalDynaAudioCodec : public H323FramedAudioCodec 00117 { 00118 PCLASSINFO(OpalDynaAudioCodec, H323FramedAudioCodec) 00119 00120 public: 00121 OpalDynaAudioCodec(const OpalDLLCodecRec & _info, Direction direction); 00122 ~OpalDynaAudioCodec(); 00123 virtual BOOL EncodeFrame(BYTE * buffer, unsigned & length); 00124 virtual BOOL DecodeFrame(const BYTE * buffer, unsigned length, unsigned & written); 00125 00126 protected: 00127 const OpalDLLCodecRec & info; 00128 void * context; 00129 unsigned samplesPerFrame; 00130 unsigned bytesPerFrame; 00131 }; 00132 00134 00135 class OpalDynaCodecRegistration : public H323CapabilityRegistration 00136 { 00137 PCLASSINFO(OpalDynaCodecRegistration, H323CapabilityRegistration); 00138 public: 00139 OpalDynaCodecRegistration(const PString & name, 00140 OpalDLLCodecRec * _encoderInfo, 00141 OpalDLLCodecRec * _decoderInfo, 00142 OpalMediaFormat * _mediaFormat); 00143 00144 H323Capability * Create(H323EndPoint & ep) const; 00145 00146 friend class OpalDynaCodecDLL; 00147 00148 protected: 00149 OpalDLLCodecRec * encoderInfo; 00150 OpalDLLCodecRec * decoderInfo; 00151 OpalMediaFormat * mediaFormat; 00152 }; 00153 00155 00156 class OpalDynaCodecNonStandardAudioCapability : public H323NonStandardAudioCapability 00157 { 00158 PCLASSINFO(OpalDynaCodecNonStandardAudioCapability, H323NonStandardAudioCapability); 00159 00160 public: 00161 OpalDynaCodecNonStandardAudioCapability( 00162 const OpalDLLCodecRec & _info, 00163 H323EndPoint & _endpoint, 00164 unsigned maxPacketSize, 00165 unsigned desiredPacketSize, 00166 BYTE country, 00167 BYTE extension, 00168 WORD maufacturer, 00169 const BYTE * nonstdHeader, 00170 PINDEX nonstdHeaderLen); 00171 00172 virtual PObject * Clone() const; 00173 virtual H323Codec * CreateCodec(H323Codec::Direction direction) const; 00174 virtual PString GetFormatName() const; 00175 00176 protected: 00177 const OpalDLLCodecRec & info; 00178 H323EndPoint & endpoint; 00179 }; 00180 00182 00183 class OpalDynaNonStandardAudioCodec : public OpalDynaAudioCodec 00184 { 00185 PCLASSINFO(OpalDynaNonStandardAudioCodec, OpalDynaAudioCodec) 00186 00187 public: 00188 OpalDynaNonStandardAudioCodec(const OpalDLLCodecRec & _info, Direction direction); 00189 ~OpalDynaNonStandardAudioCodec(); 00190 }; 00191 00193 00194 class OpalDynaCodecStandardAudioCapability : public H323AudioCapability 00195 { 00196 PCLASSINFO(OpalDynaCodecStandardAudioCapability, H323AudioCapability); 00197 00198 public: 00199 OpalDynaCodecStandardAudioCapability( 00200 const OpalDLLCodecRec & _info, 00201 H323EndPoint & _endpoint, 00202 unsigned maxPacketSize, 00203 unsigned desiredPacketSize, 00204 unsigned subType); 00205 00206 BOOL OnSendingPDU(H245_AudioCapability & cap, unsigned packetSize) const; 00207 BOOL OnReceivedPDU(const H245_AudioCapability & cap, unsigned & packetSize); 00208 00209 PObject * Clone() const; 00210 H323Codec * CreateCodec(H323Codec::Direction direction) const; 00211 PString GetFormatName() const; 00212 unsigned GetSubType() const; 00213 00214 protected: 00215 const OpalDLLCodecRec & info; 00216 H323EndPoint & endpoint; 00217 unsigned subType; 00218 }; 00219 00221 00222 class OpalDynaCodecStandardVideoCapability : public H323VideoCapability 00223 { 00224 PCLASSINFO(OpalDynaCodecStandardVideoCapability, H323VideoCapability); 00225 00226 public: 00227 OpalDynaCodecStandardVideoCapability( 00228 const OpalDLLCodecRec & _info, 00229 H323EndPoint & _endpoint, 00230 unsigned subType); 00231 00232 BOOL OnSendingPDU(H245_VideoCapability & pdu) const; 00233 BOOL OnSendingPDU(H245_VideoMode & pdu) const; 00234 BOOL OnReceivedPDU(const H245_VideoCapability & pdu); 00235 00236 PObject * Clone() const; 00237 H323Codec * CreateCodec(H323Codec::Direction direction) const; 00238 PString GetFormatName() const; 00239 unsigned GetSubType() const; 00240 00241 protected: 00242 const OpalDLLCodecRec & info; 00243 H323EndPoint & endpoint; 00244 unsigned subType; 00245 }; 00246 00248 00249 class OpalDynaVideoCodec : public H323VideoCodec 00250 { 00251 PCLASSINFO(OpalDynaVideoCodec, H323VideoCodec) 00252 00253 public: 00254 OpalDynaVideoCodec( 00255 const OpalDLLCodecRec & _info, Direction direction); 00256 00257 ~OpalDynaVideoCodec(); 00258 00259 BOOL Read(BYTE * buffer,unsigned & length,RTP_DataFrame & rtpFrame); 00260 BOOL Write(const BYTE * buffer, unsigned length, const RTP_DataFrame & rtp, unsigned & written); 00261 00262 protected: 00263 const OpalDLLCodecRec & info; 00264 void * context; 00265 }; 00266 00267 00268 #endif

Generated on Sat Jul 24 17:03:06 2004 for OpenH323 by doxygen 1.3.7