OPAL  Version 3.10.10
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  * $Revision: 27856 $
28  * $Author: rjongbloed $
29  * $Date: 2012-06-18 21:51:57 -0500 (Mon, 18 Jun 2012) $
30  */
31 
32 #ifndef OPAL_OPAL_MEDIAFMT_H
33 #define OPAL_OPAL_MEDIAFMT_H
34 
35 #ifdef P_USE_PRAGMA
36 #pragma interface
37 #endif
38 
39 #ifdef _MSC_VER
40 #if _MSC_VER < 1300
41 #pragma warning(disable:4663)
42 #endif
43 #endif
44 
45 #include <opal/buildopts.h>
46 
47 #include <opal/mediatype.h>
48 #include <rtp/rtp.h>
49 
50 #if OPAL_VIDEO
51 #include <ptlib/videoio.h>
52 #endif
53 
54 #include <limits>
55 
56 #ifdef min
57 #undef min
58 #endif
59 #ifdef max
60 #undef max
61 #endif
62 
63 class OpalMediaFormat;
64 
65 
67 
68 PLIST(OpalMediaFormatBaseList, OpalMediaFormat);
69 
72 class OpalMediaFormatList : public OpalMediaFormatBaseList
73 {
74  PCLASSINFO(OpalMediaFormatList, OpalMediaFormatBaseList);
75  public:
81 
85  const OpalMediaFormat & format
86  );
87 
90  OpalMediaFormatList(const OpalMediaFormatList & l) : OpalMediaFormatBaseList(l) { }
92 
99  const char * wildcard
100  ) { PConstString s(wildcard); return operator+=(s); }
101 
106  const PString & wildcard
107  );
108 
113  const OpalMediaFormat & format
114  );
115 
120  const OpalMediaFormatList & formats
121  );
122 
127  const OpalMediaFormat & format
128  );
129 
134  const OpalMediaFormatList & formats
135  );
136 
142  const_iterator FindFormat(
143  RTP_DataFrame::PayloadTypes rtpPayloadType,
144  const unsigned clockRate,
145  const char * rtpEncodingName = NULL,
146  const char * protocol = NULL,
147  const_iterator start = const_iterator()
148  ) const;
149 
166  const_iterator FindFormat(
167  const PString & wildcard,
168  const_iterator start = const_iterator()
169  ) const;
170 
173  PBoolean HasFormat(
174  RTP_DataFrame::PayloadTypes rtpPayloadType
175  ) const { return FindFormat(rtpPayloadType) != end(); }
176 
182  PBoolean HasFormat(
183  const PString & wildcard
184  ) const { return FindFormat(wildcard) != end(); }
185 
204  void Remove(
205  const PStringArray & mask
206  );
207 
223  void Reorder(
224  const PStringArray & order
225  );
226 
229  bool HasType(
230  const OpalMediaType & type,
231  bool mustBeTransportable = true
232  ) const;
234 
235  private:
236  virtual PINDEX Append(PObject *) { return P_MAX_INDEX; }
237  virtual PINDEX Insert(const PObject &, PObject *) { return P_MAX_INDEX; }
238  virtual PINDEX InsertAt(PINDEX, PObject *) { return P_MAX_INDEX; }
239  virtual PBoolean SetAt(PINDEX, PObject *) { return false; }
240 };
241 
242 
244 
247 class OpalMediaOption : public PObject
248 {
249  PCLASSINFO(OpalMediaOption, PObject);
250  public:
251  // Note the below enum must be identical to PluginCodec_OptionMerge in opalplugin.h
252  enum MergeType {
260  IntersectionMerge, // Set intersection, applies to numeric (bit wise AND) or string (common substrings)
261 
262  // Synonyms
263  AndMerge = MinMerge, // Applies to Boolean option or Enum with two elements
264  OrMerge = MaxMerge // Applies to Boolean option or Enum with two elements
265  };
266 
267  protected:
269  const PString & name
270  );
272  const char * name,
273  bool readOnly,
274  MergeType merge
275  );
276 
277  public:
278  virtual Comparison Compare(const PObject & obj) const;
279 
280  virtual bool Merge(
281  const OpalMediaOption & option
282  );
283 
284  virtual bool ValidateMerge(
285  const OpalMediaOption & option
286  ) const;
287 
288  virtual Comparison CompareValue(
289  const OpalMediaOption & option
290  ) const = 0;
291  virtual void Assign(
292  const OpalMediaOption & option
293  ) = 0;
294 
295  PString AsString() const;
296  bool FromString(const PString & value);
297 
298  const PString & GetName() const { return m_name; }
299 
300  bool IsReadOnly() const { return m_readOnly; }
301  void SetReadOnly(bool readOnly) { m_readOnly = readOnly; }
302 
303  MergeType GetMerge() const { return m_merge; }
304  void SetMerge(MergeType merge) { m_merge = merge; }
305 
306 #if OPAL_SIP
307  const PString & GetFMTPName() const { return m_FMTPName; }
308  void SetFMTPName(const char * name) { m_FMTPName = name; }
309 
310  const PString & GetFMTPDefault() const { return m_FMTPDefault; }
311  void SetFMTPDefault(const char * value) { m_FMTPDefault = value; }
312 #endif // OPAL_SIP
313 
314 #if OPAL_H323
317  : ordinal(0)
318  , mode(None)
319  , integerType(UnsignedInt)
320  , excludeTCS(false)
321  , excludeOLC(false)
322  , excludeReqMode(false)
323  , position(-1)
324  { }
325 
326  unsigned ordinal;
327 
328  enum Modes {
331  NonCollapsing
332  } mode;
333 
337  BooleanArray
338  } integerType;
339 
343  int position; // Position in sequence for parameter
344  PString defaultValue; // Do not include parameter if this value
345  };
346 
347  const H245GenericInfo & GetH245Generic() const { return m_H245Generic; }
348  void SetH245Generic(const H245GenericInfo & genericInfo) { m_H245Generic = genericInfo; }
349 #endif // OPAL_H323
350 
351  protected:
352  PCaselessString m_name;
355 
356 #if OPAL_SIP
357  PCaselessString m_FMTPName;
358  PString m_FMTPDefault;
359 #endif // OPAL_SIP
360 
361 #if OPAL_H323
363 #endif // OPAL_H323
364 };
365 
366 
367 template <typename T>
369 {
371  public:
373  const char * name,
374  bool readOnly,
376  T value = T()
377  )
378  : OpalMediaOption(name, readOnly, merge)
379  , m_value(value)
380  {
381  }
382 
383  virtual PObject * Clone() const
384  {
385  return new OpalMediaOptionValue(*this);
386  }
387 
388  virtual void PrintOn(ostream & strm) const
389  {
390  strm << m_value;
391  }
392 
393  virtual void ReadFrom(istream & strm)
394  {
395  strm >> m_value;
396  }
397 
398  virtual bool Merge(const OpalMediaOption & option)
399  {
400  if (m_merge != IntersectionMerge)
401  return OpalMediaOption::Merge(option);
402 
403  const OpalMediaOptionValue * otherOption = PDownCast(const OpalMediaOptionValue, &option);
404  if (otherOption == NULL)
405  return false;
406 
407  m_value &= otherOption->m_value;
408  return true;
409  }
410 
411  virtual Comparison CompareValue(const OpalMediaOption & option) const
412  {
413  const OpalMediaOptionValue * otherOption = PDownCast(const OpalMediaOptionValue, &option);
414  if (otherOption == NULL)
415  return GreaterThan;
416  if (m_value < otherOption->m_value)
417  return LessThan;
418  if (m_value > otherOption->m_value)
419  return GreaterThan;
420  return EqualTo;
421  }
422 
423  virtual void Assign(const OpalMediaOption & option)
424  {
425  const OpalMediaOptionValue * otherOption = PDownCast(const OpalMediaOptionValue, &option);
426  if (otherOption != NULL)
427  m_value = otherOption->m_value;
428  }
429 
430  T GetValue() const
431  {
432  return m_value;
433  }
434 
435  void SetValue(T value)
436  {
437  m_value = value;
438  }
439 
440  protected:
442 };
443 
444 
445 template <typename T>
447 {
449  PCLASSINFO(OpalMediaOptionNumericalValue, BaseClass);
450  public:
452  const char * name,
453  bool readOnly,
455  T value = 0,
456  T minimum = std::numeric_limits<T>::min(),
457  T maximum = std::numeric_limits<T>::max()
458  )
459  : BaseClass(name, readOnly, merge, value)
460  , m_minimum(minimum)
461  , m_maximum(maximum)
462  {
463  }
464 
465  virtual PObject * Clone() const
466  {
467  return new OpalMediaOptionNumericalValue(*this);
468  }
469 
470  virtual void ReadFrom(istream & strm)
471  {
472  T temp = 0;
473  strm >> temp;
474  if (strm.fail())
475  return;
476  if (temp >= m_minimum && temp <= m_maximum)
477  this->m_value = temp;
478  else
479  strm.setstate(ios::badbit);
480  }
481 
482  void SetValue(T value)
483  {
484  if (value < m_minimum)
485  this->m_value = m_minimum;
486  else if (value > m_maximum)
487  this->m_value = m_maximum;
488  else
489  this->m_value = value;
490  }
491 
492  void SetMinimum(T m)
493  {
494  this->m_minimum = m;
495  }
496 
497  void SetMaximum(T m)
498  {
499  this->m_maximum = m;
500  }
501 
502  protected:
505 };
506 
507 
511 
512 // Wrapper class so we can implement intersection (&= operator) for floating point
514 {
515  double m_value;
516  public:
517  OpalMediaOptionRealValue(double value = 0) : m_value(value) { }
518  operator double() const { return m_value; }
519  void operator&=(double other) { if (m_value > other) m_value = other; }
520  friend ostream & operator<<(ostream & strm, const OpalMediaOptionRealValue & value) { return strm << value.m_value; }
521  friend istream & operator>>(istream & strm, OpalMediaOptionRealValue & value) { return strm >> value.m_value; }
522 };
523 
525 
526 
528 {
530  public:
532  const char * name,
533  bool readOnly
534  );
536  const char * name,
537  bool readOnly,
538  const char * const * enumerations,
539  PINDEX count,
540  MergeType merge = EqualMerge,
541  PINDEX value = 0
542  );
543 
544  virtual PObject * Clone() const;
545  virtual void PrintOn(ostream & strm) const;
546  virtual void ReadFrom(istream & strm);
547 
548  virtual Comparison CompareValue(const OpalMediaOption & option) const;
549  virtual void Assign(const OpalMediaOption & option);
550 
551  PINDEX GetValue() const { return m_value; }
552  void SetValue(PINDEX value);
553 
554  const PStringArray & GetEnumerations() const { return m_enumerations; }
555  void SetEnumerations(const PStringArray & e)
556  {
557  m_enumerations = e;
558  }
559 
560  protected:
561  PStringArray m_enumerations;
562  PINDEX m_value;
563 };
564 
565 
567 {
569  public:
571  const char * name,
572  bool readOnly
573  );
575  const char * name,
576  bool readOnly,
577  const PString & value
578  );
579 
580  virtual PObject * Clone() const;
581  virtual void PrintOn(ostream & strm) const;
582  virtual void ReadFrom(istream & strm);
583 
584  virtual bool Merge(const OpalMediaOption & option);
585  virtual Comparison CompareValue(const OpalMediaOption & option) const;
586  virtual void Assign(const OpalMediaOption & option);
587 
588  const PString & GetValue() const { return m_value; }
589  void SetValue(const PString & value);
590 
591  protected:
592  PString m_value;
593 };
594 
595 
597 {
599  public:
601  const char * name,
602  bool readOnly,
603  bool base64 = false
604  );
606  const char * name,
607  bool readOnly,
608  bool base64,
609  const PBYTEArray & value
610  );
612  const char * name,
613  bool readOnly,
614  bool base64,
615  const BYTE * data,
616  PINDEX length
617  );
618 
619  virtual PObject * Clone() const;
620  virtual void PrintOn(ostream & strm) const;
621  virtual void ReadFrom(istream & strm);
622 
623  virtual Comparison CompareValue(const OpalMediaOption & option) const;
624  virtual void Assign(const OpalMediaOption & option);
625 
626  const PBYTEArray & GetValue() const { return m_value; }
627  void SetValue(const PBYTEArray & value);
628  void SetValue(const BYTE * data, PINDEX length);
629 
630  void SetBase64(bool b)
631  {
632  m_base64 = b;
633  }
634 
635  protected:
636  PBYTEArray m_value;
637  bool m_base64;
638 };
639 
640 
642 
643 class OpalMediaFormatInternal : public PObject
644 {
645  PCLASSINFO(OpalMediaFormatInternal, PObject);
646  public:
648  const char * fullName,
649  const OpalMediaType & mediaType,
650  RTP_DataFrame::PayloadTypes rtpPayloadType,
651  const char * encodingName,
652  PBoolean needsJitter,
653  unsigned bandwidth,
654  PINDEX frameSize,
655  unsigned frameTime,
656  unsigned clockRate,
657  time_t timeStamp
658  );
659 
660  const PCaselessString & GetName() const { return formatName; }
661 
662  virtual PObject * Clone() const;
663  virtual void PrintOn(ostream & strm) const;
664 
665  virtual bool IsValid() const;
666  virtual bool IsTransportable() const;
667 
668  virtual PStringToString GetOptions() const;
669  virtual bool GetOptionValue(const PString & name, PString & value) const;
670  virtual bool SetOptionValue(const PString & name, const PString & value);
671  virtual bool GetOptionBoolean(const PString & name, bool dflt) const;
672  virtual bool SetOptionBoolean(const PString & name, bool value);
673  virtual int GetOptionInteger(const PString & name, int dflt) const;
674  virtual bool SetOptionInteger(const PString & name, int value);
675  virtual double GetOptionReal(const PString & name, double dflt) const;
676  virtual bool SetOptionReal(const PString & name, double value);
677  virtual PINDEX GetOptionEnum(const PString & name, PINDEX dflt) const;
678  virtual bool SetOptionEnum(const PString & name, PINDEX value);
679  virtual PString GetOptionString(const PString & name, const PString & dflt) const;
680  virtual bool SetOptionString(const PString & name, const PString & value);
681  virtual bool GetOptionOctets(const PString & name, PBYTEArray & octets) const;
682  virtual bool SetOptionOctets(const PString & name, const PBYTEArray & octets);
683  virtual bool SetOptionOctets(const PString & name, const BYTE * data, PINDEX length);
684  virtual bool AddOption(OpalMediaOption * option, PBoolean overwrite = false);
685  virtual OpalMediaOption * FindOption(const PString & name) const;
686 
687  virtual bool ToNormalisedOptions();
688  virtual bool ToCustomisedOptions();
689  virtual bool Merge(const OpalMediaFormatInternal & mediaFormat);
690 
691  virtual bool ValidateMerge(const OpalMediaFormatInternal & mediaFormat) const;
692 
693  virtual bool IsValidForProtocol(const PString & protocol) const;
694 
695  protected:
696  PCaselessString formatName;
701  PSortedList<OpalMediaOption> options;
705 
706  friend bool operator==(const char * other, const OpalMediaFormat & fmt);
707  friend bool operator!=(const char * other, const OpalMediaFormat & fmt);
708  friend bool operator==(const PString & other, const OpalMediaFormat & fmt);
709  friend bool operator!=(const PString & other, const OpalMediaFormat & fmt);
710 
711  friend class OpalMediaFormat;
712  friend class OpalMediaFormatList;
714 };
715 
716 
718 
724 class OpalMediaFormat : public PContainer
725 {
726  PCLASSINFO(OpalMediaFormat, PContainer)
727  public:
728  OpalMediaFormat(const OpalMediaFormat & c);
729  virtual ~OpalMediaFormat();
730  OpalMediaFormat & operator=(const OpalMediaFormat & c) { AssignContents(c); return *this; }
731  virtual PBoolean MakeUnique();
732  protected:
733  virtual void DestroyContents();
734  virtual void AssignContents(const PContainer & c);
735 
736  public:
740  OpalMediaFormatInternal * info = NULL
741  );
742 
757  const char * fullName,
758  const OpalMediaType & mediaType,
759  RTP_DataFrame::PayloadTypes rtpPayloadType,
760  const char * encodingName,
761  PBoolean needsJitter,
762  unsigned bandwidth,
763  PINDEX frameSize,
764  unsigned frameTime,
765  unsigned clockRate,
766  time_t timeStamp = 0
767  );
768 
779  RTP_DataFrame::PayloadTypes rtpPayloadType,
780  unsigned clockRate,
781  const char * rtpEncodingName = NULL,
782  const char * protocol = NULL
783  );
784 
799  const char * wildcard
800  );
801 
816  const PString & wildcard
817  );
818 
822  OpalMediaFormat & operator=(
823  RTP_DataFrame::PayloadTypes rtpPayloadType
824  );
825 
829  OpalMediaFormat & operator=(
830  const char * wildcard
831  );
832 
836  OpalMediaFormat & operator=(
837  const PString & wildcard
838  );
839 
842  virtual PObject * Clone() const;
843 
846  virtual Comparison Compare(const PObject & obj) const;
847 
852  virtual void PrintOn(ostream & strm) const;
853 
856  virtual void ReadFrom(istream & strm);
857 
862  bool ToNormalisedOptions();
863 
867  bool ToCustomisedOptions();
868 
871  bool Update(
872  const OpalMediaFormat & mediaFormat
873  );
874 
885  bool Merge(
886  const OpalMediaFormat & mediaFormat
887  );
890  bool ValidateMerge(
891  const OpalMediaFormat & mediaFormat
892  ) const;
893 
896  PString GetName() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? "" : m_info->formatName; }
897 
902  PBoolean IsValid() const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->IsValid(); }
903 
907  PBoolean IsTransportable() const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->IsTransportable(); }
908 
914  RTP_DataFrame::PayloadTypes GetPayloadType() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? RTP_DataFrame::IllegalPayloadType : m_info->rtpPayloadType; }
915  void SetPayloadType(RTP_DataFrame::PayloadTypes type) { PWaitAndSignal m(m_mutex); MakeUnique(); if (m_info != NULL) m_info->rtpPayloadType = type; }
916 
919  const char * GetEncodingName() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? "" : m_info->rtpEncodingName.GetPointer(); }
920 
923  OpalMediaType GetMediaType() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? OpalMediaType() : m_info->mediaType; }
924 
928  bool NeedsJitterBuffer() const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->GetOptionBoolean(NeedsJitterOption(), false); }
929  static const PString & NeedsJitterOption();
930 
933  unsigned GetBandwidth() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? 0 : m_info->GetOptionInteger(MaxBitRateOption(), 0); }
934  static const PString & MaxBitRateOption();
935  static const PString & TargetBitRateOption();
936 
941  PINDEX GetFrameSize() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? 0 : m_info->GetOptionInteger(MaxFrameSizeOption(), 0); }
942  static const PString & MaxFrameSizeOption();
943 
947  unsigned GetFrameTime() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? 0 : m_info->GetOptionInteger(FrameTimeOption(), 0); }
948  static const PString & FrameTimeOption();
949 
952  unsigned GetTimeUnits() const { return GetClockRate()/1000; }
953 
955  AudioClockRate = 8000,
956  VideoClockRate = 90000
957  };
958 
961  unsigned GetClockRate() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? 0 : m_info->GetOptionInteger(ClockRateOption(), 1000); }
962  static const PString & ClockRateOption();
963 
966  static const PString & ProtocolOption();
967 
974  static const PString & MaxTxPacketSizeOption();
975 
979  PStringToString GetOptions() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? PStringToString() : m_info->GetOptions(); }
980 
983  PINDEX GetOptionCount() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? 0 : m_info->options.GetSize(); }
984 
989  PINDEX index
990  ) const { PWaitAndSignal m(m_mutex); return m_info->options[index]; }
991 
997  const PString & name,
998  PString & value
999  ) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->GetOptionValue(name, value); }
1000 
1008  const PString & name,
1009  const PString & value
1010  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionValue(name, value); }
1011 
1016  const PString & name,
1017  bool dflt = false
1018  ) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->GetOptionBoolean(name, dflt); }
1019 
1027  const PString & name,
1028  bool value
1029  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionBoolean(name, value); }
1030 
1035  const PString & name,
1036  int dflt = 0
1037  ) const { PWaitAndSignal m(m_mutex); return m_info == NULL ? dflt : m_info->GetOptionInteger(name, dflt); }
1038 
1047  const PString & name,
1048  int value
1049  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionInteger(name, value); }
1050 
1055  const PString & name,
1056  double dflt = 0
1057  ) const { PWaitAndSignal m(m_mutex); return m_info == NULL ? dflt : m_info->GetOptionReal(name, dflt); }
1058 
1066  const PString & name,
1067  double value
1068  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionReal(name, value); }
1069 
1075  const PString & name,
1076  PINDEX dflt = 0
1077  ) const { PWaitAndSignal m(m_mutex); return m_info == NULL ? dflt : m_info->GetOptionEnum(name, dflt); }
1078 
1086  const PString & name,
1087  PINDEX value
1088  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionEnum(name, value); }
1089 
1094  const PString & name,
1095  const PString & dflt = PString::Empty()
1096  ) const { PWaitAndSignal m(m_mutex); return m_info == NULL ? dflt : m_info->GetOptionString(name, dflt); }
1097 
1105  const PString & name,
1106  const PString & value
1107  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionString(name, value); }
1108 
1113  const PString & name,
1114  PBYTEArray & octets
1115  ) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->GetOptionOctets(name, octets); }
1116 
1124  const PString & name,
1125  const PBYTEArray & octets
1126  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionOctets(name, octets); }
1128  const PString & name,
1129  const BYTE * data,
1130  PINDEX length
1131  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->SetOptionOctets(name, data, length); }
1132 
1135  static OpalMediaFormatList GetAllRegisteredMediaFormats();
1136  static void GetAllRegisteredMediaFormats(
1137  OpalMediaFormatList & copy
1138  );
1139 
1143  static bool SetRegisteredMediaFormat(
1144  const OpalMediaFormat & mediaFormat
1145  );
1146 
1150  static bool RemoveRegisteredMediaFormat(
1151  const OpalMediaFormat & mediaFormat
1152  );
1153 
1158  OpalMediaOption * option,
1159  PBoolean overwrite = false
1160  ) { PWaitAndSignal m(m_mutex); MakeUnique(); return m_info != NULL && m_info->AddOption(option, overwrite); }
1161 
1165  bool HasOption(const PString & name) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->FindOption(name) != NULL; }
1166 
1171  const PString & name
1172  ) const { PWaitAndSignal m(m_mutex); return m_info == NULL ? NULL : m_info->FindOption(name); }
1173 
1177  template <class T> T * FindOptionAs(
1178  const PString & name
1179  ) const { return dynamic_cast<T *>(FindOption(name)); }
1180 
1186  bool IsValidForProtocol(const PString & protocol) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->IsValidForProtocol(protocol); }
1187 
1188  time_t GetCodecVersionTime() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? 0 : m_info->codecVersionTime; }
1189 
1190  ostream & PrintOptions(ostream & strm) const
1191  {
1192  PWaitAndSignal m(m_mutex);
1193  if (m_info != NULL)
1194  strm << setw(-1) << *m_info;
1195  return strm;
1196  }
1197 
1198 #if OPAL_VIDEO
1199 
1201  void AdjustVideoArgs(
1202  PVideoDevice::OpenArgs & args
1203  ) const;
1204 #endif
1205 
1206  // Backward compatibility
1207  virtual PBoolean IsEmpty() const { PWaitAndSignal m(m_mutex); return m_info == NULL || !m_info->IsValid(); }
1208  operator PString() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? "" : m_info->formatName; }
1209  operator const char *() const { PWaitAndSignal m(m_mutex); return m_info == NULL ? "" : m_info->formatName; }
1210  bool operator==(const char * other) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->formatName == other; }
1211  bool operator!=(const char * other) const { PWaitAndSignal m(m_mutex); return m_info == NULL || m_info->formatName != other; }
1212  bool operator==(const PString & other) const { PWaitAndSignal m(m_mutex); return m_info != NULL && m_info->formatName == other; }
1213  bool operator!=(const PString & other) const { PWaitAndSignal m(m_mutex); return m_info == NULL || m_info->formatName != other; }
1214  bool operator==(const OpalMediaFormat & other) const { PWaitAndSignal m(m_mutex); return Compare(other) == EqualTo; }
1215  bool operator!=(const OpalMediaFormat & other) const { PWaitAndSignal m(m_mutex); return Compare(other) != EqualTo; }
1216  friend bool operator==(const char * other, const OpalMediaFormat & fmt) { return fmt.m_info != NULL && fmt.m_info->formatName == other; }
1217  friend bool operator!=(const char * other, const OpalMediaFormat & fmt) { return fmt.m_info == NULL || fmt.m_info->formatName != other; }
1218  friend bool operator==(const PString & other, const OpalMediaFormat & fmt) { return fmt.m_info != NULL && fmt.m_info->formatName == other; }
1219  friend bool operator!=(const PString & other, const OpalMediaFormat & fmt) { return fmt.m_info == NULL || fmt.m_info->formatName != other; }
1220 
1221 #if OPAL_H323
1222  static const PString & MediaPacketizationOption();
1223  static const PString & MediaPacketizationsOption();
1224  PStringSet GetMediaPacketizations() const;
1225  void SetMediaPacketizations(const PStringSet & packetizations);
1226 #endif
1227 
1228  private:
1229  PBoolean SetSize(PINDEX) { return true; }
1230 
1231  protected:
1232  void Construct(OpalMediaFormatInternal * info);
1233 
1235  PMutex m_mutex;
1236 
1238  friend class OpalMediaFormatList;
1239 };
1240 
1241 
1243 {
1244  public:
1246  const char * fullName,
1247  RTP_DataFrame::PayloadTypes rtpPayloadType,
1248  const char * encodingName,
1249  PINDEX frameSize,
1250  unsigned frameTime,
1251  unsigned rxFrames,
1252  unsigned txFrames,
1253  unsigned maxFrames,
1254  unsigned clockRate,
1255  time_t timeStamp
1256  );
1257  virtual PObject * Clone() const;
1258  virtual bool Merge(const OpalMediaFormatInternal & mediaFormat);
1259 };
1260 
1262 {
1263  PCLASSINFO(OpalAudioFormat, OpalMediaFormat);
1264  public:
1266  OpalMediaFormatInternal * info = NULL
1267  ) : OpalMediaFormat(info) { }
1269  const char * fullName,
1270  RTP_DataFrame::PayloadTypes rtpPayloadType,
1271  const char * encodingName,
1272  PINDEX frameSize,
1273  unsigned frameTime,
1274  unsigned rxFrames,
1275  unsigned txFrames,
1276  unsigned maxFrames = 256,
1277  unsigned clockRate = 8000,
1278  time_t timeStamp = 0
1279  );
1280 
1281  static const PString & RxFramesPerPacketOption();
1282  static const PString & TxFramesPerPacketOption();
1283  static const PString & MaxFramesPerPacketOption();
1284  static const PString & ChannelsOption();
1285 };
1286 
1287 #if OPAL_VIDEO
1289 {
1290  public:
1292  const char * fullName,
1293  RTP_DataFrame::PayloadTypes rtpPayloadType,
1294  const char * encodingName,
1295  unsigned maxFrameWidth,
1296  unsigned maxFrameHeight,
1297  unsigned maxFrameRate,
1298  unsigned maxBitRate,
1299  time_t timeStamp
1300  );
1301  virtual PObject * Clone() const;
1302  virtual bool Merge(const OpalMediaFormatInternal & mediaFormat);
1303 };
1304 
1305 
1307 {
1308  PCLASSINFO(OpalVideoFormat, OpalMediaFormat);
1309  public:
1311  OpalMediaFormatInternal * info = NULL
1312  ) : OpalMediaFormat(info) { }
1314  const char * fullName,
1315  RTP_DataFrame::PayloadTypes rtpPayloadType,
1316  const char * encodingName,
1317  unsigned maxFrameWidth,
1318  unsigned maxFrameHeight,
1319  unsigned maxFrameRate,
1320  unsigned maxBitRate,
1321  time_t timeStamp = 0
1322  );
1323 
1324  static const PString & FrameWidthOption();
1325  static const PString & FrameHeightOption();
1326  static const PString & MinRxFrameWidthOption();
1327  static const PString & MinRxFrameHeightOption();
1328  static const PString & MaxRxFrameWidthOption();
1329  static const PString & MaxRxFrameHeightOption();
1330  static const PString & TemporalSpatialTradeOffOption();
1331  static const PString & TxKeyFramePeriodOption();
1332  static const PString & RateControlPeriodOption(); // Period over which the rate controller maintains the target bit rate.
1333  static const PString & RateControllerOption(); // String for controller algorithm. Empty is none.
1334 
1351  eNumRoles
1352  };
1353  enum { ContentRoleMask = 15 };
1354  __inline static unsigned ContentRoleBit(ContentRole contentRole) { return contentRole != eNoRole ? (1<<(contentRole-1)) : 0; }
1355  static const PString & ContentRoleOption();
1356  static const PString & ContentRoleMaskOption();
1357 };
1358 #endif
1359 
1360 // List of known media formats
1361 
1362 #define OPAL_PCM16 "PCM-16"
1363 #define OPAL_PCM16S "PCM-16S"
1364 #define OPAL_PCM16_16KHZ "PCM-16-16kHz"
1365 #define OPAL_PCM16S_16KHZ "PCM-16S-16kHz"
1366 #define OPAL_PCM16_32KHZ "PCM-16-32kHz"
1367 #define OPAL_PCM16S_32KHZ "PCM-16S-32kHz"
1368 #define OPAL_PCM16_48KHZ "PCM-16-48kHz"
1369 #define OPAL_PCM16S_48KHZ "PCM-16S-48kHz"
1370 #define OPAL_L16_MONO_8KHZ "Linear-16-Mono-8kHz"
1371 #define OPAL_L16_STEREO_8KHZ "Linear-16-Stereo-8kHz"
1372 #define OPAL_L16_MONO_16KHZ "Linear-16-Mono-16kHz"
1373 #define OPAL_L16_STEREO_16KHZ "Linear-16-Stereo-16kHz"
1374 #define OPAL_L16_MONO_32KHZ "Linear-16-Mono-32kHz"
1375 #define OPAL_L16_STEREO_32KHZ "Linear-16-Stereo-32kHz"
1376 #define OPAL_L16_MONO_48KHZ "Linear-16-Mono-48kHz"
1377 #define OPAL_L16_STEREO_48KHZ "Linear-16-Stereo-48kHz"
1378 #define OPAL_G711_ULAW_64K "G.711-uLaw-64k"
1379 #define OPAL_G711_ALAW_64K "G.711-ALaw-64k"
1380 #define OPAL_G722 "G.722"
1381 #define OPAL_G7221 "G.722.1"
1382 #define OPAL_G7222 "G.722.2"
1383 #define OPAL_G726_40K "G.726-40K"
1384 #define OPAL_G726_32K "G.726-32K"
1385 #define OPAL_G726_24K "G.726-24K"
1386 #define OPAL_G726_16K "G.726-16K"
1387 #define OPAL_G728 "G.728"
1388 #define OPAL_G729 "G.729"
1389 #define OPAL_G729A "G.729A"
1390 #define OPAL_G729B "G.729B"
1391 #define OPAL_G729AB "G.729A/B"
1392 #define OPAL_G7231 "G.723.1"
1393 #define OPAL_G7231_6k3 OPAL_G7231
1394 #define OPAL_G7231_5k3 "G.723.1(5.3k)"
1395 #define OPAL_G7231A_6k3 "G.723.1A(6.3k)"
1396 #define OPAL_G7231A_5k3 "G.723.1A(5.3k)"
1397 #define OPAL_GSM0610 "GSM-06.10"
1398 #define OPAL_GSMAMR "GSM-AMR"
1399 #define OPAL_iLBC "iLBC"
1400 #define OPAL_H261 "H.261"
1401 #define OPAL_H263 "H.263"
1402 #define OPAL_H264 "H.264"
1403 #define OPAL_H264_MODE0 "H.264-0"
1404 #define OPAL_H264_MODE1 "H.264-1"
1405 #define OPAL_MPEG4 "MPEG4"
1406 #define OPAL_RFC2833 "UserInput/RFC2833"
1407 #define OPAL_CISCONSE "NamedSignalEvent"
1408 #define OPAL_T38 "T.38"
1409 
1410 extern const OpalAudioFormat & GetOpalPCM16();
1411 extern const OpalAudioFormat & GetOpalPCM16S();
1412 extern const OpalAudioFormat & GetOpalPCM16_16KHZ();
1413 extern const OpalAudioFormat & GetOpalPCM16S_16KHZ();
1414 extern const OpalAudioFormat & GetOpalPCM16_32KHZ();
1415 extern const OpalAudioFormat & GetOpalPCM16S_32KHZ();
1416 extern const OpalAudioFormat & GetOpalPCM16_48KHZ();
1417 extern const OpalAudioFormat & GetOpalPCM16S_48KHZ();
1418 extern const OpalAudioFormat & GetOpalL16_MONO_8KHZ();
1419 extern const OpalAudioFormat & GetOpalL16_STEREO_8KHZ();
1420 extern const OpalAudioFormat & GetOpalL16_MONO_16KHZ();
1421 extern const OpalAudioFormat & GetOpalL16_STEREO_16KHZ();
1422 extern const OpalAudioFormat & GetOpalL16_MONO_32KHZ();
1423 extern const OpalAudioFormat & GetOpalL16_STEREO_32KHZ();
1424 extern const OpalAudioFormat & GetOpalL16_MONO_48KHZ();
1425 extern const OpalAudioFormat & GetOpalL16_STEREO_48KHZ();
1426 extern const OpalAudioFormat & GetOpalG711_ULAW_64K();
1427 extern const OpalAudioFormat & GetOpalG711_ALAW_64K();
1428 extern const OpalAudioFormat & GetOpalG722();
1429 extern const OpalAudioFormat & GetOpalG7221();
1430 extern const OpalAudioFormat & GetOpalG7222();
1431 extern const OpalAudioFormat & GetOpalG726_40K();
1432 extern const OpalAudioFormat & GetOpalG726_32K();
1433 extern const OpalAudioFormat & GetOpalG726_24K();
1434 extern const OpalAudioFormat & GetOpalG726_16K();
1435 extern const OpalAudioFormat & GetOpalG728();
1436 extern const OpalAudioFormat & GetOpalG729();
1437 extern const OpalAudioFormat & GetOpalG729A();
1438 extern const OpalAudioFormat & GetOpalG729B();
1439 extern const OpalAudioFormat & GetOpalG729AB();
1440 extern const OpalAudioFormat & GetOpalG7231_6k3();
1441 extern const OpalAudioFormat & GetOpalG7231_5k3();
1442 extern const OpalAudioFormat & GetOpalG7231A_6k3();
1443 extern const OpalAudioFormat & GetOpalG7231A_5k3();
1444 extern const OpalAudioFormat & GetOpalGSM0610();
1445 extern const OpalAudioFormat & GetOpalGSMAMR();
1446 extern const OpalAudioFormat & GetOpaliLBC();
1447 
1448 extern const OpalMediaFormat & GetOpalRFC2833();
1449 
1450 #if OPAL_T38_CAPABILITY
1451 extern const OpalMediaFormat & GetOpalCiscoNSE();
1452 extern const OpalMediaFormat & GetOpalT38();
1453 #endif
1454 
1455 
1456 #define OpalPCM16 GetOpalPCM16()
1457 #define OpalPCM16S GetOpalPCM16S()
1458 #define OpalPCM16_16KHZ GetOpalPCM16_16KHZ()
1459 #define OpalPCM16S_16KHZ GetOpalPCM16S_16KHZ()
1460 #define OpalPCM16_32KHZ GetOpalPCM16_32KHZ()
1461 #define OpalPCM16S_32KHZ GetOpalPCM16S_32KHZ()
1462 #define OpalPCM16_48KHZ GetOpalPCM16_48KHZ()
1463 #define OpalPCM16S_48KHZ GetOpalPCM16S_48KHZ()
1464 #define OpalL16_MONO_8KHZ GetOpalL16_MONO_8KHZ()
1465 #define OpalL16_STEREO_8KHZ GetOpalL16_STEREO_8KHZ()
1466 #define OpalL16_MONO_16KHZ GetOpalL16_MONO_16KHZ()
1467 #define OpalL16_STEREO_16KHZ GetOpalL16_STEREO_16KHZ()
1468 #define OpalL16_MONO_32KHZ GetOpalL16_MONO_32KHZ()
1469 #define OpalL16_STEREO_32KHZ GetOpalL16_STEREO_32KHZ()
1470 #define OpalL16_MONO_48KHZ GetOpalL16_MONO_48KHZ()
1471 #define OpalL16_STEREO_48KHZ GetOpalL16_STEREO_48KHZ()
1472 #define OpalG711_ULAW_64K GetOpalG711_ULAW_64K()
1473 #define OpalG711_ALAW_64K GetOpalG711_ALAW_64K()
1474 #define OpalG722 GetOpalG722()
1475 #define OpalG7221 GetOpalG7221()
1476 #define OpalG7222 GetOpalG7222()
1477 #define OpalG726_40K GetOpalG726_40K()
1478 #define OpalG726_32K GetOpalG726_32K()
1479 #define OpalG726_24K GetOpalG726_24K()
1480 #define OpalG726_16K GetOpalG726_16K()
1481 #define OpalG728 GetOpalG728()
1482 #define OpalG729 GetOpalG729()
1483 #define OpalG729A GetOpalG729A()
1484 #define OpalG729B GetOpalG729B()
1485 #define OpalG729AB GetOpalG729AB()
1486 #define OpalG7231_6k3 GetOpalG7231_6k3()
1487 #define OpalG7231_5k3 GetOpalG7231_5k3()
1488 #define OpalG7231A_6k3 GetOpalG7231A_6k3()
1489 #define OpalG7231A_5k3 GetOpalG7231A_5k3()
1490 #define OpalGSM0610 GetOpalGSM0610()
1491 #define OpalGSMAMR GetOpalGSMAMR()
1492 #define OpaliLBC GetOpaliLBC()
1493 #define OpalRFC2833 GetOpalRFC2833()
1494 #define OpalCiscoNSE GetOpalCiscoNSE()
1495 #define OpalT38 GetOpalT38()
1496 
1497 #define OpalL16Mono8kHz OpalL16_MONO_8KHZ
1498 #define OpalL16Mono16kHz OpalL16_MONO_16KHZ
1499 #define OpalG711uLaw OpalG711_ULAW_64K
1500 #define OpalG711ALaw OpalG711_ALAW_64K
1501 
1502 #define OPAL_T140 "T.140"
1503 #define OpalT140 GetOpalT140()
1504 extern const OpalMediaFormat & GetOpalT140();
1505 
1506 #if OPAL_HAS_MSRP
1507 #define OPAL_MSRP "MSRP"
1508 #define OpalMSRP GetOpalMSRP()
1509 extern const OpalMediaFormat & GetOpalMSRP();
1510 #endif
1511 
1512 #if OPAL_HAS_SIPIM
1513 #define OPAL_SIPIM "SIP-IM"
1514 #define OpalSIPIM GetOpalSIPIM()
1515 extern const OpalMediaFormat & GetOpalSIPIM();
1516 #endif
1517 
1518 #ifdef _MSC_VER
1519 #if _MSC_VER < 1300
1520 #pragma warning(default:4663)
1521 #endif
1522 #endif
1523 
1524 #endif // OPAL_OPAL_MEDIAFMT_H
1525 
1526 
1527 // End of File ///////////////////////////////////////////////////////////////
const OpalAudioFormat & GetOpalG729AB()
MergeType GetMerge() const
Definition: mediafmt.h:303
friend bool operator==(const char *other, const OpalMediaFormat &fmt)
Definition: mediafmt.h:1216
PString m_value
Definition: mediafmt.h:592
T GetValue() const
Definition: mediafmt.h:430
const OpalAudioFormat & GetOpalG711_ALAW_64K()
const OpalAudioFormat & GetOpalG722()
bool HasType(const OpalMediaType &type, bool mustBeTransportable=true) const
bool m_readOnly
Definition: mediafmt.h:353
const OpalAudioFormat & GetOpalL16_MONO_8KHZ()
const PString & GetFMTPName() const
Definition: mediafmt.h:307
void SetMinimum(T m)
Definition: mediafmt.h:492
bool IsReadOnly() const
Definition: mediafmt.h:300
Definition: mediafmt.h:1242
PINDEX GetOptionCount() const
Definition: mediafmt.h:983
PString defaultValue
Definition: mediafmt.h:344
const OpalAudioFormat & GetOpalG7221()
const OpalAudioFormat & GetOpalG7231A_6k3()
Definition: mediafmt.h:254
Definition: mediafmt.h:258
void SetBase64(bool b)
Definition: mediafmt.h:630
const OpalAudioFormat & GetOpalG7231A_5k3()
Definition: mediafmt.h:247
Definition: mediafmt.h:596
bool forceIsTransportable
Definition: mediafmt.h:703
OpalMediaOptionNumericalValue< OpalMediaOptionRealValue > OpalMediaOptionReal
Definition: mediafmt.h:524
PBYTEArray m_value
Definition: mediafmt.h:636
Definition: mediafmt.h:368
PSortedList< OpalMediaOption > options
Definition: mediafmt.h:701
unsigned GetClockRate() const
Definition: mediafmt.h:961
PCaselessString m_FMTPName
Definition: mediafmt.h:357
void SetReadOnly(bool readOnly)
Definition: mediafmt.h:301
const OpalAudioFormat & GetOpalGSM0610()
OpalMediaOptionRealValue(double value=0)
Definition: mediafmt.h:517
friend istream & operator>>(istream &strm, OpalMediaOptionRealValue &value)
Definition: mediafmt.h:521
RTP_DataFrame::PayloadTypes GetPayloadType() const
Definition: mediafmt.h:914
void SetFMTPDefault(const char *value)
Definition: mediafmt.h:311
Definition: mediafmt.h:1347
ostream & PrintOptions(ostream &strm) const
Definition: mediafmt.h:1190
const OpalAudioFormat & GetOpalG726_24K()
OpalMediaOptionNumericalValue< int > OpalMediaOptionInteger
Definition: mediafmt.h:509
bool operator==(const OpalMediaFormat &other) const
Definition: mediafmt.h:1214
Definition: mediafmt.h:1349
virtual Comparison CompareValue(const OpalMediaOption &option) const
Definition: mediafmt.h:411
Definition: mediafmt.h:643
const OpalMediaOption & GetOption(PINDEX index) const
Definition: mediafmt.h:988
const OpalAudioFormat & GetOpalPCM16_16KHZ()
Definition: mediatype.h:57
PStringArray m_enumerations
Definition: mediafmt.h:561
const OpalAudioFormat & GetOpalG7222()
T m_value
Definition: mediafmt.h:441
const OpalAudioFormat & GetOpalL16_STEREO_48KHZ()
static __inline unsigned ContentRoleBit(ContentRole contentRole)
Definition: mediafmt.h:1354
PINDEX GetValue() const
Definition: mediafmt.h:551
void SetMerge(MergeType merge)
Definition: mediafmt.h:304
ContentRole
Definition: mediafmt.h:1345
friend ostream & operator<<(ostream &strm, const OpalMediaOptionRealValue &value)
Definition: mediafmt.h:520
void operator&=(double other)
Definition: mediafmt.h:519
Definition: mediafmt.h:1346
Definition: mediafmt.h:257
virtual void ReadFrom(istream &strm)
Definition: mediafmt.h:470
const OpalAudioFormat & GetOpalGSMAMR()
OpalVideoFormat(OpalMediaFormatInternal *info=NULL)
Definition: mediafmt.h:1310
unsigned GetTimeUnits() const
Definition: mediafmt.h:952
const OpalAudioFormat & GetOpalPCM16S()
const PStringArray & GetEnumerations() const
Definition: mediafmt.h:554
bool SetOptionOctets(const PString &name, const PBYTEArray &octets)
Definition: mediafmt.h:1123
bool GetOptionBoolean(const PString &name, bool dflt=false) const
Definition: mediafmt.h:1015
PayloadTypes
Definition: rtp.h:86
time_t GetCodecVersionTime() const
Definition: mediafmt.h:1188
unsigned ordinal
Definition: mediafmt.h:326
PINDEX GetFrameSize() const
Definition: mediafmt.h:941
const OpalAudioFormat & GetOpalG729B()
const OpalAudioFormat & GetOpaliLBC()
bool SetOptionOctets(const PString &name, const BYTE *data, PINDEX length)
Definition: mediafmt.h:1127
void SetH245Generic(const H245GenericInfo &genericInfo)
Definition: mediafmt.h:348
OpalMediaFormat & operator=(const OpalMediaFormat &c)
Definition: mediafmt.h:730
Definition: mediafmt.h:253
Definition: mediafmt.h:72
double GetOptionReal(const PString &name, double dflt=0) const
Definition: mediafmt.h:1054
const OpalAudioFormat & GetOpalPCM16S_32KHZ()
Definition: mediafmt.h:513
PString GetOptionString(const PString &name, const PString &dflt=PString::Empty()) const
Definition: mediafmt.h:1093
void Reorder(const PStringArray &order)
bool NeedsJitterBuffer() const
Definition: mediafmt.h:928
OpalMediaFormatList & operator+=(const char *wildcard)
Definition: mediafmt.h:98
OpalMediaOptionNumericalValue< bool > OpalMediaOptionBoolean
Definition: mediafmt.h:508
bool operator==(const PString &other) const
Definition: mediafmt.h:1212
Definition: mediafmt.h:256
friend bool operator!=(const PString &other, const OpalMediaFormat &fmt)
Definition: mediafmt.h:1219
const OpalAudioFormat & GetOpalL16_STEREO_8KHZ()
bool SetOptionReal(const PString &name, double value)
Definition: mediafmt.h:1065
Definition: mediafmt.h:1261
Definition: mediafmt.h:566
bool excludeOLC
Definition: mediafmt.h:341
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:451
const char * GetEncodingName() const
Definition: mediafmt.h:919
const OpalMediaFormat & GetOpalRFC2833()
int GetOptionInteger(const PString &name, int dflt=0) const
Definition: mediafmt.h:1034
H245GenericInfo m_H245Generic
Definition: mediafmt.h:362
const OpalAudioFormat & GetOpalG726_40K()
OpalMediaOptionNumericalValue< unsigned > OpalMediaOptionUnsigned
Definition: mediafmt.h:510
Definition: mediafmt.h:724
bool operator!=(const OpalMediaFormat &other) const
Definition: mediafmt.h:1215
virtual void PrintOn(ostream &strm) const
Definition: mediafmt.h:388
PMutex m_mutex
Definition: mediafmt.h:1235
Definition: mediafmt.h:259
time_t codecVersionTime
Definition: mediafmt.h:702
const OpalAudioFormat & GetOpalG711_ULAW_64K()
bool GetOptionOctets(const PString &name, PBYTEArray &octets) const
Definition: mediafmt.h:1112
bool SetOptionEnum(const PString &name, PINDEX value)
Definition: mediafmt.h:1085
const OpalAudioFormat & GetOpalPCM16_48KHZ()
void SetMaximum(T m)
Definition: mediafmt.h:497
T m_maximum
Definition: mediafmt.h:504
int m_channels
Definition: mediafmt.h:704
bool SetOptionValue(const PString &name, const PString &value)
Definition: mediafmt.h:1007
const OpalAudioFormat & GetOpalG726_16K()
const OpalAudioFormat & GetOpalL16_MONO_32KHZ()
Definition: mediafmt.h:260
PStringToString GetOptions() const
Definition: mediafmt.h:979
const OpalAudioFormat & GetOpalG726_32K()
const OpalAudioFormat & GetOpalPCM16()
OpalMediaFormatList(const OpalMediaFormatList &l)
Definition: mediafmt.h:90
PBoolean HasFormat(RTP_DataFrame::PayloadTypes rtpPayloadType) const
Definition: mediafmt.h:173
OpalAudioFormat(OpalMediaFormatInternal *info=NULL)
Definition: mediafmt.h:1265
const OpalAudioFormat & GetOpalPCM16_32KHZ()
PMutex media_format_mutex
Definition: mediafmt.h:700
const OpalMediaFormat & GetOpalT140()
PBoolean IsValid() const
Definition: mediafmt.h:902
const OpalAudioFormat & GetOpalG7231_6k3()
PString GetName() const
Definition: mediafmt.h:896
virtual PBoolean IsEmpty() const
Definition: mediafmt.h:1207
friend bool operator!=(const char *other, const OpalMediaFormat &fmt)
Definition: mediafmt.h:1217
bool SetOptionBoolean(const PString &name, bool value)
Definition: mediafmt.h:1026
OpalMediaOption * FindOption(const PString &name) const
Definition: mediafmt.h:1170
Definition: mediafmt.h:1348
OpalMediaType GetMediaType() const
Definition: mediafmt.h:923
const PString & GetName() const
Definition: mediafmt.h:298
const OpalAudioFormat & GetOpalL16_STEREO_32KHZ()
bool operator!=(const PString &other) const
Definition: mediafmt.h:1213
bool m_base64
Definition: mediafmt.h:637
OpalMediaFormatInternal * m_info
Definition: mediafmt.h:1234
const OpalAudioFormat & GetOpalG729()
int position
Definition: mediafmt.h:343
T m_minimum
Definition: mediafmt.h:503
const OpalMediaFormat & GetOpalSIPIM()
virtual bool Merge(const OpalMediaOption &option)
const H245GenericInfo & GetH245Generic() const
Definition: mediafmt.h:347
virtual void ReadFrom(istream &strm)
Definition: mediafmt.h:393
bool GetOptionValue(const PString &name, PString &value) const
Definition: mediafmt.h:996
Definition: mediafmt.h:255
const_iterator FindFormat(RTP_DataFrame::PayloadTypes rtpPayloadType, const unsigned clockRate, const char *rtpEncodingName=NULL, const char *protocol=NULL, const_iterator start=const_iterator()) const
OpalMediaFormatList & operator-=(const OpalMediaFormat &format)
void SetPayloadType(RTP_DataFrame::PayloadTypes type)
Definition: mediafmt.h:915
const PString & GetValue() const
Definition: mediafmt.h:588
IntegerTypes
Definition: mediafmt.h:334
bool excludeReqMode
Definition: mediafmt.h:342
bool SetOptionInteger(const PString &name, int value)
Definition: mediafmt.h:1046
friend bool operator==(const PString &other, const OpalMediaFormat &fmt)
Definition: mediafmt.h:1218
bool operator==(const char *other) const
Definition: mediafmt.h:1210
bool HasOption(const PString &name) const
Definition: mediafmt.h:1165
Definition: mediafmt.h:315
H245GenericInfo()
Definition: mediafmt.h:316
PINDEX m_value
Definition: mediafmt.h:562
virtual PObject * Clone() const
Definition: mediafmt.h:383
const OpalAudioFormat & GetOpalPCM16S_16KHZ()
OpalMediaOptionValue(const char *name, bool readOnly, OpalMediaOption::MergeType merge=OpalMediaOption::MinMerge, T value=T())
Definition: mediafmt.h:372
const OpalAudioFormat & GetOpalG728()
PString m_FMTPDefault
Definition: mediafmt.h:358
unsigned GetFrameTime() const
Definition: mediafmt.h:947
Definition: mediafmt.h:527
const OpalAudioFormat & GetOpalPCM16S_48KHZ()
const OpalAudioFormat & GetOpalG7231_5k3()
Definition: mediafmt.h:1350
PBoolean HasFormat(const PString &wildcard) const
Definition: mediafmt.h:182
unsigned GetBandwidth() const
Definition: mediafmt.h:933
const PString & GetFMTPDefault() const
Definition: mediafmt.h:310
void SetValue(T value)
Definition: mediafmt.h:435
void Remove(const PStringArray &mask)
PLIST(OpalMediaFormatBaseList, OpalMediaFormat)
const OpalAudioFormat & GetOpalL16_STEREO_16KHZ()
const OpalAudioFormat & GetOpalL16_MONO_48KHZ()
Definition: mediafmt.h:1288
PCaselessString m_name
Definition: mediafmt.h:352
void SetEnumerations(const PStringArray &e)
Definition: mediafmt.h:555
void SetValue(T value)
Definition: mediafmt.h:482
MergeType
Definition: mediafmt.h:252
const OpalAudioFormat & GetOpalG729A()
const PCaselessString & GetName() const
Definition: mediafmt.h:660
virtual void Assign(const OpalMediaOption &option)
Definition: mediafmt.h:423
MergeType m_merge
Definition: mediafmt.h:354
Definition: mediafmt.h:1306
const PBYTEArray & GetValue() const
Definition: mediafmt.h:626
const OpalAudioFormat & GetOpalL16_MONO_16KHZ()
void SetFMTPName(const char *name)
Definition: mediafmt.h:308
PBoolean IsTransportable() const
Definition: mediafmt.h:907
bool SetOptionString(const PString &name, const PString &value)
Definition: mediafmt.h:1104
OpalMediaType mediaType
Definition: mediafmt.h:699
StandardClockRate
Definition: mediafmt.h:954
PCaselessString formatName
Definition: mediafmt.h:696
const OpalMediaFormat & GetOpalMSRP()
Definition: mediafmt.h:446
virtual bool Merge(const OpalMediaOption &option)
Definition: mediafmt.h:398
PString rtpEncodingName
Definition: mediafmt.h:698
Definition: mediafmt.h:329
T * FindOptionAs(const PString &name) const
Definition: mediafmt.h:1177
RTP_DataFrame::PayloadTypes rtpPayloadType
Definition: mediafmt.h:697
bool IsValidForProtocol(const PString &protocol) const
Definition: mediafmt.h:1186
PINDEX GetOptionEnum(const PString &name, PINDEX dflt=0) const
Definition: mediafmt.h:1074
Modes
Definition: mediafmt.h:328
bool excludeTCS
Definition: mediafmt.h:340
bool operator!=(const char *other) const
Definition: mediafmt.h:1211
bool AddOption(OpalMediaOption *option, PBoolean overwrite=false)
Definition: mediafmt.h:1157
virtual PObject * Clone() const
Definition: mediafmt.h:465