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: 23934 $
00027  * $Author: rjongbloed $
00028  * $Date: 2010-01-13 18:47:35 -0600 (Wed, 13 Jan 2010) $
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 PFACTORY_LOAD(OpalPluginCodecManager);
00077 
00078 class OpalPluginCodecHandler : public PObject
00079 {
00080   PCLASSINFO(OpalPluginCodecHandler, PObject);
00081   public:
00082     OpalPluginCodecHandler();
00083 
00084     virtual OpalMediaFormatInternal * OnCreateAudioFormat(OpalPluginCodecManager & mgr,
00085                                             const PluginCodec_Definition * codecDefn,
00086                                                               const char * fmtName,
00087                                                               const char * rtpEncodingName,
00088                                                                   unsigned frameTime,
00089                                                                   unsigned timeUnits,
00090                                                                     time_t timeStamp);
00091 
00092 #if OPAL_VIDEO
00093     virtual OpalMediaFormatInternal * OnCreateVideoFormat(OpalPluginCodecManager & mgr,
00094                                             const PluginCodec_Definition * codecDefn,
00095                                                               const char * fmtName,
00096                                                               const char * rtpEncodingName,
00097                                                                     time_t timeStamp);
00098     virtual void RegisterVideoTranscoder(const PString & src, const PString & dst, const PluginCodec_Definition * codec, bool v);
00099 #endif
00100 
00101 #if OPAL_T38_CAPABILITY
00102     virtual OpalMediaFormatInternal * OnCreateFaxFormat(OpalPluginCodecManager & mgr,
00103                                           const PluginCodec_Definition * codecDefn,
00104                                                             const char * fmtName,
00105                                                             const char * rtpEncodingName,
00106                                                                 unsigned frameTime,
00107                                                                 unsigned timeUnits,
00108                                                                   time_t timeStamp);
00109 #endif
00110 };
00111 
00112 
00113 class OpalPluginCodecManager : public PPluginModuleManager
00114 {
00115   PCLASSINFO(OpalPluginCodecManager, PPluginModuleManager);
00116   public:
00117     OpalPluginCodecManager(PPluginManager * pluginMgr = NULL);
00118     ~OpalPluginCodecManager();
00119 
00120     void RegisterStaticCodec(const H323StaticPluginCodecFactory::Key_T & name,
00121                              PluginCodec_GetAPIVersionFunction getApiVerFn,
00122                              PluginCodec_GetCodecFunction getCodecFn);
00123 
00124     void OnLoadPlugin(PDynaLink & dll, INT code);
00125 
00126     virtual void OnShutdown();
00127 
00128 #if OPAL_H323
00129     H323Capability * CreateCapability(
00130           const PString & _mediaFormat, 
00131           const PString & _baseName,
00132                  unsigned maxFramesPerPacket, 
00133                  unsigned recommendedFramesPerPacket,
00134                  unsigned _pluginSubType);
00135 #endif
00136 
00137   protected:
00138     // Note the below MUST NOT be an OpalMediaFormatList
00139     PList<OpalMediaFormat> mediaFormatsOnHeap;
00140 
00141     void RegisterCodecPlugins  (unsigned int count, const PluginCodec_Definition * codecList, OpalPluginCodecHandler * handler);
00142     void UnregisterCodecPlugins(unsigned int count, const PluginCodec_Definition * codecList, OpalPluginCodecHandler * handler);
00143 
00144     bool AddMediaFormat(OpalPluginCodecHandler * handler, const PTime & timeNow, const PluginCodec_Definition * codecDefn, const char * fmtName);
00145 #if OPAL_H323
00146     void RegisterCapability(const PluginCodec_Definition * codecDefn);
00147 #endif
00148 };
00149 
00150 
00152 
00153 class OpalPluginControl
00154 {
00155   public:
00156     OpalPluginControl(const PluginCodec_Definition * def, const char * name);
00157 
00158     bool Exists() const
00159     {
00160       return controlDef != NULL;
00161     }
00162 
00163     int Call(void * parm, unsigned * parmLen, void * context = NULL) const
00164     {
00165       return controlDef != NULL ? (*controlDef->control)(codecDef, context, fnName, parm, parmLen) : -1;
00166     }
00167 
00168     int Call(void * parm, unsigned   parmLen, void * context = NULL) const
00169     {
00170       return Call(parm, &parmLen, context);
00171     }
00172 
00173     const char * GetName() const { return fnName; }
00174 
00175   protected:
00176     const PluginCodec_Definition  * codecDef;
00177     const char                    * fnName;
00178     const PluginCodec_ControlDefn * controlDef;
00179 };
00180 
00181 
00183 
00184 class OpalPluginMediaFormatInternal
00185 {
00186   public:
00187     OpalPluginMediaFormatInternal(const PluginCodec_Definition * defn);
00188 
00189     bool AdjustOptions(OpalMediaFormatInternal & fmt, OpalPluginControl & control) const;
00190     void PopulateOptions(OpalMediaFormatInternal & format);
00191     void SetOldStyleOption(OpalMediaFormatInternal & format, const PString & _key, const PString & _val, const PString & type);
00192     bool IsValidForProtocol(const PString & _protocol) const;
00193 
00194     const PluginCodec_Definition * codecDef;
00195     OpalPluginControl getOptionsControl;
00196     OpalPluginControl freeOptionsControl;
00197     OpalPluginControl validForProtocolControl;
00198     OpalPluginControl toNormalisedControl;
00199     OpalPluginControl toCustomisedControl;
00200 };
00201 
00202 
00203 class OpalPluginMediaFormat : public OpalMediaFormat
00204 {
00205   public:
00206     OpalPluginMediaFormat(OpalMediaFormatInternal * info)
00207       : OpalMediaFormat(info)
00208     {
00209     }
00210 
00211     OpalPluginMediaFormatInternal * GetInfo() const { return dynamic_cast<OpalPluginMediaFormatInternal *>(m_info); }
00212 };
00213 
00214 
00215 class OpalPluginTranscoder
00216 {
00217   public:
00218     OpalPluginTranscoder(const PluginCodec_Definition * defn, bool isEnc);
00219     ~OpalPluginTranscoder();
00220 
00221     bool UpdateOptions(const OpalMediaFormat & fmt);
00222     bool ExecuteCommand(const OpalMediaCommand & command);
00223     bool Transcode(const void * from, unsigned * fromLen, void * to, unsigned * toLen, unsigned * flags) const
00224     {
00225       return codecDef != NULL && codecDef->codecFunction != NULL &&
00226             (codecDef->codecFunction)(codecDef, context, from, fromLen, to, toLen, flags) != 0;
00227     }
00228 
00229   protected:
00230     const PluginCodec_Definition * codecDef;
00231     bool   isEncoder;
00232     void * context;
00233 
00234     OpalPluginControl setCodecOptions;
00235     OpalPluginControl getOutputDataSizeControl;
00236 };
00237 
00238 
00240 
00241 class OpalPluginAudioFormatInternal : public OpalAudioFormatInternal, public OpalPluginMediaFormatInternal
00242 {
00243   public:
00244     friend class OpalPluginCodecManager;
00245 
00246     OpalPluginAudioFormatInternal(
00247       const PluginCodec_Definition * codecDefn,
00248       const char * fmtName,
00249       const char * rtpEncodingName, 
00250       unsigned frameTime,           
00251       unsigned /*timeUnits*/,       
00252       time_t timeStamp              
00253     );
00254     virtual PObject * Clone() const;
00255     virtual bool IsValidForProtocol(const PString & protocol) const;
00256     virtual bool ToNormalisedOptions();
00257     virtual bool ToCustomisedOptions();
00258 };
00259 
00260 
00261 class OpalPluginFramedAudioTranscoder : public OpalFramedTranscoder, public OpalPluginTranscoder
00262 {
00263   PCLASSINFO(OpalPluginFramedAudioTranscoder, OpalFramedTranscoder);
00264   public:
00265     OpalPluginFramedAudioTranscoder(const PluginCodec_Definition * codecDefn, bool isEncoder);
00266     bool UpdateMediaFormats(const OpalMediaFormat & input, const OpalMediaFormat & output);
00267     PBoolean ExecuteCommand(const OpalMediaCommand & command);
00268     PBoolean ConvertFrame(const BYTE * input, PINDEX & consumed, BYTE * output, PINDEX & created);
00269     virtual PBoolean ConvertSilentFrame(BYTE * buffer);
00270     virtual bool AcceptComfortNoise() const { return comfortNoise; }
00271   protected:
00272     bool comfortNoise;
00273 };
00274 
00275 
00276 class OpalPluginStreamedAudioTranscoder : public OpalStreamedTranscoder, public OpalPluginTranscoder
00277 {
00278   PCLASSINFO(OpalPluginStreamedAudioTranscoder, OpalStreamedTranscoder);
00279   public:
00280     OpalPluginStreamedAudioTranscoder(const PluginCodec_Definition * codec, bool isEncoder);
00281     bool UpdateMediaFormats(const OpalMediaFormat & input, const OpalMediaFormat & output);
00282     PBoolean ExecuteCommand(const OpalMediaCommand & command);
00283     virtual bool AcceptComfortNoise() const { return comfortNoise; }
00284     virtual int ConvertOne(int from) const;
00285   protected:
00286     bool comfortNoise;
00287 };
00288 
00289 
00291 
00292 #if OPAL_VIDEO
00293 
00294 class OpalPluginVideoFormatInternal : public OpalVideoFormatInternal, public OpalPluginMediaFormatInternal
00295 {
00296   public:
00297     OpalPluginVideoFormatInternal(
00298       const PluginCodec_Definition * codec,
00299       const char * fmtName,
00300       const char * rtpEncodingName, 
00301       time_t timeStamp              
00302     );
00303     virtual PObject * Clone() const;
00304     virtual bool IsValidForProtocol(const PString & protocol) const;
00305     virtual bool ToNormalisedOptions();
00306     virtual bool ToCustomisedOptions();
00307 };
00308 
00309 
00310 class OpalPluginVideoTranscoder : public OpalVideoTranscoder, public OpalPluginTranscoder
00311 {
00312   PCLASSINFO(OpalPluginVideoTranscoder, OpalVideoTranscoder);
00313   public:
00314     OpalPluginVideoTranscoder(const PluginCodec_Definition * codec, bool isEncoder);
00315     ~OpalPluginVideoTranscoder();
00316 
00317     PBoolean ConvertFrames(const RTP_DataFrame & src, RTP_DataFrameList & dstList);
00318     bool UpdateMediaFormats(const OpalMediaFormat & input, const OpalMediaFormat & output);
00319     PBoolean ExecuteCommand(const OpalMediaCommand & command);
00320 
00321   protected:
00322     bool EncodeFrames(const RTP_DataFrame & src, RTP_DataFrameList & dstList);
00323     bool DecodeFrames(const RTP_DataFrame & src, RTP_DataFrameList & dstList);
00324 
00325     RTP_DataFrame * m_bufferRTP;
00326     PTimeInterval   m_lastVideoFastUpdate;
00327 
00328 #if PTRACING
00329     unsigned m_consecutiveIntraFrames;
00330 #endif
00331 };
00332 
00333 #endif
00334 
00336 
00337 #if OPAL_T38_CAPABILITY
00338 
00339 class OpalPluginFaxFormatInternal : public OpalMediaFormatInternal, public OpalPluginMediaFormatInternal
00340 {
00341   public:
00342     OpalPluginFaxFormatInternal(
00343       const PluginCodec_Definition * codec,
00344       const char * fmtName,
00345       const char * rtpEncodingName, 
00346       unsigned frameTime,
00347       unsigned /*timeUnits*/,           
00348       time_t timeStamp              
00349     );
00350     virtual PObject * Clone() const;
00351     virtual bool IsValidForProtocol(const PString & protocol) const;
00352 };
00353 
00354 #endif // OPAL_T38_CAPABILITY
00355 
00356 
00358 //
00359 //  this is the base class for codecs accesible via the abstract factory functions
00360 //
00361 
00369 class OpalFactoryCodec : public PObject {
00370   PCLASSINFO(OpalFactoryCodec, PObject)
00371   public:
00373     virtual const struct PluginCodec_Definition * GetDefinition()
00374     { return NULL; }
00375 
00377     virtual PString GetInputFormat() const = 0;
00378 
00380     virtual PString GetOutputFormat() const = 0;
00381 
00383     virtual int Encode(const void * from,      
00384                          unsigned * fromLen,   
00385                              void * to,        
00386                                  unsigned * toLen,     
00387                      unsigned int * flag       
00388                        ) = 0;  
00389 
00391     virtual unsigned int GetSampleRate() const = 0;
00392 
00394     virtual unsigned int GetBitsPerSec() const = 0;
00395 
00397     virtual unsigned int GetFrameTime() const = 0;
00398 
00400     virtual unsigned int GetSamplesPerFrame() const = 0;
00401 
00403     virtual unsigned int GetBytesPerFrame() const = 0;
00404 
00406     virtual unsigned int GetRecommendedFramesPerPacket() const = 0;
00407 
00409     virtual unsigned int GetMaxFramesPerPacket() const = 0;
00410 
00412     virtual BYTE         GetRTPPayload() const = 0;
00413 
00415     virtual PString      GetSDPFormat() const = 0;
00416 };
00417 
00419 
00420 template<class TranscoderClass>
00421 class OpalPluginTranscoderFactory : public OpalTranscoderFactory
00422 {
00423   public:
00424     class Worker : public OpalTranscoderFactory::WorkerBase 
00425     {
00426       public:
00427         Worker(const OpalTranscoderKey & key, const PluginCodec_Definition * codec, bool enc)
00428           : OpalTranscoderFactory::WorkerBase(), codecDefn(codec), isEncoder(enc)
00429         { OpalTranscoderFactory::Register(key, this); }
00430 
00431       protected:
00432         virtual OpalTranscoder * Create(const OpalTranscoderKey &) const
00433         { return new TranscoderClass(codecDefn, isEncoder); }
00434 
00435         const PluginCodec_Definition * codecDefn;
00436         bool isEncoder;
00437     };
00438 };
00439 
00441 //
00442 // Helper class for handling plugin capabilities
00443 //
00444 
00445 class H323PluginCapabilityInfo
00446 {
00447   public:
00448     H323PluginCapabilityInfo(const PluginCodec_Definition * codecDefn, const OpalMediaFormat & mediaFormat);
00449 
00450     //H323PluginCapabilityInfo(const PString & _baseName);
00451 
00452     const PString & GetFormatName() const
00453     { return m_capabilityFormatName; }
00454 
00455   protected:
00456     const PluginCodec_Definition * m_codecDefn;
00457     PString                        m_capabilityFormatName;
00458 };
00459 
00460 #if OPAL_H323
00461 
00463 //
00464 // Class for handling most audio plugin capabilities
00465 //
00466 
00467 class H323AudioPluginCapability : public H323AudioCapability,
00468                                   public H323PluginCapabilityInfo
00469 {
00470   PCLASSINFO(H323AudioPluginCapability, H323AudioCapability);
00471   public:
00472     H323AudioPluginCapability(const PluginCodec_Definition * codecDefn,
00473                               const OpalMediaFormat & mediaFormat,
00474                               unsigned pluginSubType);
00475 
00476     virtual PObject * Clone() const;
00477 
00478     virtual PString GetFormatName() const;
00479 
00480     virtual unsigned GetSubType() const;
00481 
00482   protected:
00483     unsigned pluginSubType;
00484 };
00485 
00486 #define OPAL_DECLARE_EMPTY_AUDIO_CAPABILITY(fmt, type) \
00487 class fmt##_CapabilityRegisterer { \
00488   public: \
00489     fmt##_CapabilityRegisterer() \
00490     { H323CapabilityFactory::Register(fmt, new H323AudioPluginCapability(fmt, fmt, type)); } \
00491 }; \
00492 
00493 #define OPAL_DEFINE_EMPTY_AUDIO_CAPABILITY(fmt) \
00494 static fmt##_CapabilityRegisterer fmt##_CapabilityRegisterer_instance; \
00495 
00497 //
00498 // Class for handling G.723.1 codecs
00499 //
00500 
00501 class H323PluginG7231Capability : public H323AudioPluginCapability
00502 {
00503   PCLASSINFO(H323PluginG7231Capability, H323AudioPluginCapability);
00504   public:
00505     H323PluginG7231Capability(const PluginCodec_Definition * codecDefn,
00506                               const OpalMediaFormat & mediaFormat);
00507 
00508     virtual PObject * Clone() const;
00509     virtual PBoolean OnSendingPDU(H245_AudioCapability & cap, unsigned packetSize) const;
00510     virtual PBoolean OnReceivedPDU(const H245_AudioCapability & cap,  unsigned & packetSize);
00511 };
00512 
00513 #define OPAL_DECLARE_EMPTY_G7231_CAPABILITY(fmt, annex) \
00514 class fmt##_CapabilityRegisterer { \
00515   public: \
00516     fmt##_CapabilityRegisterer() \
00517     { H323CapabilityFactory::Register(fmt, new H323PluginG7231Capability(fmt, annex)); } \
00518 }; \
00519 
00520 #define OPAL_DEFINE_EMPTY_G7231_CAPABILITY(fmt) \
00521 static fmt##_CapabilityRegisterer fmt##_CapabilityRegisterer_instance; \
00522 
00524 //
00525 // Class for handling non standard audio capabilities
00526 //
00527 
00528 class H323CodecPluginNonStandardAudioCapability : public H323NonStandardAudioCapability,
00529                                                   public H323PluginCapabilityInfo
00530 {
00531   PCLASSINFO(H323CodecPluginNonStandardAudioCapability, H323NonStandardAudioCapability);
00532   public:
00533     H323CodecPluginNonStandardAudioCapability(const PluginCodec_Definition * codecDefn,
00534                                               const OpalMediaFormat & mediaFormat,
00535                                               H323NonStandardCapabilityInfo::CompareFuncType compareFunc,
00536                                               const unsigned char * data, unsigned dataLen);
00537 
00538     H323CodecPluginNonStandardAudioCapability(const PluginCodec_Definition * codecDefn,
00539                                               const OpalMediaFormat & mediaFormat,
00540                                               const unsigned char * data, unsigned dataLen);
00541 
00542     virtual PObject * Clone() const;
00543 
00544     virtual PString GetFormatName() const;
00545 };
00546 
00548 //
00549 // Class for handling generic audio capabilities
00550 //
00551 
00552 class H323CodecPluginGenericAudioCapability : public H323GenericAudioCapability,
00553                                               public H323PluginCapabilityInfo
00554 {
00555   PCLASSINFO(H323CodecPluginGenericAudioCapability, H323GenericAudioCapability);
00556   public:
00557     H323CodecPluginGenericAudioCapability(const PluginCodec_Definition * codecDefn,
00558                                           const OpalMediaFormat & mediaFormat,
00559                                           const PluginCodec_H323GenericCodecData * data);
00560 
00561     virtual PObject * Clone() const;
00562     virtual PString GetFormatName() const;
00563 };
00564 
00565 
00566 #if OPAL_VIDEO
00567 
00569 //
00570 // Class for handling most audio plugin capabilities
00571 //
00572 
00573 class H323VideoPluginCapability : public H323VideoCapability,
00574                              public H323PluginCapabilityInfo
00575 {
00576   PCLASSINFO(H323VideoPluginCapability, H323VideoCapability);
00577   public:
00578     H323VideoPluginCapability(const PluginCodec_Definition * codecDefn,
00579                               const OpalMediaFormat & mediaFormat,
00580                               unsigned _pluginSubType);
00581 
00582     virtual PString GetFormatName() const;
00583 
00584     virtual unsigned GetSubType() const;
00585 
00586     static bool SetOptionsFromMPI(OpalMediaFormat & mediaFormat, int frameWidth, int frameHeight, int frameRate);
00587 
00588     virtual void PrintOn(std::ostream & strm) const;
00589 
00590   protected:
00591     unsigned pluginSubType;
00592     unsigned h323subType;   // only set if using capability without codec
00593 };
00594 
00596 //
00597 // Class for handling non standard video capabilities
00598 //
00599 
00600 class H323CodecPluginNonStandardVideoCapability : public H323NonStandardVideoCapability,
00601                                                   public H323PluginCapabilityInfo
00602 {
00603   PCLASSINFO(H323CodecPluginNonStandardVideoCapability, H323NonStandardVideoCapability);
00604   public:
00605     H323CodecPluginNonStandardVideoCapability(const PluginCodec_Definition * codecDefn,
00606                                               const OpalMediaFormat & mediaFormat,
00607                                               H323NonStandardCapabilityInfo::CompareFuncType compareFunc,
00608                                               const unsigned char * data, unsigned dataLen);
00609 
00610     H323CodecPluginNonStandardVideoCapability(const PluginCodec_Definition * codecDefn,
00611                                               const OpalMediaFormat & mediaFormat,
00612                                               const unsigned char * data, unsigned dataLen);
00613 
00614     virtual PObject * Clone() const;
00615 
00616     virtual PString GetFormatName() const;
00617 };
00618 
00620 //
00621 // Class for handling generic video capabilities
00622 //
00623 
00624 class H323CodecPluginGenericVideoCapability : public H323GenericVideoCapability,
00625                                               public H323PluginCapabilityInfo
00626 {
00627   PCLASSINFO(H323CodecPluginGenericVideoCapability, H323GenericVideoCapability);
00628   public:
00629     H323CodecPluginGenericVideoCapability(const PluginCodec_Definition * codecDefn,
00630                                           const OpalMediaFormat & mediaFormat,
00631                                           const PluginCodec_H323GenericCodecData * data);
00632 
00633     virtual PObject * Clone() const;
00634 
00635     virtual PString GetFormatName() const;
00636 };
00637 
00639 //
00640 // Class for handling H.261 plugin capabilities
00641 //
00642 
00643 class H323H261PluginCapability : public H323VideoPluginCapability
00644 {
00645   PCLASSINFO(H323H261PluginCapability, H323VideoPluginCapability);
00646   public:
00647     H323H261PluginCapability(const PluginCodec_Definition * codecDefn, const OpalMediaFormat & mediaFormat);
00648 
00649     Comparison Compare(const PObject & obj) const;
00650 
00651     virtual PObject * Clone() const;
00652 
00653     virtual PBoolean OnSendingPDU(
00654       H245_VideoCapability & pdu  
00655     ) const;
00656 
00657     virtual PBoolean OnSendingPDU(
00658       H245_VideoMode & pdu
00659     ) const;
00660 
00661     virtual PBoolean OnReceivedPDU(
00662       const H245_VideoCapability & pdu  
00663     );
00664 };
00665 
00667 //
00668 // Class for handling H.263 plugin capabilities
00669 //
00670 
00671 class H323H263PluginCapability : public H323VideoPluginCapability
00672 {
00673   PCLASSINFO(H323H263PluginCapability, H323VideoPluginCapability);
00674   public:
00675     H323H263PluginCapability(const PluginCodec_Definition * codecDefn, const OpalMediaFormat & mediaFormat);
00676 
00677     Comparison Compare(const PObject & obj) const;
00678 
00679     virtual PObject * Clone() const;
00680 
00681     virtual PBoolean OnSendingPDU(
00682       H245_VideoCapability & pdu  
00683     ) const;
00684 
00685     virtual PBoolean OnSendingPDU(
00686       H245_VideoMode & pdu
00687     ) const;
00688 
00689     virtual PBoolean OnReceivedPDU(
00690       const H245_VideoCapability & pdu  
00691     );
00692     virtual PBoolean IsMatch(const PASN_Choice & subTypePDU) const;
00693 };
00694 
00695 #endif // OPAL_VIDEO
00696 #endif // OPAL_H323
00697 
00698 #endif // OPAL_CODEC_OPALPLUGINMGR_H

Generated on Mon Feb 21 20:19:21 2011 for OPAL by  doxygen 1.4.7