opalpluginmgr.h

Go to the documentation of this file.
00001 /*
00002  * opalpluginmgr.h
00003  *
00004  * OPAL codec plugins handler
00005  *
00006  * OPAL Library
00007  *
00008  * Copyright (C) 2005-2006 Post Increment
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 Phone Abstraction Library.
00021  *
00022  * The Initial Developer of the Original Code is Post Increment
00023  *
00024  * Contributor(s): ______________________________________.
00025  *
00026  * $Revision: 22073 $
00027  * $Author: rjongbloed $
00028  * $Date: 2009-02-16 11:21:01 +0000 (Mon, 16 Feb 2009) $
00029  */
00030 
00031 #ifndef OPAL_CODEC_OPALPLUGINMGR_H
00032 #define OPAL_CODEC_OPALPLUGINMGR_H
00033 
00034 #ifdef P_USE_PRAGMA
00035 #pragma interface
00036 #endif
00037 
00038 #include <ptlib/object.h>
00039 
00040 #include <opal/buildopts.h>
00041 
00042 #include <ptlib/pluginmgr.h>
00043 #include <ptlib/pfactory.h>
00044 #include <codec/opalplugin.h>
00045 #include <opal/mediafmt.h>
00046 #include <opal/transcoders.h>
00047 
00048 #if OPAL_H323
00049 #include <h323/h323caps.h>
00050 #endif
00051 
00052 #if OPAL_VIDEO
00053 #include <codec/vidcodec.h>
00054 #endif
00055 
00056 
00058 
00059 class H323Capability;
00060 
00061 class H323StaticPluginCodec
00062 {
00063   public:
00064     virtual ~H323StaticPluginCodec() { }
00065     virtual PluginCodec_GetAPIVersionFunction Get_GetAPIFn() = 0;
00066     virtual PluginCodec_GetCodecFunction Get_GetCodecFn() = 0;
00067 };
00068 
00069 typedef PFactory<H323StaticPluginCodec> H323StaticPluginCodecFactory;
00070 
00071 
00073 
00074 class OpalPluginCodecManager;
00075 
00076 class OpalPluginCodecHandler : public PObject
00077 {
00078   PCLASSINFO(OpalPluginCodecHandler, PObject);
00079   public:
00080     OpalPluginCodecHandler();
00081 
00082     virtual OpalMediaFormatInternal * OnCreateAudioFormat(OpalPluginCodecManager & mgr,
00083                                             const PluginCodec_Definition * codecDefn,
00084                                                               const char * rtpEncodingName,
00085                                                                   unsigned frameTime,
00086                                                                   unsigned timeUnits,
00087                                                                     time_t timeStamp);
00088 
00089 #if OPAL_VIDEO
00090     virtual OpalMediaFormatInternal * OnCreateVideoFormat(OpalPluginCodecManager & mgr,
00091                                             const PluginCodec_Definition * codecDefn,
00092                                                               const char * rtpEncodingName,
00093                                                                     time_t timeStamp);
00094     virtual void RegisterVideoTranscoder(const PString & src, const PString & dst, const PluginCodec_Definition * codec, bool v);
00095 #endif
00096 
00097 #if OPAL_T38_CAPABILITY
00098     virtual OpalMediaFormatInternal * OnCreateFaxFormat(OpalPluginCodecManager & mgr,
00099                                           const PluginCodec_Definition * codecDefn,
00100                                                             const char * rtpEncodingName,
00101                                                                 unsigned frameTime,
00102                                                                 unsigned timeUnits,
00103                                                                   time_t timeStamp);
00104 #endif
00105 };
00106 
00107 
00108 class OpalPluginCodecManager : public PPluginModuleManager
00109 {
00110   PCLASSINFO(OpalPluginCodecManager, PPluginModuleManager);
00111   public:
00112     OpalPluginCodecManager(PPluginManager * pluginMgr = NULL);
00113     ~OpalPluginCodecManager();
00114 
00115     void RegisterStaticCodec(const H323StaticPluginCodecFactory::Key_T & name,
00116                              PluginCodec_GetAPIVersionFunction getApiVerFn,
00117                              PluginCodec_GetCodecFunction getCodecFn);
00118 
00119     void OnLoadPlugin(PDynaLink & dll, INT code);
00120 
00121     virtual void OnShutdown();
00122 
00123     static void Bootstrap();
00124 
00125 #if OPAL_H323
00126     H323Capability * CreateCapability(
00127           const PString & _mediaFormat, 
00128           const PString & _baseName,
00129                  unsigned maxFramesPerPacket, 
00130                  unsigned recommendedFramesPerPacket,
00131                  unsigned _pluginSubType);
00132 #endif
00133 
00134   protected:
00135     // Note the below MUST NOT be an OpalMediaFormatList
00136     PList<OpalMediaFormat> mediaFormatsOnHeap;
00137 
00138     void RegisterCodecPlugins  (unsigned int count, const PluginCodec_Definition * codecList, OpalPluginCodecHandler * handler);
00139     void UnregisterCodecPlugins(unsigned int count, const PluginCodec_Definition * codecList, OpalPluginCodecHandler * handler);
00140 
00141 #if OPAL_H323
00142     void RegisterCapability(const PluginCodec_Definition * codecDefn);
00143 #endif
00144 };
00145 
00146 
00148 
00149 class OpalPluginControl
00150 {
00151   public:
00152     OpalPluginControl(const PluginCodec_Definition * def, const char * name);
00153 
00154     bool Exists() const
00155     {
00156       return controlDef != NULL;
00157     }
00158 
00159     int Call(void * parm, unsigned * parmLen, void * context = NULL) const
00160     {
00161       return controlDef != NULL ? (*controlDef->control)(codecDef, context, fnName, parm, parmLen) : -1;
00162     }
00163 
00164     int Call(void * parm, unsigned   parmLen, void * context = NULL) const
00165     {
00166       return Call(parm, &parmLen, context);
00167     }
00168 
00169     const char * GetName() const { return fnName; }
00170 
00171   protected:
00172     const PluginCodec_Definition  * codecDef;
00173     const char                    * fnName;
00174     const PluginCodec_ControlDefn * controlDef;
00175 };
00176 
00177 
00179 
00180 class OpalPluginMediaFormatInternal
00181 {
00182   public:
00183     OpalPluginMediaFormatInternal(const PluginCodec_Definition * defn);
00184 
00185     bool AdjustOptions(OpalMediaFormatInternal & fmt, OpalPluginControl & control) const;
00186     void PopulateOptions(OpalMediaFormatInternal & format);
00187     void SetOldStyleOption(OpalMediaFormatInternal & format, const PString & _key, const PString & _val, const PString & type);
00188     bool IsValidForProtocol(const PString & _protocol) const;
00189 
00190     const PluginCodec_Definition * codecDef;
00191     OpalPluginControl getOptionsControl;
00192     OpalPluginControl freeOptionsControl;
00193     OpalPluginControl validForProtocolControl;
00194     OpalPluginControl toNormalisedControl;
00195     OpalPluginControl toCustomisedControl;
00196 };
00197 
00198 
00199 class OpalPluginMediaFormat : public OpalMediaFormat
00200 {
00201   public:
00202     OpalPluginMediaFormat(OpalMediaFormatInternal * info)
00203       : OpalMediaFormat(info)
00204     {
00205     }
00206 
00207     OpalPluginMediaFormatInternal * GetInfo() const { return dynamic_cast<OpalPluginMediaFormatInternal *>(m_info); }
00208 };
00209 
00210 
00211 class OpalPluginTranscoder
00212 {
00213   public:
00214     OpalPluginTranscoder(const PluginCodec_Definition * defn, bool isEnc);
00215     ~OpalPluginTranscoder();
00216 
00217     bool UpdateOptions(const OpalMediaFormat & fmt);
00218     bool Transcode(const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned * flags) const
00219     {
00220       return codecDef != NULL && codecDef->codecFunction != NULL &&
00221             (codecDef->codecFunction)(codecDef, context, from, fromLen, to, toLen, flags) != 0;
00222     }
00223 
00224   protected:
00225     const PluginCodec_Definition * codecDef;
00226     bool   isEncoder;
00227     void * context;
00228 
00229     OpalPluginControl setCodecOptions;
00230     OpalPluginControl getOutputDataSizeControl;
00231 };
00232 
00233 
00235 
00236 class OpalPluginAudioFormatInternal : public OpalAudioFormatInternal, public OpalPluginMediaFormatInternal
00237 {
00238   public:
00239     friend class OpalPluginCodecManager;
00240 
00241     OpalPluginAudioFormatInternal(
00242       const PluginCodec_Definition * codecDefn,
00243       const char * rtpEncodingName, 
00244       unsigned frameTime,           
00245       unsigned /*timeUnits*/,       
00246       time_t timeStamp              
00247     );
00248     virtual PObject * Clone() const;
00249     virtual bool IsValidForProtocol(const PString & protocol) const;
00250     virtual bool ToNormalisedOptions();
00251     virtual bool ToCustomisedOptions();
00252 };
00253 
00254 
00255 class OpalPluginFramedAudioTranscoder : public OpalFramedTranscoder, public OpalPluginTranscoder
00256 {
00257   PCLASSINFO(OpalPluginFramedAudioTranscoder, OpalFramedTranscoder);
00258   public:
00259     OpalPluginFramedAudioTranscoder(const PluginCodec_Definition * codecDefn, bool isEncoder);
00260     bool UpdateMediaFormats(const OpalMediaFormat & input, const OpalMediaFormat & output);
00261     PBoolean ConvertFrame(const BYTE * input, PINDEX & consumed, BYTE * output, PINDEX & created);
00262     virtual PBoolean ConvertSilentFrame(BYTE * buffer);
00263     virtual bool AcceptComfortNoise() const { return comfortNoise; }
00264   protected:
00265     bool comfortNoise;
00266 };
00267 
00268 
00269 class OpalPluginStreamedAudioTranscoder : public OpalStreamedTranscoder, public OpalPluginTranscoder
00270 {
00271   PCLASSINFO(OpalPluginStreamedAudioTranscoder, OpalStreamedTranscoder);
00272   public:
00273     OpalPluginStreamedAudioTranscoder(const PluginCodec_Definition * codec, bool isEncoder, unsigned inputBits, unsigned outputBits);
00274     bool UpdateMediaFormats(const OpalMediaFormat & input, const OpalMediaFormat & output);
00275     virtual bool AcceptComfortNoise() const { return comfortNoise; }
00276   protected:
00277     bool comfortNoise;
00278 };
00279 
00280 
00281 class OpalPluginStreamedAudioEncoder : public OpalPluginStreamedAudioTranscoder
00282 {
00283   PCLASSINFO(OpalPluginStreamedAudioEncoder, OpalPluginStreamedAudioTranscoder);
00284   public:
00285     OpalPluginStreamedAudioEncoder(const PluginCodec_Definition * codec, bool);
00286     int ConvertOne(int _sample) const;
00287 };
00288 
00289 class OpalPluginStreamedAudioDecoder : public OpalPluginStreamedAudioTranscoder
00290 {
00291   PCLASSINFO(OpalPluginStreamedAudioDecoder, OpalPluginStreamedAudioTranscoder);
00292   public:
00293     OpalPluginStreamedAudioDecoder(const PluginCodec_Definition * codec, bool);
00294     int ConvertOne(int codedSample) const;
00295 };
00296 
00297 
00299 
00300 #if OPAL_VIDEO
00301 
00302 class OpalPluginVideoFormatInternal : public OpalVideoFormatInternal, public OpalPluginMediaFormatInternal
00303 {
00304   public:
00305     OpalPluginVideoFormatInternal(
00306       const PluginCodec_Definition * codec,
00307       const char * rtpEncodingName, 
00308       time_t timeStamp              
00309     );
00310     virtual PObject * Clone() const;
00311     virtual bool IsValidForProtocol(const PString & protocol) const;
00312     virtual bool ToNormalisedOptions();
00313     virtual bool ToCustomisedOptions();
00314 };
00315 
00316 
00317 class OpalPluginVideoTranscoder : public OpalVideoTranscoder, public OpalPluginTranscoder
00318 {
00319   PCLASSINFO(OpalPluginVideoTranscoder, OpalVideoTranscoder);
00320   public:
00321     OpalPluginVideoTranscoder(const PluginCodec_Definition * codec, bool isEncoder);
00322     ~OpalPluginVideoTranscoder();
00323 
00324     PBoolean ConvertFrames(const RTP_DataFrame & src, RTP_DataFrameList & dstList);
00325     bool UpdateMediaFormats(const OpalMediaFormat & input, const OpalMediaFormat & output);
00326 
00327   protected:
00328     RTP_DataFrame * m_bufferRTP;
00329     PTimeInterval   m_lastVideoFastUpdate;
00330 
00331 #if PTRACING
00332     unsigned m_consecutiveIntraFrames;
00333 #endif
00334 };
00335 
00336 #endif
00337 
00339 
00340 #if OPAL_T38_CAPABILITY
00341 
00342 class OpalPluginFaxFormatInternal : public OpalMediaFormatInternal, public OpalPluginMediaFormatInternal
00343 {
00344   public:
00345     OpalPluginFaxFormatInternal(
00346       const PluginCodec_Definition * codec,
00347       const char * rtpEncodingName, 
00348       unsigned frameTime,
00349       unsigned /*timeUnits*/,           
00350       time_t timeStamp              
00351     );
00352     virtual PObject * Clone() const;
00353     virtual bool IsValidForProtocol(const PString & protocol) const;
00354 };
00355 
00356 #endif // OPAL_T38_CAPABILITY
00357 
00358 
00360 //
00361 //  this is the base class for codecs accesible via the abstract factory functions
00362 //
00363 
00371 class OpalFactoryCodec : public PObject {
00372   PCLASSINFO(OpalFactoryCodec, PObject)
00373   public:
00375     virtual const struct PluginCodec_Definition * GetDefinition()
00376     { return NULL; }
00377 
00379     virtual PString GetInputFormat() const = 0;
00380 
00382     virtual PString GetOutputFormat() const = 0;
00383 
00385     virtual int Encode(const void * from,      
00386                          unsigned * fromLen,   
00387                              void * to,        
00388                                  unsigned * toLen,     
00389                      unsigned int * flag       
00390                        ) = 0;  
00391 
00393     virtual unsigned int GetSampleRate() const = 0;
00394 
00396     virtual unsigned int GetBitsPerSec() const = 0;
00397 
00399     virtual unsigned int GetFrameTime() const = 0;
00400 
00402     virtual unsigned int GetSamplesPerFrame() const = 0;
00403 
00405     virtual unsigned int GetBytesPerFrame() const = 0;
00406 
00408     virtual unsigned int GetRecommendedFramesPerPacket() const = 0;
00409 
00411     virtual unsigned int GetMaxFramesPerPacket() const = 0;
00412 
00414     virtual BYTE         GetRTPPayload() const = 0;
00415 
00417     virtual PString      GetSDPFormat() const = 0;
00418 };
00419 
00421 
00422 template<class TranscoderClass>
00423 class OpalPluginTranscoderFactory : public OpalTranscoderFactory
00424 {
00425   public:
00426     class Worker : public OpalTranscoderFactory::WorkerBase 
00427     {
00428       public:
00429         Worker(const OpalTranscoderKey & key, const PluginCodec_Definition * codec, bool enc)
00430           : OpalTranscoderFactory::WorkerBase(), codecDefn(codec), isEncoder(enc)
00431         { OpalTranscoderFactory::Register(key, this); }
00432 
00433       protected:
00434         virtual OpalTranscoder * Create(const OpalTranscoderKey &) const
00435         { return new TranscoderClass(codecDefn, isEncoder); }
00436 
00437         const PluginCodec_Definition * codecDefn;
00438         bool isEncoder;
00439     };
00440 };
00441 
00443 //
00444 // Helper class for handling plugin capabilities
00445 //
00446 
00447 class H323PluginCapabilityInfo
00448 {
00449   public:
00450     H323PluginCapabilityInfo(const PluginCodec_Definition * codecDefn);
00451 
00452     H323PluginCapabilityInfo(const PString & _baseName);
00453 
00454     const PString & GetFormatName() const
00455     { return m_capabilityFormatName; }
00456 
00457   protected:
00458     const PluginCodec_Definition * m_codecDefn;
00459     PString                        m_capabilityFormatName;
00460 };
00461 
00462 #if OPAL_H323
00463 
00465 //
00466 // Class for handling most audio plugin capabilities
00467 //
00468 
00469 class H323AudioPluginCapability : public H323AudioCapability,
00470                                   public H323PluginCapabilityInfo
00471 {
00472   PCLASSINFO(H323AudioPluginCapability, H323AudioCapability);
00473   public:
00474     H323AudioPluginCapability(const PluginCodec_Definition * codecDefn,
00475                               unsigned pluginSubType);
00476 
00477     // this constructor is only used when creating a capability without a codec
00478     H323AudioPluginCapability(const PString & _mediaFormat,
00479                               const PString & _baseName,
00480                               unsigned _pluginSubType);
00481 
00482     virtual PObject * Clone() const;
00483 
00484     virtual PString GetFormatName() const;
00485 
00486     virtual unsigned GetSubType() const;
00487 
00488   protected:
00489     unsigned pluginSubType;
00490 };
00491 
00492 #define OPAL_DECLARE_EMPTY_AUDIO_CAPABILITY(fmt, type) \
00493 class fmt##_CapabilityRegisterer { \
00494   public: \
00495     fmt##_CapabilityRegisterer() \
00496     { H323CapabilityFactory::Register(fmt, new H323AudioPluginCapability(fmt, fmt, type)); } \
00497 }; \
00498 
00499 #define OPAL_DEFINE_EMPTY_AUDIO_CAPABILITY(fmt) \
00500 static fmt##_CapabilityRegisterer fmt##_CapabilityRegisterer_instance; \
00501 
00503 //
00504 // Class for handling G.723.1 codecs
00505 //
00506 
00507 class H323PluginG7231Capability : public H323AudioPluginCapability
00508 {
00509   PCLASSINFO(H323PluginG7231Capability, H323AudioPluginCapability);
00510   public:
00511     H323PluginG7231Capability(const PluginCodec_Definition * codecDefn, bool annexA = true);
00512 
00513     // this constructor is used for creating empty codecs
00514     H323PluginG7231Capability(const OpalMediaFormat & fmt, bool annexA = true);
00515 
00516     virtual PObject * Clone() const;
00517     virtual PBoolean OnSendingPDU(H245_AudioCapability & cap, unsigned packetSize) const;
00518     virtual PBoolean OnReceivedPDU(const H245_AudioCapability & cap,  unsigned & packetSize);
00519 
00520   protected:
00521     bool m_annexA;
00522 };
00523 
00524 #define OPAL_DECLARE_EMPTY_G7231_CAPABILITY(fmt, annex) \
00525 class fmt##_CapabilityRegisterer { \
00526   public: \
00527     fmt##_CapabilityRegisterer() \
00528     { H323CapabilityFactory::Register(fmt, new H323PluginG7231Capability(fmt, annex)); } \
00529 }; \
00530 
00531 #define OPAL_DEFINE_EMPTY_G7231_CAPABILITY(fmt) \
00532 static fmt##_CapabilityRegisterer fmt##_CapabilityRegisterer_instance; \
00533 
00535 //
00536 // Class for handling non standard audio capabilities
00537 //
00538 
00539 class H323CodecPluginNonStandardAudioCapability : public H323NonStandardAudioCapability,
00540                                                   public H323PluginCapabilityInfo
00541 {
00542   PCLASSINFO(H323CodecPluginNonStandardAudioCapability, H323NonStandardAudioCapability);
00543   public:
00544     H323CodecPluginNonStandardAudioCapability(const PluginCodec_Definition * codecDefn,
00545                                               H323NonStandardCapabilityInfo::CompareFuncType compareFunc,
00546                                               const unsigned char * data, unsigned dataLen);
00547 
00548     H323CodecPluginNonStandardAudioCapability(const PluginCodec_Definition * codecDefn,
00549                                               const unsigned char * data, unsigned dataLen);
00550 
00551     virtual PObject * Clone() const;
00552 
00553     virtual PString GetFormatName() const;
00554 };
00555 
00557 //
00558 // Class for handling generic audio capabilities
00559 //
00560 
00561 class H323CodecPluginGenericAudioCapability : public H323GenericAudioCapability,
00562                                               public H323PluginCapabilityInfo
00563 {
00564   PCLASSINFO(H323CodecPluginGenericAudioCapability, H323GenericAudioCapability);
00565   public:
00566     H323CodecPluginGenericAudioCapability(const PluginCodec_Definition * codecDefn,
00567                                           const PluginCodec_H323GenericCodecData * data);
00568 
00569     virtual PObject * Clone() const;
00570     virtual PString GetFormatName() const;
00571 };
00572 
00573 
00574 #if OPAL_VIDEO
00575 
00577 //
00578 // Class for handling most audio plugin capabilities
00579 //
00580 
00581 class H323VideoPluginCapability : public H323VideoCapability,
00582                              public H323PluginCapabilityInfo
00583 {
00584   PCLASSINFO(H323VideoPluginCapability, H323VideoCapability);
00585   public:
00586     H323VideoPluginCapability(const PluginCodec_Definition * codecDefn,
00587                               unsigned _pluginSubType);
00588 
00589     virtual PString GetFormatName() const;
00590 
00591     virtual unsigned GetSubType() const;
00592 
00593     static bool SetOptionsFromMPI(OpalMediaFormat & mediaFormat, int frameWidth, int frameHeight, int frameRate);
00594 
00595     virtual void PrintOn(std::ostream & strm) const;
00596 
00597   protected:
00598     unsigned pluginSubType;
00599     unsigned h323subType;   // only set if using capability without codec
00600 };
00601 
00603 //
00604 // Class for handling non standard video capabilities
00605 //
00606 
00607 class H323CodecPluginNonStandardVideoCapability : public H323NonStandardVideoCapability,
00608                                                   public H323PluginCapabilityInfo
00609 {
00610   PCLASSINFO(H323CodecPluginNonStandardVideoCapability, H323NonStandardVideoCapability);
00611   public:
00612     H323CodecPluginNonStandardVideoCapability(const PluginCodec_Definition * codecDefn,
00613                                               H323NonStandardCapabilityInfo::CompareFuncType compareFunc,
00614                                               const unsigned char * data, unsigned dataLen);
00615 
00616     H323CodecPluginNonStandardVideoCapability(const PluginCodec_Definition * codecDefn,
00617                                               const unsigned char * data, unsigned dataLen);
00618 
00619     virtual PObject * Clone() const;
00620 
00621     virtual PString GetFormatName() const;
00622 };
00623 
00625 //
00626 // Class for handling generic video capabilities
00627 //
00628 
00629 class H323CodecPluginGenericVideoCapability : public H323GenericVideoCapability,
00630                                               public H323PluginCapabilityInfo
00631 {
00632   PCLASSINFO(H323CodecPluginGenericVideoCapability, H323GenericVideoCapability);
00633   public:
00634     H323CodecPluginGenericVideoCapability(const PluginCodec_Definition * codecDefn,
00635                                           const PluginCodec_H323GenericCodecData * data);
00636 
00637     virtual PObject * Clone() const;
00638 
00639     virtual PString GetFormatName() const;
00640 };
00641 
00643 //
00644 // Class for handling H.261 plugin capabilities
00645 //
00646 
00647 class H323H261PluginCapability : public H323VideoPluginCapability
00648 {
00649   PCLASSINFO(H323H261PluginCapability, H323VideoPluginCapability);
00650   public:
00651     H323H261PluginCapability(const PluginCodec_Definition * codecDefn);
00652 
00653     Comparison Compare(const PObject & obj) const;
00654 
00655     virtual PObject * Clone() const;
00656 
00657     virtual PBoolean OnSendingPDU(
00658       H245_VideoCapability & pdu  
00659     ) const;
00660 
00661     virtual PBoolean OnSendingPDU(
00662       H245_VideoMode & pdu
00663     ) const;
00664 
00665     virtual PBoolean OnReceivedPDU(
00666       const H245_VideoCapability & pdu  
00667     );
00668 };
00669 
00671 //
00672 // Class for handling H.263 plugin capabilities
00673 //
00674 
00675 class H323H263PluginCapability : public H323VideoPluginCapability
00676 {
00677   PCLASSINFO(H323H263PluginCapability, H323VideoPluginCapability);
00678   public:
00679     H323H263PluginCapability(const PluginCodec_Definition * codecDefn);
00680 
00681     Comparison Compare(const PObject & obj) const;
00682 
00683     virtual PObject * Clone() const;
00684 
00685     virtual PBoolean OnSendingPDU(
00686       H245_VideoCapability & pdu  
00687     ) const;
00688 
00689     virtual PBoolean OnSendingPDU(
00690       H245_VideoMode & pdu
00691     ) const;
00692 
00693     virtual PBoolean OnReceivedPDU(
00694       const H245_VideoCapability & pdu  
00695     );
00696     virtual PBoolean IsMatch(const PASN_Choice & subTypePDU) const;
00697 };
00698 
00699 #endif // OPAL_VIDEO
00700 #endif // OPAL_H323
00701 
00702 #endif // OPAL_CODEC_OPALPLUGINMGR_H

Generated on Tue May 19 09:56:26 2009 for OPAL by  doxygen 1.5.1