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_video_sync_impl.h" 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 13ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org#include "webrtc/system_wrappers/interface/critical_section_wrapper.h" 14ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org#include "webrtc/system_wrappers/interface/trace.h" 15ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org#include "webrtc/voice_engine/channel.h" 16ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org#include "webrtc/voice_engine/include/voe_errors.h" 17ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org#include "webrtc/voice_engine/voice_engine_impl.h" 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoEVideoSync* VoEVideoSync::GetInterface(VoiceEngine* voiceEngine) 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (NULL == voiceEngine) 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 30b9e5a3d589349ee55e41cb54eca4ec822018f5c5tommi@webrtc.org VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine); 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org s->AddRef(); 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return s; 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoEVideoSyncImpl::VoEVideoSyncImpl(voe::SharedData* shared) : _shared(shared) 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1), 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "VoEVideoSyncImpl::VoEVideoSyncImpl() - ctor"); 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoEVideoSyncImpl::~VoEVideoSyncImpl() 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1), 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "VoEVideoSyncImpl::~VoEVideoSyncImpl() - dtor"); 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoEVideoSyncImpl::GetPlayoutTimestamp(int channel, unsigned int& timestamp) 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetPlayoutTimestamp(channel=%d, timestamp=?)", channel); 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 60b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 61b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channel_ptr = ch.channel(); 62b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org if (channel_ptr == NULL) 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetPlayoutTimestamp() failed to locate channel"); 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 68b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org return channel_ptr->GetPlayoutTimestamp(timestamp); 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoEVideoSyncImpl::SetInitTimestamp(int channel, 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned int timestamp) 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "SetInitTimestamp(channel=%d, timestamp=%lu)", 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org channel, timestamp); 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 83b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 84b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "SetInitTimestamp() failed to locate channel"); 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->SetInitTimestamp(timestamp); 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoEVideoSyncImpl::SetInitSequenceNumber(int channel, 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org short sequenceNumber) 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "SetInitSequenceNumber(channel=%d, sequenceNumber=%hd)", 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org channel, sequenceNumber); 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 106b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 107b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "SetInitSequenceNumber() failed to locate channel"); 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->SetInitSequenceNumber(sequenceNumber); 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoEVideoSyncImpl::SetMinimumPlayoutDelay(int channel,int delayMs) 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "SetMinimumPlayoutDelay(channel=%d, delayMs=%d)", 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org channel, delayMs); 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 128b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 129b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "SetMinimumPlayoutDelay() failed to locate channel"); 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return channelPtr->SetMinimumPlayoutDelay(delayMs); 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 139ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.orgint VoEVideoSyncImpl::SetInitialPlayoutDelay(int channel, int delay_ms) 140ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org{ 141ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 142ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org "SetInitialPlayoutDelay(channel=%d, delay_ms=%d)", 143ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org channel, delay_ms); 144ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org 145ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org if (!_shared->statistics().Initialized()) 146ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org { 147ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 148ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org return -1; 149ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org } 150b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 151b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 152b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org if (channelPtr == NULL) 153ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org { 154ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 155ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org "SetInitialPlayoutDelay() failed to locate channel"); 156ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org return -1; 157ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org } 158b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org return channelPtr->SetInitialPlayoutDelay(delay_ms); 159ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org} 160ead8a5bbdcdf3ac429c23af04d4a91f3de334f28turaj@webrtc.org 161f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.orgint VoEVideoSyncImpl::GetDelayEstimate(int channel, 162f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org int* jitter_buffer_delay_ms, 163f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org int* playout_buffer_delay_ms) { 164f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 165f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org "GetDelayEstimate(channel=%d, delayMs=?)", channel); 166f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org 167f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org if (!_shared->statistics().Initialized()) { 168f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 169f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org return -1; 170f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org } 171b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 172b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 173f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org if (channelPtr == NULL) { 174f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 175f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org "GetDelayEstimate() failed to locate channel"); 176f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org return -1; 177f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org } 178f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org if (!channelPtr->GetDelayEstimate(jitter_buffer_delay_ms, 179f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org playout_buffer_delay_ms)) { 180f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org return -1; 181f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org } 182f2724977323ae0d162fa0b33135046701f3eba66pwestin@webrtc.org return 0; 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoEVideoSyncImpl::GetPlayoutBufferSize(int& bufferMs) 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetPlayoutBufferSize(bufferMs=?)"); 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceModule::BufferType type 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (AudioDeviceModule::kFixedBufferSize); 19754f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org uint16_t sizeMS(0); 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_shared->audio_device()->PlayoutBuffer(&type, &sizeMS) != 0) 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_AUDIO_DEVICE_MODULE_ERROR, kTraceError, 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetPlayoutBufferSize() failed to read buffer size"); 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bufferMs = sizeMS; 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceVoice, 206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEId(_shared->instance_id(), -1), 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetPlayoutBufferSize() => bufferMs=%d", bufferMs); 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2117fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.orgint VoEVideoSyncImpl::GetRtpRtcp(int channel, RtpRtcp** rtpRtcpModule, 2127fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org RtpReceiver** rtp_receiver) 213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetRtpRtcp(channel=%i)", channel); 21659b3a4ca1db1bb16568f4d184c7cd13e9c1f5786fischman@webrtc.org 217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_shared->statistics().Initialized()) 218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 222b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 223b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channelPtr = ch.channel(); 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channelPtr == NULL) 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "GetPlayoutTimestamp() failed to locate channel"); 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2307fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org return channelPtr->GetRtpRtcp(rtpRtcpModule, rtp_receiver); 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 233d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.orgint VoEVideoSyncImpl::GetLeastRequiredDelayMs(int channel) const { 234d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), 235d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org "GetLeastRequiredDelayMS(channel=%d)", channel); 236d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org 237d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org if (!_shared->statistics().Initialized()) { 238d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org _shared->SetLastError(VE_NOT_INITED, kTraceError); 239d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org return -1; 240d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org } 241b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); 242b3ada1540827c60a63058570a94a57dfd260ad11pbos@webrtc.org voe::Channel* channel_ptr = ch.channel(); 243d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org if (channel_ptr == NULL) { 244d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, 245d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org "GetLeastRequiredDelayMs() failed to locate channel"); 246d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org return -1; 247d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org } 248d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org return channel_ptr->least_required_delay_ms(); 249d5577346d12d09f3e619c7c60340859e5d60f80fturaj@webrtc.org} 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // #ifdef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 254