blob: e22f7ce114c87ddeff5369c6e176a10adc7f1ec0 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
leozwang@webrtc.org07c68b92012-02-29 16:09:51 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
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
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
pwestin@webrtc.org82dcc9f2013-04-02 20:37:14 +000011#include "webrtc/video_engine/vie_network_impl.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000012
pwestin@webrtc.org684f0572013-03-13 23:20:57 +000013#include <stdio.h>
14#if (defined(WIN32_) || defined(WIN64_))
15#include <qos.h>
16#endif
17
pwestin@webrtc.org82dcc9f2013-04-02 20:37:14 +000018#include "webrtc/engine_configurations.h"
19#include "webrtc/system_wrappers/interface/trace.h"
20#include "webrtc/video_engine/include/vie_errors.h"
21#include "webrtc/video_engine/vie_channel.h"
22#include "webrtc/video_engine/vie_channel_manager.h"
23#include "webrtc/video_engine/vie_defines.h"
24#include "webrtc/video_engine/vie_encoder.h"
25#include "webrtc/video_engine/vie_impl.h"
26#include "webrtc/video_engine/vie_shared_data.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000027
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000028namespace webrtc {
niklase@google.com470e71d2011-07-07 08:21:25 +000029
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000030ViENetwork* ViENetwork::GetInterface(VideoEngine* video_engine) {
pwestin@webrtc.org684f0572013-03-13 23:20:57 +000031#ifdef WEBRTC_VIDEO_ENGINE_NETWORK_API
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000032 if (!video_engine) {
niklase@google.com470e71d2011-07-07 08:21:25 +000033 return NULL;
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000034 }
35 VideoEngineImpl* vie_impl = reinterpret_cast<VideoEngineImpl*>(video_engine);
36 ViENetworkImpl* vie_networkImpl = vie_impl;
37 // Increase ref count.
38 (*vie_networkImpl)++;
39 return vie_networkImpl;
pwestin@webrtc.org684f0572013-03-13 23:20:57 +000040#else
41 return NULL;
42#endif
niklase@google.com470e71d2011-07-07 08:21:25 +000043}
44
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000045int ViENetworkImpl::Release() {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000046 WEBRTC_TRACE(kTraceApiCall, kTraceVideo, shared_data_->instance_id(),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000047 "ViENetwork::Release()");
48 // Decrease ref count.
49 (*this)--;
niklase@google.com470e71d2011-07-07 08:21:25 +000050
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000051 WebRtc_Word32 ref_count = GetCount();
52 if (ref_count < 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000053 WEBRTC_TRACE(kTraceWarning, kTraceVideo, shared_data_->instance_id(),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000054 "ViENetwork release too many times");
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000055 shared_data_->SetLastError(kViEAPIDoesNotExist);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000056 return -1;
57 }
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000058 WEBRTC_TRACE(kTraceInfo, kTraceVideo, shared_data_->instance_id(),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000059 "ViENetwork reference count: %d", ref_count);
60 return ref_count;
niklase@google.com470e71d2011-07-07 08:21:25 +000061}
62
stefan@webrtc.orgbfacda62013-03-27 16:36:01 +000063void ViENetworkImpl::SetNetworkTransmissionState(const int video_channel,
64 const bool is_transmitting) {
65 WEBRTC_TRACE(kTraceApiCall, kTraceVideo,
66 ViEId(shared_data_->instance_id(), video_channel),
67 "%s(event: Network %s)", __FUNCTION__,
68 is_transmitting ? "transmitting" : "not transmitting");
69 if (!shared_data_->Initialized()) {
70 shared_data_->SetLastError(kViENotInitialized);
71 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
72 "%s - ViE instance %d not initialized", __FUNCTION__,
73 shared_data_->instance_id());
74 return;
75 }
76
77 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
78 ViEEncoder* vie_encoder = cs.Encoder(video_channel);
79 if (!vie_encoder) {
80 WEBRTC_TRACE(kTraceError, kTraceVideo,
81 ViEId(shared_data_->instance_id(), video_channel),
82 "An encoder doesn't exist for this channel");
83 shared_data_->SetLastError(kViENetworkInvalidChannelId);
84 return;
85 }
86 vie_encoder->SetNetworkTransmissionState(is_transmitting);
87}
88
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000089ViENetworkImpl::ViENetworkImpl(ViESharedData* shared_data)
90 : shared_data_(shared_data) {
91 WEBRTC_TRACE(kTraceMemory, kTraceVideo, shared_data_->instance_id(),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000092 "ViENetworkImpl::ViENetworkImpl() Ctor");
niklase@google.com470e71d2011-07-07 08:21:25 +000093}
94
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000095ViENetworkImpl::~ViENetworkImpl() {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +000096 WEBRTC_TRACE(kTraceMemory, kTraceVideo, shared_data_->instance_id(),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +000097 "ViENetworkImpl::~ViENetworkImpl() Dtor");
niklase@google.com470e71d2011-07-07 08:21:25 +000098}
99
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000100int ViENetworkImpl::RegisterSendTransport(const int video_channel,
101 Transport& transport) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000102 WEBRTC_TRACE(kTraceApiCall, kTraceVideo,
103 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000104 "%s(channel: %d)", __FUNCTION__, video_channel);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000105 if (!shared_data_->Initialized()) {
106 shared_data_->SetLastError(kViENotInitialized);
107 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000108 "%s - ViE instance %d not initialized", __FUNCTION__,
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000109 shared_data_->instance_id());
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000110 return -1;
111 }
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000112 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000113 ViEChannel* vie_channel = cs.Channel(video_channel);
114 if (!vie_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000115 WEBRTC_TRACE(kTraceError, kTraceVideo,
116 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000117 "%s Channel doesn't exist", __FUNCTION__);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000118 shared_data_->SetLastError(kViENetworkInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000119 return -1;
120 }
121 if (vie_channel->Sending()) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000122 WEBRTC_TRACE(kTraceError, kTraceVideo,
123 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000124 "%s Channel already sending.", __FUNCTION__);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000125 shared_data_->SetLastError(kViENetworkAlreadySending);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000126 return -1;
127 }
mflodman@webrtc.orgf5e99db2012-06-27 09:49:37 +0000128 if (vie_channel->RegisterSendTransport(&transport) != 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000129 shared_data_->SetLastError(kViENetworkUnknownError);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000130 return -1;
131 }
132 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000133}
134
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000135int ViENetworkImpl::DeregisterSendTransport(const int video_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000136 WEBRTC_TRACE(kTraceApiCall, kTraceVideo,
137 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000138 "%s(channel: %d)", __FUNCTION__, video_channel);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000139 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000140 ViEChannel* vie_channel = cs.Channel(video_channel);
141 if (!vie_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000142 WEBRTC_TRACE(kTraceError, kTraceVideo,
143 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000144 "%s Channel doesn't exist", __FUNCTION__);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000145 shared_data_->SetLastError(kViENetworkInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000146 return -1;
147 }
148 if (vie_channel->Sending()) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000149 WEBRTC_TRACE(kTraceError, kTraceVideo,
150 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000151 "%s Channel already sending", __FUNCTION__);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000152 shared_data_->SetLastError(kViENetworkAlreadySending);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000153 return -1;
154 }
155 if (vie_channel->DeregisterSendTransport() != 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000156 shared_data_->SetLastError(kViENetworkUnknownError);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000157 return -1;
158 }
159 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000160}
161
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000162int ViENetworkImpl::ReceivedRTPPacket(const int video_channel, const void* data,
163 const int length) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000164 WEBRTC_TRACE(kTraceApiCall, kTraceVideo,
165 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000166 "%s(channel: %d, data: -, length: %d)", __FUNCTION__,
167 video_channel, length);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000168 if (!shared_data_->Initialized()) {
169 shared_data_->SetLastError(kViENotInitialized);
170 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000171 "%s - ViE instance %d not initialized", __FUNCTION__,
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000172 shared_data_->instance_id());
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000173 return -1;
174 }
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000175 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000176 ViEChannel* vie_channel = cs.Channel(video_channel);
177 if (!vie_channel) {
178 // The channel doesn't exists
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000179 WEBRTC_TRACE(kTraceError, kTraceVideo,
180 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000181 "Channel doesn't exist");
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000182 shared_data_->SetLastError(kViENetworkInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000183 return -1;
184 }
185 return vie_channel->ReceivedRTPPacket(data, length);
niklase@google.com470e71d2011-07-07 08:21:25 +0000186}
187
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000188int ViENetworkImpl::ReceivedRTCPPacket(const int video_channel,
189 const void* data, const int length) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000190 WEBRTC_TRACE(kTraceApiCall, kTraceVideo,
191 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000192 "%s(channel: %d, data: -, length: %d)", __FUNCTION__,
193 video_channel, length);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000194 if (!shared_data_->Initialized()) {
195 shared_data_->SetLastError(kViENotInitialized);
196 WEBRTC_TRACE(kTraceError, kTraceVideo, ViEId(shared_data_->instance_id()),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000197 "%s - ViE instance %d not initialized", __FUNCTION__,
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000198 shared_data_->instance_id());
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000199 return -1;
200 }
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000201 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000202 ViEChannel* vie_channel = cs.Channel(video_channel);
203 if (!vie_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000204 WEBRTC_TRACE(kTraceError, kTraceVideo,
205 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000206 "Channel doesn't exist");
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000207 shared_data_->SetLastError(kViENetworkInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000208 return -1;
209 }
210 return vie_channel->ReceivedRTCPPacket(data, length);
niklase@google.com470e71d2011-07-07 08:21:25 +0000211}
212
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000213int ViENetworkImpl::SetMTU(int video_channel, unsigned int mtu) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000214 WEBRTC_TRACE(kTraceApiCall, kTraceVideo,
215 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000216 "%s(channel: %d, mtu: %u)", __FUNCTION__, video_channel, mtu);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000217 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000218 ViEChannel* vie_channel = cs.Channel(video_channel);
219 if (!vie_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000220 WEBRTC_TRACE(kTraceError, kTraceVideo,
221 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000222 "Channel doesn't exist");
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000223 shared_data_->SetLastError(kViENetworkInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000224 return -1;
225 }
226 if (vie_channel->SetMTU(mtu) != 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000227 shared_data_->SetLastError(kViENetworkUnknownError);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000228 return -1;
229 }
230 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000231}
232
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000233int ViENetworkImpl::SetPacketTimeoutNotification(const int video_channel,
niklase@google.com470e71d2011-07-07 08:21:25 +0000234 bool enable,
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000235 int timeout_seconds) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000236 WEBRTC_TRACE(kTraceApiCall, kTraceVideo,
237 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000238 "%s(channel: %d, enable: %d, timeout_seconds: %u)",
239 __FUNCTION__, video_channel, enable, timeout_seconds);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000240 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000241 ViEChannel* vie_channel = cs.Channel(video_channel);
242 if (!vie_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000243 WEBRTC_TRACE(kTraceError, kTraceVideo,
244 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000245 "Channel doesn't exist");
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000246 shared_data_->SetLastError(kViENetworkInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000247 return -1;
248 }
249 if (vie_channel->SetPacketTimeoutNotification(enable,
250 timeout_seconds) != 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000251 shared_data_->SetLastError(kViENetworkUnknownError);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000252 return -1;
253 }
254 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000255}
256
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000257int ViENetworkImpl::RegisterObserver(const int video_channel,
258 ViENetworkObserver& observer) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000259 WEBRTC_TRACE(kTraceApiCall, kTraceVideo,
260 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000261 "%s(channel: %d)", __FUNCTION__, video_channel);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000262 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000263 ViEChannel* vie_channel = cs.Channel(video_channel);
264 if (!vie_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000265 WEBRTC_TRACE(kTraceError, kTraceVideo,
266 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000267 "Channel doesn't exist");
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000268 shared_data_->SetLastError(kViENetworkInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000269 return -1;
270 }
271 if (vie_channel->RegisterNetworkObserver(&observer) != 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000272 shared_data_->SetLastError(kViENetworkObserverAlreadyRegistered);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000273 return -1;
274 }
275 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000276}
277
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000278int ViENetworkImpl::DeregisterObserver(const int video_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000279 WEBRTC_TRACE(kTraceApiCall, kTraceVideo,
280 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000281 "%s(channel: %d)", __FUNCTION__, video_channel);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000282 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000283 ViEChannel* vie_channel = cs.Channel(video_channel);
284 if (!vie_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000285 WEBRTC_TRACE(kTraceError, kTraceVideo,
286 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000287 "Channel doesn't exist");
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000288 shared_data_->SetLastError(kViENetworkInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000289 return -1;
290 }
291 if (!vie_channel->NetworkObserverRegistered()) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000292 shared_data_->SetLastError(kViENetworkObserverNotRegistered);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000293 return -1;
294 }
295 return vie_channel->RegisterNetworkObserver(NULL);
niklase@google.com470e71d2011-07-07 08:21:25 +0000296}
297
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000298int ViENetworkImpl::SetPeriodicDeadOrAliveStatus(
299 const int video_channel,
300 bool enable,
301 unsigned int sample_time_seconds) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000302 WEBRTC_TRACE(kTraceApiCall, kTraceVideo,
303 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000304 "%s(channel: %d, enable: %d, sample_time_seconds: %ul)",
305 __FUNCTION__, video_channel, enable, sample_time_seconds);
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000306 ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000307 ViEChannel* vie_channel = cs.Channel(video_channel);
308 if (!vie_channel) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000309 WEBRTC_TRACE(kTraceError, kTraceVideo,
310 ViEId(shared_data_->instance_id(), video_channel),
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000311 "Channel doesn't exist");
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000312 shared_data_->SetLastError(kViENetworkInvalidChannelId);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000313 return -1;
314 }
315 if (!vie_channel->NetworkObserverRegistered()) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000316 shared_data_->SetLastError(kViENetworkObserverNotRegistered);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000317 return -1;
318 }
319 if (vie_channel->SetPeriodicDeadOrAliveStatus(enable, sample_time_seconds)
320 != 0) {
mflodman@webrtc.orgb11424b2012-01-25 13:42:03 +0000321 shared_data_->SetLastError(kViENetworkUnknownError);
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000322 return -1;
323 }
324 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000325}
326
mflodman@webrtc.org1bdf1df2011-12-20 11:57:47 +0000327} // namespace webrtc