1470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/* 28012474552c90bac8489a0ce9c32abac505f376candrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * 4470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Use of this source code is governed by a BSD-style license 5470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * that can be found in the LICENSE file in the root of the source 6470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * tree. An additional intellectual property rights grant can be found 7470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * in the file PATENTS. All contributing project authors may 8470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * be found in the AUTHORS file in the root of the source tree. 9470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */ 10470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 11470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/* 12470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * This file contains common constants for VoiceEngine, as well as 13470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * platform specific settings and include files. 14470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */ 15470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 16470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifndef WEBRTC_VOICE_ENGINE_VOICE_ENGINE_DEFINES_H 17470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define WEBRTC_VOICE_ENGINE_VOICE_ENGINE_DEFINES_H 18470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 191e7ed7afe9e5c64b215a33fa6909e1edac17abd1andrew@webrtc.org#include "webrtc/common_types.h" 201e7ed7afe9e5c64b215a33fa6909e1edac17abd1andrew@webrtc.org#include "webrtc/engine_configurations.h" 21f0a90c37c4b8a2581268f0054cc9d977e7beee8eandrew@webrtc.org#include "webrtc/modules/audio_processing/include/audio_processing.h" 22470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 23470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// ---------------------------------------------------------------------------- 24470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Enumerators 25470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// ---------------------------------------------------------------------------- 26470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 274a6f62d4dc4fd83280bd00c0f454bc6a9cbc8121andrew@webrtc.orgnamespace webrtc { 284a6f62d4dc4fd83280bd00c0f454bc6a9cbc8121andrew@webrtc.org 2940ee3d07eda24b8e8214429d9885d9ad9a2c04f7andrew@webrtc.org// Internal buffer size required for mono audio, based on the highest sample 3040ee3d07eda24b8e8214429d9885d9ad9a2c04f7andrew@webrtc.org// rate voice engine supports (10 ms of audio at 192 kHz). 31dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kastingstatic const size_t kMaxMonoDataSizeSamples = 1920; 3240ee3d07eda24b8e8214429d9885d9ad9a2c04f7andrew@webrtc.org 33470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// VolumeControl 34470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kMinVolumeLevel = 0 }; 35470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kMaxVolumeLevel = 255 }; 36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Min scale factor for per-channel volume scaling 37470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comconst float kMinOutputVolumeScaling = 0.0f; 38470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Max scale factor for per-channel volume scaling 39470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comconst float kMaxOutputVolumeScaling = 10.0f; 40470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Min scale factor for output volume panning 41470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comconst float kMinOutputVolumePanning = 0.0f; 42470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Max scale factor for output volume panning 43470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comconst float kMaxOutputVolumePanning = 1.0f; 44470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 45470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// DTMF 460d266054acece70259fc1e85026194154f41e5a0Jelena Marusicenum { kMinDtmfEventCode = 0 }; // DTMF digit "0" 470d266054acece70259fc1e85026194154f41e5a0Jelena Marusicenum { kMaxDtmfEventCode = 15 }; // DTMF digit "D" 480d266054acece70259fc1e85026194154f41e5a0Jelena Marusicenum { kMinTelephoneEventCode = 0 }; // RFC4733 (Section 2.3.1) 490d266054acece70259fc1e85026194154f41e5a0Jelena Marusicenum { kMaxTelephoneEventCode = 255 }; // RFC4733 (Section 2.3.1) 50470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kMinTelephoneEventDuration = 100 }; 510d266054acece70259fc1e85026194154f41e5a0Jelena Marusicenum { kMaxTelephoneEventDuration = 60000 }; // Actual limit is 2^16 520d266054acece70259fc1e85026194154f41e5a0Jelena Marusicenum { kMinTelephoneEventAttenuation = 0 }; // 0 dBm0 530d266054acece70259fc1e85026194154f41e5a0Jelena Marusicenum { kMaxTelephoneEventAttenuation = 36 }; // -36 dBm0 540d266054acece70259fc1e85026194154f41e5a0Jelena Marusicenum { kMinTelephoneEventSeparationMs = 100 }; // Min delta time between two 550d266054acece70259fc1e85026194154f41e5a0Jelena Marusic // telephone events 560d266054acece70259fc1e85026194154f41e5a0Jelena Marusicenum { kVoiceEngineMaxIpPacketSizeBytes = 1500 }; // assumes Ethernet 57470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 58470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMaxModuleVersionSize = 960 }; 59470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 60470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Audio processing 61f0a90c37c4b8a2581268f0054cc9d977e7beee8eandrew@webrtc.orgconst NoiseSuppression::Level kDefaultNsMode = NoiseSuppression::kModerate; 62f0a90c37c4b8a2581268f0054cc9d977e7beee8eandrew@webrtc.orgconst GainControl::Mode kDefaultAgcMode = 63f0a90c37c4b8a2581268f0054cc9d977e7beee8eandrew@webrtc.org#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) 640d266054acece70259fc1e85026194154f41e5a0Jelena Marusic GainControl::kAdaptiveDigital; 65f0a90c37c4b8a2581268f0054cc9d977e7beee8eandrew@webrtc.org#else 660d266054acece70259fc1e85026194154f41e5a0Jelena Marusic GainControl::kAdaptiveAnalog; 67f0a90c37c4b8a2581268f0054cc9d977e7beee8eandrew@webrtc.org#endif 68f0a90c37c4b8a2581268f0054cc9d977e7beee8eandrew@webrtc.orgconst bool kDefaultAgcState = 69f0a90c37c4b8a2581268f0054cc9d977e7beee8eandrew@webrtc.org#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) 700d266054acece70259fc1e85026194154f41e5a0Jelena Marusic false; 71f0a90c37c4b8a2581268f0054cc9d977e7beee8eandrew@webrtc.org#else 720d266054acece70259fc1e85026194154f41e5a0Jelena Marusic true; 73f0a90c37c4b8a2581268f0054cc9d977e7beee8eandrew@webrtc.org#endif 746c264cc92eb554716814db200b84752d4dfb6ba3andrew@webrtc.orgconst GainControl::Mode kDefaultRxAgcMode = GainControl::kAdaptiveDigital; 75470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 76470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Codec 77470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Min init target rate for iSAC-wb 78470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMinIsacInitTargetRateBpsWb = 10000 }; 79470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Max init target rate for iSAC-wb 80470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMaxIsacInitTargetRateBpsWb = 32000 }; 81470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Min init target rate for iSAC-swb 82470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMinIsacInitTargetRateBpsSwb = 10000 }; 83470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Max init target rate for iSAC-swb 84470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMaxIsacInitTargetRateBpsSwb = 56000 }; 85470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Lowest max rate for iSAC-wb 86470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMinIsacMaxRateBpsWb = 32000 }; 87470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Highest max rate for iSAC-wb 88470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMaxIsacMaxRateBpsWb = 53400 }; 89470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Lowest max rate for iSAC-swb 90470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMinIsacMaxRateBpsSwb = 32000 }; 91470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Highest max rate for iSAC-swb 92470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMaxIsacMaxRateBpsSwb = 107000 }; 93470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Lowest max payload size for iSAC-wb 94470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMinIsacMaxPayloadSizeBytesWb = 120 }; 95470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Highest max payload size for iSAC-wb 96470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMaxIsacMaxPayloadSizeBytesWb = 400 }; 97470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Lowest max payload size for iSAC-swb 98470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMinIsacMaxPayloadSizeBytesSwb = 120 }; 99470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Highest max payload size for iSAC-swb 100470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMaxIsacMaxPayloadSizeBytesSwb = 600 }; 101470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 102470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// VideoSync 103470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Lowest minimum playout delay 104470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMinMinPlayoutDelayMs = 0 }; 105470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Highest minimum playout delay 106218c542c0bf1375306d48e81ad4bf3e69a058731niklas.enbom@webrtc.orgenum { kVoiceEngineMaxMinPlayoutDelayMs = 10000 }; 107470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 108470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Network 109470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Min packet-timeout time for received RTP packets 110470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMinPacketTimeoutSec = 1 }; 111470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Max packet-timeout time for received RTP packets 112470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMaxPacketTimeoutSec = 150 }; 113470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Min sample time for dead-or-alive detection 114470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMinSampleTimeSec = 1 }; 115470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Max sample time for dead-or-alive detection 116470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMaxSampleTimeSec = 150 }; 117470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 118470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// RTP/RTCP 119470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Min 4-bit ID for RTP extension (see section 4.2 in RFC 5285) 120470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMinRtpExtensionId = 1 }; 121470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Max 4-bit ID for RTP extension 122470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comenum { kVoiceEngineMaxRtpExtensionId = 14 }; 123470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 124d900e8bea84c474696bf0219aed1353ce65ffd8epbos@webrtc.org} // namespace webrtc 125470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 126470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// ---------------------------------------------------------------------------- 127470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Macros 128470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// ---------------------------------------------------------------------------- 129470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1300d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#define NOT_SUPPORTED(stat) \ 1310d266054acece70259fc1e85026194154f41e5a0Jelena Marusic LOG_F(LS_ERROR) << "not supported"; \ 1320d266054acece70259fc1e85026194154f41e5a0Jelena Marusic stat.SetLastError(VE_FUNC_NOT_SUPPORTED); \ 1331e7ed7afe9e5c64b215a33fa6909e1edac17abd1andrew@webrtc.org return -1; 1341e7ed7afe9e5c64b215a33fa6909e1edac17abd1andrew@webrtc.org 135a41ab9326c8f0f7eb738e5d51a239a2b9e276361tfarina#if (!defined(NDEBUG) && defined(_WIN32) && (_MSC_VER >= 1400)) 1360d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#include <windows.h> 1370d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#include <stdio.h> 1380d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#define DEBUG_PRINT(...) \ 1390d266054acece70259fc1e85026194154f41e5a0Jelena Marusic { \ 1400d266054acece70259fc1e85026194154f41e5a0Jelena Marusic char msg[256]; \ 1410d266054acece70259fc1e85026194154f41e5a0Jelena Marusic sprintf(msg, __VA_ARGS__); \ 1420d266054acece70259fc1e85026194154f41e5a0Jelena Marusic OutputDebugStringA(msg); \ 143470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com } 144470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#else 1450d266054acece70259fc1e85026194154f41e5a0Jelena Marusic// special fix for visual 2003 1460d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#define DEBUG_PRINT(exp) ((void)0) 147a41ab9326c8f0f7eb738e5d51a239a2b9e276361tfarina#endif // !defined(NDEBUG) && defined(_WIN32) 148470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1490d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#define CHECK_CHANNEL(channel) \ 1500d266054acece70259fc1e85026194154f41e5a0Jelena Marusic if (CheckChannel(channel) == -1) \ 1510d266054acece70259fc1e85026194154f41e5a0Jelena Marusic return -1; 152470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 153470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// ---------------------------------------------------------------------------- 154470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Inline functions 155470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// ---------------------------------------------------------------------------- 156470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1570d266054acece70259fc1e85026194154f41e5a0Jelena Marusicnamespace webrtc { 1580d266054acece70259fc1e85026194154f41e5a0Jelena Marusic 1590d266054acece70259fc1e85026194154f41e5a0Jelena Marusicinline int VoEId(int veId, int chId) { 1600d266054acece70259fc1e85026194154f41e5a0Jelena Marusic if (chId == -1) { 1610d266054acece70259fc1e85026194154f41e5a0Jelena Marusic const int dummyChannel(99); 1620d266054acece70259fc1e85026194154f41e5a0Jelena Marusic return (int)((veId << 16) + dummyChannel); 1630d266054acece70259fc1e85026194154f41e5a0Jelena Marusic } 1640d266054acece70259fc1e85026194154f41e5a0Jelena Marusic return (int)((veId << 16) + chId); 165470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 166470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1670d266054acece70259fc1e85026194154f41e5a0Jelena Marusicinline int VoEModuleId(int veId, int chId) { 1680d266054acece70259fc1e85026194154f41e5a0Jelena Marusic return (int)((veId << 16) + chId); 169470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 170470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 171470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Convert module ID to internal VoE channel ID 1720d266054acece70259fc1e85026194154f41e5a0Jelena Marusicinline int VoEChannelId(int moduleId) { 1730d266054acece70259fc1e85026194154f41e5a0Jelena Marusic return (int)(moduleId & 0xffff); 174470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com} 175470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 176d900e8bea84c474696bf0219aed1353ce65ffd8epbos@webrtc.org} // namespace webrtc 177470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 178470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// ---------------------------------------------------------------------------- 179470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Platform settings 180470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// ---------------------------------------------------------------------------- 181470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 182470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// *** WINDOWS *** 183470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 184470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#if defined(_WIN32) 185470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1860d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#include <windows.h> 187eda189be147907ff2e355d6b446b9fac60cad6afandrew@webrtc.org 1880d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#pragma comment(lib, "winmm.lib") 189470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 1900d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#ifndef WEBRTC_EXTERNAL_TRANSPORT 1910d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#pragma comment(lib, "ws2_32.lib") 1920d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#endif 193470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 194470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// ---------------------------------------------------------------------------- 195470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Defines 196470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// ---------------------------------------------------------------------------- 197470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 198470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Default device for Windows PC 1990d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#define WEBRTC_VOICE_ENGINE_DEFAULT_DEVICE \ 2000d266054acece70259fc1e85026194154f41e5a0Jelena Marusic AudioDeviceModule::kDefaultCommunicationDevice 201470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 202470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif // #if (defined(_WIN32) 203470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 204470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// *** LINUX *** 205470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 206470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifdef WEBRTC_LINUX 207470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 208956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <arpa/inet.h> 209956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <netinet/in.h> 210470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <pthread.h> 211470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <sys/socket.h> 212956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <sys/types.h> 213470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifndef QNX 2140d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#include <linux/net.h> 215470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifndef ANDROID 2160d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#include <sys/soundcard.h> 2170d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#endif // ANDROID 2180d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#endif // QNX 219470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <errno.h> 220470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <fcntl.h> 221470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <sched.h> 222956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <stdio.h> 223956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <stdlib.h> 224956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <string.h> 225956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <sys/ioctl.h> 226956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <sys/stat.h> 227470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <sys/time.h> 228956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <time.h> 229956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <unistd.h> 230470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 231470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define DWORD unsigned long int 232470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define WINAPI 233470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define LPVOID void * 234470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define FALSE 0 235470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define TRUE 1 236470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define UINT unsigned int 237470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define UCHAR unsigned char 238470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define TCHAR char 239470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifdef QNX 240470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define _stricmp stricmp 241470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#else 242470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define _stricmp strcasecmp 243470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif 244470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define GetLastError() errno 245470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define WSAGetLastError() errno 2460d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#define LPCTSTR const char * 2470d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#define LPCSTR const char * 248470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define wsprintf sprintf 249470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define TEXT(a) a 250470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define _ftprintf fprintf 251470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define _tcslen strlen 252470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define FAR 253470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define __cdecl 254470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define LPSOCKADDR struct sockaddr * 255470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 256470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Default device for Linux and Android 257470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define WEBRTC_VOICE_ENGINE_DEFAULT_DEVICE 0 258470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 259470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif // #ifdef WEBRTC_LINUX 260470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 261470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// *** WEBRTC_MAC *** 262470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// including iPhone 263470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 264470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifdef WEBRTC_MAC 265470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 266956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <AudioUnit/AudioUnit.h> 267470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <arpa/inet.h> 268470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <errno.h> 269470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <fcntl.h> 270956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <netinet/in.h> 271956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <pthread.h> 272470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <sched.h> 273956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <stdio.h> 274956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <stdlib.h> 275956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <string.h> 276956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <sys/socket.h> 277956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <sys/stat.h> 278470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <sys/time.h> 279956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <sys/types.h> 280470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include <time.h> 281956aa7e0874f2e08c335a82a2c32f400fac8b031pbos@webrtc.org#include <unistd.h> 282414fa7f0c47dee07887df8ce62568b70f1d0fa28sjlee@webrtc.org#if !defined(WEBRTC_IOS) 2830d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#include <CoreServices/CoreServices.h> 2840d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#include <CoreAudio/CoreAudio.h> 2850d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#include <AudioToolbox/DefaultAudioOutput.h> 2860d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#include <AudioToolbox/AudioConverter.h> 2870d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#include <CoreAudio/HostTime.h> 288470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif 289470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 290470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define DWORD unsigned long int 291470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define WINAPI 292470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define LPVOID void * 293470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define FALSE 0 294470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define TRUE 1 295470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define SOCKADDR_IN struct sockaddr_in 296470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define UINT unsigned int 297470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define UCHAR unsigned char 298470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define TCHAR char 299470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define _stricmp strcasecmp 300470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define GetLastError() errno 301470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define WSAGetLastError() errno 3020d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#define LPCTSTR const char * 303470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define wsprintf sprintf 304470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define TEXT(a) a 305470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define _ftprintf fprintf 306470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define _tcslen strlen 307470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define FAR 308470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define __cdecl 309470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define LPSOCKADDR struct sockaddr * 3100d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#define LPCSTR const char * 311470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define ULONG unsigned long 312470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 313470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com// Default device for Mac and iPhone 314470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#define WEBRTC_VOICE_ENGINE_DEFAULT_DEVICE 0 315470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif // #ifdef WEBRTC_MAC 316470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 3170d266054acece70259fc1e85026194154f41e5a0Jelena Marusic#endif // WEBRTC_VOICE_ENGINE_VOICE_ENGINE_DEFINES_H 318