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

Generated on Fri Mar 7 07:36:38 2008 for OPAL by  doxygen 1.5.1