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/voice_engine/voe_neteq_stats_impl.h" 12471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org 13471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h" 14471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/system_wrappers/interface/critical_section_wrapper.h" 15471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/system_wrappers/interface/trace.h" 16471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/channel.h" 17471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/include/voe_errors.h" 18471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/voice_engine_impl.h" 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoENetEqStats* VoENetEqStats::GetInterface(VoiceEngine* voiceEngine) 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (NULL == voiceEngine) 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 31b9e5a3d589349ee55e41cb54eca4ec822018f5c5tommi@webrtc.org VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine); 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org s->AddRef(); 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return s; 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoENetEqStatsImpl::VoENetEqStatsImpl(voe::SharedData* shared) : _shared(shared) 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1), 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "VoENetEqStatsImpl::VoENetEqStatsImpl() - ctor"); 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoENetEqStatsImpl::~VoENetEqStatsImpl() 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1), 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "VoENetEqStatsImpl::~VoENetEqStatsImpl() - dtor"); 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoENetEqStatsImpl::GetNetworkStatistics(int channel, 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org NetworkStatistics& stats) 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetNetworkStatistics(channel=%d, stats=?)", channel); 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 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 "GetNetworkStatistics() failed to locate channel"); 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->GetNetworkStatistics(stats); 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 7479d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.orgint VoENetEqStatsImpl::GetDecodingCallStatistics( 7579d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org int channel, AudioDecodingCallStats* stats) const { 7679d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org 7779d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org if (!_shared->statistics().Initialized()) { 7879d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 7979d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org return -1; 8079d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org } 8179d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 8279d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org voe::Channel* channelPtr = ch.channel(); 8379d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org if (channelPtr == NULL) { 8479d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 8579d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org "GetDecodingCallStatistics() failed to locate " 8679d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org "channel"); 8779d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org return -1; 8879d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org } 8979d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org 9079d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org channelPtr->GetDecodingCallStatistics(stats); 9179d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org return 0; 9279d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org} 9379d6dafd3dac32e505bc1a2ccc83ef3ceb6c5ad3wu@webrtc.org 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // #ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 963b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace webrtc 97