| 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 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 "Channel::InFrameType(frame_type=%d)", frame_type); | 198 "Channel::InFrameType(frame_type=%d)", frame_type); |
| 199 | 199 |
| 200 CriticalSectionScoped cs(&_callbackCritSect); | 200 CriticalSectionScoped cs(&_callbackCritSect); |
| 201 _sendFrameType = (frame_type == kAudioFrameSpeech); | 201 _sendFrameType = (frame_type == kAudioFrameSpeech); |
| 202 return 0; | 202 return 0; |
| 203 } | 203 } |
| 204 | 204 |
| 205 int32_t | 205 int32_t |
| 206 Channel::OnRxVadDetected(int vadDecision) | 206 Channel::OnRxVadDetected(int vadDecision) |
| 207 { | 207 { |
| 208 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | |
| 209 "Channel::OnRxVadDetected(vadDecision=%d)", vadDecision); | |
| 210 | |
| 211 CriticalSectionScoped cs(&_callbackCritSect); | 208 CriticalSectionScoped cs(&_callbackCritSect); |
| 212 if (_rxVadObserverPtr) | 209 if (_rxVadObserverPtr) |
| 213 { | 210 { |
| 214 _rxVadObserverPtr->OnRxVad(_channelId, vadDecision); | 211 _rxVadObserverPtr->OnRxVad(_channelId, vadDecision); |
| 215 } | 212 } |
| 216 | 213 |
| 217 return 0; | 214 return 0; |
| 218 } | 215 } |
| 219 | 216 |
| 220 int | 217 int |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 } | 415 } |
| 419 header.payload_type_frequency = | 416 header.payload_type_frequency = |
| 420 rtp_payload_registry_->GetPayloadTypeFrequency(header.payloadType); | 417 rtp_payload_registry_->GetPayloadTypeFrequency(header.payloadType); |
| 421 if (header.payload_type_frequency < 0) | 418 if (header.payload_type_frequency < 0) |
| 422 return false; | 419 return false; |
| 423 return ReceivePacket(rtp_packet, rtp_packet_length, header, false); | 420 return ReceivePacket(rtp_packet, rtp_packet_length, header, false); |
| 424 } | 421 } |
| 425 | 422 |
| 426 int32_t Channel::GetAudioFrame(int32_t id, AudioFrame* audioFrame) | 423 int32_t Channel::GetAudioFrame(int32_t id, AudioFrame* audioFrame) |
| 427 { | 424 { |
| 428 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 429 "Channel::GetAudioFrame(id=%d)", id); | |
| 430 | |
| 431 if (event_log_) { | 425 if (event_log_) { |
| 432 unsigned int ssrc; | 426 unsigned int ssrc; |
| 433 RTC_CHECK_EQ(GetLocalSSRC(ssrc), 0); | 427 RTC_CHECK_EQ(GetLocalSSRC(ssrc), 0); |
| 434 event_log_->LogAudioPlayout(ssrc); | 428 event_log_->LogAudioPlayout(ssrc); |
| 435 } | 429 } |
| 436 // Get 10ms raw PCM data from the ACM (mixer limits output frequency) | 430 // Get 10ms raw PCM data from the ACM (mixer limits output frequency) |
| 437 if (audio_coding_->PlayoutData10Ms(audioFrame->sample_rate_hz_, | 431 if (audio_coding_->PlayoutData10Ms(audioFrame->sample_rate_hz_, |
| 438 audioFrame) == -1) | 432 audioFrame) == -1) |
| 439 { | 433 { |
| 440 WEBRTC_TRACE(kTraceError, kTraceVoice, | 434 WEBRTC_TRACE(kTraceError, kTraceVoice, |
| (...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1325 VE_AUDIO_CODING_MODULE_ERROR, kTraceError, | 1319 VE_AUDIO_CODING_MODULE_ERROR, kTraceError, |
| 1326 "SetVADStatus() failed to set VAD"); | 1320 "SetVADStatus() failed to set VAD"); |
| 1327 return -1; | 1321 return -1; |
| 1328 } | 1322 } |
| 1329 return 0; | 1323 return 0; |
| 1330 } | 1324 } |
| 1331 | 1325 |
| 1332 int32_t | 1326 int32_t |
| 1333 Channel::GetVADStatus(bool& enabledVAD, ACMVADMode& mode, bool& disabledDTX) | 1327 Channel::GetVADStatus(bool& enabledVAD, ACMVADMode& mode, bool& disabledDTX) |
| 1334 { | 1328 { |
| 1335 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 1336 "Channel::GetVADStatus"); | |
| 1337 if (audio_coding_->VAD(&disabledDTX, &enabledVAD, &mode) != 0) | 1329 if (audio_coding_->VAD(&disabledDTX, &enabledVAD, &mode) != 0) |
| 1338 { | 1330 { |
| 1339 _engineStatisticsPtr->SetLastError( | 1331 _engineStatisticsPtr->SetLastError( |
| 1340 VE_AUDIO_CODING_MODULE_ERROR, kTraceError, | 1332 VE_AUDIO_CODING_MODULE_ERROR, kTraceError, |
| 1341 "GetVADStatus() failed to get VAD status"); | 1333 "GetVADStatus() failed to get VAD status"); |
| 1342 return -1; | 1334 return -1; |
| 1343 } | 1335 } |
| 1344 disabledDTX = !disabledDTX; | 1336 disabledDTX = !disabledDTX; |
| 1345 return 0; | 1337 return 0; |
| 1346 } | 1338 } |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1433 "SetRecPayloadType() ACM registration failed - 1"); | 1425 "SetRecPayloadType() ACM registration failed - 1"); |
| 1434 return -1; | 1426 return -1; |
| 1435 } | 1427 } |
| 1436 } | 1428 } |
| 1437 return 0; | 1429 return 0; |
| 1438 } | 1430 } |
| 1439 | 1431 |
| 1440 int32_t | 1432 int32_t |
| 1441 Channel::GetRecPayloadType(CodecInst& codec) | 1433 Channel::GetRecPayloadType(CodecInst& codec) |
| 1442 { | 1434 { |
| 1443 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 1444 "Channel::GetRecPayloadType()"); | |
| 1445 int8_t payloadType(-1); | 1435 int8_t payloadType(-1); |
| 1446 if (rtp_payload_registry_->ReceivePayloadType( | 1436 if (rtp_payload_registry_->ReceivePayloadType( |
| 1447 codec.plname, | 1437 codec.plname, |
| 1448 codec.plfreq, | 1438 codec.plfreq, |
| 1449 codec.channels, | 1439 codec.channels, |
| 1450 (codec.rate < 0) ? 0 : codec.rate, | 1440 (codec.rate < 0) ? 0 : codec.rate, |
| 1451 &payloadType) != 0) | 1441 &payloadType) != 0) |
| 1452 { | 1442 { |
| 1453 _engineStatisticsPtr->SetLastError( | 1443 _engineStatisticsPtr->SetLastError( |
| 1454 VE_RTP_RTCP_MODULE_ERROR, kTraceWarning, | 1444 VE_RTP_RTCP_MODULE_ERROR, kTraceWarning, |
| 1455 "GetRecPayloadType() failed to retrieve RX payload type"); | 1445 "GetRecPayloadType() failed to retrieve RX payload type"); |
| 1456 return -1; | 1446 return -1; |
| 1457 } | 1447 } |
| 1458 codec.pltype = payloadType; | 1448 codec.pltype = payloadType; |
| 1459 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 1460 "Channel::GetRecPayloadType() => pltype=%d", codec.pltype); | |
| 1461 return 0; | 1449 return 0; |
| 1462 } | 1450 } |
| 1463 | 1451 |
| 1464 int32_t | 1452 int32_t |
| 1465 Channel::SetSendCNPayloadType(int type, PayloadFrequencies frequency) | 1453 Channel::SetSendCNPayloadType(int type, PayloadFrequencies frequency) |
| 1466 { | 1454 { |
| 1467 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | 1455 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), |
| 1468 "Channel::SetSendCNPayloadType()"); | 1456 "Channel::SetSendCNPayloadType()"); |
| 1469 | 1457 |
| 1470 CodecInst codec; | 1458 CodecInst codec; |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1862 return 0; | 1850 return 0; |
| 1863 } | 1851 } |
| 1864 | 1852 |
| 1865 int Channel::StopPlayingFileLocally() | 1853 int Channel::StopPlayingFileLocally() |
| 1866 { | 1854 { |
| 1867 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | 1855 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), |
| 1868 "Channel::StopPlayingFileLocally()"); | 1856 "Channel::StopPlayingFileLocally()"); |
| 1869 | 1857 |
| 1870 if (!channel_state_.Get().output_file_playing) | 1858 if (!channel_state_.Get().output_file_playing) |
| 1871 { | 1859 { |
| 1872 _engineStatisticsPtr->SetLastError( | |
| 1873 VE_INVALID_OPERATION, kTraceWarning, | |
| 1874 "StopPlayingFileLocally() isnot playing"); | |
| 1875 return 0; | 1860 return 0; |
| 1876 } | 1861 } |
| 1877 | 1862 |
| 1878 { | 1863 { |
| 1879 CriticalSectionScoped cs(&_fileCritSect); | 1864 CriticalSectionScoped cs(&_fileCritSect); |
| 1880 | 1865 |
| 1881 if (_outputFilePlayerPtr->StopPlayingFile() != 0) | 1866 if (_outputFilePlayerPtr->StopPlayingFile() != 0) |
| 1882 { | 1867 { |
| 1883 _engineStatisticsPtr->SetLastError( | 1868 _engineStatisticsPtr->SetLastError( |
| 1884 VE_STOP_RECORDING_FAILED, kTraceError, | 1869 VE_STOP_RECORDING_FAILED, kTraceError, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1900 "StopPlayingFile() failed to stop participant from playing as" | 1885 "StopPlayingFile() failed to stop participant from playing as" |
| 1901 "file in the mixer"); | 1886 "file in the mixer"); |
| 1902 return -1; | 1887 return -1; |
| 1903 } | 1888 } |
| 1904 | 1889 |
| 1905 return 0; | 1890 return 0; |
| 1906 } | 1891 } |
| 1907 | 1892 |
| 1908 int Channel::IsPlayingFileLocally() const | 1893 int Channel::IsPlayingFileLocally() const |
| 1909 { | 1894 { |
| 1910 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 1911 "Channel::IsPlayingFileLocally()"); | |
| 1912 | |
| 1913 return channel_state_.Get().output_file_playing; | 1895 return channel_state_.Get().output_file_playing; |
| 1914 } | 1896 } |
| 1915 | 1897 |
| 1916 int Channel::RegisterFilePlayingToMixer() | 1898 int Channel::RegisterFilePlayingToMixer() |
| 1917 { | 1899 { |
| 1918 // Return success for not registering for file playing to mixer if: | 1900 // Return success for not registering for file playing to mixer if: |
| 1919 // 1. playing file before playout is started on that channel. | 1901 // 1. playing file before playout is started on that channel. |
| 1920 // 2. starting playout without file playing on that channel. | 1902 // 2. starting playout without file playing on that channel. |
| 1921 if (!channel_state_.Get().playing || | 1903 if (!channel_state_.Get().playing || |
| 1922 !channel_state_.Get().output_file_playing) | 1904 !channel_state_.Get().output_file_playing) |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2086 | 2068 |
| 2087 int Channel::StopPlayingFileAsMicrophone() | 2069 int Channel::StopPlayingFileAsMicrophone() |
| 2088 { | 2070 { |
| 2089 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | 2071 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), |
| 2090 "Channel::StopPlayingFileAsMicrophone()"); | 2072 "Channel::StopPlayingFileAsMicrophone()"); |
| 2091 | 2073 |
| 2092 CriticalSectionScoped cs(&_fileCritSect); | 2074 CriticalSectionScoped cs(&_fileCritSect); |
| 2093 | 2075 |
| 2094 if (!channel_state_.Get().input_file_playing) | 2076 if (!channel_state_.Get().input_file_playing) |
| 2095 { | 2077 { |
| 2096 _engineStatisticsPtr->SetLastError( | |
| 2097 VE_INVALID_OPERATION, kTraceWarning, | |
| 2098 "StopPlayingFileAsMicrophone() isnot playing"); | |
| 2099 return 0; | 2078 return 0; |
| 2100 } | 2079 } |
| 2101 | 2080 |
| 2102 if (_inputFilePlayerPtr->StopPlayingFile() != 0) | 2081 if (_inputFilePlayerPtr->StopPlayingFile() != 0) |
| 2103 { | 2082 { |
| 2104 _engineStatisticsPtr->SetLastError( | 2083 _engineStatisticsPtr->SetLastError( |
| 2105 VE_STOP_RECORDING_FAILED, kTraceError, | 2084 VE_STOP_RECORDING_FAILED, kTraceError, |
| 2106 "StopPlayingFile() could not stop playing"); | 2085 "StopPlayingFile() could not stop playing"); |
| 2107 return -1; | 2086 return -1; |
| 2108 } | 2087 } |
| 2109 _inputFilePlayerPtr->RegisterModuleFileCallback(NULL); | 2088 _inputFilePlayerPtr->RegisterModuleFileCallback(NULL); |
| 2110 FilePlayer::DestroyFilePlayer(_inputFilePlayerPtr); | 2089 FilePlayer::DestroyFilePlayer(_inputFilePlayerPtr); |
| 2111 _inputFilePlayerPtr = NULL; | 2090 _inputFilePlayerPtr = NULL; |
| 2112 channel_state_.SetInputFilePlaying(false); | 2091 channel_state_.SetInputFilePlaying(false); |
| 2113 | 2092 |
| 2114 return 0; | 2093 return 0; |
| 2115 } | 2094 } |
| 2116 | 2095 |
| 2117 int Channel::IsPlayingFileAsMicrophone() const | 2096 int Channel::IsPlayingFileAsMicrophone() const |
| 2118 { | 2097 { |
| 2119 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 2120 "Channel::IsPlayingFileAsMicrophone()"); | |
| 2121 return channel_state_.Get().input_file_playing; | 2098 return channel_state_.Get().input_file_playing; |
| 2122 } | 2099 } |
| 2123 | 2100 |
| 2124 int Channel::StartRecordingPlayout(const char* fileName, | 2101 int Channel::StartRecordingPlayout(const char* fileName, |
| 2125 const CodecInst* codecInst) | 2102 const CodecInst* codecInst) |
| 2126 { | 2103 { |
| 2127 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | 2104 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), |
| 2128 "Channel::StartRecordingPlayout(fileName=%s)", fileName); | 2105 "Channel::StartRecordingPlayout(fileName=%s)", fileName); |
| 2129 | 2106 |
| 2130 if (_outputFileRecording) | 2107 if (_outputFileRecording) |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2312 { | 2289 { |
| 2313 CriticalSectionScoped cs(&_fileCritSect); | 2290 CriticalSectionScoped cs(&_fileCritSect); |
| 2314 _mixFileWithMicrophone=mix; | 2291 _mixFileWithMicrophone=mix; |
| 2315 } | 2292 } |
| 2316 | 2293 |
| 2317 int | 2294 int |
| 2318 Channel::GetSpeechOutputLevel(uint32_t& level) const | 2295 Channel::GetSpeechOutputLevel(uint32_t& level) const |
| 2319 { | 2296 { |
| 2320 int8_t currentLevel = _outputAudioLevel.Level(); | 2297 int8_t currentLevel = _outputAudioLevel.Level(); |
| 2321 level = static_cast<int32_t> (currentLevel); | 2298 level = static_cast<int32_t> (currentLevel); |
| 2322 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2323 VoEId(_instanceId,_channelId), | |
| 2324 "GetSpeechOutputLevel() => level=%u", level); | |
| 2325 return 0; | 2299 return 0; |
| 2326 } | 2300 } |
| 2327 | 2301 |
| 2328 int | 2302 int |
| 2329 Channel::GetSpeechOutputLevelFullRange(uint32_t& level) const | 2303 Channel::GetSpeechOutputLevelFullRange(uint32_t& level) const |
| 2330 { | 2304 { |
| 2331 int16_t currentLevel = _outputAudioLevel.LevelFullRange(); | 2305 int16_t currentLevel = _outputAudioLevel.LevelFullRange(); |
| 2332 level = static_cast<int32_t> (currentLevel); | 2306 level = static_cast<int32_t> (currentLevel); |
| 2333 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2334 VoEId(_instanceId,_channelId), | |
| 2335 "GetSpeechOutputLevelFullRange() => level=%u", level); | |
| 2336 return 0; | 2307 return 0; |
| 2337 } | 2308 } |
| 2338 | 2309 |
| 2339 int | 2310 int |
| 2340 Channel::SetMute(bool enable) | 2311 Channel::SetMute(bool enable) |
| 2341 { | 2312 { |
| 2342 CriticalSectionScoped cs(&volume_settings_critsect_); | 2313 CriticalSectionScoped cs(&volume_settings_critsect_); |
| 2343 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | 2314 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), |
| 2344 "Channel::SetMute(enable=%d)", enable); | 2315 "Channel::SetMute(enable=%d)", enable); |
| 2345 _mute = enable; | 2316 _mute = enable; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 2363 _panRight = right; | 2334 _panRight = right; |
| 2364 return 0; | 2335 return 0; |
| 2365 } | 2336 } |
| 2366 | 2337 |
| 2367 int | 2338 int |
| 2368 Channel::GetOutputVolumePan(float& left, float& right) const | 2339 Channel::GetOutputVolumePan(float& left, float& right) const |
| 2369 { | 2340 { |
| 2370 CriticalSectionScoped cs(&volume_settings_critsect_); | 2341 CriticalSectionScoped cs(&volume_settings_critsect_); |
| 2371 left = _panLeft; | 2342 left = _panLeft; |
| 2372 right = _panRight; | 2343 right = _panRight; |
| 2373 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2374 VoEId(_instanceId,_channelId), | |
| 2375 "GetOutputVolumePan() => left=%3.2f, right=%3.2f", left, right); | |
| 2376 return 0; | 2344 return 0; |
| 2377 } | 2345 } |
| 2378 | 2346 |
| 2379 int | 2347 int |
| 2380 Channel::SetChannelOutputVolumeScaling(float scaling) | 2348 Channel::SetChannelOutputVolumeScaling(float scaling) |
| 2381 { | 2349 { |
| 2382 CriticalSectionScoped cs(&volume_settings_critsect_); | 2350 CriticalSectionScoped cs(&volume_settings_critsect_); |
| 2383 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | 2351 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), |
| 2384 "Channel::SetChannelOutputVolumeScaling()"); | 2352 "Channel::SetChannelOutputVolumeScaling()"); |
| 2385 _outputGain = scaling; | 2353 _outputGain = scaling; |
| 2386 return 0; | 2354 return 0; |
| 2387 } | 2355 } |
| 2388 | 2356 |
| 2389 int | 2357 int |
| 2390 Channel::GetChannelOutputVolumeScaling(float& scaling) const | 2358 Channel::GetChannelOutputVolumeScaling(float& scaling) const |
| 2391 { | 2359 { |
| 2392 CriticalSectionScoped cs(&volume_settings_critsect_); | 2360 CriticalSectionScoped cs(&volume_settings_critsect_); |
| 2393 scaling = _outputGain; | 2361 scaling = _outputGain; |
| 2394 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2395 VoEId(_instanceId,_channelId), | |
| 2396 "GetChannelOutputVolumeScaling() => scaling=%3.2f", scaling); | |
| 2397 return 0; | 2362 return 0; |
| 2398 } | 2363 } |
| 2399 | 2364 |
| 2400 int Channel::SendTelephoneEventOutband(unsigned char eventCode, | 2365 int Channel::SendTelephoneEventOutband(unsigned char eventCode, |
| 2401 int lengthMs, int attenuationDb, | 2366 int lengthMs, int attenuationDb, |
| 2402 bool playDtmfEvent) | 2367 bool playDtmfEvent) |
| 2403 { | 2368 { |
| 2404 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 2369 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), |
| 2405 "Channel::SendTelephoneEventOutband(..., playDtmfEvent=%d)", | 2370 "Channel::SendTelephoneEventOutband(..., playDtmfEvent=%d)", |
| 2406 playDtmfEvent); | 2371 playDtmfEvent); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2461 return -1; | 2426 return -1; |
| 2462 } | 2427 } |
| 2463 } | 2428 } |
| 2464 _sendTelephoneEventPayloadType = type; | 2429 _sendTelephoneEventPayloadType = type; |
| 2465 return 0; | 2430 return 0; |
| 2466 } | 2431 } |
| 2467 | 2432 |
| 2468 int | 2433 int |
| 2469 Channel::GetSendTelephoneEventPayloadType(unsigned char& type) | 2434 Channel::GetSendTelephoneEventPayloadType(unsigned char& type) |
| 2470 { | 2435 { |
| 2471 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 2472 "Channel::GetSendTelephoneEventPayloadType()"); | |
| 2473 type = _sendTelephoneEventPayloadType; | 2436 type = _sendTelephoneEventPayloadType; |
| 2474 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2475 VoEId(_instanceId,_channelId), | |
| 2476 "GetSendTelephoneEventPayloadType() => type=%u", type); | |
| 2477 return 0; | 2437 return 0; |
| 2478 } | 2438 } |
| 2479 | 2439 |
| 2480 int | 2440 int |
| 2481 Channel::UpdateRxVadDetection(AudioFrame& audioFrame) | 2441 Channel::UpdateRxVadDetection(AudioFrame& audioFrame) |
| 2482 { | 2442 { |
| 2483 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,_channelId), | 2443 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId,_channelId), |
| 2484 "Channel::UpdateRxVadDetection()"); | 2444 "Channel::UpdateRxVadDetection()"); |
| 2485 | 2445 |
| 2486 int vadDecision = 1; | 2446 int vadDecision = 1; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2534 } | 2494 } |
| 2535 _rxVadObserverPtr = NULL; | 2495 _rxVadObserverPtr = NULL; |
| 2536 _RxVadDetection = false; | 2496 _RxVadDetection = false; |
| 2537 return 0; | 2497 return 0; |
| 2538 } | 2498 } |
| 2539 | 2499 |
| 2540 int | 2500 int |
| 2541 Channel::VoiceActivityIndicator(int &activity) | 2501 Channel::VoiceActivityIndicator(int &activity) |
| 2542 { | 2502 { |
| 2543 activity = _sendFrameType; | 2503 activity = _sendFrameType; |
| 2544 | |
| 2545 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 2546 "Channel::VoiceActivityIndicator(indicator=%d)", activity); | |
| 2547 return 0; | 2504 return 0; |
| 2548 } | 2505 } |
| 2549 | 2506 |
| 2550 #ifdef WEBRTC_VOICE_ENGINE_AGC | 2507 #ifdef WEBRTC_VOICE_ENGINE_AGC |
| 2551 | 2508 |
| 2552 int | 2509 int |
| 2553 Channel::SetRxAgcStatus(bool enable, AgcModes mode) | 2510 Channel::SetRxAgcStatus(bool enable, AgcModes mode) |
| 2554 { | 2511 { |
| 2555 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | 2512 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), |
| 2556 "Channel::SetRxAgcStatus(enable=%d, mode=%d)", | 2513 "Channel::SetRxAgcStatus(enable=%d, mode=%d)", |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2594 | 2551 |
| 2595 _rxAgcIsEnabled = enable; | 2552 _rxAgcIsEnabled = enable; |
| 2596 channel_state_.SetRxApmIsEnabled(_rxAgcIsEnabled || _rxNsIsEnabled); | 2553 channel_state_.SetRxApmIsEnabled(_rxAgcIsEnabled || _rxNsIsEnabled); |
| 2597 | 2554 |
| 2598 return 0; | 2555 return 0; |
| 2599 } | 2556 } |
| 2600 | 2557 |
| 2601 int | 2558 int |
| 2602 Channel::GetRxAgcStatus(bool& enabled, AgcModes& mode) | 2559 Channel::GetRxAgcStatus(bool& enabled, AgcModes& mode) |
| 2603 { | 2560 { |
| 2604 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 2605 "Channel::GetRxAgcStatus(enable=?, mode=?)"); | |
| 2606 | |
| 2607 bool enable = rx_audioproc_->gain_control()->is_enabled(); | 2561 bool enable = rx_audioproc_->gain_control()->is_enabled(); |
| 2608 GainControl::Mode agcMode = | 2562 GainControl::Mode agcMode = |
| 2609 rx_audioproc_->gain_control()->mode(); | 2563 rx_audioproc_->gain_control()->mode(); |
| 2610 | 2564 |
| 2611 enabled = enable; | 2565 enabled = enable; |
| 2612 | 2566 |
| 2613 switch (agcMode) | 2567 switch (agcMode) |
| 2614 { | 2568 { |
| 2615 case GainControl::kFixedDigital: | 2569 case GainControl::kFixedDigital: |
| 2616 mode = kAgcFixedDigital; | 2570 mode = kAgcFixedDigital; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2660 "SetRxAgcConfig() failed to set hard limiter to the signal"); | 2614 "SetRxAgcConfig() failed to set hard limiter to the signal"); |
| 2661 return -1; | 2615 return -1; |
| 2662 } | 2616 } |
| 2663 | 2617 |
| 2664 return 0; | 2618 return 0; |
| 2665 } | 2619 } |
| 2666 | 2620 |
| 2667 int | 2621 int |
| 2668 Channel::GetRxAgcConfig(AgcConfig& config) | 2622 Channel::GetRxAgcConfig(AgcConfig& config) |
| 2669 { | 2623 { |
| 2670 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 2671 "Channel::GetRxAgcConfig(config=%?)"); | |
| 2672 | |
| 2673 config.targetLeveldBOv = | 2624 config.targetLeveldBOv = |
| 2674 rx_audioproc_->gain_control()->target_level_dbfs(); | 2625 rx_audioproc_->gain_control()->target_level_dbfs(); |
| 2675 config.digitalCompressionGaindB = | 2626 config.digitalCompressionGaindB = |
| 2676 rx_audioproc_->gain_control()->compression_gain_db(); | 2627 rx_audioproc_->gain_control()->compression_gain_db(); |
| 2677 config.limiterEnable = | 2628 config.limiterEnable = |
| 2678 rx_audioproc_->gain_control()->is_limiter_enabled(); | 2629 rx_audioproc_->gain_control()->is_limiter_enabled(); |
| 2679 | 2630 |
| 2680 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2681 VoEId(_instanceId,_channelId), "GetRxAgcConfig() => " | |
| 2682 "targetLeveldBOv=%u, digitalCompressionGaindB=%u," | |
| 2683 " limiterEnable=%d", | |
| 2684 config.targetLeveldBOv, | |
| 2685 config.digitalCompressionGaindB, | |
| 2686 config.limiterEnable); | |
| 2687 | |
| 2688 return 0; | 2631 return 0; |
| 2689 } | 2632 } |
| 2690 | 2633 |
| 2691 #endif // #ifdef WEBRTC_VOICE_ENGINE_AGC | 2634 #endif // #ifdef WEBRTC_VOICE_ENGINE_AGC |
| 2692 | 2635 |
| 2693 #ifdef WEBRTC_VOICE_ENGINE_NR | 2636 #ifdef WEBRTC_VOICE_ENGINE_NR |
| 2694 | 2637 |
| 2695 int | 2638 int |
| 2696 Channel::SetRxNsStatus(bool enable, NsModes mode) | 2639 Channel::SetRxNsStatus(bool enable, NsModes mode) |
| 2697 { | 2640 { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2743 | 2686 |
| 2744 _rxNsIsEnabled = enable; | 2687 _rxNsIsEnabled = enable; |
| 2745 channel_state_.SetRxApmIsEnabled(_rxAgcIsEnabled || _rxNsIsEnabled); | 2688 channel_state_.SetRxApmIsEnabled(_rxAgcIsEnabled || _rxNsIsEnabled); |
| 2746 | 2689 |
| 2747 return 0; | 2690 return 0; |
| 2748 } | 2691 } |
| 2749 | 2692 |
| 2750 int | 2693 int |
| 2751 Channel::GetRxNsStatus(bool& enabled, NsModes& mode) | 2694 Channel::GetRxNsStatus(bool& enabled, NsModes& mode) |
| 2752 { | 2695 { |
| 2753 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 2754 "Channel::GetRxNsStatus(enable=?, mode=?)"); | |
| 2755 | |
| 2756 bool enable = | 2696 bool enable = |
| 2757 rx_audioproc_->noise_suppression()->is_enabled(); | 2697 rx_audioproc_->noise_suppression()->is_enabled(); |
| 2758 NoiseSuppression::Level ncLevel = | 2698 NoiseSuppression::Level ncLevel = |
| 2759 rx_audioproc_->noise_suppression()->level(); | 2699 rx_audioproc_->noise_suppression()->level(); |
| 2760 | 2700 |
| 2761 enabled = enable; | 2701 enabled = enable; |
| 2762 | 2702 |
| 2763 switch (ncLevel) | 2703 switch (ncLevel) |
| 2764 { | 2704 { |
| 2765 case NoiseSuppression::kLow: | 2705 case NoiseSuppression::kLow: |
| 2766 mode = kNsLowSuppression; | 2706 mode = kNsLowSuppression; |
| 2767 break; | 2707 break; |
| 2768 case NoiseSuppression::kModerate: | 2708 case NoiseSuppression::kModerate: |
| 2769 mode = kNsModerateSuppression; | 2709 mode = kNsModerateSuppression; |
| 2770 break; | 2710 break; |
| 2771 case NoiseSuppression::kHigh: | 2711 case NoiseSuppression::kHigh: |
| 2772 mode = kNsHighSuppression; | 2712 mode = kNsHighSuppression; |
| 2773 break; | 2713 break; |
| 2774 case NoiseSuppression::kVeryHigh: | 2714 case NoiseSuppression::kVeryHigh: |
| 2775 mode = kNsVeryHighSuppression; | 2715 mode = kNsVeryHighSuppression; |
| 2776 break; | 2716 break; |
| 2777 } | 2717 } |
| 2778 | 2718 |
| 2779 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2780 VoEId(_instanceId,_channelId), | |
| 2781 "GetRxNsStatus() => enabled=%d, mode=%d", enabled, mode); | |
| 2782 return 0; | 2719 return 0; |
| 2783 } | 2720 } |
| 2784 | 2721 |
| 2785 #endif // #ifdef WEBRTC_VOICE_ENGINE_NR | 2722 #endif // #ifdef WEBRTC_VOICE_ENGINE_NR |
| 2786 | 2723 |
| 2787 int | 2724 int |
| 2788 Channel::SetLocalSSRC(unsigned int ssrc) | 2725 Channel::SetLocalSSRC(unsigned int ssrc) |
| 2789 { | 2726 { |
| 2790 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 2727 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), |
| 2791 "Channel::SetLocalSSRC()"); | 2728 "Channel::SetLocalSSRC()"); |
| 2792 if (channel_state_.Get().sending) | 2729 if (channel_state_.Get().sending) |
| 2793 { | 2730 { |
| 2794 _engineStatisticsPtr->SetLastError( | 2731 _engineStatisticsPtr->SetLastError( |
| 2795 VE_ALREADY_SENDING, kTraceError, | 2732 VE_ALREADY_SENDING, kTraceError, |
| 2796 "SetLocalSSRC() already sending"); | 2733 "SetLocalSSRC() already sending"); |
| 2797 return -1; | 2734 return -1; |
| 2798 } | 2735 } |
| 2799 _rtpRtcpModule->SetSSRC(ssrc); | 2736 _rtpRtcpModule->SetSSRC(ssrc); |
| 2800 return 0; | 2737 return 0; |
| 2801 } | 2738 } |
| 2802 | 2739 |
| 2803 int | 2740 int |
| 2804 Channel::GetLocalSSRC(unsigned int& ssrc) | 2741 Channel::GetLocalSSRC(unsigned int& ssrc) |
| 2805 { | 2742 { |
| 2806 ssrc = _rtpRtcpModule->SSRC(); | 2743 ssrc = _rtpRtcpModule->SSRC(); |
| 2807 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2808 VoEId(_instanceId,_channelId), | |
| 2809 "GetLocalSSRC() => ssrc=%lu", ssrc); | |
| 2810 return 0; | 2744 return 0; |
| 2811 } | 2745 } |
| 2812 | 2746 |
| 2813 int | 2747 int |
| 2814 Channel::GetRemoteSSRC(unsigned int& ssrc) | 2748 Channel::GetRemoteSSRC(unsigned int& ssrc) |
| 2815 { | 2749 { |
| 2816 ssrc = rtp_receiver_->SSRC(); | 2750 ssrc = rtp_receiver_->SSRC(); |
| 2817 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2818 VoEId(_instanceId,_channelId), | |
| 2819 "GetRemoteSSRC() => ssrc=%lu", ssrc); | |
| 2820 return 0; | 2751 return 0; |
| 2821 } | 2752 } |
| 2822 | 2753 |
| 2823 int Channel::SetSendAudioLevelIndicationStatus(bool enable, unsigned char id) { | 2754 int Channel::SetSendAudioLevelIndicationStatus(bool enable, unsigned char id) { |
| 2824 _includeAudioLevelIndication = enable; | 2755 _includeAudioLevelIndication = enable; |
| 2825 return SetSendRtpHeaderExtension(enable, kRtpExtensionAudioLevel, id); | 2756 return SetSendRtpHeaderExtension(enable, kRtpExtensionAudioLevel, id); |
| 2826 } | 2757 } |
| 2827 | 2758 |
| 2828 int Channel::SetReceiveAudioLevelIndicationStatus(bool enable, | 2759 int Channel::SetReceiveAudioLevelIndicationStatus(bool enable, |
| 2829 unsigned char id) { | 2760 unsigned char id) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2854 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 2785 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), |
| 2855 "Channel::SetRTCPStatus()"); | 2786 "Channel::SetRTCPStatus()"); |
| 2856 _rtpRtcpModule->SetRTCPStatus(enable ? kRtcpCompound : kRtcpOff); | 2787 _rtpRtcpModule->SetRTCPStatus(enable ? kRtcpCompound : kRtcpOff); |
| 2857 } | 2788 } |
| 2858 | 2789 |
| 2859 int | 2790 int |
| 2860 Channel::GetRTCPStatus(bool& enabled) | 2791 Channel::GetRTCPStatus(bool& enabled) |
| 2861 { | 2792 { |
| 2862 RTCPMethod method = _rtpRtcpModule->RTCP(); | 2793 RTCPMethod method = _rtpRtcpModule->RTCP(); |
| 2863 enabled = (method != kRtcpOff); | 2794 enabled = (method != kRtcpOff); |
| 2864 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2865 VoEId(_instanceId,_channelId), | |
| 2866 "GetRTCPStatus() => enabled=%d", enabled); | |
| 2867 return 0; | 2795 return 0; |
| 2868 } | 2796 } |
| 2869 | 2797 |
| 2870 int | 2798 int |
| 2871 Channel::SetRTCP_CNAME(const char cName[256]) | 2799 Channel::SetRTCP_CNAME(const char cName[256]) |
| 2872 { | 2800 { |
| 2873 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 2801 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), |
| 2874 "Channel::SetRTCP_CNAME()"); | 2802 "Channel::SetRTCP_CNAME()"); |
| 2875 if (_rtpRtcpModule->SetCNAME(cName) != 0) | 2803 if (_rtpRtcpModule->SetCNAME(cName) != 0) |
| 2876 { | 2804 { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2895 char cname[RTCP_CNAME_SIZE]; | 2823 char cname[RTCP_CNAME_SIZE]; |
| 2896 const uint32_t remoteSSRC = rtp_receiver_->SSRC(); | 2824 const uint32_t remoteSSRC = rtp_receiver_->SSRC(); |
| 2897 if (_rtpRtcpModule->RemoteCNAME(remoteSSRC, cname) != 0) | 2825 if (_rtpRtcpModule->RemoteCNAME(remoteSSRC, cname) != 0) |
| 2898 { | 2826 { |
| 2899 _engineStatisticsPtr->SetLastError( | 2827 _engineStatisticsPtr->SetLastError( |
| 2900 VE_CANNOT_RETRIEVE_CNAME, kTraceError, | 2828 VE_CANNOT_RETRIEVE_CNAME, kTraceError, |
| 2901 "GetRemoteRTCP_CNAME() failed to retrieve remote RTCP CNAME"); | 2829 "GetRemoteRTCP_CNAME() failed to retrieve remote RTCP CNAME"); |
| 2902 return -1; | 2830 return -1; |
| 2903 } | 2831 } |
| 2904 strcpy(cName, cname); | 2832 strcpy(cName, cname); |
| 2905 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2906 VoEId(_instanceId, _channelId), | |
| 2907 "GetRemoteRTCP_CNAME() => cName=%s", cName); | |
| 2908 return 0; | 2833 return 0; |
| 2909 } | 2834 } |
| 2910 | 2835 |
| 2911 int | 2836 int |
| 2912 Channel::GetRemoteRTCPData( | 2837 Channel::GetRemoteRTCPData( |
| 2913 unsigned int& NTPHigh, | 2838 unsigned int& NTPHigh, |
| 2914 unsigned int& NTPLow, | 2839 unsigned int& NTPLow, |
| 2915 unsigned int& timestamp, | 2840 unsigned int& timestamp, |
| 2916 unsigned int& playoutTimestamp, | 2841 unsigned int& playoutTimestamp, |
| 2917 unsigned int* jitter, | 2842 unsigned int* jitter, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2928 "side"); | 2853 "side"); |
| 2929 return -1; | 2854 return -1; |
| 2930 } | 2855 } |
| 2931 | 2856 |
| 2932 // We only utilize 12 out of 20 bytes in the sender info (ignores packet | 2857 // We only utilize 12 out of 20 bytes in the sender info (ignores packet |
| 2933 // and octet count) | 2858 // and octet count) |
| 2934 NTPHigh = senderInfo.NTPseconds; | 2859 NTPHigh = senderInfo.NTPseconds; |
| 2935 NTPLow = senderInfo.NTPfraction; | 2860 NTPLow = senderInfo.NTPfraction; |
| 2936 timestamp = senderInfo.RTPtimeStamp; | 2861 timestamp = senderInfo.RTPtimeStamp; |
| 2937 | 2862 |
| 2938 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2939 VoEId(_instanceId, _channelId), | |
| 2940 "GetRemoteRTCPData() => NTPHigh=%lu, NTPLow=%lu, " | |
| 2941 "timestamp=%lu", | |
| 2942 NTPHigh, NTPLow, timestamp); | |
| 2943 | |
| 2944 // --- Locally derived information | 2863 // --- Locally derived information |
| 2945 | 2864 |
| 2946 // This value is updated on each incoming RTCP packet (0 when no packet | 2865 // This value is updated on each incoming RTCP packet (0 when no packet |
| 2947 // has been received) | 2866 // has been received) |
| 2948 playoutTimestamp = playout_timestamp_rtcp_; | 2867 playoutTimestamp = playout_timestamp_rtcp_; |
| 2949 | 2868 |
| 2950 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2951 VoEId(_instanceId, _channelId), | |
| 2952 "GetRemoteRTCPData() => playoutTimestamp=%lu", | |
| 2953 playout_timestamp_rtcp_); | |
| 2954 | |
| 2955 if (NULL != jitter || NULL != fractionLost) | 2869 if (NULL != jitter || NULL != fractionLost) |
| 2956 { | 2870 { |
| 2957 // Get all RTCP receiver report blocks that have been received on this | 2871 // Get all RTCP receiver report blocks that have been received on this |
| 2958 // channel. If we receive RTP packets from a remote source we know the | 2872 // channel. If we receive RTP packets from a remote source we know the |
| 2959 // remote SSRC and use the report block from him. | 2873 // remote SSRC and use the report block from him. |
| 2960 // Otherwise use the first report block. | 2874 // Otherwise use the first report block. |
| 2961 std::vector<RTCPReportBlock> remote_stats; | 2875 std::vector<RTCPReportBlock> remote_stats; |
| 2962 if (_rtpRtcpModule->RemoteRTCPStat(&remote_stats) != 0 || | 2876 if (_rtpRtcpModule->RemoteRTCPStat(&remote_stats) != 0 || |
| 2963 remote_stats.empty()) { | 2877 remote_stats.empty()) { |
| 2964 WEBRTC_TRACE(kTraceWarning, kTraceVoice, | 2878 WEBRTC_TRACE(kTraceWarning, kTraceVoice, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2978 if (it == remote_stats.end()) { | 2892 if (it == remote_stats.end()) { |
| 2979 // If we have not received any RTCP packets from this SSRC it probably | 2893 // If we have not received any RTCP packets from this SSRC it probably |
| 2980 // means that we have not received any RTP packets. | 2894 // means that we have not received any RTP packets. |
| 2981 // Use the first received report block instead. | 2895 // Use the first received report block instead. |
| 2982 it = remote_stats.begin(); | 2896 it = remote_stats.begin(); |
| 2983 remoteSSRC = it->remoteSSRC; | 2897 remoteSSRC = it->remoteSSRC; |
| 2984 } | 2898 } |
| 2985 | 2899 |
| 2986 if (jitter) { | 2900 if (jitter) { |
| 2987 *jitter = it->jitter; | 2901 *jitter = it->jitter; |
| 2988 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2989 VoEId(_instanceId, _channelId), | |
| 2990 "GetRemoteRTCPData() => jitter = %lu", *jitter); | |
| 2991 } | 2902 } |
| 2992 | 2903 |
| 2993 if (fractionLost) { | 2904 if (fractionLost) { |
| 2994 *fractionLost = it->fractionLost; | 2905 *fractionLost = it->fractionLost; |
| 2995 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 2996 VoEId(_instanceId, _channelId), | |
| 2997 "GetRemoteRTCPData() => fractionLost = %lu", | |
| 2998 *fractionLost); | |
| 2999 } | 2906 } |
| 3000 } | 2907 } |
| 3001 return 0; | 2908 return 0; |
| 3002 } | 2909 } |
| 3003 | 2910 |
| 3004 int | 2911 int |
| 3005 Channel::SendApplicationDefinedRTCPPacket(unsigned char subType, | 2912 Channel::SendApplicationDefinedRTCPPacket(unsigned char subType, |
| 3006 unsigned int name, | 2913 unsigned int name, |
| 3007 const char* data, | 2914 const char* data, |
| 3008 unsigned short dataLengthInBytes) | 2915 unsigned short dataLengthInBytes) |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3078 ChannelStatistics stats = statistics_proxy_->GetStats(); | 2985 ChannelStatistics stats = statistics_proxy_->GetStats(); |
| 3079 const int32_t playoutFrequency = audio_coding_->PlayoutFrequency(); | 2986 const int32_t playoutFrequency = audio_coding_->PlayoutFrequency(); |
| 3080 if (playoutFrequency > 0) { | 2987 if (playoutFrequency > 0) { |
| 3081 // Scale RTP statistics given the current playout frequency | 2988 // Scale RTP statistics given the current playout frequency |
| 3082 maxJitterMs = stats.max_jitter / (playoutFrequency / 1000); | 2989 maxJitterMs = stats.max_jitter / (playoutFrequency / 1000); |
| 3083 averageJitterMs = stats.rtcp.jitter / (playoutFrequency / 1000); | 2990 averageJitterMs = stats.rtcp.jitter / (playoutFrequency / 1000); |
| 3084 } | 2991 } |
| 3085 | 2992 |
| 3086 discardedPackets = _numberOfDiscardedPackets; | 2993 discardedPackets = _numberOfDiscardedPackets; |
| 3087 | 2994 |
| 3088 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 3089 VoEId(_instanceId, _channelId), | |
| 3090 "GetRTPStatistics() => averageJitterMs = %lu, maxJitterMs = %lu," | |
| 3091 " discardedPackets = %lu)", | |
| 3092 averageJitterMs, maxJitterMs, discardedPackets); | |
| 3093 return 0; | 2995 return 0; |
| 3094 } | 2996 } |
| 3095 | 2997 |
| 3096 int Channel::GetRemoteRTCPReportBlocks( | 2998 int Channel::GetRemoteRTCPReportBlocks( |
| 3097 std::vector<ReportBlock>* report_blocks) { | 2999 std::vector<ReportBlock>* report_blocks) { |
| 3098 if (report_blocks == NULL) { | 3000 if (report_blocks == NULL) { |
| 3099 _engineStatisticsPtr->SetLastError(VE_INVALID_ARGUMENT, kTraceError, | 3001 _engineStatisticsPtr->SetLastError(VE_INVALID_ARGUMENT, kTraceError, |
| 3100 "GetRemoteRTCPReportBlock()s invalid report_blocks."); | 3002 "GetRemoteRTCPReportBlock()s invalid report_blocks."); |
| 3101 return -1; | 3003 return -1; |
| 3102 } | 3004 } |
| 3103 | 3005 |
| 3104 // Get the report blocks from the latest received RTCP Sender or Receiver | 3006 // Get the report blocks from the latest received RTCP Sender or Receiver |
| 3105 // Report. Each element in the vector contains the sender's SSRC and a | 3007 // Report. Each element in the vector contains the sender's SSRC and a |
| 3106 // report block according to RFC 3550. | 3008 // report block according to RFC 3550. |
| 3107 std::vector<RTCPReportBlock> rtcp_report_blocks; | 3009 std::vector<RTCPReportBlock> rtcp_report_blocks; |
| 3108 if (_rtpRtcpModule->RemoteRTCPStat(&rtcp_report_blocks) != 0) { | 3010 if (_rtpRtcpModule->RemoteRTCPStat(&rtcp_report_blocks) != 0) { |
| 3109 _engineStatisticsPtr->SetLastError(VE_RTP_RTCP_MODULE_ERROR, kTraceError, | |
| 3110 "GetRemoteRTCPReportBlocks() failed to read RTCP SR/RR report block."); | |
| 3111 return -1; | 3011 return -1; |
| 3112 } | 3012 } |
| 3113 | 3013 |
| 3114 if (rtcp_report_blocks.empty()) | 3014 if (rtcp_report_blocks.empty()) |
| 3115 return 0; | 3015 return 0; |
| 3116 | 3016 |
| 3117 std::vector<RTCPReportBlock>::const_iterator it = rtcp_report_blocks.begin(); | 3017 std::vector<RTCPReportBlock>::const_iterator it = rtcp_report_blocks.begin(); |
| 3118 for (; it != rtcp_report_blocks.end(); ++it) { | 3018 for (; it != rtcp_report_blocks.end(); ++it) { |
| 3119 ReportBlock report_block; | 3019 ReportBlock report_block; |
| 3120 report_block.sender_SSRC = it->remoteSSRC; | 3020 report_block.sender_SSRC = it->remoteSSRC; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 3146 VE_CANNOT_RETRIEVE_RTP_STAT, kTraceWarning, | 3046 VE_CANNOT_RETRIEVE_RTP_STAT, kTraceWarning, |
| 3147 "GetRTPStatistics() failed to read RTP statistics from the " | 3047 "GetRTPStatistics() failed to read RTP statistics from the " |
| 3148 "RTP/RTCP module"); | 3048 "RTP/RTCP module"); |
| 3149 } | 3049 } |
| 3150 | 3050 |
| 3151 stats.fractionLost = statistics.fraction_lost; | 3051 stats.fractionLost = statistics.fraction_lost; |
| 3152 stats.cumulativeLost = statistics.cumulative_lost; | 3052 stats.cumulativeLost = statistics.cumulative_lost; |
| 3153 stats.extendedMax = statistics.extended_max_sequence_number; | 3053 stats.extendedMax = statistics.extended_max_sequence_number; |
| 3154 stats.jitterSamples = statistics.jitter; | 3054 stats.jitterSamples = statistics.jitter; |
| 3155 | 3055 |
| 3156 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 3157 VoEId(_instanceId, _channelId), | |
| 3158 "GetRTPStatistics() => fractionLost=%lu, cumulativeLost=%lu," | |
| 3159 " extendedMax=%lu, jitterSamples=%li)", | |
| 3160 stats.fractionLost, stats.cumulativeLost, stats.extendedMax, | |
| 3161 stats.jitterSamples); | |
| 3162 | |
| 3163 // --- RTT | 3056 // --- RTT |
| 3164 stats.rttMs = GetRTT(true); | 3057 stats.rttMs = GetRTT(true); |
| 3165 if (stats.rttMs == 0) { | |
| 3166 WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, _channelId), | |
| 3167 "GetRTPStatistics() failed to get RTT"); | |
| 3168 } else { | |
| 3169 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, VoEId(_instanceId, _channelId), | |
| 3170 "GetRTPStatistics() => rttMs=%" PRId64, stats.rttMs); | |
| 3171 } | |
| 3172 | 3058 |
| 3173 // --- Data counters | 3059 // --- Data counters |
| 3174 | 3060 |
| 3175 size_t bytesSent(0); | 3061 size_t bytesSent(0); |
| 3176 uint32_t packetsSent(0); | 3062 uint32_t packetsSent(0); |
| 3177 size_t bytesReceived(0); | 3063 size_t bytesReceived(0); |
| 3178 uint32_t packetsReceived(0); | 3064 uint32_t packetsReceived(0); |
| 3179 | 3065 |
| 3180 if (statistician) { | 3066 if (statistician) { |
| 3181 statistician->GetDataCounters(&bytesReceived, &packetsReceived); | 3067 statistician->GetDataCounters(&bytesReceived, &packetsReceived); |
| 3182 } | 3068 } |
| 3183 | 3069 |
| 3184 if (_rtpRtcpModule->DataCountersRTP(&bytesSent, | 3070 if (_rtpRtcpModule->DataCountersRTP(&bytesSent, |
| 3185 &packetsSent) != 0) | 3071 &packetsSent) != 0) |
| 3186 { | 3072 { |
| 3187 WEBRTC_TRACE(kTraceWarning, kTraceVoice, | 3073 WEBRTC_TRACE(kTraceWarning, kTraceVoice, |
| 3188 VoEId(_instanceId, _channelId), | 3074 VoEId(_instanceId, _channelId), |
| 3189 "GetRTPStatistics() failed to retrieve RTP datacounters =>" | 3075 "GetRTPStatistics() failed to retrieve RTP datacounters =>" |
| 3190 " output will not be complete"); | 3076 " output will not be complete"); |
| 3191 } | 3077 } |
| 3192 | 3078 |
| 3193 stats.bytesSent = bytesSent; | 3079 stats.bytesSent = bytesSent; |
| 3194 stats.packetsSent = packetsSent; | 3080 stats.packetsSent = packetsSent; |
| 3195 stats.bytesReceived = bytesReceived; | 3081 stats.bytesReceived = bytesReceived; |
| 3196 stats.packetsReceived = packetsReceived; | 3082 stats.packetsReceived = packetsReceived; |
| 3197 | 3083 |
| 3198 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 3199 VoEId(_instanceId, _channelId), | |
| 3200 "GetRTPStatistics() => bytesSent=%" PRIuS ", packetsSent=%d," | |
| 3201 " bytesReceived=%" PRIuS ", packetsReceived=%d)", | |
| 3202 stats.bytesSent, stats.packetsSent, stats.bytesReceived, | |
| 3203 stats.packetsReceived); | |
| 3204 | |
| 3205 // --- Timestamps | 3084 // --- Timestamps |
| 3206 { | 3085 { |
| 3207 CriticalSectionScoped lock(ts_stats_lock_.get()); | 3086 CriticalSectionScoped lock(ts_stats_lock_.get()); |
| 3208 stats.capture_start_ntp_time_ms_ = capture_start_ntp_time_ms_; | 3087 stats.capture_start_ntp_time_ms_ = capture_start_ntp_time_ms_; |
| 3209 } | 3088 } |
| 3210 return 0; | 3089 return 0; |
| 3211 } | 3090 } |
| 3212 | 3091 |
| 3213 int Channel::SetREDStatus(bool enable, int redPayloadtype) { | 3092 int Channel::SetREDStatus(bool enable, int redPayloadtype) { |
| 3214 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 3093 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3248 int8_t payloadType(0); | 3127 int8_t payloadType(0); |
| 3249 if (_rtpRtcpModule->SendREDPayloadType(payloadType) != 0) | 3128 if (_rtpRtcpModule->SendREDPayloadType(payloadType) != 0) |
| 3250 { | 3129 { |
| 3251 _engineStatisticsPtr->SetLastError( | 3130 _engineStatisticsPtr->SetLastError( |
| 3252 VE_RTP_RTCP_MODULE_ERROR, kTraceError, | 3131 VE_RTP_RTCP_MODULE_ERROR, kTraceError, |
| 3253 "GetREDStatus() failed to retrieve RED PT from RTP/RTCP " | 3132 "GetREDStatus() failed to retrieve RED PT from RTP/RTCP " |
| 3254 "module"); | 3133 "module"); |
| 3255 return -1; | 3134 return -1; |
| 3256 } | 3135 } |
| 3257 redPayloadtype = payloadType; | 3136 redPayloadtype = payloadType; |
| 3258 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 3259 VoEId(_instanceId, _channelId), | |
| 3260 "GetREDStatus() => enabled=%d, redPayloadtype=%d", | |
| 3261 enabled, redPayloadtype); | |
| 3262 return 0; | 3137 return 0; |
| 3263 } | 3138 } |
| 3264 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 3265 VoEId(_instanceId, _channelId), | |
| 3266 "GetREDStatus() => enabled=%d", enabled); | |
| 3267 return 0; | 3139 return 0; |
| 3268 } | 3140 } |
| 3269 | 3141 |
| 3270 int Channel::SetCodecFECStatus(bool enable) { | 3142 int Channel::SetCodecFECStatus(bool enable) { |
| 3271 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 3143 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), |
| 3272 "Channel::SetCodecFECStatus()"); | 3144 "Channel::SetCodecFECStatus()"); |
| 3273 | 3145 |
| 3274 if (audio_coding_->SetCodecFEC(enable) != 0) { | 3146 if (audio_coding_->SetCodecFEC(enable) != 0) { |
| 3275 _engineStatisticsPtr->SetLastError( | 3147 _engineStatisticsPtr->SetLastError( |
| 3276 VE_AUDIO_CODING_MODULE_ERROR, kTraceError, | 3148 VE_AUDIO_CODING_MODULE_ERROR, kTraceError, |
| 3277 "SetCodecFECStatus() failed to set FEC state"); | 3149 "SetCodecFECStatus() failed to set FEC state"); |
| 3278 return -1; | 3150 return -1; |
| 3279 } | 3151 } |
| 3280 return 0; | 3152 return 0; |
| 3281 } | 3153 } |
| 3282 | 3154 |
| 3283 bool Channel::GetCodecFECStatus() { | 3155 bool Channel::GetCodecFECStatus() { |
| 3284 bool enabled = audio_coding_->CodecFEC(); | 3156 bool enabled = audio_coding_->CodecFEC(); |
| 3285 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 3286 VoEId(_instanceId, _channelId), | |
| 3287 "GetCodecFECStatus() => enabled=%d", enabled); | |
| 3288 return enabled; | 3157 return enabled; |
| 3289 } | 3158 } |
| 3290 | 3159 |
| 3291 void Channel::SetNACKStatus(bool enable, int maxNumberOfPackets) { | 3160 void Channel::SetNACKStatus(bool enable, int maxNumberOfPackets) { |
| 3292 // None of these functions can fail. | 3161 // None of these functions can fail. |
| 3293 _rtpRtcpModule->SetStorePacketsStatus(enable, maxNumberOfPackets); | 3162 _rtpRtcpModule->SetStorePacketsStatus(enable, maxNumberOfPackets); |
| 3294 rtp_receive_statistics_->SetMaxReorderingThreshold(maxNumberOfPackets); | 3163 rtp_receive_statistics_->SetMaxReorderingThreshold(maxNumberOfPackets); |
| 3295 rtp_receiver_->SetNACKStatus(enable ? kNackRtcp : kNackOff); | 3164 rtp_receiver_->SetNACKStatus(enable ? kNackRtcp : kNackOff); |
| 3296 if (enable) | 3165 if (enable) |
| 3297 audio_coding_->EnableNack(maxNumberOfPackets); | 3166 audio_coding_->EnableNack(maxNumberOfPackets); |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3524 } | 3393 } |
| 3525 | 3394 |
| 3526 _externalMixing = enabled; | 3395 _externalMixing = enabled; |
| 3527 | 3396 |
| 3528 return 0; | 3397 return 0; |
| 3529 } | 3398 } |
| 3530 | 3399 |
| 3531 int | 3400 int |
| 3532 Channel::GetNetworkStatistics(NetworkStatistics& stats) | 3401 Channel::GetNetworkStatistics(NetworkStatistics& stats) |
| 3533 { | 3402 { |
| 3534 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 3535 "Channel::GetNetworkStatistics()"); | |
| 3536 return audio_coding_->GetNetworkStatistics(&stats); | 3403 return audio_coding_->GetNetworkStatistics(&stats); |
| 3537 } | 3404 } |
| 3538 | 3405 |
| 3539 void Channel::GetDecodingCallStatistics(AudioDecodingCallStats* stats) const { | 3406 void Channel::GetDecodingCallStatistics(AudioDecodingCallStats* stats) const { |
| 3540 audio_coding_->GetDecodingCallStatistics(stats); | 3407 audio_coding_->GetDecodingCallStatistics(stats); |
| 3541 } | 3408 } |
| 3542 | 3409 |
| 3543 bool Channel::GetDelayEstimate(int* jitter_buffer_delay_ms, | 3410 bool Channel::GetDelayEstimate(int* jitter_buffer_delay_ms, |
| 3544 int* playout_buffer_delay_ms) const { | 3411 int* playout_buffer_delay_ms) const { |
| 3545 CriticalSectionScoped cs(video_sync_lock_.get()); | 3412 CriticalSectionScoped cs(video_sync_lock_.get()); |
| 3546 if (_average_jitter_buffer_delay_us == 0) { | 3413 if (_average_jitter_buffer_delay_us == 0) { |
| 3547 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 3548 "Channel::GetDelayEstimate() no valid estimate."); | |
| 3549 return false; | 3414 return false; |
| 3550 } | 3415 } |
| 3551 *jitter_buffer_delay_ms = (_average_jitter_buffer_delay_us + 500) / 1000 + | 3416 *jitter_buffer_delay_ms = (_average_jitter_buffer_delay_us + 500) / 1000 + |
| 3552 _recPacketDelayMs; | 3417 _recPacketDelayMs; |
| 3553 *playout_buffer_delay_ms = playout_delay_ms_; | 3418 *playout_buffer_delay_ms = playout_delay_ms_; |
| 3554 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 3555 "Channel::GetDelayEstimate()"); | |
| 3556 return true; | 3419 return true; |
| 3557 } | 3420 } |
| 3558 | 3421 |
| 3559 int Channel::LeastRequiredDelayMs() const { | 3422 int Channel::LeastRequiredDelayMs() const { |
| 3560 return audio_coding_->LeastRequiredDelayMs(); | 3423 return audio_coding_->LeastRequiredDelayMs(); |
| 3561 } | 3424 } |
| 3562 | 3425 |
| 3563 int Channel::SetInitialPlayoutDelay(int delay_ms) | 3426 int Channel::SetInitialPlayoutDelay(int delay_ms) |
| 3564 { | 3427 { |
| 3565 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | 3428 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3600 { | 3463 { |
| 3601 _engineStatisticsPtr->SetLastError( | 3464 _engineStatisticsPtr->SetLastError( |
| 3602 VE_AUDIO_CODING_MODULE_ERROR, kTraceError, | 3465 VE_AUDIO_CODING_MODULE_ERROR, kTraceError, |
| 3603 "SetMinimumPlayoutDelay() failed to set min playout delay"); | 3466 "SetMinimumPlayoutDelay() failed to set min playout delay"); |
| 3604 return -1; | 3467 return -1; |
| 3605 } | 3468 } |
| 3606 return 0; | 3469 return 0; |
| 3607 } | 3470 } |
| 3608 | 3471 |
| 3609 int Channel::GetPlayoutTimestamp(unsigned int& timestamp) { | 3472 int Channel::GetPlayoutTimestamp(unsigned int& timestamp) { |
| 3610 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 3611 "Channel::GetPlayoutTimestamp()"); | |
| 3612 uint32_t playout_timestamp_rtp = 0; | 3473 uint32_t playout_timestamp_rtp = 0; |
| 3613 { | 3474 { |
| 3614 CriticalSectionScoped cs(video_sync_lock_.get()); | 3475 CriticalSectionScoped cs(video_sync_lock_.get()); |
| 3615 playout_timestamp_rtp = playout_timestamp_rtp_; | 3476 playout_timestamp_rtp = playout_timestamp_rtp_; |
| 3616 } | 3477 } |
| 3617 if (playout_timestamp_rtp == 0) { | 3478 if (playout_timestamp_rtp == 0) { |
| 3618 _engineStatisticsPtr->SetLastError( | 3479 _engineStatisticsPtr->SetLastError( |
| 3619 VE_CANNOT_RETRIEVE_VALUE, kTraceError, | 3480 VE_CANNOT_RETRIEVE_VALUE, kTraceError, |
| 3620 "GetPlayoutTimestamp() failed to retrieve timestamp"); | 3481 "GetPlayoutTimestamp() failed to retrieve timestamp"); |
| 3621 return -1; | 3482 return -1; |
| 3622 } | 3483 } |
| 3623 timestamp = playout_timestamp_rtp; | 3484 timestamp = playout_timestamp_rtp; |
| 3624 WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, | |
| 3625 VoEId(_instanceId,_channelId), | |
| 3626 "GetPlayoutTimestamp() => timestamp=%u", timestamp); | |
| 3627 return 0; | 3485 return 0; |
| 3628 } | 3486 } |
| 3629 | 3487 |
| 3630 int Channel::SetInitTimestamp(unsigned int timestamp) { | 3488 int Channel::SetInitTimestamp(unsigned int timestamp) { |
| 3631 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), | 3489 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), |
| 3632 "Channel::SetInitTimestamp()"); | 3490 "Channel::SetInitTimestamp()"); |
| 3633 if (channel_state_.Get().sending) { | 3491 if (channel_state_.Get().sending) { |
| 3634 _engineStatisticsPtr->SetLastError(VE_SENDING, kTraceError, | 3492 _engineStatisticsPtr->SetLastError(VE_SENDING, kTraceError, |
| 3635 "SetInitTimestamp() already sending"); | 3493 "SetInitTimestamp() already sending"); |
| 3636 return -1; | 3494 return -1; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 3647 VE_SENDING, kTraceError, "SetInitSequenceNumber() already sending"); | 3505 VE_SENDING, kTraceError, "SetInitSequenceNumber() already sending"); |
| 3648 return -1; | 3506 return -1; |
| 3649 } | 3507 } |
| 3650 _rtpRtcpModule->SetSequenceNumber(sequenceNumber); | 3508 _rtpRtcpModule->SetSequenceNumber(sequenceNumber); |
| 3651 return 0; | 3509 return 0; |
| 3652 } | 3510 } |
| 3653 | 3511 |
| 3654 int | 3512 int |
| 3655 Channel::GetRtpRtcp(RtpRtcp** rtpRtcpModule, RtpReceiver** rtp_receiver) const | 3513 Channel::GetRtpRtcp(RtpRtcp** rtpRtcpModule, RtpReceiver** rtp_receiver) const |
| 3656 { | 3514 { |
| 3657 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | |
| 3658 "Channel::GetRtpRtcp()"); | |
| 3659 *rtpRtcpModule = _rtpRtcpModule.get(); | 3515 *rtpRtcpModule = _rtpRtcpModule.get(); |
| 3660 *rtp_receiver = rtp_receiver_.get(); | 3516 *rtp_receiver = rtp_receiver_.get(); |
| 3661 return 0; | 3517 return 0; |
| 3662 } | 3518 } |
| 3663 | 3519 |
| 3664 // TODO(andrew): refactor Mix functions here and in transmit_mixer.cc to use | 3520 // TODO(andrew): refactor Mix functions here and in transmit_mixer.cc to use |
| 3665 // a shared helper. | 3521 // a shared helper. |
| 3666 int32_t | 3522 int32_t |
| 3667 Channel::MixOrReplaceAudioWithFile(int mixingFrequency) | 3523 Channel::MixOrReplaceAudioWithFile(int mixingFrequency) |
| 3668 { | 3524 { |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3967 1000 * timestamp_diff_ms + 500) / 8; | 3823 1000 * timestamp_diff_ms + 500) / 8; |
| 3968 } | 3824 } |
| 3969 } | 3825 } |
| 3970 | 3826 |
| 3971 void | 3827 void |
| 3972 Channel::RegisterReceiveCodecsToRTPModule() | 3828 Channel::RegisterReceiveCodecsToRTPModule() |
| 3973 { | 3829 { |
| 3974 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), | 3830 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId), |
| 3975 "Channel::RegisterReceiveCodecsToRTPModule()"); | 3831 "Channel::RegisterReceiveCodecsToRTPModule()"); |
| 3976 | 3832 |
| 3977 | |
| 3978 CodecInst codec; | 3833 CodecInst codec; |
| 3979 const uint8_t nSupportedCodecs = AudioCodingModule::NumberOfCodecs(); | 3834 const uint8_t nSupportedCodecs = AudioCodingModule::NumberOfCodecs(); |
| 3980 | 3835 |
| 3981 for (int idx = 0; idx < nSupportedCodecs; idx++) | 3836 for (int idx = 0; idx < nSupportedCodecs; idx++) |
| 3982 { | 3837 { |
| 3983 // Open up the RTP/RTCP receiver for all supported codecs | 3838 // Open up the RTP/RTCP receiver for all supported codecs |
| 3984 if ((audio_coding_->Codec(idx, &codec) == -1) || | 3839 if ((audio_coding_->Codec(idx, &codec) == -1) || |
| 3985 (rtp_receiver_->RegisterReceivePayload( | 3840 (rtp_receiver_->RegisterReceivePayload( |
| 3986 codec.plname, | 3841 codec.plname, |
| 3987 codec.pltype, | 3842 codec.pltype, |
| 3988 codec.plfreq, | 3843 codec.plfreq, |
| 3989 codec.channels, | 3844 codec.channels, |
| 3990 (codec.rate < 0) ? 0 : codec.rate) == -1)) | 3845 (codec.rate < 0) ? 0 : codec.rate) == -1)) |
| 3991 { | 3846 { |
| 3992 WEBRTC_TRACE( | 3847 WEBRTC_TRACE(kTraceWarning, |
| 3993 kTraceWarning, | |
| 3994 kTraceVoice, | 3848 kTraceVoice, |
| 3995 VoEId(_instanceId, _channelId), | 3849 VoEId(_instanceId, _channelId), |
| 3996 "Channel::RegisterReceiveCodecsToRTPModule() unable" | 3850 "Channel::RegisterReceiveCodecsToRTPModule() unable" |
| 3997 " to register %s (%d/%d/%d/%d) to RTP/RTCP receiver", | 3851 " to register %s (%d/%d/%d/%d) to RTP/RTCP receiver", |
| 3998 codec.plname, codec.pltype, codec.plfreq, | 3852 codec.plname, codec.pltype, codec.plfreq, |
| 3999 codec.channels, codec.rate); | 3853 codec.channels, codec.rate); |
| 4000 } | 3854 } |
| 4001 else | 3855 else |
| 4002 { | 3856 { |
| 4003 WEBRTC_TRACE( | 3857 WEBRTC_TRACE(kTraceInfo, |
| 4004 kTraceInfo, | |
| 4005 kTraceVoice, | 3858 kTraceVoice, |
| 4006 VoEId(_instanceId, _channelId), | 3859 VoEId(_instanceId, _channelId), |
| 4007 "Channel::RegisterReceiveCodecsToRTPModule() %s " | 3860 "Channel::RegisterReceiveCodecsToRTPModule() %s " |
| 4008 "(%d/%d/%d/%d) has been added to the RTP/RTCP " | 3861 "(%d/%d/%d/%d) has been added to the RTP/RTCP " |
| 4009 "receiver", | 3862 "receiver", |
| 4010 codec.plname, codec.pltype, codec.plfreq, | 3863 codec.plname, codec.pltype, codec.plfreq, |
| 4011 codec.channels, codec.rate); | 3864 codec.channels, codec.rate); |
| 4012 } | 3865 } |
| 4013 } | 3866 } |
| 4014 } | 3867 } |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4127 int64_t min_rtt = 0; | 3980 int64_t min_rtt = 0; |
| 4128 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) | 3981 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) |
| 4129 != 0) { | 3982 != 0) { |
| 4130 return 0; | 3983 return 0; |
| 4131 } | 3984 } |
| 4132 return rtt; | 3985 return rtt; |
| 4133 } | 3986 } |
| 4134 | 3987 |
| 4135 } // namespace voe | 3988 } // namespace voe |
| 4136 } // namespace webrtc | 3989 } // namespace webrtc |
| OLD | NEW |