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
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327 #ifndef __OPAL_MEDIAFMT_H
00328 #define __OPAL_MEDIAFMT_H
00329
00330 #ifdef P_USE_PRAGMA
00331 #pragma interface
00332 #endif
00333
00334 #ifdef _MSC_VER
00335 #if _MSC_VER < 1300
00336 #pragma warning(disable:4663)
00337 #endif
00338 #endif
00339
00340 #include <opal/buildopts.h>
00341
00342 #include <rtp/rtp.h>
00343
00344 #include <limits>
00345
00346 #ifdef min
00347 #undef min
00348 #endif
00349 #ifdef max
00350 #undef max
00351 #endif
00352
00353 class OpalMediaFormat;
00354
00355
00357
00358 PLIST(OpalMediaFormatBaseList, OpalMediaFormat);
00359
00362 class OpalMediaFormatList : public OpalMediaFormatBaseList
00363 {
00364 PCLASSINFO(OpalMediaFormatList, OpalMediaFormatBaseList);
00365 public:
00370 OpalMediaFormatList();
00371
00374 OpalMediaFormatList(
00375 const OpalMediaFormat & format
00376 );
00377
00380 OpalMediaFormatList(const OpalMediaFormatList & l) : OpalMediaFormatBaseList(l) { }
00382
00388 OpalMediaFormatList & operator+=(
00389 const OpalMediaFormat & format
00390 );
00391
00395 OpalMediaFormatList & operator+=(
00396 const OpalMediaFormatList & formats
00397 );
00398
00402 OpalMediaFormatList & operator-=(
00403 const OpalMediaFormat & format
00404 );
00405
00409 OpalMediaFormatList & operator-=(
00410 const OpalMediaFormatList & formats
00411 );
00412
00417 PINDEX FindFormat(
00418 RTP_DataFrame::PayloadTypes rtpPayloadType,
00419 const unsigned clockRate,
00420 const char * rtpEncodingName = NULL,
00421 const char * protocol = NULL
00422 ) const;
00423
00431 PINDEX FindFormat(
00432 const PString & wildcard,
00433 PINDEX pos = 0
00434 ) const;
00435
00438 BOOL HasFormat(
00439 RTP_DataFrame::PayloadTypes rtpPayloadType
00440 ) const { return FindFormat(rtpPayloadType) != P_MAX_INDEX; }
00441
00447 BOOL HasFormat(
00448 const PString & wildcard
00449 ) const { return FindFormat(wildcard) != P_MAX_INDEX; }
00450
00453 void Remove(
00454 const PStringArray & mask
00455 );
00456
00461 void Reorder(
00462 const PStringArray & order
00463 );
00465
00466 private:
00467 virtual PINDEX Append(PObject *) { return P_MAX_INDEX; }
00468 virtual PINDEX Insert(const PObject &, PObject *) { return P_MAX_INDEX; }
00469 virtual PINDEX InsertAt(PINDEX, PObject *) { return P_MAX_INDEX; }
00470 virtual BOOL SetAt(PINDEX, PObject *) { return FALSE; }
00471 };
00472
00473
00475
00478 class OpalMediaOption : public PObject
00479 {
00480 PCLASSINFO(OpalMediaOption, PObject);
00481 public:
00482 enum MergeType {
00483 NoMerge,
00484 MinMerge,
00485 MaxMerge,
00486 EqualMerge,
00487 NotEqualMerge,
00488 AlwaysMerge,
00489
00490
00491 AndMerge = MinMerge,
00492 OrMerge = MaxMerge
00493 };
00494
00495 protected:
00496 OpalMediaOption(
00497 const char * name,
00498 bool readOnly,
00499 MergeType merge
00500 );
00501
00502 public:
00503 virtual Comparison Compare(const PObject & obj) const;
00504
00505 bool Merge(
00506 const OpalMediaOption & option
00507 );
00508 virtual Comparison CompareValue(
00509 const OpalMediaOption & option
00510 ) const = 0;
00511 virtual void Assign(
00512 const OpalMediaOption & option
00513 ) = 0;
00514
00515 PString AsString() const;
00516 bool FromString(const PString & value);
00517
00518 const PString & GetName() const { return m_name; }
00519
00520 bool IsReadOnly() const { return m_readOnly; }
00521 void SetReadOnly(bool readOnly) { m_readOnly = readOnly; }
00522
00523 MergeType GetMerge() const { return m_merge; }
00524 void SetMerge(MergeType merge) { m_merge = merge; }
00525
00526 const PString & GetFMTPName() const { return m_FMTPName; }
00527 void SetFMTPName(const char * name) { m_FMTPName = name; }
00528
00529 const PString & GetFMTPDefault() const { return m_FMTPDefault; }
00530 void SetFMTPDefault(const char * value) { m_FMTPDefault = value; }
00531
00532 struct H245GenericInfo {
00533 unsigned ordinal:16;
00534 enum Modes {
00535 None,
00536 Collapsing,
00537 NonCollapsing
00538 } mode:3;
00539 enum IntegerTypes {
00540 UnsignedInt,
00541 Unsigned32,
00542 BooleanArray
00543 } integerType:3;
00544 bool excludeTCS:1;
00545 bool excludeOLC:1;
00546 bool excludeReqMode:1;
00547 };
00548
00549 const H245GenericInfo & GetH245Generic() const { return m_H245Generic; }
00550 void SetH245Generic(const H245GenericInfo & generic) { m_H245Generic = generic; }
00551
00552 protected:
00553 PCaselessString m_name;
00554 bool m_readOnly;
00555 MergeType m_merge;
00556 PCaselessString m_FMTPName;
00557 PString m_FMTPDefault;
00558 H245GenericInfo m_H245Generic;
00559 };
00560
00561 #ifndef __USE_STL__
00562 __inline istream & operator>>(istream & strm, bool& b)
00563 {
00564 int i;strm >> i;b = i; return strm;
00565 }
00566 #endif
00567
00568 template <typename T>
00569 class OpalMediaOptionValue : public OpalMediaOption
00570 {
00571 PCLASSINFO(OpalMediaOptionValue, OpalMediaOption);
00572 public:
00573 OpalMediaOptionValue(
00574 const char * name,
00575 bool readOnly,
00576 MergeType merge = MinMerge,
00577 T value = 0,
00578 T minimum = std::numeric_limits<T>::min(),
00579 T maximum = std::numeric_limits<T>::max()
00580 ) : OpalMediaOption(name, readOnly, merge),
00581 m_value(value),
00582 m_minimum(minimum),
00583 m_maximum(maximum)
00584 { }
00585
00586 virtual PObject * Clone() const
00587 {
00588 return new OpalMediaOptionValue(*this);
00589 }
00590
00591 virtual void PrintOn(ostream & strm) const
00592 {
00593 strm << m_value;
00594 }
00595
00596 virtual void ReadFrom(istream & strm)
00597 {
00598 T temp;
00599 strm >> temp;
00600 if (temp >= m_minimum && temp <= m_maximum)
00601 m_value = temp;
00602 else {
00603 #ifdef __USE_STL__
00604 strm.setstate(ios::badbit);
00605 #else
00606 strm.setf(ios::badbit , ios::badbit);
00607 #endif
00608 }
00609 }
00610
00611 virtual Comparison CompareValue(const OpalMediaOption & option) const {
00612 const OpalMediaOptionValue * otherOption = PDownCast(const OpalMediaOptionValue, &option);
00613 if (otherOption == NULL)
00614 return GreaterThan;
00615 if (m_value < otherOption->m_value)
00616 return LessThan;
00617 if (m_value > otherOption->m_value)
00618 return GreaterThan;
00619 return EqualTo;
00620 }
00621
00622 virtual void Assign(
00623 const OpalMediaOption & option
00624 ) {
00625 const OpalMediaOptionValue * otherOption = PDownCast(const OpalMediaOptionValue, &option);
00626 if (otherOption != NULL)
00627 m_value = otherOption->m_value;
00628 }
00629
00630 T GetValue() const { return m_value; }
00631 void SetValue(T value) { m_value = value; }
00632
00633 protected:
00634 T m_value;
00635 T m_minimum;
00636 T m_maximum;
00637 };
00638
00639
00640 typedef OpalMediaOptionValue<bool> OpalMediaOptionBoolean;
00641 typedef OpalMediaOptionValue<int> OpalMediaOptionInteger;
00642 typedef OpalMediaOptionValue<unsigned> OpalMediaOptionUnsigned;
00643 typedef OpalMediaOptionValue<double> OpalMediaOptionReal;
00644
00645
00646 class OpalMediaOptionEnum : public OpalMediaOption
00647 {
00648 PCLASSINFO(OpalMediaOptionEnum, OpalMediaOption);
00649 public:
00650 OpalMediaOptionEnum(
00651 const char * name,
00652 bool readOnly,
00653 const char * const * enumerations,
00654 PINDEX count,
00655 MergeType merge = EqualMerge,
00656 PINDEX value = 0
00657 );
00658
00659 virtual PObject * Clone() const;
00660 virtual void PrintOn(ostream & strm) const;
00661 virtual void ReadFrom(istream & strm);
00662
00663 virtual Comparison CompareValue(const OpalMediaOption & option) const;
00664 virtual void Assign(const OpalMediaOption & option);
00665
00666 PINDEX GetValue() const { return m_value; }
00667 void SetValue(PINDEX value);
00668
00669 protected:
00670 PStringArray m_enumerations;
00671 PINDEX m_value;
00672 };
00673
00674
00675 class OpalMediaOptionString : public OpalMediaOption
00676 {
00677 PCLASSINFO(OpalMediaOptionString, OpalMediaOption);
00678 public:
00679 OpalMediaOptionString(
00680 const char * name,
00681 bool readOnly
00682 );
00683 OpalMediaOptionString(
00684 const char * name,
00685 bool readOnly,
00686 const PString & value
00687 );
00688
00689 virtual PObject * Clone() const;
00690 virtual void PrintOn(ostream & strm) const;
00691 virtual void ReadFrom(istream & strm);
00692
00693 virtual Comparison CompareValue(const OpalMediaOption & option) const;
00694 virtual void Assign(const OpalMediaOption & option);
00695
00696 const PString & GetValue() const { return m_value; }
00697 void SetValue(const PString & value);
00698
00699 protected:
00700 PString m_value;
00701 };
00702
00703
00704 class OpalMediaOptionOctets : public OpalMediaOption
00705 {
00706 PCLASSINFO(OpalMediaOptionOctets, OpalMediaOption);
00707 public:
00708 OpalMediaOptionOctets(
00709 const char * name,
00710 bool readOnly,
00711 bool base64
00712 );
00713 OpalMediaOptionOctets(
00714 const char * name,
00715 bool readOnly,
00716 bool base64,
00717 const PBYTEArray & value
00718 );
00719 OpalMediaOptionOctets(
00720 const char * name,
00721 bool readOnly,
00722 bool base64,
00723 const BYTE * data,
00724 PINDEX length
00725 );
00726
00727 virtual PObject * Clone() const;
00728 virtual void PrintOn(ostream & strm) const;
00729 virtual void ReadFrom(istream & strm);
00730
00731 virtual Comparison CompareValue(const OpalMediaOption & option) const;
00732 virtual void Assign(const OpalMediaOption & option);
00733
00734 const PBYTEArray & GetValue() const { return m_value; }
00735 void SetValue(const PBYTEArray & value);
00736 void SetValue(const BYTE * data, PINDEX length);
00737
00738 protected:
00739 PBYTEArray m_value;
00740 bool m_base64;
00741 };
00742
00743
00745
00751 class OpalMediaFormat : public PCaselessString
00752 {
00753 friend class OpalPluginCodecManager;
00754 PCLASSINFO(OpalMediaFormat, PCaselessString);
00755
00756 public:
00759 OpalMediaFormat();
00760
00774 OpalMediaFormat(
00775 const char * fullName,
00776 unsigned defaultSessionID,
00777 RTP_DataFrame::PayloadTypes rtpPayloadType,
00778 const char * encodingName,
00779 BOOL needsJitter,
00780 unsigned bandwidth,
00781 PINDEX frameSize,
00782 unsigned frameTime,
00783 unsigned clockRate,
00784 time_t timeStamp = 0
00785 );
00786
00796 OpalMediaFormat(
00797 RTP_DataFrame::PayloadTypes rtpPayloadType,
00798 unsigned clockRate,
00799 const char * rtpEncodingName = NULL,
00800 const char * protocol = NULL
00801 );
00802
00816 OpalMediaFormat(
00817 const char * wildcard
00818 );
00819
00833 OpalMediaFormat(
00834 const PString & wildcard
00835 );
00836
00839 OpalMediaFormat(
00840 const OpalMediaFormat & mediaFormat
00841 );
00842
00847 virtual BOOL IsValid() const { return rtpPayloadType < RTP_DataFrame::IllegalPayloadType && !IsEmpty(); }
00848
00852 BOOL IsTransportable() const { return rtpPayloadType < RTP_DataFrame::MaxPayloadType && !rtpEncodingName.IsEmpty(); }
00853
00856 OpalMediaFormat & operator=(
00857 const OpalMediaFormat & fmt
00858 );
00859
00863 OpalMediaFormat & operator=(
00864 RTP_DataFrame::PayloadTypes rtpPayloadType
00865 );
00866
00870 OpalMediaFormat & operator=(
00871 const char * wildcard
00872 );
00873
00877 OpalMediaFormat & operator=(
00878 const PString & wildcard
00879 );
00880
00883 virtual PObject * Clone() const;
00884
00895 virtual bool Merge(
00896 const OpalMediaFormat & mediaFormat
00897 );
00898
00904 RTP_DataFrame::PayloadTypes GetPayloadType() const { return rtpPayloadType; }
00905
00908 const char * GetEncodingName() const { return rtpEncodingName; }
00909
00910 enum {
00911 DefaultAudioSessionID = 1,
00912 DefaultVideoSessionID = 2,
00913 DefaultDataSessionID = 3,
00914 DefaultH224SessionID = 4
00915 };
00916
00919 unsigned GetDefaultSessionID() const { return defaultSessionID; }
00920
00924 bool NeedsJitterBuffer() const { return GetOptionBoolean(NeedsJitterOption()); }
00925 static const PString & NeedsJitterOption();
00926
00929 unsigned GetBandwidth() const { return GetOptionInteger(MaxBitRateOption()); }
00930 static const PString & MaxBitRateOption();
00931
00936 PINDEX GetFrameSize() const { return GetOptionInteger(MaxFrameSizeOption()); }
00937 static const PString & MaxFrameSizeOption();
00938
00942 unsigned GetFrameTime() const { return GetOptionInteger(FrameTimeOption()); }
00943 static const PString & FrameTimeOption();
00944
00947 unsigned GetTimeUnits() const { return GetClockRate()/1000; }
00948
00949 enum StandardClockRate {
00950 AudioClockRate = 8000,
00951 VideoClockRate = 90000
00952 };
00953
00956 unsigned GetClockRate() const { return GetOptionInteger(ClockRateOption(), 1000); }
00957 static const PString & ClockRateOption();
00958
00961 PINDEX GetOptionCount() const { return options.GetSize(); }
00962
00966 const OpalMediaOption & GetOption(
00967 PINDEX index
00968 ) const { return options[index]; }
00969
00974 bool GetOptionValue(
00975 const PString & name,
00976 PString & value
00977 ) const;
00978
00985 bool SetOptionValue(
00986 const PString & name,
00987 const PString & value
00988 );
00989
00993 bool GetOptionBoolean(
00994 const PString & name,
00995 bool dflt = FALSE
00996 ) const;
00997
01004 bool SetOptionBoolean(
01005 const PString & name,
01006 bool value
01007 );
01008
01012 int GetOptionInteger(
01013 const PString & name,
01014 int dflt = 0
01015 ) const;
01016
01024 bool SetOptionInteger(
01025 const PString & name,
01026 int value
01027 );
01028
01032 double GetOptionReal(
01033 const PString & name,
01034 double dflt = 0
01035 ) const;
01036
01043 bool SetOptionReal(
01044 const PString & name,
01045 double value
01046 );
01047
01052 PINDEX GetOptionEnum(
01053 const PString & name,
01054 PINDEX dflt = 0
01055 ) const;
01056
01063 bool SetOptionEnum(
01064 const PString & name,
01065 PINDEX value
01066 );
01067
01071 PString GetOptionString(
01072 const PString & name,
01073 const PString & dflt = PString::Empty()
01074 ) const;
01075
01082 bool SetOptionString(
01083 const PString & name,
01084 const PString & value
01085 );
01086
01090 bool GetOptionOctets(
01091 const PString & name,
01092 PBYTEArray & octets
01093 ) const;
01094
01101 bool SetOptionOctets(
01102 const PString & name,
01103 const PBYTEArray & octets
01104 );
01105 bool SetOptionOctets(
01106 const PString & name,
01107 const BYTE * data,
01108 PINDEX length
01109 );
01110
01113 static OpalMediaFormatList GetAllRegisteredMediaFormats();
01114 static void GetAllRegisteredMediaFormats(
01115 OpalMediaFormatList & copy
01116 );
01117
01121 static bool SetRegisteredMediaFormat(
01122 const OpalMediaFormat & mediaFormat
01123 );
01124
01128 bool AddOption(
01129 OpalMediaOption * option,
01130 BOOL overwrite = FALSE
01131 );
01132
01136 bool HasOption(const PString & name) const
01137 { return FindOption(name) != NULL; }
01138
01143 OpalMediaOption * FindOption(
01144 const PString & name
01145 ) const;
01146
01152 virtual bool IsValidForProtocol(const PString & protocol) const;
01153
01154 virtual time_t GetCodecBaseTime() const;
01155
01156 virtual ostream & PrintOptions(ostream & strm) const;
01157
01158 protected:
01159 RTP_DataFrame::PayloadTypes rtpPayloadType;
01160 PString rtpEncodingName;
01161 unsigned defaultSessionID;
01162 PMutex media_format_mutex;
01163 PSortedList<OpalMediaOption> options;
01164 time_t codecBaseTime;
01165
01166 friend class OpalMediaFormatList;
01167 };
01168
01169
01170
01171
01172 #define OPAL_MEDIA_FORMAT(name, fullName, defaultSessionID, rtpPayloadType, encodingName, needsJitter, bandwidth, frameSize, frameTime, timeUnits) \
01173 const class name##_Class : public OpalMediaFormat \
01174 { \
01175 public: \
01176 name##_Class(); \
01177 } name; \
01178 name##_Class::name##_Class() \
01179 : OpalMediaFormat(fullName, defaultSessionID, rtpPayloadType, encodingName, needsJitter, bandwidth, frameSize, frameTime, timeUnits) \
01180
01181 #if OPAL_AUDIO
01182 class OpalAudioFormat : public OpalMediaFormat
01183 {
01184 friend class OpalPluginCodecManager;
01185 PCLASSINFO(OpalAudioFormat, OpalMediaFormat);
01186 public:
01187 OpalAudioFormat(
01188 const char * fullName,
01189 RTP_DataFrame::PayloadTypes rtpPayloadType,
01190 const char * encodingName,
01191 PINDEX frameSize,
01192 unsigned frameTime,
01193 unsigned rxFrames,
01194 unsigned txFrames,
01195 unsigned maxFrames = 256,
01196 unsigned clockRate = 8000,
01197 time_t timeStamp = 0
01198 );
01199
01200 static const PString & RxFramesPerPacketOption();
01201 static const PString & TxFramesPerPacketOption();
01202 };
01203 #endif
01204
01205 #if OPAL_VIDEO
01206 class OpalVideoFormat : public OpalMediaFormat
01207 {
01208 friend class OpalPluginCodecManager;
01209 PCLASSINFO(OpalVideoFormat, OpalMediaFormat);
01210 public:
01211 OpalVideoFormat(
01212 const char * fullName,
01213 RTP_DataFrame::PayloadTypes rtpPayloadType,
01214 const char * encodingName,
01215 unsigned frameWidth,
01216 unsigned frameHeight,
01217 unsigned frameRate,
01218 unsigned bitRate,
01219 time_t timeStamp = 0
01220 );
01221
01222 virtual PObject * Clone() const;
01223
01224 virtual bool Merge(const OpalMediaFormat & mediaFormat);
01225
01226 static const PString & FrameWidthOption();
01227 static const PString & FrameHeightOption();
01228 static const PString & EncodingQualityOption();
01229 static const PString & TargetBitRateOption();
01230 static const PString & DynamicVideoQualityOption();
01231 static const PString & AdaptivePacketDelayOption();
01232 };
01233 #endif
01234
01235
01236
01237 #define OPAL_PCM16 "PCM-16"
01238 #define OPAL_PCM16_16KHZ "PCM-16-16kHz"
01239 #define OPAL_L16_MONO_8KHZ "Linear-16-Mono-8kHz"
01240 #define OPAL_L16_MONO_16KHZ "Linear-16-Mono-16kHz"
01241 #define OPAL_G711_ULAW_64K "G.711-uLaw-64k"
01242 #define OPAL_G711_ALAW_64K "G.711-ALaw-64k"
01243 #define OPAL_G728 "G.728"
01244 #define OPAL_G729 "G.729"
01245 #define OPAL_G729A "G.729A"
01246 #define OPAL_G729B "G.729B"
01247 #define OPAL_G729AB "G.729A/B"
01248 #define OPAL_G7231 "G.723.1"
01249 #define OPAL_G7231_6k3 OPAL_G7231
01250 #define OPAL_G7231_5k3 "G.723.1(5.3k)"
01251 #define OPAL_G7231A_6k3 "G.723.1A(6.3k)"
01252 #define OPAL_G7231A_5k3 "G.723.1A(5.3k)"
01253 #define OPAL_GSM0610 "GSM-06.10"
01254 #define OPAL_RFC2833 "UserInput/RFC2833"
01255 #define OPAL_CISCONSE "NamedSignalEvent"
01256
01257 #if OPAL_AUDIO
01258 extern const OpalAudioFormat & GetOpalPCM16();
01259 extern const OpalAudioFormat & GetOpalPCM16_16KHZ();
01260 extern const OpalAudioFormat & GetOpalL16_MONO_8KHZ();
01261 extern const OpalAudioFormat & GetOpalL16_MONO_16KHZ();
01262 extern const OpalAudioFormat & GetOpalG711_ULAW_64K();
01263 extern const OpalAudioFormat & GetOpalG711_ALAW_64K();
01264 extern const OpalAudioFormat & GetOpalG728();
01265 extern const OpalAudioFormat & GetOpalG729();
01266 extern const OpalAudioFormat & GetOpalG729A();
01267 extern const OpalAudioFormat & GetOpalG729B();
01268 extern const OpalAudioFormat & GetOpalG729AB();
01269 extern const OpalAudioFormat & GetOpalG7231_6k3();
01270 extern const OpalAudioFormat & GetOpalG7231_5k3();
01271 extern const OpalAudioFormat & GetOpalG7231A_6k3();
01272 extern const OpalAudioFormat & GetOpalG7231A_5k3();
01273 extern const OpalAudioFormat & GetOpalGSM0610();
01274 #endif
01275
01276 extern const OpalMediaFormat & GetOpalRFC2833();
01277 extern const OpalMediaFormat & GetOpalCiscoNSE();
01278
01279 #define OpalPCM16 GetOpalPCM16()
01280 #define OpalPCM16_16KHZ GetOpalPCM16_16KHZ()
01281 #define OpalL16_MONO_8KHZ GetOpalL16_MONO_8KHZ()
01282 #define OpalL16_MONO_16KHZ GetOpalL16_MONO_16KHZ()
01283 #define OpalG711_ULAW_64K GetOpalG711_ULAW_64K()
01284 #define OpalG711_ALAW_64K GetOpalG711_ALAW_64K()
01285 #define OpalG728 GetOpalG728()
01286 #define OpalG729 GetOpalG729()
01287 #define OpalG729A GetOpalG729A()
01288 #define OpalG729B GetOpalG729B()
01289 #define OpalG729AB GetOpalG729AB()
01290 #define OpalG7231_6k3 GetOpalG7231_6k3()
01291 #define OpalG7231_5k3 GetOpalG7231_5k3()
01292 #define OpalG7231A_6k3 GetOpalG7231A_6k3()
01293 #define OpalG7231A_5k3 GetOpalG7231A_5k3()
01294 #define OpalGSM0610 GetOpalGSM0610()
01295 #define OpalRFC2833 GetOpalRFC2833()
01296 #define OpalCiscoNSE GetOpalCiscoNSE()
01297
01298 #define OpalL16Mono8kHz OpalL16_MONO_8KHZ
01299 #define OpalL16Mono16kHz OpalL16_MONO_16KHZ
01300 #define OpalG711uLaw OpalG711_ULAW_64K
01301 #define OpalG711ALaw OpalG711_ALAW_64K
01302
01303
01304 #ifdef _MSC_VER
01305 #if _MSC_VER < 1300
01306 #pragma warning(default:4663)
01307 #endif
01308 #endif
01309
01310 #endif // __OPAL_MEDIAFMT_H
01311
01312
01313