| 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 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 { | 207 { |
| 208 CriticalSectionScoped cs(&_callbackCritSect); | 208 CriticalSectionScoped cs(&_callbackCritSect); |
| 209 if (_rxVadObserverPtr) | 209 if (_rxVadObserverPtr) |
| 210 { | 210 { |
| 211 _rxVadObserverPtr->OnRxVad(_channelId, vadDecision); | 211 _rxVadObserverPtr->OnRxVad(_channelId, vadDecision); |
| 212 } | 212 } |
| 213 | 213 |
| 214 return 0; | 214 return 0; |
| 215 } | 215 } |
| 216 | 216 |
| 217 int | 217 bool |
| 218 Channel::SendPacket(const void *data, size_t len) | 218 Channel::SendRtp(const uint8_t *data, size_t len) |
| 219 { | 219 { |
| 220 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,_channelId), | 220 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,_channelId), |
| 221 "Channel::SendPacket(channel=%d, len=%" PRIuS ")", len); | 221 "Channel::SendPacket(channel=%d, len=%" PRIuS ")", len); |
| 222 | 222 |
| 223 CriticalSectionScoped cs(&_callbackCritSect); | 223 CriticalSectionScoped cs(&_callbackCritSect); |
| 224 | 224 |
| 225 if (_transportPtr == NULL) | 225 if (_transportPtr == NULL) |
| 226 { | 226 { |
| 227 WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId,_channelId), | 227 WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId,_channelId), |
| 228 "Channel::SendPacket() failed to send RTP packet due to" | 228 "Channel::SendPacket() failed to send RTP packet due to" |
| 229 " invalid transport object"); | 229 " invalid transport object"); |
| 230 return -1; | 230 return false; |
| 231 } | 231 } |
| 232 | 232 |
| 233 uint8_t* bufferToSendPtr = (uint8_t*)data; | 233 uint8_t* bufferToSendPtr = (uint8_t*)data; |
| 234 size_t bufferLength = len; | 234 size_t bufferLength = len; |
| 235 | 235 |
| 236 int n = _transportPtr->SendPacket(bufferToSendPtr, bufferLength); | 236 if (!_transportPtr->SendRtp(bufferToSendPtr, bufferLength)) { |
| 237 if (n < 0) { | |
| 238 std::string transport_name = | 237 std::string transport_name = |
| 239 _externalTransport ? "external transport" : "WebRtc sockets"; | 238 _externalTransport ? "external transport" : "WebRtc sockets"; |
| 240 WEBRTC_TRACE(kTraceError, kTraceVoice, | 239 WEBRTC_TRACE(kTraceError, kTraceVoice, |
| 241 VoEId(_instanceId,_channelId), | 240 VoEId(_instanceId,_channelId), |
| 242 "Channel::SendPacket() RTP transmission using %s failed", | 241 "Channel::SendPacket() RTP transmission using %s failed", |
| 243 transport_name.c_str()); | 242 transport_name.c_str()); |
| 244 return -1; | 243 return false; |
| 245 } | 244 } |
| 246 return n; | 245 return true; |
| 247 } | 246 } |
| 248 | 247 |
| 249 int | 248 bool |
| 250 Channel::SendRTCPPacket(const void *data, size_t len) | 249 Channel::SendRtcp(const uint8_t *data, size_t len) |
| 251 { | 250 { |
| 252 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,_channelId), | 251 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,_channelId), |
| 253 "Channel::SendRTCPPacket(len=%" PRIuS ")", len); | 252 "Channel::SendRtcp(len=%" PRIuS ")", len); |
| 254 | 253 |
| 255 CriticalSectionScoped cs(&_callbackCritSect); | 254 CriticalSectionScoped cs(&_callbackCritSect); |
| 256 if (_transportPtr == NULL) | 255 if (_transportPtr == NULL) |
| 257 { | 256 { |
| 258 WEBRTC_TRACE(kTraceError, kTraceVoice, | 257 WEBRTC_TRACE(kTraceError, kTraceVoice, |
| 259 VoEId(_instanceId,_channelId), | 258 VoEId(_instanceId,_channelId), |
| 260 "Channel::SendRTCPPacket() failed to send RTCP packet" | 259 "Channel::SendRtcp() failed to send RTCP packet" |
| 261 " due to invalid transport object"); | 260 " due to invalid transport object"); |
| 262 return -1; | 261 return false; |
| 263 } | 262 } |
| 264 | 263 |
| 265 uint8_t* bufferToSendPtr = (uint8_t*)data; | 264 uint8_t* bufferToSendPtr = (uint8_t*)data; |
| 266 size_t bufferLength = len; | 265 size_t bufferLength = len; |
| 267 | 266 |
| 268 int n = _transportPtr->SendRTCPPacket(bufferToSendPtr, bufferLength); | 267 int n = _transportPtr->SendRtcp(bufferToSendPtr, bufferLength); |
| 269 if (n < 0) { | 268 if (n < 0) { |
| 270 std::string transport_name = | 269 std::string transport_name = |
| 271 _externalTransport ? "external transport" : "WebRtc sockets"; | 270 _externalTransport ? "external transport" : "WebRtc sockets"; |
| 272 WEBRTC_TRACE(kTraceInfo, kTraceVoice, | 271 WEBRTC_TRACE(kTraceInfo, kTraceVoice, |
| 273 VoEId(_instanceId,_channelId), | 272 VoEId(_instanceId,_channelId), |
| 274 "Channel::SendRTCPPacket() transmission using %s failed", | 273 "Channel::SendRtcp() transmission using %s failed", |
| 275 transport_name.c_str()); | 274 transport_name.c_str()); |
| 276 return -1; | 275 return false; |
| 277 } | 276 } |
| 278 return n; | 277 return true; |
| 279 } | 278 } |
| 280 | 279 |
| 281 void Channel::OnPlayTelephoneEvent(uint8_t event, | 280 void Channel::OnPlayTelephoneEvent(uint8_t event, |
| 282 uint16_t lengthMs, | 281 uint16_t lengthMs, |
| 283 uint8_t volume) { | 282 uint8_t volume) { |
| 284 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,_channelId), | 283 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,_channelId), |
| 285 "Channel::OnPlayTelephoneEvent(event=%u, lengthMs=%u," | 284 "Channel::OnPlayTelephoneEvent(event=%u, lengthMs=%u," |
| 286 " volume=%u)", event, lengthMs, volume); | 285 " volume=%u)", event, lengthMs, volume); |
| 287 | 286 |
| 288 if (!_playOutbandDtmfEvent || (event > 15)) | 287 if (!_playOutbandDtmfEvent || (event > 15)) |
| (...skipping 3412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3701 | 3700 |
| 3702 assert(_audioFrame.samples_per_channel_ == toneSamples); | 3701 assert(_audioFrame.samples_per_channel_ == toneSamples); |
| 3703 } else | 3702 } else |
| 3704 { | 3703 { |
| 3705 // Add 10ms to "delay-since-last-tone" counter | 3704 // Add 10ms to "delay-since-last-tone" counter |
| 3706 _inbandDtmfGenerator.UpdateDelaySinceLastTone(); | 3705 _inbandDtmfGenerator.UpdateDelaySinceLastTone(); |
| 3707 } | 3706 } |
| 3708 return 0; | 3707 return 0; |
| 3709 } | 3708 } |
| 3710 | 3709 |
| 3711 int32_t | |
| 3712 Channel::SendPacketRaw(const void *data, size_t len, bool RTCP) | |
| 3713 { | |
| 3714 CriticalSectionScoped cs(&_callbackCritSect); | |
| 3715 if (_transportPtr == NULL) | |
| 3716 { | |
| 3717 return -1; | |
| 3718 } | |
| 3719 if (!RTCP) | |
| 3720 { | |
| 3721 return _transportPtr->SendPacket(data, len); | |
| 3722 } | |
| 3723 else | |
| 3724 { | |
| 3725 return _transportPtr->SendRTCPPacket(data, len); | |
| 3726 } | |
| 3727 } | |
| 3728 | |
| 3729 void Channel::UpdatePlayoutTimestamp(bool rtcp) { | 3710 void Channel::UpdatePlayoutTimestamp(bool rtcp) { |
| 3730 uint32_t playout_timestamp = 0; | 3711 uint32_t playout_timestamp = 0; |
| 3731 | 3712 |
| 3732 if (audio_coding_->PlayoutTimestamp(&playout_timestamp) == -1) { | 3713 if (audio_coding_->PlayoutTimestamp(&playout_timestamp) == -1) { |
| 3733 // This can happen if this channel has not been received any RTP packet. In | 3714 // This can happen if this channel has not been received any RTP packet. In |
| 3734 // this case, NetEq is not capable of computing playout timestamp. | 3715 // this case, NetEq is not capable of computing playout timestamp. |
| 3735 return; | 3716 return; |
| 3736 } | 3717 } |
| 3737 | 3718 |
| 3738 uint16_t delay_ms = 0; | 3719 uint16_t delay_ms = 0; |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3973 int64_t min_rtt = 0; | 3954 int64_t min_rtt = 0; |
| 3974 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) | 3955 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) |
| 3975 != 0) { | 3956 != 0) { |
| 3976 return 0; | 3957 return 0; |
| 3977 } | 3958 } |
| 3978 return rtt; | 3959 return rtt; |
| 3979 } | 3960 } |
| 3980 | 3961 |
| 3981 } // namespace voe | 3962 } // namespace voe |
| 3982 } // namespace webrtc | 3963 } // namespace webrtc |
| OLD | NEW |