| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 
| 3  * | 3  * | 
| 4  *  Use of this source code is governed by a BSD-style license | 4  *  Use of this source code is governed by a BSD-style license | 
| 5  *  that can be found in the LICENSE file in the root of the source | 5  *  that can be found in the LICENSE file in the root of the source | 
| 6  *  tree. An additional intellectual property rights grant can be found | 6  *  tree. An additional intellectual property rights grant can be found | 
| 7  *  in the file PATENTS.  All contributing project authors may | 7  *  in the file PATENTS.  All contributing project authors may | 
| 8  *  be found in the AUTHORS file in the root of the source tree. | 8  *  be found in the AUTHORS file in the root of the source tree. | 
| 9  */ | 9  */ | 
| 10 | 10 | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 25 | 25 | 
| 26 void RtpHeaderExtensionMap::Erase() { | 26 void RtpHeaderExtensionMap::Erase() { | 
| 27   while (!extensionMap_.empty()) { | 27   while (!extensionMap_.empty()) { | 
| 28     std::map<uint8_t, HeaderExtension*>::iterator it = | 28     std::map<uint8_t, HeaderExtension*>::iterator it = | 
| 29         extensionMap_.begin(); | 29         extensionMap_.begin(); | 
| 30     delete it->second; | 30     delete it->second; | 
| 31     extensionMap_.erase(it); | 31     extensionMap_.erase(it); | 
| 32   } | 32   } | 
| 33 } | 33 } | 
| 34 | 34 | 
| 35 int32_t RtpHeaderExtensionMap::Register(const RTPExtensionType type, | 35 int32_t RtpHeaderExtensionMap::Register(RTPExtensionType type, uint8_t id) { | 
| 36                                         const uint8_t id) { |  | 
| 37   return Register(type, id, true); |  | 
| 38 } |  | 
| 39 |  | 
| 40 int32_t RtpHeaderExtensionMap::RegisterInactive(const RTPExtensionType type, |  | 
| 41                                                 const uint8_t id) { |  | 
| 42   return Register(type, id, false); |  | 
| 43 } |  | 
| 44 |  | 
| 45 int32_t RtpHeaderExtensionMap::Register(const RTPExtensionType type, |  | 
| 46                                         const uint8_t id, |  | 
| 47                                         bool active) { |  | 
| 48   if (id < 1 || id > 14) { | 36   if (id < 1 || id > 14) { | 
| 49     return -1; | 37     return -1; | 
| 50   } | 38   } | 
| 51   std::map<uint8_t, HeaderExtension*>::iterator it = | 39   std::map<uint8_t, HeaderExtension*>::iterator it = | 
| 52       extensionMap_.find(id); | 40       extensionMap_.find(id); | 
| 53   if (it != extensionMap_.end()) { | 41   if (it != extensionMap_.end()) { | 
| 54     if (it->second->type != type) { | 42     if (it->second->type != type) { | 
| 55       // An extension is already registered with the same id | 43       // An extension is already registered with the same id | 
| 56       // but a different type, so return failure. | 44       // but a different type, so return failure. | 
| 57       return -1; | 45       return -1; | 
| 58     } | 46     } | 
| 59     // This extension type is already registered with this id, | 47     // This extension type is already registered with this id, | 
| 60     // so return success. | 48     // so return success. | 
| 61     it->second->active = active; |  | 
| 62     return 0; | 49     return 0; | 
| 63   } | 50   } | 
| 64   extensionMap_[id] = new HeaderExtension(type, active); | 51   extensionMap_[id] = new HeaderExtension(type); | 
| 65   return 0; | 52   return 0; | 
| 66 } | 53 } | 
| 67 | 54 | 
| 68 bool RtpHeaderExtensionMap::SetActive(const RTPExtensionType type, |  | 
| 69                                       bool active) { |  | 
| 70   for (auto& kv : extensionMap_) { |  | 
| 71     if (kv.second->type == type) { |  | 
| 72       kv.second->active = active; |  | 
| 73       return true; |  | 
| 74     } |  | 
| 75   } |  | 
| 76   return false; |  | 
| 77 } |  | 
| 78 |  | 
| 79 int32_t RtpHeaderExtensionMap::Deregister(const RTPExtensionType type) { | 55 int32_t RtpHeaderExtensionMap::Deregister(const RTPExtensionType type) { | 
| 80   uint8_t id; | 56   uint8_t id; | 
| 81   if (GetId(type, &id) != 0) { | 57   if (GetId(type, &id) != 0) { | 
| 82     return 0; | 58     return 0; | 
| 83   } | 59   } | 
| 84   std::map<uint8_t, HeaderExtension*>::iterator it = | 60   std::map<uint8_t, HeaderExtension*>::iterator it = | 
| 85       extensionMap_.find(id); | 61       extensionMap_.find(id); | 
| 86   assert(it != extensionMap_.end()); | 62   assert(it != extensionMap_.end()); | 
| 87   delete it->second; | 63   delete it->second; | 
| 88   extensionMap_.erase(it); | 64   extensionMap_.erase(it); | 
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 141   for (auto kv : extensionMap_) { | 117   for (auto kv : extensionMap_) { | 
| 142     if (kv.second->type == type) | 118     if (kv.second->type == type) | 
| 143       return kv.first; | 119       return kv.first; | 
| 144   } | 120   } | 
| 145   return kInvalidId; | 121   return kInvalidId; | 
| 146 } | 122 } | 
| 147 | 123 | 
| 148 size_t RtpHeaderExtensionMap::GetTotalLengthInBytes() const { | 124 size_t RtpHeaderExtensionMap::GetTotalLengthInBytes() const { | 
| 149   // Get length for each extension block. | 125   // Get length for each extension block. | 
| 150   size_t length = 0; | 126   size_t length = 0; | 
| 151   std::map<uint8_t, HeaderExtension*>::const_iterator it = | 127   for (const auto& kv : extensionMap_) | 
| 152       extensionMap_.begin(); | 128     length += kv.second->length; | 
| 153   while (it != extensionMap_.end()) { |  | 
| 154     HeaderExtension* extension = it->second; |  | 
| 155     if (extension->active) { |  | 
| 156       length += extension->length; |  | 
| 157     } |  | 
| 158     it++; |  | 
| 159   } |  | 
| 160   // Add RTP extension header length. | 129   // Add RTP extension header length. | 
| 161   if (length > 0) { | 130   if (length > 0) | 
| 162     length += kRtpOneByteHeaderLength; | 131     length += kRtpOneByteHeaderLength; | 
| 163   } |  | 
| 164   // Pad up to nearest 32bit word. | 132   // Pad up to nearest 32bit word. | 
| 165   length = RtpUtility::Word32Align(length); | 133   length = RtpUtility::Word32Align(length); | 
| 166   return length; | 134   return length; | 
| 167 } | 135 } | 
| 168 | 136 | 
| 169 int32_t RtpHeaderExtensionMap::GetLengthUntilBlockStartInBytes( |  | 
| 170     const RTPExtensionType type) const { |  | 
| 171   uint8_t id; |  | 
| 172   if (GetId(type, &id) != 0) { |  | 
| 173     // Not registered. |  | 
| 174     return -1; |  | 
| 175   } |  | 
| 176   // Get length until start of extension block type. |  | 
| 177   uint16_t length = kRtpOneByteHeaderLength; |  | 
| 178 |  | 
| 179   std::map<uint8_t, HeaderExtension*>::const_iterator it = |  | 
| 180       extensionMap_.begin(); |  | 
| 181   while (it != extensionMap_.end()) { |  | 
| 182     HeaderExtension* extension = it->second; |  | 
| 183     if (extension->type == type) { |  | 
| 184       if (!extension->active) { |  | 
| 185         return -1; |  | 
| 186       } |  | 
| 187       break; |  | 
| 188     } else if (extension->active) { |  | 
| 189       length += extension->length; |  | 
| 190     } |  | 
| 191     it++; |  | 
| 192   } |  | 
| 193   return length; |  | 
| 194 } |  | 
| 195 |  | 
| 196 int32_t RtpHeaderExtensionMap::Size() const { | 137 int32_t RtpHeaderExtensionMap::Size() const { | 
| 197   int32_t count = 0; | 138   return extensionMap_.size(); | 
| 198   for (auto& kv : extensionMap_) { |  | 
| 199     if (kv.second->active) { |  | 
| 200       count++; |  | 
| 201     } |  | 
| 202   } |  | 
| 203   return count; |  | 
| 204 } |  | 
| 205 |  | 
| 206 RTPExtensionType RtpHeaderExtensionMap::First() const { |  | 
| 207   for (auto& kv : extensionMap_) { |  | 
| 208     if (kv.second->active) { |  | 
| 209       return kv.second->type; |  | 
| 210     } |  | 
| 211   } |  | 
| 212 |  | 
| 213   return kRtpExtensionNone; |  | 
| 214 } |  | 
| 215 |  | 
| 216 RTPExtensionType RtpHeaderExtensionMap::Next(RTPExtensionType type) const { |  | 
| 217   uint8_t id; |  | 
| 218   if (GetId(type, &id) != 0) { |  | 
| 219     return kRtpExtensionNone; |  | 
| 220   } |  | 
| 221   std::map<uint8_t, HeaderExtension*>::const_iterator it = |  | 
| 222       extensionMap_.find(id); |  | 
| 223   if (it == extensionMap_.end() || !it->second->active) { |  | 
| 224     return kRtpExtensionNone; |  | 
| 225   } |  | 
| 226   while ((++it) != extensionMap_.end()) { |  | 
| 227     if (it->second->active) { |  | 
| 228       return it->second->type; |  | 
| 229     } |  | 
| 230   } |  | 
| 231 |  | 
| 232   return kRtpExtensionNone; |  | 
| 233 } | 139 } | 
| 234 | 140 | 
| 235 void RtpHeaderExtensionMap::GetCopy(RtpHeaderExtensionMap* map) const { | 141 void RtpHeaderExtensionMap::GetCopy(RtpHeaderExtensionMap* map) const { | 
| 236   assert(map); | 142   assert(map); | 
| 237   std::map<uint8_t, HeaderExtension*>::const_iterator it = | 143   std::map<uint8_t, HeaderExtension*>::const_iterator it = | 
| 238       extensionMap_.begin(); | 144       extensionMap_.begin(); | 
| 239   while (it != extensionMap_.end()) { | 145   while (it != extensionMap_.end()) { | 
| 240     HeaderExtension* extension = it->second; | 146     HeaderExtension* extension = it->second; | 
| 241     map->Register(extension->type, it->first, extension->active); | 147     map->Register(extension->type, it->first); | 
| 242     it++; | 148     it++; | 
| 243   } | 149   } | 
| 244 } | 150 } | 
| 245 }  // namespace webrtc | 151 }  // namespace webrtc | 
| OLD | NEW | 
|---|