OPAL  Version 3.18.8
mediafmt.h
Go to the documentation of this file.
1 /*
2  * mediafmt.h
3  *
4  * Media Format descriptions
5  *
6  * Open Phone Abstraction Library (OPAL)
7  * Formally known as the Open H323 project.
8  *
9  * Copyright (c) 2001 Equivalence Pty. Ltd.
10  *
11  * The contents of this file are subject to the Mozilla Public License
12  * Version 1.0 (the "License"); you may not use this file except in
13  * compliance with the License. You may obtain a copy of the License at
14  * http://www.mozilla.org/MPL/
15  *
16  * Software distributed under the License is distributed on an "AS IS"
17  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
18  * the License for the specific language governing rights and limitations
19  * under the License.
20  *
21  * The Original Code is Open H323 Library.
22  *
23  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
24  *
25  * Contributor(s): ______________________________________.
26  */
27 
28 #ifndef OPAL_OPAL_MEDIAFMT_H
29 #define OPAL_OPAL_MEDIAFMT_H
30 
31 #ifdef P_USE_PRAGMA
32 #pragma interface
33 #endif
34 
35 #include <opal_config.h>
36 
37 #include <opal/mediatype.h>
38 #include <rtp/rtp.h>
39 #include <ptlib/bitwise_enum.h>
40 
41 #if OPAL_VIDEO
42 #include <ptlib/videoio.h>
43 #endif
44 
45 #include <limits>
46 
47 
49 class OpalMediaFormat;
50 class H225_BandWidth;
51 class PASN_Integer;
52 
53 
55 
60 class OpalBandwidth : public PObject
61 {
62  PCLASSINFO(OpalBandwidth, PObject)
63  public:
64  enum Direction {
65  Rx = 1,
66  Tx,
69  };
70  friend std::ostream & operator<<(std::ostream & strm, OpalBandwidth::Direction dir);
71 
72  typedef unsigned int_type;
73 
74  __inline OpalBandwidth(int_type bps = 0) : m_bps(bps) { }
75  __inline OpalBandwidth & operator=(int_type bps) { m_bps = bps; return *this; }
76  __inline operator int_type() const { return m_bps; }
77 
78  OpalBandwidth(const PString & str);
79 
80  __inline OpalBandwidth operator+ (const OpalBandwidth & bw) const { return OpalBandwidth(m_bps + bw.m_bps); }
81  __inline OpalBandwidth operator- (const OpalBandwidth & bw) const { return OpalBandwidth(m_bps - bw.m_bps); }
82  __inline OpalBandwidth & operator+=(const OpalBandwidth & bw) { m_bps += bw.m_bps; return *this; }
83  __inline OpalBandwidth & operator-=(const OpalBandwidth & bw) { m_bps += bw.m_bps; return *this; }
84  __inline OpalBandwidth & operator&=(const OpalBandwidth & bw) { if (m_bps > bw.m_bps) m_bps = bw.m_bps; return *this; }
85 
86  virtual Comparison Compare(const PObject & other) const;
87  virtual void PrintOn(std::ostream & strm) const;
88  virtual void ReadFrom(std::istream & strm);
89 
90 #if OPAL_H323
91  OpalBandwidth(const H225_BandWidth & bw);
92  OpalBandwidth & operator=(const H225_BandWidth & bw);
93  void SetH225(H225_BandWidth & bw) const;
94  void SetH245(PASN_Integer & bitRate) const;
95  void FromH245(const PASN_Integer & bitRate);
96 #endif
97  unsigned kbps() const { return (m_bps+999)/1000; }
98 
99  static OpalBandwidth Max() { return OpalBandwidth(UINT_MAX); }
100 
101  protected:
103 };
104 
105 
107 
108 PLIST(OpalMediaFormatBaseList, OpalMediaFormat);
109 
112 class OpalMediaFormatList : public OpalMediaFormatBaseList
113 {
114  PCLASSINFO(OpalMediaFormatList, OpalMediaFormatBaseList);
115  public:
121 
125  const OpalMediaFormat & format
126  );
127 
130  OpalMediaFormatList(const OpalMediaFormatList & l) : OpalMediaFormatBaseList(l) { }
132 
139  const char * wildcard
140  ) { PConstString w(wildcard); return operator+=(w); }
141 
146  const PString & wildcard
147  );
148 
153  const OpalMediaFormat & format
154  );
155 
160  const OpalMediaFormatList & formats
161  );
162 
167  const OpalMediaFormat & format
168  );
169 
174  const OpalMediaFormatList & formats
175  );
176 
193  const_iterator FindFormat(
194  RTP_DataFrame::PayloadTypes rtpPayloadType,
195  const unsigned clockRate = 0,
196  const char * rtpEncodingName = NULL,
197  const char * protocol = NULL,
198  const_iterator start = const_iterator()
199  ) const;
200 
217  const_iterator FindFormat(
218  const PString & wildcard,
219  const_iterator start = const_iterator()
220  ) const;
221 
224  PBoolean HasFormat(
225  RTP_DataFrame::PayloadTypes rtpPayloadType
226  ) const { return FindFormat(rtpPayloadType) != end(); }
227 
233  PBoolean HasFormat(
234  const PString & wildcard
235  ) const { return FindFormat(wildcard) != end(); }
236 
239  bool HasType(
240  const OpalMediaType & type,
241  bool mustBeTransportable = true
242  ) const;
243 
247 
263  void Reorder(
264  const PStringArray & order
265  );
266 
285  void Remove(
286  const PStringArray & mask
287  );
288 
291  void RemoveNonTransportable();
292 
299  void OptimisePayloadTypes();
301 
302  private:
303  virtual PINDEX Append(PObject *) { return P_MAX_INDEX; }
304  virtual PINDEX Insert(const PObject &, PObject *) { return P_MAX_INDEX; }
305 };
306 
307 
309 
312 class OpalMediaOption : public PObject
313 {
314  PCLASSINFO(OpalMediaOption, PObject);
315  public:
316  // Note the below enum must be identical to PluginCodec_OptionMerge in opalplugin.h
317  enum MergeType {
325  IntersectionMerge, // Set intersection, applies to numeric (bit wise AND) or string (common substrings)
326 
327  // Synonyms
328  AndMerge = MinMerge, // Applies to Boolean option or Enum with two elements
329  OrMerge = MaxMerge // Applies to Boolean option or Enum with two elements
330  };
331 
332  protected:
334  const PString & name
335  );
337  const char * name,
338  bool readOnly,
339  MergeType merge
340  );
341 
342  public:
343  virtual Comparison Compare(const PObject & obj) const;
344 
345  virtual bool Merge(
346  const OpalMediaOption & option
347  );
348 
349  virtual bool ValidateMerge(
350  const OpalMediaOption & option
351  ) const;
352 
353  virtual Comparison CompareValue(
354  const OpalMediaOption & option
355  ) const = 0;
356  virtual void Assign(
357  const OpalMediaOption & option
358  ) = 0;
359 
360  PString AsString() const;
361  bool FromString(const PString & value);
362 
363  const PString & GetName() const { return m_name; }
364 
365  bool IsReadOnly() const { return m_readOnly; }
366  void SetReadOnly(bool readOnly) { m_readOnly = readOnly; }
367 
368  MergeType GetMerge() const { return m_merge; }
369  void SetMerge(MergeType merge) { m_merge = merge; }
370 
371 #if OPAL_SDP
372  const PString & GetFMTPName() const { return m_FMTPName; }
373  void SetFMTPName(const char * name) { m_FMTPName = name; }
374 
375  const PString & GetFMTPDefault() const { return m_FMTPDefault; }
376  void SetFMTPDefault(const char * value) { m_FMTPDefault = value; }
377 
378  void SetFMTP(const char * name, const char * dflt)
379  {
380  m_FMTPName = name;
381  m_FMTPDefault = dflt;
382  }
383 #define OPAL_SET_MEDIA_OPTION_FMTP(opt, name, dflt) (opt)->SetFMTP(name, dflt)
384 #else
385 #define OPAL_SET_MEDIA_OPTION_FMTP(opt, name, dflt)
386 #endif // OPAL_SDP
387 
388 #if OPAL_H323
390  H245GenericInfo();
392  unsigned mask,
393  const char * dflt = NULL
394  );
395 
396  unsigned ordinal;
397 
398  enum Modes {
402  } mode;
403 
408  } integerType;
409 
413  int position; // Position in sequence for parameter
414  PString defaultValue; // Do not include parameter if this value
415  };
416 
417  const H245GenericInfo & GetH245Generic() const { return m_H245Generic; }
418  void SetH245Generic(const H245GenericInfo & genericInfo) { m_H245Generic = genericInfo; }
419 #define OPAL_SET_MEDIA_OPTION_H245(opt, ...) (opt)->SetH245Generic(OpalMediaOption::H245GenericInfo(__VA_ARGS__))
420 #else
421 #define OPAL_SET_MEDIA_OPTION_H245(opt, ...)
422 #endif // OPAL_H323
423 
424  protected:
425  PCaselessString m_name;
428 
429 #if OPAL_SDP
430  PCaselessString m_FMTPName;
431  PString m_FMTPDefault;
432 #endif // OPAL_SDP
433 
434 #if OPAL_H323
436 #endif // OPAL_H323
437 };
438 
439 
440 template <typename T>
442 {
444  public:
446  const char * name,
447  bool readOnly,
449  T value = T()
450  )
451  : OpalMediaOption(name, readOnly, merge)
452  , m_value(value)
453  {
454  }
455 
456  virtual PObject * Clone() const
457  {
458  return new OpalMediaOptionValue(*this);
459  }
460 
461  virtual void PrintOn(ostream & strm) const
462  {
463  strm << m_value;
464  }
465 
466  virtual void ReadFrom(istream & strm)
467  {
468  strm >> m_value;
469  }
470 
471  virtual bool Merge(const OpalMediaOption & option)
472  {
473  if (m_merge != IntersectionMerge)
474  return OpalMediaOption::Merge(option);
475 
476  const OpalMediaOptionValue * otherOption = PDownCast(const OpalMediaOptionValue, &option);
477  if (otherOption == NULL)
478  return false;
479 
480  m_value &= otherOption->m_value;
481  return true;
482  }
483 
484  virtual Comparison CompareValue(const OpalMediaOption & option) const
485  {
486  const OpalMediaOptionValue * otherOption = PDownCast(const OpalMediaOptionValue, &option);
487  if (otherOption == NULL)
488  return GreaterThan;
489  if (m_value < otherOption->m_value)
490  return LessThan;
491  if (m_value > otherOption->m_value)
492  return GreaterThan;
493  return EqualTo;
494  }
495 
496  virtual void Assign(const OpalMediaOption & option)
497  {
498  const OpalMediaOptionValue * otherOption = PDownCast(const OpalMediaOptionValue, &option);
499  if (otherOption != NULL)
500  m_value = otherOption->m_value;
501  }
502 
503  T GetValue() const
504  {
505  return m_value;
506  }
507 
508  void SetValue(T value)
509  {
510  m_value = value;
511  }
512 
513  protected:
515 };
516 
517 
518 template <typename T>
520 {
523  public:
525  const char * name,
526  bool readOnly,
528  T value = 0,
529  T minimum = std::numeric_limits<T>::min(),
530  T maximum = std::numeric_limits<T>::max()
531  )
532  : BaseClass(name, readOnly, merge, value)
533  , m_minimum(minimum)
534  , m_maximum(maximum)
535  {
536  }
537 
538  virtual PObject * Clone() const
539  {
540  return new OpalMediaOptionNumericalValue(*this);
541  }
542 
543  virtual void ReadFrom(istream & strm)
544  {
545  T temp = 0;
546  strm >> temp;
547  if (strm.fail())
548  return;
549  if (temp >= m_minimum && temp <= m_maximum)
550  this->m_value = temp;
551  else
552  strm.setstate(ios::badbit);
553  }
554 
555  void SetValue(T value)
556  {
557  if (value < m_minimum)
558  this->m_value = m_minimum;
559  else if (value > m_maximum)
560  this->m_value = m_maximum;
561  else
562  this->m_value = value;
563  }
564 
565  void SetMinimum(T m)
566  {
567  this->m_minimum = m;
568  }
569 
570  void SetMaximum(T m)
571  {
572  this->m_maximum = m;
573  }
574 
575  protected:
578 };
579 
580 
584 
585 // Wrapper class so we can implement intersection (&= operator) for floating point
587 {
588  double m_value;
589  public:
590  OpalMediaOptionRealValue(double value = 0) : m_value(value) { }
591  operator double() const { return m_value; }
592  void operator&=(double other) { if (m_value > other) m_value = other; }
593  friend ostream & operator<<(ostream & strm, const OpalMediaOptionRealValue & value) { return strm << value.m_value; }
594  friend istream & operator>>(istream & strm, OpalMediaOptionRealValue & value) { return strm >> value.m_value; }
595 };
596 
598 
599 
601 {
603  public:
605  const char * name,
606  bool readOnly
607  );
609  const char * name,
610  bool readOnly,
611  const char * const * enumerations,
612  PINDEX count,
613  MergeType merge = EqualMerge,
614  PINDEX value = 0
615  );
616 
617  virtual PObject * Clone() const;
618  virtual void PrintOn(ostream & strm) const;
619  virtual void ReadFrom(istream & strm);
620 
621  virtual bool Merge(const OpalMediaOption & option);
622  virtual Comparison CompareValue(const OpalMediaOption & option) const;
623  virtual void Assign(const OpalMediaOption & option);
624 
625  PINDEX GetValue() const { return m_value; }
626  void SetValue(PINDEX value);
627 
628  const PStringArray & GetEnumerations() const { return m_enumerations; }
629  void SetEnumerations(const PStringArray & e)
630  {
631  m_enumerations = e;
632  }
633 
634  protected:
635  PStringArray m_enumerations;
636  PINDEX m_value;
637 };
638 
639 
641 {
643  public:
645  const char * name,
646  bool readOnly
647  );
649  const char * name,
650  bool readOnly,
651  const PString & value
652  );
653 
654  virtual PObject * Clone() const;
655  virtual void PrintOn(ostream & strm) const;
656  virtual void ReadFrom(istream & strm);
657 
658  virtual bool Merge(const OpalMediaOption & option);
659  virtual Comparison CompareValue(const OpalMediaOption & option) const;
660  virtual void Assign(const OpalMediaOption & option);
661 
662  const PString & GetValue() const { return m_value; }
663  void SetValue(const PString & value);
664 
665  protected:
666  PString m_value;
667 };
668 
669 
671 {
673  public:
675  const char * name,
676  bool readOnly,
677  bool base64 = false
678  );
680  const char * name,
681  bool readOnly,
682  bool base64,
683  const PBYTEArray & value
684  );
686  const char * name,
687  bool readOnly,
688  bool base64,
689  const BYTE * data,
690  PINDEX length
691  );
692 
693  virtual PObject * Clone() const;
694  virtual void PrintOn(ostream & strm) const;
695  virtual void ReadFrom(istream & strm);
696 
697  virtual Comparison CompareValue(const OpalMediaOption & option) const;
698  virtual void Assign(const OpalMediaOption & option);
699 
700  const PBYTEArray & GetValue() const { return m_value; }
701  void SetValue(const PBYTEArray & value);
702  void SetValue(const BYTE * data, PINDEX length);
703 
704  void SetBase64(bool b)
705  {
706  m_base64 = b;
707  }
708 
709  protected:
710  PBYTEArray m_value;
711  bool m_base64;
712 };
713 
714 
716 
717 class OpalMediaFormatInternal : public PObject
718 {
719  PCLASSINFO(OpalMediaFormatInternal, PObject);
720  public:
722  const char * fullName,
723  const OpalMediaType & mediaType,
724  RTP_DataFrame::PayloadTypes rtpPayloadType,
725  const char * encodingName,
726  bool needsJitter,
727  OpalBandwidth bandwidth,
728  PINDEX frameSize,
729  unsigned frameTime,
730  unsigned clockRate,
731  time_t timeStamp = 0,
732  bool allowMultiple = false
733  );
734 
735  const PCaselessString & GetName() const { return formatName; }
736 
737  virtual PObject * Clone() const;
738  virtual void PrintOn(ostream & strm) const;
739 
740  virtual bool IsValid() const;
741  virtual bool IsTransportable() const;
742 
743  virtual PStringToString GetOptions() const;
744  virtual bool GetOptionValue(const PString & name, PString & value) const;
745  virtual bool SetOptionValue(const PString & name, const PString & value);
746  virtual bool GetOptionBoolean(const PString & name, bool dflt) const;
747  virtual bool SetOptionBoolean(const PString & name, bool value);
748  virtual int GetOptionInteger(const PString & name, int dflt) const;
749  virtual bool SetOptionInteger(const PString & name, int value);
750  virtual double GetOptionReal(const PString & name, double dflt) const;
751  virtual bool SetOptionReal(const PString & name, double value);
752  virtual PINDEX GetOptionEnum(const PString & name, PINDEX dflt) const;
753  virtual bool SetOptionEnum(const PString & name, PINDEX value);
754  virtual PString GetOptionString(const PString & name, const PString & dflt) const;
755  virtual bool SetOptionString(const PString & name, const PString & value);
756  virtual bool GetOptionOctets(const PString & name, PBYTEArray & octets) const;
757  virtual bool SetOptionOctets(const PString & name, const PBYTEArray & octets);
758  virtual bool SetOptionOctets(const PString & name, const BYTE * data, PINDEX length);
759  virtual bool AddOption(OpalMediaOption * option, PBoolean overwrite = false);
760  virtual OpalMediaOption * FindOption(const PString & name) const;
761 
762  virtual bool ToNormalisedOptions();
763  virtual bool ToCustomisedOptions();
764  virtual bool Merge(const OpalMediaFormatInternal & mediaFormat);
765 
766  virtual bool ValidateMerge(const OpalMediaFormatInternal & mediaFormat) const;
767 
768  virtual bool IsValidForProtocol(const PString & protocol) const;
769 
771 
772  protected:
773  bool AdjustByOptionMaps(
774  PTRACE_PARAM(const char * operation,)
775  bool (*adjuster)(PluginCodec_OptionMap & original, PluginCodec_OptionMap & changed)
776  );
777 
778  PCaselessString formatName;
780  PCaselessString rtpEncodingName;
782  PDECLARE_MUTEX( m_mutex, OpalMediaFormatInternal, 1000);
783  PSortedList<OpalMediaOption> options;
787 
788  friend bool operator==(const char * other, const OpalMediaFormat & fmt);
789  friend bool operator!=(const char * other, const OpalMediaFormat & fmt);
790  friend bool operator==(const PString & other, const OpalMediaFormat & fmt);
791  friend bool operator!=(const PString & other, const OpalMediaFormat & fmt);
792 
793  friend class OpalMediaFormat;
794  friend class OpalMediaFormatList;
796 };
797 
798 
800 
806 class OpalMediaFormat : public PContainer
807 {
808  PCLASSINFO(OpalMediaFormat, PContainer)
809  public:
810  OpalMediaFormat(const OpalMediaFormat & c);
811  virtual ~OpalMediaFormat();
812  OpalMediaFormat & operator=(const OpalMediaFormat & c) { AssignContents(c); return *this; }
813  virtual PBoolean MakeUnique();
814  protected:
815  virtual void DestroyContents();
816  virtual void AssignContents(const PContainer & c);
817 
818  public:
820 
823  explicit OpalMediaFormat(
824  Internal * info = NULL,
825  bool dynamic = false
826  );
827 
842  const char * fullName,
843  const OpalMediaType & mediaType,
844  RTP_DataFrame::PayloadTypes rtpPayloadType,
845  const char * encodingName,
846  PBoolean needsJitter,
847  OpalBandwidth bandwidth,
848  PINDEX frameSize,
849  unsigned frameTime,
850  unsigned clockRate,
851  time_t timeStamp = 0,
852  bool allowMultiple = false
853  );
854 
865  RTP_DataFrame::PayloadTypes rtpPayloadType,
866  unsigned clockRate,
867  const char * rtpEncodingName = NULL,
868  const char * protocol = NULL
869  );
870 
885  const char * wildcard
886  );
887 
902  const PString & wildcard
903  );
904 
909  RTP_DataFrame::PayloadTypes rtpPayloadType
910  );
911 
916  const char * wildcard
917  );
918 
923  const PString & wildcard
924  );
925 
928  virtual PObject * Clone() const;
929 
932  virtual Comparison Compare(const PObject & obj) const;
933 
938  virtual void PrintOn(ostream & strm) const;
939 
942  virtual void ReadFrom(istream & strm);
943 
948  bool ToNormalisedOptions();
949 
953  bool ToCustomisedOptions();
954 
957  bool Update(
958  const OpalMediaFormat & mediaFormat
959  );
960 
971  bool Merge(
972  const OpalMediaFormat & mediaFormat,
973  bool copyPayloadType = false
974  );
977  bool ValidateMerge(
978  const OpalMediaFormat & mediaFormat
979  ) const;
980 
983  PString GetName() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? "" : m_info->formatName; }
984 
987  PString GetDescription() const { return GetOptionString(DescriptionOption()); }
988  static const PString & DescriptionOption();
989 
994  PBoolean IsValid() const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->IsValid(); }
995 
999  PBoolean IsTransportable() const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->IsTransportable(); }
1000 
1007  void SetPayloadType(RTP_DataFrame::PayloadTypes type) { PWaitAndSignal m(m_mutex); MakeUnique(); if (m_info != NULL) m_info->rtpPayloadType = type; }
1008 
1011  const char * GetEncodingName() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? "" : (const char *)m_info->rtpEncodingName; }
1012 
1015  OpalMediaType GetMediaType() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? OpalMediaType() : m_info->mediaType; }
1016 
1020  bool IsMediaType(const OpalMediaType & mediaType) const;
1021 
1026  static const PString & NeedsJitterOption();
1027 
1031  static const PString & MaxBitRateOption();
1032 
1036  static const PString & TargetBitRateOption();
1037 
1042  PINDEX GetFrameSize() const { return GetOptionInteger(MaxFrameSizeOption()); }
1043  static const PString & MaxFrameSizeOption();
1044 
1048  unsigned GetFrameTime() const { return GetOptionInteger(FrameTimeOption()); }
1049  static const PString & FrameTimeOption();
1050 
1053  unsigned GetTimeUnits() const { return GetClockRate()/1000; }
1054 
1058  };
1059 
1063  static const PString & ClockRateOption();
1064 
1067  static const PString & ProtocolOption();
1068 
1075  static const PString & MaxTxPacketSizeOption();
1076 
1079  RTCPFeedback,
1080  8,
1081  (
1082  e_NoRTCPFb,
1083  e_PLI,
1084  e_FIR,
1085  e_TMMBR,
1086  e_TSTR,
1087  e_VBCM,
1088  e_NACK,
1089  e_SLI,
1090  e_REMB
1091  ),
1092  "", "pli", "fir", "tmmbr", "tstr", "vcbm", "nack", "sli", "remb"
1093  );
1095  static const PString & RTCPFeedbackOption();
1096 
1100  PStringToString GetOptions() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? PStringToString() : m_info->GetOptions(); }
1101 
1104  PINDEX GetOptionCount() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? 0 : m_info->options.GetSize(); }
1105 
1110  PINDEX index
1111  ) const { PWaitAndSignal m(m_mutex); return m_info->options[index]; }
1112 
1118  const PString & name,
1119  PString & value
1120  ) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->GetOptionValue(name, value); }
1121 
1129  const PString & name,
1130  const PString & value
1131  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionValue(name, value); }
1132 
1137  const PString & name,
1138  bool dflt = false
1139  ) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->GetOptionBoolean(name, dflt); }
1140 
1148  const PString & name,
1149  bool value
1150  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionBoolean(name, value); }
1151 
1156  const PString & name,
1157  int dflt = 0
1158  ) const { PWaitAndSignal m(m_mutex); return m_info == NULL ? dflt : m_info->GetOptionInteger(name, dflt); }
1159 
1168  const PString & name,
1169  int value
1170  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionInteger(name, value); }
1171 
1176  const PString & name,
1178  ) const { PWaitAndSignal m(m_mutex); return m_info == NULL ? dflt : (RTP_DataFrame::PayloadTypes)m_info->GetOptionInteger(name, dflt); }
1179 
1184  const PString & name,
1185  double dflt = 0
1186  ) const { PWaitAndSignal m(m_mutex); return m_info == NULL ? dflt : m_info->GetOptionReal(name, dflt); }
1187 
1195  const PString & name,
1196  double value
1197  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionReal(name, value); }
1198 
1206  template <typename Enum>
1208  const PString & name,
1209  Enum dflt = (Enum)0
1210  ) const { PWaitAndSignal m(m_mutex); return m_info == NULL ? dflt : (Enum)m_info->GetOptionEnum(name, dflt); }
1211 
1221  template <typename Enum>
1223  const PString & name,
1224  Enum value
1225  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionEnum(name, value); }
1226 
1231  const PString & name,
1232  const PString & dflt = PString::Empty()
1233  ) const { PWaitAndSignal m(m_mutex); return m_info == NULL ? dflt : m_info->GetOptionString(name, dflt); }
1234 
1242  const PString & name,
1243  const PString & value
1244  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionString(name, value); }
1245 
1250  const PString & name,
1251  PBYTEArray & octets
1252  ) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->GetOptionOctets(name, octets); }
1253 
1261  const PString & name,
1262  const PBYTEArray & octets
1263  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionOctets(name, octets); }
1265  const PString & name,
1266  const BYTE * data,
1267  PINDEX length
1268  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionOctets(name, data, length); }
1269 
1273  static void GetAllRegisteredMediaFormats(
1274  OpalMediaFormatList & copy
1275  );
1276 
1283  static bool RegisterKnownMediaFormats(
1284  const PString & name = PString::Empty()
1285  );
1286 
1290  static bool SetRegisteredMediaFormat(
1291  const OpalMediaFormat & mediaFormat
1292  );
1293 
1297  static bool RemoveRegisteredMediaFormats(
1298  const PString & wildcard
1299  );
1300 
1305  OpalMediaOption * option,
1306  PBoolean overwrite = false
1307  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->AddOption(option, overwrite); }
1308 
1312  bool HasOption(const PString & name) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->FindOption(name) != NULL; }
1313 
1318  const PString & name
1319  ) const { PWaitAndSignal m(m_mutex); return m_info == NULL ? NULL : m_info->FindOption(name); }
1320 
1324  template <class T> T * FindOptionAs(
1325  const PString & name
1326  ) const { return dynamic_cast<T *>(FindOption(name)); }
1327 
1333  bool IsValidForProtocol(const PString & protocol) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->IsValidForProtocol(protocol); }
1334 
1335  time_t GetCodecVersionTime() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? 0 : m_info->codecVersionTime; }
1336 
1337  ostream & PrintOptions(ostream & strm) const
1338  {
1339  PWaitAndSignal m(m_mutex);
1340  if (m_info != NULL)
1341  strm << setw(-1) << *m_info;
1342  return strm;
1343  }
1344 
1345 #if OPAL_VIDEO
1346 
1348  void AdjustVideoArgs(
1349  PVideoDevice::OpenArgs & args
1350  ) const;
1351 #endif
1352 
1353  // Backward compatibility
1354  virtual PBoolean IsEmpty() const { PWaitAndSignal m(m_mutex); return m_info == NULL || !m_info->IsValid(); }
1355  operator PString() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? "" : m_info->formatName; }
1356  operator const char *() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? "" : m_info->formatName; }
1357  bool operator==(const char * other) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->formatName == other; }
1358  bool operator!=(const char * other) const { PWaitAndSignal m(m_mutex); return m_info == NULL || m_info->formatName != other; }
1359  bool operator==(const PString & other) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->formatName == other; }
1360  bool operator!=(const PString & other) const { PWaitAndSignal m(m_mutex); return m_info == NULL || m_info->formatName != other; }
1361  bool operator==(const OpalMediaFormat & other) const { PWaitAndSignal m(m_mutex); return Compare(other) == EqualTo; }
1362  bool operator!=(const OpalMediaFormat & other) const { PWaitAndSignal m(m_mutex); return Compare(other) != EqualTo; }
1363  friend bool operator==(const char * other, const OpalMediaFormat & fmt) { return fmt.m_info != NULL && fmt.m_info->formatName == other; }
1364  friend bool operator!=(const char * other, const OpalMediaFormat & fmt) { return fmt.m_info == NULL || fmt.m_info->formatName != other; }
1365  friend bool operator==(const PString & other, const OpalMediaFormat & fmt) { return fmt.m_info != NULL && fmt.m_info->formatName == other; }
1366  friend bool operator!=(const PString & other, const OpalMediaFormat & fmt) { return fmt.m_info == NULL || fmt.m_info->formatName != other; }
1367 
1368 #if OPAL_H323
1369  static const PString & MediaPacketizationOption();
1370  static const PString & MediaPacketizationsOption();
1371  PStringArray GetMediaPacketizations() const;
1372  PStringSet GetMediaPacketizationSet() const { return PStringSet(GetMediaPacketizations()); }
1373  void SetMediaPacketizations(const PStringSet & packetizations);
1374 #endif
1375 
1376  private:
1377  PBoolean SetSize(PINDEX) { return true; }
1378 
1379  protected:
1380  void Construct(OpalMediaFormatInternal * info);
1381 
1383  PDECLARE_MUTEX(m_mutex, OpalMediaFormat, 1000);
1385 
1387  friend class OpalMediaFormatList;
1388  friend class OpalAudioFormat;
1389  friend class OpalVideoFormat;
1390 };
1391 
1392 
1394 
1396 {
1397  PCLASSINFO(OpalAudioFormat, OpalMediaFormat);
1398  public:
1400  explicit OpalAudioFormat(
1401  Internal * info = NULL,
1402  bool dynamic = false
1403  );
1405  const char * fullName
1406  ) : OpalMediaFormat(fullName) { }
1408  const char * fullName,
1409  RTP_DataFrame::PayloadTypes rtpPayloadType,
1410  const char * encodingName,
1411  PINDEX frameSize,
1412  unsigned frameTime,
1413  unsigned rxFrames,
1414  unsigned txFrames,
1415  unsigned maxFrames = 256,
1416  unsigned clockRate = 8000,
1417  time_t timeStamp = 0,
1418  unsigned channels = 1
1419  );
1420 
1421  OpalAudioFormat & operator=(const OpalMediaFormat & other);
1422 
1423  static const PString & RxFramesPerPacketOption();
1424  static const PString & TxFramesPerPacketOption();
1425  static const PString & MaxFramesPerPacketOption();
1426  static const PString & ChannelsOption();
1427 #if OPAL_SDP
1428  static const PString & MinPacketTimeOption();
1429  static const PString & MaxPacketTimeOption();
1430  static const PString & SilenceSuppressionOption();
1431 #endif
1432 
1433  P_DECLARE_BITWISE_ENUM(FrameType, 3, (
1434  e_UnknownFrameType,
1435  e_NormalFrame,
1436  e_SilenceFrame,
1437  e_FECFrame
1438  ));
1439 
1441  {
1442  protected:
1444  public:
1445  virtual ~FrameDetector() { }
1446  virtual FrameType GetFrameType(const BYTE * rtp, PINDEX size, unsigned sampleRate) = 0;
1447  };
1448  typedef PAutoPtr<FrameDetector> FrameDetectorPtr;
1449  typedef PFactory<FrameDetector, PCaselessString> FrameDetectFactory;
1450 
1451  FrameType GetFrameType(const BYTE * payloadPtr, PINDEX payloadSize, FrameDetectorPtr & detector) const;
1452 };
1453 
1455 {
1456  public:
1458  const char * fullName,
1459  RTP_DataFrame::PayloadTypes rtpPayloadType,
1460  const char * encodingName,
1461  PINDEX frameSize,
1462  unsigned frameTime,
1463  unsigned rxFrames,
1464  unsigned txFrames,
1465  unsigned maxFrames,
1466  unsigned clockRate,
1467  time_t timeStamp = 0,
1468  unsigned channels = 1
1469  );
1470  virtual PObject * Clone() const;
1471  virtual bool Merge(const OpalMediaFormatInternal & mediaFormat);
1472 
1473  virtual OpalAudioFormat::FrameType GetFrameType(const BYTE * payloadPtr, PINDEX payloadSize, OpalAudioFormat::FrameDetectorPtr & detector) const;
1474 };
1475 
1476 
1477 #if OPAL_VIDEO
1478 
1480 
1482 {
1483  PCLASSINFO(OpalVideoFormat, OpalMediaFormat);
1484  public:
1486  explicit OpalVideoFormat(
1487  Internal * info = NULL,
1488  bool dynamic = false
1489  );
1491  const char * fullName
1492  ) : OpalMediaFormat(fullName) { }
1494  const char * fullName,
1495  RTP_DataFrame::PayloadTypes rtpPayloadType,
1496  const char * encodingName,
1497  unsigned maxFrameWidth,
1498  unsigned maxFrameHeight,
1499  unsigned maxFrameRate,
1500  unsigned maxBitRate,
1501  time_t timeStamp = 0
1502  );
1503 
1504  OpalVideoFormat & operator=(const OpalMediaFormat & other);
1505 
1506  static const PString & FrameWidthOption();
1507  static const PString & FrameHeightOption();
1508  static const PString & MinRxFrameWidthOption();
1509  static const PString & MinRxFrameHeightOption();
1510  static const PString & MaxRxFrameWidthOption();
1511  static const PString & MaxRxFrameHeightOption();
1512  static const PString & TemporalSpatialTradeOffOption();
1513  static const PString & TxKeyFramePeriodOption();
1514  static const PString & RateControlPeriodOption(); // Period over which the rate controller maintains the target bit rate.
1515  static const PString & FrameDropOption(); // Boolean to allow frame dropping to maintain target bit rate, default true
1516  static const PString & FreezeUntilIntraFrameOption();
1517 
1528  P_DECLARE_STREAMABLE_ENUM(ContentRole,
1529  eNoRole,
1530  ePresentation,
1531  eMainRole,
1532  eSpeaker,
1533  eSignLanguage
1534  );
1535 
1536  enum { ContentRoleMask = 15 };
1537  __inline static unsigned ContentRoleBit(ContentRole contentRole) { return contentRole != eNoRole ? (1<<(contentRole-1)) : 0; }
1538  static const PString & ContentRoleOption();
1539  static const PString & ContentRoleMaskOption();
1540 
1541 #if OPAL_SDP
1542  P_DECLARE_STREAMABLE_ENUM(ImageAttributeInSDP,
1544  ImageAttrSuppressed,
1545  ImageAddrOffered,
1546  ImageAttrAnswerRequired
1547  );
1549  static const PString & UseImageAttributeInSDP();
1550 #endif // OPAL_SDP
1551 
1552  enum FrameType {
1557  };
1558 
1560  {
1561  protected:
1563  public:
1564  virtual ~FrameDetector() { }
1565  virtual FrameType GetFrameType(const BYTE * rtp, PINDEX size) = 0;
1566  };
1567  typedef PAutoPtr<FrameDetector> FrameDetectorPtr;
1568  typedef PFactory<FrameDetector, PCaselessString> FrameDetectFactory;
1569 
1570  FrameType GetFrameType(const BYTE * payloadPtr, PINDEX payloadSize, FrameDetectorPtr & detector) const;
1571 };
1572 
1574 {
1575  public:
1577  const char * fullName,
1578  RTP_DataFrame::PayloadTypes rtpPayloadType,
1579  const char * encodingName,
1580  unsigned maxFrameWidth,
1581  unsigned maxFrameHeight,
1582  unsigned maxFrameRate,
1583  unsigned maxBitRate,
1584  time_t timeStamp = 0
1585  );
1586  virtual PObject * Clone() const;
1587  virtual bool Merge(const OpalMediaFormatInternal & mediaFormat);
1588 
1589  virtual OpalVideoFormat::FrameType GetFrameType(const BYTE * payloadPtr, PINDEX payloadSize, OpalVideoFormat::FrameDetectorPtr & detector) const;
1590 };
1591 
1592 #endif // OPAL_VIDEO
1593 
1594 
1596 
1597 // RFC 4588 "rtx" media format
1598 namespace OpalRtx {
1599 
1600  const PString & AssociatedPayloadTypeOption();
1601  const PString & RetransmitTimeOption();
1602  const PCaselessString & EncodingName();
1603 
1604  PString GetName(const OpalMediaType & mediaType);
1605  OpalMediaFormat GetMediaFormat(const OpalMediaType & mediaType);
1606 };
1607 
1608 
1610 
1611 #include <codec/known.h>
1612 
1613 
1614 template <class MEDIA_FORMAT>
1616 {
1617 protected:
1618  MEDIA_FORMAT * m_mediaFormat;
1619  MEDIA_FORMAT m_previousFormat;
1620 public:
1621  explicit OpalMediaFormatStatic(typename MEDIA_FORMAT::Internal * formatInfo)
1622  : m_previousFormat(formatInfo->GetName())
1623  {
1624  if (this->m_previousFormat.IsEmpty()) {
1625  this->m_mediaFormat = new MEDIA_FORMAT(formatInfo, true);
1626  }
1627  else {
1628  this->m_mediaFormat = &this->m_previousFormat;
1629  delete formatInfo;
1630  }
1631  }
1632  operator const MEDIA_FORMAT &() const { return *this->m_mediaFormat; }
1633 };
1634 
1635 #if OPAL_H323
1637 typedef PFactory<H323Capability> H323CapabilityFactory;
1638 
1639 template <class MEDIA_FORMAT, class H323_CAPABILITY>
1641 {
1642 public:
1643  OpalMediaFormatStaticH323(typename MEDIA_FORMAT::Internal * formatInfo)
1644  : OpalMediaFormatStatic<MEDIA_FORMAT>(formatInfo)
1645  {
1646  if (this->m_mediaFormat != &this->m_previousFormat)
1647  static H323CapabilityFactory::Worker<H323_CAPABILITY> capability(this->m_mediaFormat->GetName(), true);
1648  }
1649 };
1650 #endif // OPAL_H323
1651 
1652 
1653 extern const OpalAudioFormat & GetOpalPCM16(unsigned clockRate, unsigned channels = 1);
1654 
1655 extern const OpalAudioFormat & GetOpalPCM16();
1656 extern const OpalAudioFormat & GetOpalPCM16S();
1657 extern const OpalAudioFormat & GetOpalPCM16_12KHZ();
1658 extern const OpalAudioFormat & GetOpalPCM16S_12KHZ();
1659 extern const OpalAudioFormat & GetOpalPCM16_16KHZ();
1660 extern const OpalAudioFormat & GetOpalPCM16S_16KHZ();
1661 extern const OpalAudioFormat & GetOpalPCM16_24KHZ();
1662 extern const OpalAudioFormat & GetOpalPCM16S_24KHZ();
1663 extern const OpalAudioFormat & GetOpalPCM16_32KHZ();
1664 extern const OpalAudioFormat & GetOpalPCM16S_32KHZ();
1665 extern const OpalAudioFormat & GetOpalPCM16_48KHZ();
1666 extern const OpalAudioFormat & GetOpalPCM16S_48KHZ();
1667 extern const OpalAudioFormat & GetOpalL16_MONO_8KHZ();
1668 extern const OpalAudioFormat & GetOpalL16_STEREO_8KHZ();
1669 extern const OpalAudioFormat & GetOpalL16_MONO_16KHZ();
1670 extern const OpalAudioFormat & GetOpalL16_STEREO_16KHZ();
1671 extern const OpalAudioFormat & GetOpalL16_MONO_32KHZ();
1672 extern const OpalAudioFormat & GetOpalL16_STEREO_32KHZ();
1673 extern const OpalAudioFormat & GetOpalL16_MONO_48KHZ();
1674 extern const OpalAudioFormat & GetOpalL16_STEREO_48KHZ();
1675 extern const OpalAudioFormat & GetOpalG711_ULAW_64K();
1676 extern const OpalAudioFormat & GetOpalG711_ALAW_64K();
1677 extern const OpalAudioFormat & GetOpalG722();
1678 extern const OpalAudioFormat & GetOpalG7221_24K();
1679 extern const OpalAudioFormat & GetOpalG7221_32K();
1680 extern const OpalAudioFormat & GetOpalG7221C_24K();
1681 extern const OpalAudioFormat & GetOpalG7221C_32K();
1682 extern const OpalAudioFormat & GetOpalG7221C_48K();
1683 extern const OpalAudioFormat & GetOpalG7222();
1684 extern const OpalAudioFormat & GetOpalG726_40K();
1685 extern const OpalAudioFormat & GetOpalG726_32K();
1686 extern const OpalAudioFormat & GetOpalG726_24K();
1687 extern const OpalAudioFormat & GetOpalG726_16K();
1688 extern const OpalAudioFormat & GetOpalG728();
1689 extern const OpalAudioFormat & GetOpalG729();
1690 extern const OpalAudioFormat & GetOpalG729A();
1691 extern const OpalAudioFormat & GetOpalG729B();
1692 extern const OpalAudioFormat & GetOpalG729AB();
1693 extern const OpalAudioFormat & GetOpalG7231_6k3();
1694 extern const OpalAudioFormat & GetOpalG7231_5k3();
1695 extern const OpalAudioFormat & GetOpalG7231A_6k3();
1696 extern const OpalAudioFormat & GetOpalG7231A_5k3();
1697 extern const OpalAudioFormat & GetOpalG7231_Cisco_A();
1698 extern const OpalAudioFormat & GetOpalG7231_Cisco_AR();
1699 extern const OpalAudioFormat & GetOpalGSM0610();
1700 extern const OpalAudioFormat & GetOpalGSMAMR();
1701 extern const OpalAudioFormat & GetOpaliLBC();
1702 extern const OpalAudioFormat & GetOpalSpeexNB();
1703 extern const OpalAudioFormat & GetOpalSpeexWB();
1704 extern const OpalAudioFormat & GetOpalOpus8();
1705 extern const OpalAudioFormat & GetOpalOpus8S();
1706 extern const OpalAudioFormat & GetOpalOpus12();
1707 extern const OpalAudioFormat & GetOpalOpus12S();
1708 extern const OpalAudioFormat & GetOpalOpus16();
1709 extern const OpalAudioFormat & GetOpalOpus16S();
1710 extern const OpalAudioFormat & GetOpalOpus24();
1711 extern const OpalAudioFormat & GetOpalOpus24S();
1712 extern const OpalAudioFormat & GetOpalOpus48();
1713 extern const OpalAudioFormat & GetOpalOpus48S();
1714 
1715 #if OPAL_VIDEO
1716 extern const OpalVideoFormat & GetOpalH261();
1717 extern const OpalVideoFormat & GetOpalH263();
1718 extern const OpalVideoFormat & GetOpalH263plus();
1719 extern const OpalVideoFormat & GetOpalH264_MODE0();
1720 extern const OpalVideoFormat & GetOpalH264_MODE1();
1721 extern const OpalVideoFormat & GetOpalMPEG4();
1722 extern const OpalVideoFormat & GetOpalVP8();
1723 #endif // OPAL_VIDEO
1724 
1725 extern const OpalMediaFormat & GetOpalRFC2833();
1726 
1727 #if OPAL_T38_CAPABILITY
1728 extern const OpalMediaFormat & GetOpalCiscoNSE();
1729 extern const OpalMediaFormat & GetOpalT38();
1730 #endif
1731 
1732 
1733 #define OpalPCM16 GetOpalPCM16()
1734 #define OpalPCM16S GetOpalPCM16S()
1735 #define OpalPCM16_12KHZ GetOpalPCM16_12KHZ()
1736 #define OpalPCM16S_12KHZ GetOpalPCM16S_12KHZ()
1737 #define OpalPCM16_16KHZ GetOpalPCM16_16KHZ()
1738 #define OpalPCM16S_16KHZ GetOpalPCM16S_16KHZ()
1739 #define OpalPCM16_24KHZ GetOpalPCM16_24KHZ()
1740 #define OpalPCM16S_24KHZ GetOpalPCM16S_24KHZ()
1741 #define OpalPCM16_32KHZ GetOpalPCM16_32KHZ()
1742 #define OpalPCM16S_32KHZ GetOpalPCM16S_32KHZ()
1743 #define OpalPCM16_48KHZ GetOpalPCM16_48KHZ()
1744 #define OpalPCM16S_48KHZ GetOpalPCM16S_48KHZ()
1745 #define OpalL16_MONO_8KHZ GetOpalL16_MONO_8KHZ()
1746 #define OpalL16_STEREO_8KHZ GetOpalL16_STEREO_8KHZ()
1747 #define OpalL16_MONO_16KHZ GetOpalL16_MONO_16KHZ()
1748 #define OpalL16_STEREO_16KHZ GetOpalL16_STEREO_16KHZ()
1749 #define OpalL16_MONO_32KHZ GetOpalL16_MONO_32KHZ()
1750 #define OpalL16_STEREO_32KHZ GetOpalL16_STEREO_32KHZ()
1751 #define OpalL16_MONO_48KHZ GetOpalL16_MONO_48KHZ()
1752 #define OpalL16_STEREO_48KHZ GetOpalL16_STEREO_48KHZ()
1753 #define OpalG711_ULAW_64K GetOpalG711_ULAW_64K()
1754 #define OpalG711_ALAW_64K GetOpalG711_ALAW_64K()
1755 #define OpalG722 GetOpalG722()
1756 #define OpalG7221 OpalG7221_32K
1757 #define OpalG7221_24K GetOpalG7221_24K()
1758 #define OpalG7221_32K GetOpalG7221_32K()
1759 #define OpalG7221C_24K GetOpalG7221C_24K()
1760 #define OpalG7221C_32K GetOpalG7221C_32K()
1761 #define OpalG7221C_48K GetOpalG7221C_48K()
1762 #define OpalG7222 GetOpalG7222()
1763 #define OpalG726_40K GetOpalG726_40K()
1764 #define OpalG726_32K GetOpalG726_32K()
1765 #define OpalG726_24K GetOpalG726_24K()
1766 #define OpalG726_16K GetOpalG726_16K()
1767 #define OpalG728 GetOpalG728()
1768 #define OpalG729 GetOpalG729()
1769 #define OpalG729A GetOpalG729A()
1770 #define OpalG729B GetOpalG729B()
1771 #define OpalG729AB GetOpalG729AB()
1772 #define OpalG7231_6k3 GetOpalG7231_6k3()
1773 #define OpalG7231_5k3 GetOpalG7231_5k3()
1774 #define OpalG7231A_6k3 GetOpalG7231A_6k3()
1775 #define OpalG7231A_5k3 GetOpalG7231A_5k3()
1776 #define OpalG7231_Cisco_A GetOpalG7231_Cisco_A()
1777 #define OpalG7231_Cisco_AR GetOpalG7231_Cisco_AR()
1778 #define OpalGSM0610 GetOpalGSM0610()
1779 #define OpalGSMAMR GetOpalGSMAMR()
1780 #define OpaliLBC GetOpaliLBC()
1781 #define OpalSpeexNB GetOpalSpeexNB()
1782 #define OpalSpeexWB GetOpalSpeexWB()
1783 #define OpalOpus8 GetOpalOpus8()
1784 #define OpalOpus8S GetOpalOpus8S()
1785 #define OpalOpus12 GetOpalOpus12()
1786 #define OpalOpus12S GetOpalOpus12S()
1787 #define OpalOpus16 GetOpalOpus16()
1788 #define OpalOpus16S GetOpalOpus16S()
1789 #define OpalOpus24 GetOpalOpus24()
1790 #define OpalOpus24S GetOpalOpus24S()
1791 #define OpalOpus48 GetOpalOpus48()
1792 #define OpalOpus48S GetOpalOpus48S()
1793 
1794 #define OpalRFC2833 GetOpalRFC2833()
1795 #define OpalCiscoNSE GetOpalCiscoNSE()
1796 #define OpalT38 GetOpalT38()
1797 
1798 #if OPAL_VIDEO
1799 #define OpalH261 GetOpalH261()
1800 #define OpalH263 GetOpalH263()
1801 #define OpalH263plus GetOpalH263plus()
1802 #define OpalH264 GetOpalH264_MODE1()
1803 #define OpalH264_MODE0 GetOpalH264_MODE0()
1804 #define OpalH264_MODE1 GetOpalH264_MODE1()
1805 #define OpalMPEG4 GetOpalMPEG4()
1806 #define OpalVP8 GetOpalVP8()
1807 #endif
1808 
1809 #define OpalL16Mono8kHz OpalL16_MONO_8KHZ
1810 #define OpalL16Mono16kHz OpalL16_MONO_16KHZ
1811 #define OpalG711uLaw OpalG711_ULAW_64K
1812 #define OpalG711ALaw OpalG711_ALAW_64K
1813 
1814 
1815 #endif // OPAL_OPAL_MEDIAFMT_H
1816 
1817 
1818 // End of File ///////////////////////////////////////////////////////////////
virtual PObject * Clone() const
const OpalAudioFormat & GetOpalG729AB()
virtual void DestroyContents()
virtual bool ToNormalisedOptions()
friend bool operator!=(const char *other, const OpalMediaFormat &fmt)
Definition: opalplugin.hpp:380
Definition: mediafmt.h:1555
virtual bool SetOptionBoolean(const PString &name, bool value)
const OpalAudioFormat & GetOpalPCM16_12KHZ()
bool ToCustomisedOptions()
MergeType GetMerge() const
Definition: mediafmt.h:368
friend bool operator==(const char *other, const OpalMediaFormat &fmt)
Definition: mediafmt.h:1363
PString m_value
Definition: mediafmt.h:666
virtual PString GetOptionString(const PString &name, const PString &dflt) const
T GetValue() const
Definition: mediafmt.h:503
const OpalAudioFormat & GetOpalG711_ALAW_64K()
OpalAudioFormatInternal Internal
Definition: mediafmt.h:1399
const OpalAudioFormat & GetOpalOpus8()
static const PString & ContentRoleOption()
static const PString & FreezeUntilIntraFrameOption()
static const PString & FrameTimeOption()
virtual bool IsValidForProtocol(const PString &protocol) const
const OpalAudioFormat & GetOpalG722()
const OpalAudioFormat & GetOpalSpeexWB()
unsigned int_type
Definition: mediafmt.h:72
bool HasType(const OpalMediaType &type, bool mustBeTransportable=true) const
bool m_readOnly
Definition: mediafmt.h:426
virtual bool ValidateMerge(const OpalMediaFormatInternal &mediaFormat) const
const OpalAudioFormat & GetOpalL16_MONO_8KHZ()
PString GetName(const OpalMediaType &mediaType)
const OpalAudioFormat & GetOpalPCM16_24KHZ()
static const PString & NeedsJitterOption()
void SetMinimum(T m)
Definition: mediafmt.h:565
void SetH225(H225_BandWidth &bw) const
bool IsReadOnly() const
Definition: mediafmt.h:365
OpalMediaFormatInternal(const char *fullName, const OpalMediaType &mediaType, RTP_DataFrame::PayloadTypes rtpPayloadType, const char *encodingName, bool needsJitter, OpalBandwidth bandwidth, PINDEX frameSize, unsigned frameTime, unsigned clockRate, time_t timeStamp=0, bool allowMultiple=false)
bool ValidateMerge(const OpalMediaFormat &mediaFormat) const
static const PString & FrameHeightOption()
Definition: mediafmt.h:1454
FrameType GetFrameType(const BYTE *payloadPtr, PINDEX payloadSize, FrameDetectorPtr &detector) const
const OpalAudioFormat & GetOpalOpus8S()
virtual bool GetOptionBoolean(const PString &name, bool dflt) const
static const PString & TemporalSpatialTradeOffOption()
PINDEX GetOptionCount() const
Definition: mediafmt.h:1104
PStringSet GetMediaPacketizationSet() const
Definition: mediafmt.h:1372
void SetValue(const PBYTEArray &value)
PString defaultValue
Definition: mediafmt.h:414
const OpalAudioFormat & GetOpalG7221_32K()
enum OpalMediaOption::H245GenericInfo::Modes mode
static bool SetRegisteredMediaFormat(const OpalMediaFormat &mediaFormat)
virtual PStringToString GetOptions() const
Definition: mediafmt.h:1556
const OpalAudioFormat & GetOpalG7231A_6k3()
Definition: mediafmt.h:319
Definition: mediafmt.h:323
void SetMediaPacketizations(const PStringSet &packetizations)
void SetBase64(bool b)
Definition: mediafmt.h:704
const OpalAudioFormat & GetOpalG7231A_5k3()
virtual bool GetOptionOctets(const PString &name, PBYTEArray &octets) const
Definition: mediafmt.h:312
FrameDetector()
Definition: mediafmt.h:1443
OpalMediaOptionOctets(const char *name, bool readOnly, bool base64=false)
OpalVideoFormatInternal Internal
Definition: mediafmt.h:1485
virtual bool SetOptionInteger(const PString &name, int value)
Definition: mediafmt.h:670
virtual void Assign(const OpalMediaOption &option)
PFactory< FrameDetector, PCaselessString > FrameDetectFactory
Definition: mediafmt.h:1449
bool forceIsTransportable
Definition: mediafmt.h:785
OpalMediaOptionNumericalValue< OpalMediaOptionRealValue > OpalMediaOptionReal
Definition: mediafmt.h:597
virtual ~FrameDetector()
Definition: mediafmt.h:1445
static const PString & MinRxFrameHeightOption()
PBYTEArray m_value
Definition: mediafmt.h:710
PStringArray GetMediaPacketizations() const
virtual void Assign(const OpalMediaOption &option)
Definition: mediafmt.h:441
OpalAudioFormat(const char *fullName)
Definition: mediafmt.h:1404
PSortedList< OpalMediaOption > options
Definition: mediafmt.h:783
unsigned GetClockRate() const
Definition: mediafmt.h:1062
void SetReadOnly(bool readOnly)
Definition: mediafmt.h:366
const OpalAudioFormat & GetOpalOpus24()
PAutoPtr< FrameDetector > FrameDetectorPtr
Definition: mediafmt.h:1448
virtual Comparison Compare(const PObject &other) const
const OpalVideoFormat & GetOpalH264_MODE1()
void AdjustVideoArgs(PVideoDevice::OpenArgs &args) const
virtual Comparison CompareValue(const OpalMediaOption &option) const =0
const OpalAudioFormat & GetOpalGSM0610()
Definition: h323caps.h:95
__inline OpalBandwidth & operator-=(const OpalBandwidth &bw)
Definition: mediafmt.h:83
OpalMediaOptionRealValue(double value=0)
Definition: mediafmt.h:590
virtual void ReadFrom(istream &strm)
friend istream & operator>>(istream &strm, OpalMediaOptionRealValue &value)
Definition: mediafmt.h:594
RTP_DataFrame::PayloadTypes GetPayloadType() const
Definition: mediafmt.h:1006
bool m_dynamic
Definition: mediafmt.h:1384
friend bool operator==(const char *other, const OpalMediaFormat &fmt)
ostream & PrintOptions(ostream &strm) const
Definition: mediafmt.h:1337
static OpalBandwidth Max()
Definition: mediafmt.h:99
const OpalAudioFormat & GetOpalG726_24K()
OpalMediaOptionNumericalValue< int > OpalMediaOptionInteger
Definition: mediafmt.h:582
OpalVideoFormat(const char *fullName)
Definition: mediafmt.h:1490
bool operator==(const OpalMediaFormat &other) const
Definition: mediafmt.h:1361
virtual void AssignContents(const PContainer &c)
void Construct(OpalMediaFormatInternal *info)
__inline OpalBandwidth operator+(const OpalBandwidth &bw) const
Definition: mediafmt.h:80
PString GetDescription() const
Definition: mediafmt.h:987
Definition: mediafmt.h:1440
virtual OpalVideoFormat::FrameType GetFrameType(const BYTE *payloadPtr, PINDEX payloadSize, OpalVideoFormat::FrameDetectorPtr &detector) const
const OpalVideoFormat & GetOpalH264_MODE0()
OpalMediaFormat(const OpalMediaFormat &c)
virtual Comparison CompareValue(const OpalMediaOption &option) const
Definition: mediafmt.h:484
static const PString & ContentRoleMaskOption()
Definition: mediafmt.h:717
OpalAudioFormat & operator=(const OpalMediaFormat &other)
const OpalMediaOption & GetOption(PINDEX index) const
Definition: mediafmt.h:1109
const OpalAudioFormat & GetOpalPCM16_16KHZ()
Definition: mediatype.h:66
virtual void Assign(const OpalMediaOption &option)=0
bool ToNormalisedOptions()
virtual void PrintOn(ostream &strm) const
PStringArray m_enumerations
Definition: mediafmt.h:635
virtual bool GetOptionValue(const PString &name, PString &value) const
const OpalAudioFormat & GetOpalG7222()
virtual Comparison Compare(const PObject &obj) const
90kHz sample rate
Definition: mediafmt.h:1057
T m_value
Definition: mediafmt.h:514
const OpalAudioFormat & GetOpalL16_STEREO_48KHZ()
static __inline unsigned ContentRoleBit(ContentRole contentRole)
Definition: mediafmt.h:1537
PINDEX GetValue() const
Definition: mediafmt.h:625
virtual bool ValidateMerge(const OpalMediaOption &option) const
void SetMerge(MergeType merge)
Definition: mediafmt.h:369
bool Update(const OpalMediaFormat &mediaFormat)
virtual void Assign(const OpalMediaOption &option)
friend ostream & operator<<(ostream &strm, const OpalMediaOptionRealValue &value)
Definition: mediafmt.h:593
const OpalAudioFormat & GetOpalOpus24S()
virtual Comparison CompareValue(const OpalMediaOption &option) const
void operator&=(double other)
Definition: mediafmt.h:592
virtual bool SetOptionValue(const PString &name, const PString &value)
OpalMediaTypeList GetMediaTypes() const
const OpalVideoFormat & GetOpalMPEG4()
PFactory< FrameDetector, PCaselessString > FrameDetectFactory
Definition: mediafmt.h:1568
RTP_DataFrame::PayloadTypes GetOptionPayloadType(const PString &name, RTP_DataFrame::PayloadTypes dflt=RTP_DataFrame::IllegalPayloadType) const
Definition: mediafmt.h:1175
Definition: mediafmt.h:1559
static const PString & DescriptionOption()
Definition: mediafmt.h:322
Enum GetOptionEnum(const PString &name, Enum dflt=(Enum) 0) const
Definition: mediafmt.h:1207
virtual void ReadFrom(istream &strm)
Definition: mediafmt.h:543
const OpalAudioFormat & GetOpalGSMAMR()
static const PString & MaxRxFrameWidthOption()
static bool RemoveRegisteredMediaFormats(const PString &wildcard)
unsigned GetTimeUnits() const
Definition: mediafmt.h:1053
enum OpalMediaOption::H245GenericInfo::IntegerTypes integerType
const OpalAudioFormat & GetOpalPCM16S()
const OpalAudioFormat & GetOpalG7221C_32K()
const PStringArray & GetEnumerations() const
Definition: mediafmt.h:628
PDECLARE_MUTEX(m_mutex, OpalMediaFormat, 1000)
bool SetOptionOctets(const PString &name, const PBYTEArray &octets)
Definition: mediafmt.h:1260
OpalBandwidth GetUsedBandwidth() const
Definition: mediafmt.h:1035
Definition: mediafmt.h:66
bool GetOptionBoolean(const PString &name, bool dflt=false) const
Definition: mediafmt.h:1136
PayloadTypes
Definition: rtp.h:556
FrameType
Definition: mediafmt.h:1552
virtual ~FrameDetector()
Definition: mediafmt.h:1564
OpalMediaFormatStaticH323(typename MEDIA_FORMAT::Internal *formatInfo)
Definition: mediafmt.h:1643
time_t GetCodecVersionTime() const
Definition: mediafmt.h:1335
unsigned ordinal
Definition: mediafmt.h:396
const OpalVideoFormat & GetOpalH263plus()
PINDEX GetFrameSize() const
Definition: mediafmt.h:1042
virtual FrameType GetFrameType(const BYTE *rtp, PINDEX size)=0
const OpalAudioFormat & GetOpalG729B()
OpalMediaFormatInternal Internal
Definition: mediafmt.h:819
const OpalAudioFormat & GetOpaliLBC()
bool SetOptionOctets(const PString &name, const BYTE *data, PINDEX length)
Definition: mediafmt.h:1264
bool Merge(const OpalMediaFormat &mediaFormat, bool copyPayloadType=false)
virtual void PrintOn(ostream &strm) const
void SetH245Generic(const H245GenericInfo &genericInfo)
Definition: mediafmt.h:418
Definition: mediafmt.h:1554
static const PString & RxFramesPerPacketOption()
OpalMediaFormat & operator=(const OpalMediaFormat &c)
Definition: mediafmt.h:812
Definition: mediafmt.h:318
Definition: mediafmt.h:112
double GetOptionReal(const PString &name, double dflt=0) const
Definition: mediafmt.h:1183
virtual PObject * Clone() const
const OpalAudioFormat & GetOpalPCM16S_32KHZ()
Definition: mediafmt.h:586
static const PString & RTCPFeedbackOption()
RTP/RTCP Feedback options.
PString GetOptionString(const PString &name, const PString &dflt=PString::Empty()) const
Definition: mediafmt.h:1230
Definition: mediafmt.h:60
unsigned kbps() const
Definition: mediafmt.h:97
void Reorder(const PStringArray &order)
bool NeedsJitterBuffer() const
Definition: mediafmt.h:1025
OpalMediaFormatList & operator+=(const char *wildcard)
Definition: mediafmt.h:138
OpalMediaOptionNumericalValue< bool > OpalMediaOptionBoolean
Definition: mediafmt.h:581
virtual void PrintOn(ostream &strm) const
bool operator==(const PString &other) const
Definition: mediafmt.h:1359
Definition: mediafmt.h:321
friend bool operator!=(const PString &other, const OpalMediaFormat &fmt)
Definition: mediafmt.h:1366
virtual bool SetOptionEnum(const PString &name, PINDEX value)
Definition: mediatype.h:50
OpalVideoFormat & operator=(const OpalMediaFormat &other)
static const PString & MaxTxPacketSizeOption()
const OpalAudioFormat & GetOpalL16_STEREO_8KHZ()
bool SetOptionReal(const PString &name, double value)
Definition: mediafmt.h:1194
virtual void ReadFrom(istream &strm)
virtual void PrintOn(std::ostream &strm) const
Definition: mediafmt.h:1395
Definition: mediafmt.h:640
bool excludeOLC
Definition: mediafmt.h:411
bool FromString(const PString &value)
bool AdjustByOptionMaps(bool(*adjuster)(PluginCodec_OptionMap &original, PluginCodec_OptionMap &changed))
static const PString & TargetBitRateOption()
static const PString & ChannelsOption()
OpalMediaOptionNumericalValue(const char *name, bool readOnly, OpalMediaOption::MergeType merge=OpalMediaOption::MinMerge, T value=0, T minimum=std::numeric_limits< T >::min(), T maximum=std::numeric_limits< T >::max())
Definition: mediafmt.h:524
const char * GetEncodingName() const
Definition: mediafmt.h:1011
const OpalMediaFormat & GetOpalRFC2833()
virtual PObject * Clone() const
const OpalAudioFormat & GetOpalOpus12()
int GetOptionInteger(const PString &name, int dflt=0) const
Definition: mediafmt.h:1155
H245GenericInfo m_H245Generic
Definition: mediafmt.h:435
const OpalAudioFormat & GetOpalG726_40K()
OpalMediaOptionNumericalValue< unsigned > OpalMediaOptionUnsigned
Definition: mediafmt.h:583
const OpalAudioFormat & GetOpalG7221_24K()
Definition: mediafmt.h:806
bool operator!=(const OpalMediaFormat &other) const
Definition: mediafmt.h:1362
const OpalAudioFormat & GetOpalG7221C_24K()
Definition: mediafmt.h:1536
virtual void PrintOn(ostream &strm) const
Definition: mediafmt.h:461
const OpalAudioFormat & GetOpalG7221C_48K()
FrameDetector()
Definition: mediafmt.h:1562
Direction
Definition: mediafmt.h:64
Definition: mediafmt.h:329
Definition: mediafmt.h:324
time_t codecVersionTime
Definition: mediafmt.h:784
const OpalAudioFormat & GetOpalG711_ULAW_64K()
void DeconflictPayloadTypes(OpalMediaFormatList &formats)
bool GetOptionOctets(const PString &name, PBYTEArray &octets) const
Definition: mediafmt.h:1249
virtual PObject * Clone() const
const OpalAudioFormat & GetOpalPCM16S_12KHZ()
OpalAudioFormatInternal(const char *fullName, RTP_DataFrame::PayloadTypes rtpPayloadType, const char *encodingName, PINDEX frameSize, unsigned frameTime, unsigned rxFrames, unsigned txFrames, unsigned maxFrames, unsigned clockRate, time_t timeStamp=0, unsigned channels=1)
OpalAudioFormat(Internal *info=NULL, bool dynamic=false)
const OpalAudioFormat & GetOpalPCM16_48KHZ()
const OpalVideoFormat & GetOpalVP8()
void SetMaximum(T m)
Definition: mediafmt.h:570
const OpalAudioFormat & GetOpalOpus12S()
T m_maximum
Definition: mediafmt.h:577
bool SetOptionValue(const PString &name, const PString &value)
Definition: mediafmt.h:1128
PDECLARE_MUTEX(m_mutex, OpalMediaFormatInternal, 1000)
const_iterator FindFormat(RTP_DataFrame::PayloadTypes rtpPayloadType, const unsigned clockRate=0, const char *rtpEncodingName=NULL, const char *protocol=NULL, const_iterator start=const_iterator()) const
const OpalAudioFormat & GetOpalG726_16K()
const OpalAudioFormat & GetOpalL16_MONO_32KHZ()
Definition: mediafmt.h:325
P_DECLARE_BITWISE_ENUM(FrameType, 3,(e_UnknownFrameType, e_NormalFrame, e_SilenceFrame, e_FECFrame))
PStringToString GetOptions() const
Definition: mediafmt.h:1100
const OpalAudioFormat & GetOpalG726_32K()
OpalMediaFormatList(const OpalMediaFormatList &l)
Definition: mediafmt.h:130
PCaselessString rtpEncodingName
Definition: mediafmt.h:780
virtual FrameType GetFrameType(const BYTE *rtp, PINDEX size, unsigned sampleRate)=0
P_DECLARE_STREAMABLE_ENUM(ContentRole, eNoRole, ePresentation, eMainRole, eSpeaker, eSignLanguage)
FrameType GetFrameType(const BYTE *payloadPtr, PINDEX payloadSize, FrameDetectorPtr &detector) const
PBoolean HasFormat(RTP_DataFrame::PayloadTypes rtpPayloadType) const
Definition: mediafmt.h:224
const OpalAudioFormat & GetOpalOpus48S()
static const PString & MinRxFrameWidthOption()
static const PString & MaxBitRateOption()
PLIST(H323LogicalChannelList, H323Channel)
static const PString & TxFramesPerPacketOption()
PFactory< H323Capability > H323CapabilityFactory
Definition: mediafmt.h:1636
const OpalAudioFormat & GetOpalPCM16_32KHZ()
static const PString & TxKeyFramePeriodOption()
const OpalAudioFormat & GetOpalPCM16(unsigned clockRate, unsigned channels=1)
virtual int GetOptionInteger(const PString &name, int dflt) const
bool SetOptionEnum(const PString &name, Enum value)
Definition: mediafmt.h:1222
PBoolean IsValid() const
Definition: mediafmt.h:994
const OpalAudioFormat & GetOpalG7231_Cisco_AR()
virtual void PrintOn(ostream &strm) const
Definition: mediafmt.h:328
const OpalAudioFormat & GetOpalG7231_6k3()
PString GetName() const
Definition: mediafmt.h:983
virtual PBoolean IsEmpty() const
Definition: mediafmt.h:1354
static const PString & RateControlPeriodOption()
friend bool operator!=(const char *other, const OpalMediaFormat &fmt)
Definition: mediafmt.h:1364
bool SetOptionBoolean(const PString &name, bool value)
Definition: mediafmt.h:1147
static const PString & FrameWidthOption()
OpalMediaOption * FindOption(const PString &name) const
Definition: mediafmt.h:1317
OpalMediaType GetMediaType() const
Definition: mediafmt.h:1015
const OpalAudioFormat & GetOpalOpus48()
const PString & GetName() const
Definition: mediafmt.h:363
virtual void ReadFrom(std::istream &strm)
OpalMediaFormat GetMediaFormat(const OpalMediaType &mediaType)
const OpalAudioFormat & GetOpalL16_STEREO_32KHZ()
OpalBandwidth GetMaxBandwidth() const
Definition: mediafmt.h:1030
bool operator!=(const PString &other) const
Definition: mediafmt.h:1360
bool m_base64
Definition: mediafmt.h:711
OpalMediaFormatInternal * m_info
Definition: mediafmt.h:1382
static bool RegisterKnownMediaFormats(const PString &name=PString::Empty())
PString AsString() const
const OpalAudioFormat & GetOpalG729()
int position
Definition: mediafmt.h:413
T m_minimum
Definition: mediafmt.h:576
virtual Comparison CompareValue(const OpalMediaOption &option) const
void SetValue(PINDEX value)
virtual bool Merge(const OpalMediaOption &option)
const H245GenericInfo & GetH245Generic() const
Definition: mediafmt.h:417
virtual void ReadFrom(istream &strm)
Definition: mediafmt.h:466
bool GetOptionValue(const PString &name, PString &value) const
Definition: mediafmt.h:1117
Definition: mediafmt.h:320
virtual bool SetOptionOctets(const PString &name, const PBYTEArray &octets)
OpalMediaFormatList & operator-=(const OpalMediaFormat &format)
void SetPayloadType(RTP_DataFrame::PayloadTypes type)
Definition: mediafmt.h:1007
Definition: mediafmt.h:1640
const PString & GetValue() const
Definition: mediafmt.h:662
static const PString & MaxRxFrameHeightOption()
IntegerTypes
Definition: mediafmt.h:404
bool excludeReqMode
Definition: mediafmt.h:412
bool SetOptionInteger(const PString &name, int value)
Definition: mediafmt.h:1167
friend bool operator==(const PString &other, const OpalMediaFormat &fmt)
Definition: mediafmt.h:1365
bool operator==(const char *other) const
Definition: mediafmt.h:1357
bool HasOption(const PString &name) const
Definition: mediafmt.h:1312
Definition: mediafmt.h:389
__inline OpalBandwidth operator-(const OpalBandwidth &bw) const
Definition: mediafmt.h:81
PINDEX m_value
Definition: mediafmt.h:636
virtual PObject * Clone() const
Definition: mediafmt.h:456
virtual void ReadFrom(istream &strm)
const OpalAudioFormat & GetOpalPCM16S_16KHZ()
OpalMediaOptionValue(const char *name, bool readOnly, OpalMediaOption::MergeType merge=OpalMediaOption::MinMerge, T value=T())
Definition: mediafmt.h:445
const OpalAudioFormat & GetOpalG728()
__inline OpalBandwidth & operator=(int_type bps)
Definition: mediafmt.h:75
void RemoveNonTransportable()
OpalVideoFormatInternal(const char *fullName, RTP_DataFrame::PayloadTypes rtpPayloadType, const char *encodingName, unsigned maxFrameWidth, unsigned maxFrameHeight, unsigned maxFrameRate, unsigned maxBitRate, time_t timeStamp=0)
virtual bool Merge(const OpalMediaOption &option)
virtual PObject * Clone() const
virtual OpalMediaOption * FindOption(const PString &name) const
virtual PINDEX GetOptionEnum(const PString &name, PINDEX dflt) const
PAutoPtr< FrameDetector > FrameDetectorPtr
Definition: mediafmt.h:1567
virtual bool Merge(const OpalMediaFormatInternal &mediaFormat)
8kHz sample rate
Definition: mediafmt.h:1056
virtual PObject * Clone() const
void FromH245(const PASN_Integer &bitRate)
unsigned GetFrameTime() const
Definition: mediafmt.h:1048
OpalVideoFormat(Internal *info=NULL, bool dynamic=false)
const OpalAudioFormat & GetOpalPCM16S_24KHZ()
Definition: mediafmt.h:600
OpalMediaOptionString(const char *name, bool readOnly)
const OpalAudioFormat & GetOpalPCM16S_48KHZ()
static const PString & MaxFramesPerPacketOption()
const OpalAudioFormat & GetOpalG7231_5k3()
bool m_allowMultiple
Definition: mediafmt.h:786
P_DECLARE_STREAMABLE_BITWISE_ENUM_EX(RTCPFeedback, 8,(e_NoRTCPFb, e_PLI, e_FIR, e_TMMBR, e_TSTR, e_VBCM, e_NACK, e_SLI, e_REMB),"","pli","fir","tmmbr","tstr","vcbm","nack","sli","remb")
RTP/RTCP Feedback options.
const OpalAudioFormat & GetOpalSpeexNB()
PBoolean HasFormat(const PString &wildcard) const
Definition: mediafmt.h:233
const OpalAudioFormat & GetOpalOpus16S()
static OpalMediaFormatList GetAllRegisteredMediaFormats()
static const PString & ClockRateOption()
void SetValue(T value)
Definition: mediafmt.h:508
OpalMediaFormatStatic(typename MEDIA_FORMAT::Internal *formatInfo)
Definition: mediafmt.h:1621
void Remove(const PStringArray &mask)
virtual void ReadFrom(istream &strm)
const OpalAudioFormat & GetOpalL16_STEREO_16KHZ()
virtual bool Merge(const OpalMediaOption &option)
const OpalAudioFormat & GetOpalL16_MONO_48KHZ()
Definition: mediafmt.h:1573
PCaselessString m_name
Definition: mediafmt.h:425
void SetEnumerations(const PStringArray &e)
Definition: mediafmt.h:629
void SetValue(T value)
Definition: mediafmt.h:555
OpalMediaOptionEnum(const char *name, bool readOnly)
virtual Comparison CompareValue(const OpalMediaOption &option) const
virtual bool SetOptionString(const PString &name, const PString &value)
MergeType
Definition: mediafmt.h:317
static const PString & MediaPacketizationOption()
const OpalAudioFormat & GetOpalG729A()
static const PString & FrameDropOption()
__inline OpalBandwidth(int_type bps=0)
Definition: mediafmt.h:74
const PCaselessString & GetName() const
Definition: mediafmt.h:735
virtual void Assign(const OpalMediaOption &option)
Definition: mediafmt.h:496
virtual void PrintOn(ostream &strm) const
MergeType m_merge
Definition: mediafmt.h:427
virtual ~OpalMediaFormat()
Definition: mediafmt.h:1481
virtual bool Merge(const OpalMediaFormatInternal &mediaFormat)
const PBYTEArray & GetValue() const
Definition: mediafmt.h:700
virtual OpalAudioFormat::FrameType GetFrameType(const BYTE *payloadPtr, PINDEX payloadSize, OpalAudioFormat::FrameDetectorPtr &detector) const
virtual bool IsValid() const
friend std::ostream & operator<<(std::ostream &strm, OpalBandwidth::Direction dir)
const OpalAudioFormat & GetOpalL16_MONO_16KHZ()
const OpalAudioFormat & GetOpalOpus16()
bool IsMediaType(const OpalMediaType &mediaType) const
virtual double GetOptionReal(const PString &name, double dflt) const
virtual bool IsTransportable() const
void SetH245(PASN_Integer &bitRate) const
PBoolean IsTransportable() const
Definition: mediafmt.h:999
const OpalVideoFormat & GetOpalH263()
static const PString & ProtocolOption()
static const PString & MediaPacketizationsOption()
bool SetOptionString(const PString &name, const PString &value)
Definition: mediafmt.h:1241
virtual bool Merge(const OpalMediaFormatInternal &mediaFormat)
OpalMediaType mediaType
Definition: mediafmt.h:781
StandardClockRate
Definition: mediafmt.h:1055
PCaselessString formatName
Definition: mediafmt.h:778
Definition: mediafmt.h:519
virtual bool Merge(const OpalMediaOption &option)
Definition: mediafmt.h:471
__inline OpalBandwidth & operator+=(const OpalBandwidth &bw)
Definition: mediafmt.h:82
MEDIA_FORMAT * m_mediaFormat
Definition: mediafmt.h:1618
static const PString & MaxFrameSizeOption()
virtual Comparison Compare(const PObject &obj) const
Definition: mediafmt.h:399
T * FindOptionAs(const PString &name) const
Definition: mediafmt.h:1324
Definition: mediafmt.h:67
virtual PBoolean MakeUnique()
const PString & AssociatedPayloadTypeOption()
virtual bool AddOption(OpalMediaOption *option, PBoolean overwrite=false)
MEDIA_FORMAT m_previousFormat
Definition: mediafmt.h:1619
RTP_DataFrame::PayloadTypes rtpPayloadType
Definition: mediafmt.h:779
Definition: mediafmt.h:1615
virtual bool SetOptionReal(const PString &name, double value)
bool IsValidForProtocol(const PString &protocol) const
Definition: mediafmt.h:1333
const PCaselessString & EncodingName()
__inline OpalBandwidth & operator&=(const OpalBandwidth &bw)
Definition: mediafmt.h:84
Definition: mediafmt.h:1553
OpalMediaOption(const PString &name)
int_type m_bps
Definition: mediafmt.h:102
Modes
Definition: mediafmt.h:398
virtual bool ToCustomisedOptions()
const PString & RetransmitTimeOption()
bool excludeTCS
Definition: mediafmt.h:410
bool operator!=(const char *other) const
Definition: mediafmt.h:1358
bool AddOption(OpalMediaOption *option, PBoolean overwrite=false)
Definition: mediafmt.h:1304
Definition: mediafmt.h:68
const OpalVideoFormat & GetOpalH261()
const OpalAudioFormat & GetOpalG7231_Cisco_A()
virtual PObject * Clone() const
Definition: mediafmt.h:538
Definition: mediafmt.h:65
void SetValue(const PString &value)
virtual PObject * Clone() const