00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef _OPALDYNACODEC
00039 #define _OPALDYNACODEC
00040
00041 extern "C" {
00042 #include "dllcodec.h"
00043 };
00044
00045 #include "h323caps.h"
00046
00048
00049 class OpalDLLCodecRec;
00050
00051 class OpalDynaCodecDLL : public PDynaLink
00052 {
00053 public:
00054 PCLASSINFO(OpalDynaCodecDLL, PDynaLink);
00055
00056 OpalDynaCodecDLL(const PFilePath & codec);
00057 BOOL Load();
00058
00059 OpalDLLCodecInfo * EnumerateCodecs(unsigned * count);
00060
00061 static BOOL LoadCodecs();
00062 static BOOL LoadCodecs(const PDirectory & dir);
00063 static BOOL LoadCodec(const PFilePath & file);
00064
00065 static PINDEX AddAudioCapabilities(H323EndPoint & ep,
00066 PINDEX descriptorNum,
00067 PINDEX simultaneousNum,
00068 H323Capabilities & capabilities);
00069
00070 static PINDEX AddVideoCapabilities(H323EndPoint & ep,
00071 PINDEX descriptorNum,
00072 PINDEX simultaneousNum,
00073 H323Capabilities & capabilities);
00074
00075 static PINDEX AddCapabilities(H323EndPoint & ep,
00076 PINDEX descriptorNum,
00077 PINDEX simultaneousNum,
00078 H323Capabilities & capabilities,
00079 const PString & type);
00080
00081 static PDirectory defaultCodecDir;
00082
00083 protected:
00084 OpalDLLCodecInfo * (*EnumerateCodecsFn)(unsigned apiVersion, unsigned * count);
00085 static PMutex mutex;
00086 static BOOL inited;
00087 int referenceCount;
00088 };
00089
00091
00092 class OpalDLLCodecRec : public PObject {
00093 PCLASSINFO(OpalDLLCodecRec, PObject);
00094 public:
00095 OpalDLLCodecRec(OpalDynaCodecDLL & _encoder,
00096 const PStringToString & _attributes,
00097 const OpalDLLCodecInfo & _encoderCodeInfo,
00098 OpalMediaFormat * _mediaFormat);
00099
00100 void * CreateContext() const;
00101 void DestroyContext(void * context) const;
00102
00103 H323Capability * CreateCapability(H323EndPoint & ep) const;
00104
00105 void SetParameter(const PString & attribute, const PString & value) const;
00106 PString GetParameter(const PString & attribute, const char * defValue = NULL) const;
00107
00108 OpalDynaCodecDLL & encoder;
00109 PStringToString attributes;
00110 OpalDLLCodecInfo info;
00111
00112 OpalMediaFormat * mediaFormat;
00113
00114
00115 };
00116
00118
00119 class OpalDynaAudioCodec : public H323FramedAudioCodec
00120 {
00121 PCLASSINFO(OpalDynaAudioCodec, H323FramedAudioCodec)
00122
00123 public:
00124 OpalDynaAudioCodec(const OpalDLLCodecRec & _info, Direction direction);
00125 ~OpalDynaAudioCodec();
00126 virtual BOOL EncodeFrame(BYTE * buffer, unsigned & length);
00127 virtual BOOL DecodeFrame(const BYTE * buffer, unsigned length, unsigned & written);
00128
00129 protected:
00130 const OpalDLLCodecRec & info;
00131 void * context;
00132 unsigned samplesPerFrame;
00133 unsigned bytesPerFrame;
00134 };
00135
00137
00138 class OpalDynaCodecRegistration : public H323CapabilityRegistration
00139 {
00140 PCLASSINFO(OpalDynaCodecRegistration, H323CapabilityRegistration);
00141 public:
00142 OpalDynaCodecRegistration(const PString & name,
00143 OpalDLLCodecRec * _encoderInfo,
00144 OpalDLLCodecRec * _decoderInfo,
00145 OpalMediaFormat * _mediaFormat);
00146
00147 H323Capability * Create(H323EndPoint & ep) const;
00148
00149 friend class OpalDynaCodecDLL;
00150
00151 protected:
00152 OpalDLLCodecRec * encoderInfo;
00153 OpalDLLCodecRec * decoderInfo;
00154 OpalMediaFormat * mediaFormat;
00155 };
00156
00158
00159 class OpalDynaCodecNonStandardAudioCapability : public H323NonStandardAudioCapability
00160 {
00161 PCLASSINFO(OpalDynaCodecNonStandardAudioCapability, H323NonStandardAudioCapability);
00162
00163 public:
00164 OpalDynaCodecNonStandardAudioCapability(
00165 const OpalDLLCodecRec & _info,
00166 H323EndPoint & _endpoint,
00167 unsigned maxPacketSize,
00168 unsigned desiredPacketSize,
00169 BYTE country,
00170 BYTE extension,
00171 WORD maufacturer,
00172 const BYTE * nonstdHeader,
00173 PINDEX nonstdHeaderLen);
00174
00175 virtual PObject * Clone() const;
00176 virtual H323Codec * CreateCodec(H323Codec::Direction direction) const;
00177 virtual PString GetFormatName() const;
00178
00179 protected:
00180 const OpalDLLCodecRec & info;
00181 H323EndPoint & endpoint;
00182 };
00183
00185
00186 class OpalDynaNonStandardAudioCodec : public OpalDynaAudioCodec
00187 {
00188 PCLASSINFO(OpalDynaNonStandardAudioCodec, OpalDynaAudioCodec)
00189
00190 public:
00191 OpalDynaNonStandardAudioCodec(const OpalDLLCodecRec & _info, Direction direction);
00192 ~OpalDynaNonStandardAudioCodec();
00193 };
00194
00196
00197 class OpalDynaCodecStandardAudioCapability : public H323AudioCapability
00198 {
00199 PCLASSINFO(OpalDynaCodecStandardAudioCapability, H323AudioCapability);
00200
00201 public:
00202 OpalDynaCodecStandardAudioCapability(
00203 const OpalDLLCodecRec & _info,
00204 H323EndPoint & _endpoint,
00205 unsigned maxPacketSize,
00206 unsigned desiredPacketSize,
00207 unsigned subType);
00208
00209 BOOL OnSendingPDU(H245_AudioCapability & cap, unsigned packetSize) const;
00210 BOOL OnReceivedPDU(const H245_AudioCapability & cap, unsigned & packetSize);
00211
00212 PObject * Clone() const;
00213 H323Codec * CreateCodec(H323Codec::Direction direction) const;
00214 PString GetFormatName() const;
00215 unsigned GetSubType() const;
00216
00217 protected:
00218 const OpalDLLCodecRec & info;
00219 H323EndPoint & endpoint;
00220 unsigned subType;
00221 };
00222
00224
00225 class OpalDynaCodecStandardVideoCapability : public H323VideoCapability
00226 {
00227 PCLASSINFO(OpalDynaCodecStandardVideoCapability, H323VideoCapability);
00228
00229 public:
00230 OpalDynaCodecStandardVideoCapability(
00231 const OpalDLLCodecRec & _info,
00232 H323EndPoint & _endpoint,
00233 unsigned subType);
00234
00235 BOOL OnSendingPDU(H245_VideoCapability & pdu) const;
00236 BOOL OnSendingPDU(H245_VideoMode & pdu) const;
00237 BOOL OnReceivedPDU(const H245_VideoCapability & pdu);
00238
00239 PObject * Clone() const;
00240 H323Codec * CreateCodec(H323Codec::Direction direction) const;
00241 PString GetFormatName() const;
00242 unsigned GetSubType() const;
00243
00244 protected:
00245 const OpalDLLCodecRec & info;
00246 H323EndPoint & endpoint;
00247 unsigned subType;
00248 };
00249
00251
00252 class OpalDynaVideoCodec : public H323VideoCodec
00253 {
00254 PCLASSINFO(OpalDynaVideoCodec, H323VideoCodec)
00255
00256 public:
00257 OpalDynaVideoCodec(
00258 const OpalDLLCodecRec & _info, Direction direction);
00259
00260 ~OpalDynaVideoCodec();
00261
00262 BOOL Read(BYTE * buffer,unsigned & length,RTP_DataFrame & rtpFrame);
00263 BOOL Write(const BYTE * buffer, unsigned length, const RTP_DataFrame & rtp, unsigned & written);
00264
00265 protected:
00266 const OpalDLLCodecRec & info;
00267 void * context;
00268 };
00269
00270
00271 #endif