D:/Storage/CVS_Head/h323plus/include/dynacodec.h

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.1  2007/08/06 20:50:48  shorne
00028  * First commit of h323plus
00029  *
00030  * Revision 1.2  2003/04/30 04:57:13  craigs
00031  * Changed interface to DLL codec to improve Opal compatibility
00032  *
00033  * Revision 1.1  2003/04/27 23:48:24  craigs
00034  * Initial version
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     //H323Capability   * capability;
00114     //PString            h323Name;
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

Generated on Thu Oct 25 13:41:59 2007 for h323plus by  doxygen 1.5.2