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