| 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 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 readyForDelete(false) { | 122 readyForDelete(false) { |
| 123 } | 123 } |
| 124 | 124 |
| 125 RTCPReceiveInformation::~RTCPReceiveInformation() { | 125 RTCPReceiveInformation::~RTCPReceiveInformation() { |
| 126 } | 126 } |
| 127 | 127 |
| 128 // Increase size of TMMBRSet if needed, and also take care of | 128 // Increase size of TMMBRSet if needed, and also take care of |
| 129 // the _tmmbrSetTimeouts vector. | 129 // the _tmmbrSetTimeouts vector. |
| 130 void RTCPReceiveInformation::VerifyAndAllocateTMMBRSet( | 130 void RTCPReceiveInformation::VerifyAndAllocateTMMBRSet( |
| 131 const uint32_t minimumSize) { | 131 const uint32_t minimumSize) { |
| 132 if (minimumSize > TmmbrSet.sizeOfSet()) { | 132 if (minimumSize > TmmbrSet.capacity()) { |
| 133 TmmbrSet.VerifyAndAllocateSetKeepingData(minimumSize); | 133 TmmbrSet.reserve(minimumSize); |
| 134 // make sure that our buffers are big enough | 134 // make sure that our buffers are big enough |
| 135 _tmmbrSetTimeouts.reserve(minimumSize); | 135 _tmmbrSetTimeouts.reserve(minimumSize); |
| 136 } | 136 } |
| 137 } | 137 } |
| 138 | 138 |
| 139 void RTCPReceiveInformation::InsertTMMBRItem( | 139 void RTCPReceiveInformation::InsertTMMBRItem( |
| 140 const uint32_t senderSSRC, | 140 const uint32_t senderSSRC, |
| 141 const RTCPUtility::RTCPPacketRTPFBTMMBRItem& TMMBRItem, | 141 const RTCPUtility::RTCPPacketRTPFBTMMBRItem& TMMBRItem, |
| 142 const int64_t currentTimeMS) { | 142 const int64_t currentTimeMS) { |
| 143 // serach to see if we have it in our list | 143 // serach to see if we have it in our list |
| 144 for (uint32_t i = 0; i < TmmbrSet.lengthOfSet(); i++) { | 144 for (uint32_t i = 0; i < TmmbrSet.size(); i++) { |
| 145 if (TmmbrSet.Ssrc(i) == senderSSRC) { | 145 if (TmmbrSet[i].ssrc() == senderSSRC) { |
| 146 // we already have this SSRC in our list update it | 146 // we already have this SSRC in our list update it |
| 147 TmmbrSet.SetEntry(i, | 147 TmmbrSet[i].set_bitrate_bps(1000 * TMMBRItem.MaxTotalMediaBitRate); |
| 148 TMMBRItem.MaxTotalMediaBitRate, | 148 TmmbrSet[i].set_packet_overhead(TMMBRItem.MeasuredOverhead); |
| 149 TMMBRItem.MeasuredOverhead, | |
| 150 senderSSRC); | |
| 151 _tmmbrSetTimeouts[i] = currentTimeMS; | 149 _tmmbrSetTimeouts[i] = currentTimeMS; |
| 152 return; | 150 return; |
| 153 } | 151 } |
| 154 } | 152 } |
| 155 VerifyAndAllocateTMMBRSet(TmmbrSet.lengthOfSet() + 1); | 153 VerifyAndAllocateTMMBRSet(TmmbrSet.capacity() + 1); |
| 156 TmmbrSet.AddEntry(TMMBRItem.MaxTotalMediaBitRate, | 154 TmmbrSet.push_back(rtcp::TmmbItem(senderSSRC, |
| 157 TMMBRItem.MeasuredOverhead, | 155 TMMBRItem.MaxTotalMediaBitRate * 1000, |
| 158 senderSSRC); | 156 TMMBRItem.MeasuredOverhead)); |
| 159 _tmmbrSetTimeouts.push_back(currentTimeMS); | 157 _tmmbrSetTimeouts.push_back(currentTimeMS); |
| 160 } | 158 } |
| 161 | 159 |
| 162 int32_t RTCPReceiveInformation::GetTMMBRSet( | 160 void RTCPReceiveInformation::GetTMMBRSet( |
| 163 const uint32_t sourceIdx, | 161 int64_t current_time_ms, |
| 164 const uint32_t targetIdx, | 162 std::vector<rtcp::TmmbItem>* candidates) { |
| 165 TMMBRSet* candidateSet, | 163 for (size_t i = 0; i < TmmbrSet.size();) { |
| 166 const int64_t currentTimeMS) { | 164 // use audio define since we don't know what interval the remote peer is |
| 167 if (sourceIdx >= TmmbrSet.lengthOfSet()) { | 165 // using |
| 168 return -1; | 166 if (current_time_ms - _tmmbrSetTimeouts[i] > 5 * RTCP_INTERVAL_AUDIO_MS) { |
| 167 // value timed out |
| 168 TmmbrSet.erase(TmmbrSet.begin() + i); |
| 169 _tmmbrSetTimeouts.erase(_tmmbrSetTimeouts.begin() + i); |
| 170 } else { |
| 171 candidates->push_back(TmmbrSet[i]); |
| 172 ++i; |
| 173 } |
| 169 } | 174 } |
| 170 if (targetIdx >= candidateSet->sizeOfSet()) { | |
| 171 return -1; | |
| 172 } | |
| 173 // use audio define since we don't know what interval the remote peer is using | |
| 174 if (currentTimeMS - _tmmbrSetTimeouts[sourceIdx] > | |
| 175 5 * RTCP_INTERVAL_AUDIO_MS) { | |
| 176 // value timed out | |
| 177 TmmbrSet.RemoveEntry(sourceIdx); | |
| 178 _tmmbrSetTimeouts.erase(_tmmbrSetTimeouts.begin() + sourceIdx); | |
| 179 return -1; | |
| 180 } | |
| 181 candidateSet->SetEntry(targetIdx, | |
| 182 TmmbrSet.Tmmbr(sourceIdx), | |
| 183 TmmbrSet.PacketOH(sourceIdx), | |
| 184 TmmbrSet.Ssrc(sourceIdx)); | |
| 185 return 0; | |
| 186 } | 175 } |
| 187 | 176 |
| 188 void RTCPReceiveInformation::VerifyAndAllocateBoundingSet( | 177 void RTCPReceiveInformation::VerifyAndAllocateBoundingSet( |
| 189 const uint32_t minimumSize) { | 178 const uint32_t minimumSize) { |
| 190 TmmbnBoundingSet.VerifyAndAllocateSet(minimumSize); | 179 TmmbnBoundingSet.clear(); |
| 180 TmmbnBoundingSet.reserve(minimumSize); |
| 191 } | 181 } |
| 192 } // namespace RTCPHelp | 182 } // namespace RTCPHelp |
| 193 } // namespace webrtc | 183 } // namespace webrtc |
| OLD | NEW |