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