1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/system_wrappers/interface/critical_section_wrapper.h" 12471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/system_wrappers/interface/file_wrapper.h" 13471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/system_wrappers/interface/trace.h" 14fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org#include "webrtc/video_engine/include/vie_network.h" 15471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/include/voe_errors.h" 16471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/voe_rtp_rtcp_impl.h" 17471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/voice_engine_impl.h" 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 19471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/channel.h" 20471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/transmit_mixer.h" 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoERTP_RTCP* VoERTP_RTCP::GetInterface(VoiceEngine* voiceEngine) 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_VOICE_ENGINE_RTP_RTCP_API 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (NULL == voiceEngine) 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 33b9e5a3d589349ee55e41cb54eca4ec822018f5c5tommi@webrtc.org VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine); 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org s->AddRef(); 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return s; 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VOICE_ENGINE_RTP_RTCP_API 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoERTP_RTCPImpl::VoERTP_RTCPImpl(voe::SharedData* shared) : _shared(shared) 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1), 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "VoERTP_RTCPImpl::VoERTP_RTCPImpl() - ctor"); 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoERTP_RTCPImpl::~VoERTP_RTCPImpl() 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1), 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "VoERTP_RTCPImpl::~VoERTP_RTCPImpl() - dtor"); 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::SetLocalSSRC(int channel, unsigned int ssrc) 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "SetLocalSSRC(channel=%d, %lu)", channel, ssrc); 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 62b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 63b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "SetLocalSSRC() failed to locate channel"); 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->SetLocalSSRC(ssrc); 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::GetLocalSSRC(int channel, unsigned int& ssrc) 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetLocalSSRC(channel=%d, ssrc=?)", channel); 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 82b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 83b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetLocalSSRC() failed to locate channel"); 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->GetLocalSSRC(ssrc); 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::GetRemoteSSRC(int channel, unsigned int& ssrc) 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRemoteSSRC(channel=%d, ssrc=?)", channel); 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 102b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 103b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRemoteSSRC() failed to locate channel"); 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->GetRemoteSSRC(ssrc); 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1139a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.orgint VoERTP_RTCPImpl::SetSendAudioLevelIndicationStatus(int channel, 1149a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org bool enable, 1159a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org unsigned char id) 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 1189a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org "SetSendAudioLevelIndicationStatus(channel=%d, enable=%d," 1199a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org " ID=%u)", channel, enable, id); 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1259a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org if (enable && (id < kVoiceEngineMinRtpExtensionId || 1269a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org id > kVoiceEngineMaxRtpExtensionId)) 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1289a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org // [RFC5285] The 4-bit id is the local identifier of this element in 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // the range 1-14 inclusive. 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError, 1319a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org "SetSendAudioLevelIndicationStatus() invalid ID parameter"); 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1359a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org // Set state and id for the specified channel. 136b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 137b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 1419a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org "SetSendAudioLevelIndicationStatus() failed to locate channel"); 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1449a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org return channelPtr->SetSendAudioLevelIndicationStatus(enable, id); 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14747e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.orgint VoERTP_RTCPImpl::SetReceiveAudioLevelIndicationStatus(int channel, 14847e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org bool enable, 14947e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org unsigned char id) { 15047e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 15147e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org "SetReceiveAudioLevelIndicationStatus(channel=%d, enable=%d, id=%u)", 15247e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org channel, enable, id); 15347e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org if (!_shared->statistics().Initialized()) { 15447e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 15547e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org return -1; 15647e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org } 15747e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org if (enable && 15847e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org (id < kVoiceEngineMinRtpExtensionId || 15947e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org id > kVoiceEngineMaxRtpExtensionId)) { 16047e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org // [RFC5285] The 4-bit id is the local identifier of this element in 16147e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org // the range 1-14 inclusive. 16247e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError, 16347e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org "SetReceiveAbsoluteSenderTimeStatus() invalid id parameter"); 16447e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org return -1; 16547e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org } 16647e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org // Set state and id for the specified channel. 16747e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 16847e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org voe::Channel* channel_ptr = ch.channel(); 16947e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org if (channel_ptr == NULL) { 17047e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 17147e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org "SetReceiveAudioLevelIndicationStatus() failed to locate channel"); 17247e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org return -1; 17347e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org } 17447e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org return channel_ptr->SetReceiveAudioLevelIndicationStatus(enable, id); 17547e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org} 17647e54ba67fc3931152c7358c3008b26a847db615wu@webrtc.org 1779a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.orgint VoERTP_RTCPImpl::SetSendAbsoluteSenderTimeStatus(int channel, 1789a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org bool enable, 1799a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org unsigned char id) { 1809a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 1819a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org "SetSendAbsoluteSenderTimeStatus(channel=%d, enable=%d, id=%u)", 1829a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org channel, enable, id); 1839a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org if (!_shared->statistics().Initialized()) { 1849a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 1859a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org return -1; 1869a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org } 1879a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org if (enable && (id < kVoiceEngineMinRtpExtensionId || 1889a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org id > kVoiceEngineMaxRtpExtensionId)) { 1899a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org // [RFC5285] The 4-bit id is the local identifier of this element in 1909a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org // the range 1-14 inclusive. 1919a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError, 1929a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org "SetSendAbsoluteSenderTimeStatus() invalid id parameter"); 1939a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org return -1; 1949a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org } 1959a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org // Set state and id for the specified channel. 1969a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 1979a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org voe::Channel* channelPtr = ch.channel(); 1989a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org if (channelPtr == NULL) { 1999a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 2009a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org "SetSendAbsoluteSenderTimeStatus() failed to locate channel"); 2019a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org return -1; 2029a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org } 2039a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org return channelPtr->SetSendAbsoluteSenderTimeStatus(enable, id); 2049a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org} 2059a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org 2069a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.orgint VoERTP_RTCPImpl::SetReceiveAbsoluteSenderTimeStatus(int channel, 2079a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org bool enable, 2089a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org unsigned char id) { 2099a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 2109a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org "SetReceiveAbsoluteSenderTimeStatus(channel=%d, enable=%d, id=%u)", 2119a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org channel, enable, id); 2129a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org if (!_shared->statistics().Initialized()) { 2139a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 2149a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org return -1; 2159a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org } 2169a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org if (enable && (id < kVoiceEngineMinRtpExtensionId || 2179a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org id > kVoiceEngineMaxRtpExtensionId)) { 2189a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org // [RFC5285] The 4-bit id is the local identifier of this element in 2199a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org // the range 1-14 inclusive. 2209a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError, 2219a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org "SetReceiveAbsoluteSenderTimeStatus() invalid id parameter"); 2229a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org return -1; 2239a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org } 2249a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org // Set state and id for the specified channel. 2259a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 2269a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org voe::Channel* channelPtr = ch.channel(); 2279a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org if (channelPtr == NULL) { 2289a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 2299a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org "SetReceiveAbsoluteSenderTimeStatus() failed to locate channel"); 2309a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org return -1; 2319a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org } 2329a8232203a0793a3bbd7edc8bba04a4b48e00210wu@webrtc.org return channelPtr->SetReceiveAbsoluteSenderTimeStatus(enable, id); 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::SetRTCPStatus(int channel, bool enable) 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "SetRTCPStatus(channel=%d, enable=%d)", channel, enable); 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 244b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 245b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "SetRTCPStatus() failed to locate channel"); 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->SetRTCPStatus(enable); 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::GetRTCPStatus(int channel, bool& enabled) 256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRTCPStatus(channel=%d)", channel); 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 264b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 265b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRTCPStatus() failed to locate channel"); 270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->GetRTCPStatus(enabled); 273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::SetRTCP_CNAME(int channel, const char cName[256]) 276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "SetRTCP_CNAME(channel=%d, cName=%s)", channel, cName); 279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 284b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 285b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "SetRTCP_CNAME() failed to locate channel"); 290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->SetRTCP_CNAME(cName); 293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::GetRemoteRTCP_CNAME(int channel, char cName[256]) 296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRemoteRTCP_CNAME(channel=%d, cName=?)", channel); 299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 304b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 305b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRemoteRTCP_CNAME() failed to locate channel"); 310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->GetRemoteRTCP_CNAME(cName); 313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::GetRemoteRTCPData( 316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int channel, 317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int& NTPHigh, // from sender info in SR 318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int& NTPLow, // from sender info in SR 319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int& timestamp, // from sender info in SR 320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int& playoutTimestamp, // derived locally 321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int* jitter, // from report block 1 in SR/RR 322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned short* fractionLost) // from report block 1 in SR/RR 323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRemoteRTCPData(channel=%d,...)", channel); 326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 331b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 332b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRemoteRTCP_CNAME() failed to locate channel"); 337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->GetRemoteRTCPData(NTPHigh, 340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org NTPLow, 341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org timestamp, 342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org playoutTimestamp, 343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jitter, 344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org fractionLost); 345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::GetRTPStatistics(int channel, 348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int& averageJitterMs, 349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int& maxJitterMs, 350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int& discardedPackets) 351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 352b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRTPStatistics(channel=%d,....)", channel); 354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 359b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 360b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 361b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 362b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 363b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRTPStatistics() failed to locate channel"); 365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->GetRTPStatistics(averageJitterMs, 368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org maxJitterMs, 369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org discardedPackets); 370b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::GetRTCPStatistics(int channel, CallStatistics& stats) 373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 374b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRTCPStatistics(channel=%d)", channel); 376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 378b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 381b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 382b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 384b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 386b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRTPStatistics() failed to locate channel"); 387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 389b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->GetRTPStatistics(stats); 390b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 391b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 392b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::GetRemoteRTCPReportBlocks( 393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int channel, std::vector<ReportBlock>* report_blocks) { 394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRemoteRTCPReportBlocks(channel=%d)", channel); 396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) { 397b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 398b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 399b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 400b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 401b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channel_ptr = ch.channel(); 402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channel_ptr == NULL) { 403b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRemoteRTCPReportBlocks() failed to locate channel"); 405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 406b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 407b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channel_ptr->GetRemoteRTCPReportBlocks(report_blocks); 408b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 410dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.orgint VoERTP_RTCPImpl::SetREDStatus(int channel, bool enable, int redPayloadtype) 411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 413dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org "SetREDStatus(channel=%d, enable=%d, redPayloadtype=%d)", 414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org channel, enable, redPayloadtype); 415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_CODEC_RED 416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 417b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 418b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 419b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 420b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 421b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 422b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 423b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 424b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 425b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 426dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org "SetREDStatus() failed to locate channel"); 427b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 428b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 429dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org return channelPtr->SetREDStatus(enable, redPayloadtype); 430b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 431b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_FUNC_NOT_SUPPORTED, kTraceError, 432dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org "SetREDStatus() RED is not supported"); 433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 437dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.orgint VoERTP_RTCPImpl::GetREDStatus(int channel, 438b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool& enabled, 439b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int& redPayloadtype) 440b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 441b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 442dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org "GetREDStatus(channel=%d, enabled=?, redPayloadtype=?)", 443b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org channel); 444b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_CODEC_RED 445b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 446b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 447b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 448b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 449b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 450b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 451b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 452b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 453b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 454b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 455dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org "GetREDStatus() failed to locate channel"); 456b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 457b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 458dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org return channelPtr->GetREDStatus(enabled, redPayloadtype); 459b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 460b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_FUNC_NOT_SUPPORTED, kTraceError, 461dd671dea7a51c5db5e15123acac599e89f9be201minyue@webrtc.org "GetREDStatus() RED is not supported"); 462b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 463b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 464b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 465b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 4662753b76b9eb849893adc1c9e8c0dfe53efe22535niklas.enbom@webrtc.orgint VoERTP_RTCPImpl::SetNACKStatus(int channel, 4672753b76b9eb849893adc1c9e8c0dfe53efe22535niklas.enbom@webrtc.org bool enable, 4682753b76b9eb849893adc1c9e8c0dfe53efe22535niklas.enbom@webrtc.org int maxNoPackets) 4692753b76b9eb849893adc1c9e8c0dfe53efe22535niklas.enbom@webrtc.org{ 4702753b76b9eb849893adc1c9e8c0dfe53efe22535niklas.enbom@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 4712753b76b9eb849893adc1c9e8c0dfe53efe22535niklas.enbom@webrtc.org "SetNACKStatus(channel=%d, enable=%d, maxNoPackets=%d)", 4722753b76b9eb849893adc1c9e8c0dfe53efe22535niklas.enbom@webrtc.org channel, enable, maxNoPackets); 473b8171ff4ee0fa8c6e1a62ef358949b105d245579pwestin@webrtc.org 474b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 475b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 476b8171ff4ee0fa8c6e1a62ef358949b105d245579pwestin@webrtc.org if (channelPtr == NULL) 477b8171ff4ee0fa8c6e1a62ef358949b105d245579pwestin@webrtc.org { 478b8171ff4ee0fa8c6e1a62ef358949b105d245579pwestin@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 479b8171ff4ee0fa8c6e1a62ef358949b105d245579pwestin@webrtc.org "SetNACKStatus() failed to locate channel"); 480b8171ff4ee0fa8c6e1a62ef358949b105d245579pwestin@webrtc.org return -1; 481b8171ff4ee0fa8c6e1a62ef358949b105d245579pwestin@webrtc.org } 482b8171ff4ee0fa8c6e1a62ef358949b105d245579pwestin@webrtc.org channelPtr->SetNACKStatus(enable, maxNoPackets); 4832753b76b9eb849893adc1c9e8c0dfe53efe22535niklas.enbom@webrtc.org return 0; 4842753b76b9eb849893adc1c9e8c0dfe53efe22535niklas.enbom@webrtc.org} 4852753b76b9eb849893adc1c9e8c0dfe53efe22535niklas.enbom@webrtc.org 4862753b76b9eb849893adc1c9e8c0dfe53efe22535niklas.enbom@webrtc.org 487b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::StartRTPDump(int channel, 488b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char fileNameUTF8[1024], 489b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RTPDirections direction) 490b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 491b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 492b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "StartRTPDump(channel=%d, fileNameUTF8=%s, direction=%d)", 493b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org channel, fileNameUTF8, direction); 494b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org assert(1024 == FileWrapper::kMaxFileNameSize); 495b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 496b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 497b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 498b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 499b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 500b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 501b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 502b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 503b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 504b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 505b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "StartRTPDump() failed to locate channel"); 506b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 507b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 508b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->StartRTPDump(fileNameUTF8, direction); 509b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 510b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 511b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::StopRTPDump(int channel, RTPDirections direction) 512b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 513b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 514b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "StopRTPDump(channel=%d, direction=%d)", channel, direction); 515b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 516b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 517b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 518b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 519b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 520b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 521b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 522b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 523b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 524b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 525b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "StopRTPDump() failed to locate channel"); 526b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 527b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 528b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->StopRTPDump(direction); 529b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 530b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 531b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoERTP_RTCPImpl::RTPDumpIsActive(int channel, RTPDirections direction) 532b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 533b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 534b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "RTPDumpIsActive(channel=%d, direction=%d)", 535b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org channel, direction); 536b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 537b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 538b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 539b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 540b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 541b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 542b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 543b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 544b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 545b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 546b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "StopRTPDump() failed to locate channel"); 547b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 548b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 549b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->RTPDumpIsActive(direction); 550b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 551b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 552fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.orgint VoERTP_RTCPImpl::SetVideoEngineBWETarget(int channel, 553fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org ViENetwork* vie_network, 554fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org int video_channel) { 555fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 556fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org "SetVideoEngineBWETarget(channel=%d, vie_network=?, video_channel=%d)", 557fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org channel, vie_network, video_channel); 558fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org 559fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 560fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org voe::Channel* channelPtr = ch.channel(); 561fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org if (channelPtr == NULL) { 562fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 563fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org "SetVideoEngineBWETarget() failed to locate channel"); 564fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org if (vie_network) { 565fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org vie_network->Release(); 566fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org } 567fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org return -1; 568fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org } 569fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org channelPtr->SetVideoEngineBWETarget(vie_network, video_channel); 570fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org return 0; 571fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org} 572fec6b6e5999edec8c90efae54357f1aae6a4c7ddsolenberg@webrtc.org 573b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // #ifdef WEBRTC_VOICE_ENGINE_RTP_RTCP_API 574b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 575b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 576