qosqualifiers.cpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is MPEG4IP.
  13.  * 
  14.  * The Initial Developer of the Original Code is Cisco Systems Inc.
  15.  * Portions created by Cisco Systems Inc. are
  16.  * Copyright (C) Cisco Systems Inc. 2001.  All Rights Reserved.
  17.  * 
  18.  * Contributor(s): 
  19.  * Dave Mackie dmackie@cisco.com
  20.  */
  21. #include "mp4common.h"
  22. MP4QosDescriptor::MP4QosDescriptor()
  23. : MP4Descriptor(MP4QosDescrTag)
  24. {
  25. AddProperty( /* 0 */
  26. new MP4Integer8Property("predefined"));
  27. AddProperty( /* 1 */
  28. new MP4QosQualifierProperty("qualifiers",
  29. MP4QosTagsStart, MP4QosTagsEnd, Optional, Many));
  30. }
  31. MP4MaxDelayQosQualifier::MP4MaxDelayQosQualifier()
  32. : MP4QosQualifier(MP4MaxDelayQosTag)
  33. {
  34. AddProperty( /* 0 */
  35. new MP4Integer32Property("maxDelay"));
  36. }
  37. MP4PrefMaxDelayQosQualifier::MP4PrefMaxDelayQosQualifier()
  38. : MP4QosQualifier(MP4PrefMaxDelayQosTag)
  39. {
  40. AddProperty( /* 0 */
  41. new MP4Integer32Property("prefMaxDelay"));
  42. }
  43. MP4LossProbQosQualifier::MP4LossProbQosQualifier()
  44. : MP4QosQualifier(MP4LossProbQosTag)
  45. {
  46. AddProperty( /* 0 */
  47. new MP4Float32Property("lossProb"));
  48. }
  49. MP4MaxGapLossQosQualifier::MP4MaxGapLossQosQualifier()
  50. : MP4QosQualifier(MP4MaxGapLossQosTag)
  51. {
  52. AddProperty( /* 0 */
  53. new MP4Integer32Property("maxGapLoss"));
  54. }
  55. MP4MaxAUSizeQosQualifier::MP4MaxAUSizeQosQualifier()
  56. : MP4QosQualifier(MP4MaxAUSizeQosTag)
  57. {
  58. AddProperty( /* 0 */
  59. new MP4Integer32Property("maxAUSize"));
  60. }
  61. MP4AvgAUSizeQosQualifier::MP4AvgAUSizeQosQualifier()
  62. : MP4QosQualifier(MP4AvgAUSizeQosTag)
  63. {
  64. AddProperty( /* 0 */
  65. new MP4Integer32Property("avgAUSize"));
  66. }
  67. MP4MaxAURateQosQualifier::MP4MaxAURateQosQualifier()
  68. : MP4QosQualifier(MP4MaxAURateQosTag)
  69. {
  70. AddProperty( /* 0 */
  71. new MP4Integer32Property("maxAURate"));
  72. }
  73. MP4UnknownQosQualifier::MP4UnknownQosQualifier()
  74. : MP4QosQualifier()
  75. {
  76. AddProperty( /* 0 */
  77. new MP4BytesProperty("data"));
  78. }
  79. void MP4UnknownQosQualifier::Read(MP4File* pFile)
  80. {
  81. ReadHeader(pFile);
  82. /* byte properties need to know how long they are before reading */
  83. ((MP4BytesProperty*)m_pProperties[0])->SetValueSize(m_size);
  84. ReadProperties(pFile);
  85. }
  86. MP4Descriptor* MP4QosQualifierProperty::CreateDescriptor(u_int8_t tag) 
  87. {
  88. MP4Descriptor* pDescriptor = NULL;
  89. switch (tag) {
  90. case MP4MaxDelayQosTag:
  91. pDescriptor = new MP4MaxDelayQosQualifier();
  92. break;
  93. case MP4PrefMaxDelayQosTag:
  94. pDescriptor = new MP4PrefMaxDelayQosQualifier();
  95. break;
  96. case MP4LossProbQosTag:
  97. pDescriptor = new MP4LossProbQosQualifier();
  98. break;
  99. case MP4MaxGapLossQosTag:
  100. pDescriptor = new MP4MaxGapLossQosQualifier();
  101. break;
  102. case MP4MaxAUSizeQosTag:
  103. pDescriptor = new MP4MaxAUSizeQosQualifier();
  104. break;
  105. case MP4AvgAUSizeQosTag:
  106. pDescriptor = new MP4AvgAUSizeQosQualifier();
  107. break;
  108. case MP4MaxAURateQosTag:
  109. pDescriptor = new MP4MaxAURateQosQualifier();
  110. break;
  111. default:
  112. pDescriptor = new MP4UnknownQosQualifier();
  113. pDescriptor->SetTag(tag);
  114. }
  115. return pDescriptor;
  116. }