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
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  This file contains common constants for VoiceEngine, as well as
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  platform specific settings and include files.
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_VOICE_ENGINE_VOICE_ENGINE_DEFINES_H
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_VOICE_ENGINE_VOICE_ENGINE_DEFINES_H
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1981b54fe4e262b6051a30acd464a6c8271ca51802andrew@webrtc.org#include "webrtc/common_types.h"
2081b54fe4e262b6051a30acd464a6c8271ca51802andrew@webrtc.org#include "webrtc/engine_configurations.h"
21b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.org#include "webrtc/modules/audio_processing/include/audio_processing.h"
2281b54fe4e262b6051a30acd464a6c8271ca51802andrew@webrtc.org#include "webrtc/system_wrappers/interface/logging.h"
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  Enumerators
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
288339bd1c14d5b1c5c10a712ad7faa344fe41f5ceandrew@webrtc.orgnamespace webrtc {
298339bd1c14d5b1c5c10a712ad7faa344fe41f5ceandrew@webrtc.org
30f7c73b531c9f2aca2adb87044613a7b7fa94de84andrew@webrtc.org// Internal buffer size required for mono audio, based on the highest sample
31f7c73b531c9f2aca2adb87044613a7b7fa94de84andrew@webrtc.org// rate voice engine supports (10 ms of audio at 192 kHz).
32f7c73b531c9f2aca2adb87044613a7b7fa94de84andrew@webrtc.orgstatic const int kMaxMonoDataSizeSamples = 1920;
33f7c73b531c9f2aca2adb87044613a7b7fa94de84andrew@webrtc.org
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// VolumeControl
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kMinVolumeLevel = 0 };
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kMaxVolumeLevel = 255 };
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Min scale factor for per-channel volume scaling
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst float kMinOutputVolumeScaling = 0.0f;
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Max scale factor for per-channel volume scaling
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst float kMaxOutputVolumeScaling = 10.0f;
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Min scale factor for output volume panning
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst float kMinOutputVolumePanning = 0.0f;
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Max scale factor for output volume panning
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgconst float kMaxOutputVolumePanning = 1.0f;
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// DTMF
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kMinDtmfEventCode = 0 };                 // DTMF digit "0"
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kMaxDtmfEventCode = 15 };                // DTMF digit "D"
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kMinTelephoneEventCode = 0 };            // RFC4733 (Section 2.3.1)
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kMaxTelephoneEventCode = 255 };          // RFC4733 (Section 2.3.1)
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kMinTelephoneEventDuration = 100 };
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kMaxTelephoneEventDuration = 60000 };    // Actual limit is 2^16
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kMinTelephoneEventAttenuation = 0 };     // 0 dBm0
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kMaxTelephoneEventAttenuation = 36 };    // -36 dBm0
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kMinTelephoneEventSeparationMs = 100 };  // Min delta time between two
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                                // telephone events
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMaxIpPacketSizeBytes = 1500 };       // assumes Ethernet
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMaxModuleVersionSize = 960 };
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Base
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineVersionMaxMessageSize = 1024 };
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Audio processing
65b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.orgconst NoiseSuppression::Level kDefaultNsMode = NoiseSuppression::kModerate;
66b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.orgconst GainControl::Mode kDefaultAgcMode =
67b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.org#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
68b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.org  GainControl::kAdaptiveDigital;
69b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.org#else
70b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.org  GainControl::kAdaptiveAnalog;
71b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.org#endif
72b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.orgconst bool kDefaultAgcState =
73b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.org#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
74b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.org  false;
75b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.org#else
76b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.org  true;
77b79627b0f3cf072721f3ae4a584a4f90edba2d1bandrew@webrtc.org#endif
78e06943f2aeb970e7c11070c327ab3b3264e2722fandrew@webrtc.orgconst GainControl::Mode kDefaultRxAgcMode = GainControl::kAdaptiveDigital;
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Codec
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Min init target rate for iSAC-wb
82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMinIsacInitTargetRateBpsWb = 10000 };
83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Max init target rate for iSAC-wb
84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMaxIsacInitTargetRateBpsWb = 32000 };
85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Min init target rate for iSAC-swb
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMinIsacInitTargetRateBpsSwb = 10000 };
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Max init target rate for iSAC-swb
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMaxIsacInitTargetRateBpsSwb = 56000 };
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Lowest max rate for iSAC-wb
90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMinIsacMaxRateBpsWb = 32000 };
91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Highest max rate for iSAC-wb
92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMaxIsacMaxRateBpsWb = 53400 };
93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Lowest max rate for iSAC-swb
94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMinIsacMaxRateBpsSwb = 32000 };
95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Highest max rate for iSAC-swb
96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMaxIsacMaxRateBpsSwb = 107000 };
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Lowest max payload size for iSAC-wb
98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMinIsacMaxPayloadSizeBytesWb = 120 };
99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Highest max payload size for iSAC-wb
100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMaxIsacMaxPayloadSizeBytesWb = 400 };
101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Lowest max payload size for iSAC-swb
102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMinIsacMaxPayloadSizeBytesSwb = 120 };
103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Highest max payload size for iSAC-swb
104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMaxIsacMaxPayloadSizeBytesSwb = 600 };
105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// VideoSync
107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Lowest minimum playout delay
108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMinMinPlayoutDelayMs = 0 };
109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Highest minimum playout delay
110db32ab0b04e5bd9cb7d92fc4a9ed72b1fcda62ebniklas.enbom@webrtc.orgenum { kVoiceEngineMaxMinPlayoutDelayMs = 10000 };
111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Network
113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Min packet-timeout time for received RTP packets
114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMinPacketTimeoutSec = 1 };
115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Max packet-timeout time for received RTP packets
116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMaxPacketTimeoutSec = 150 };
117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Min sample time for dead-or-alive detection
118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMinSampleTimeSec = 1 };
119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Max sample time for dead-or-alive detection
120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMaxSampleTimeSec = 150 };
121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// RTP/RTCP
123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Min 4-bit ID for RTP extension (see section 4.2 in RFC 5285)
124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMinRtpExtensionId = 1 };
125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Max 4-bit ID for RTP extension
126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum { kVoiceEngineMaxRtpExtensionId = 14 };
127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1283b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org}  // namespace webrtc
129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  Build information macros
132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_DEBUG)
135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define BUILDMODE "d"
136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(DEBUG)
137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define BUILDMODE "d"
138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(NDEBUG)
139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define BUILDMODE "r"
140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else
141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define BUILDMODE "?"
142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif
143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define BUILDTIME __TIME__
145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define BUILDDATE __DATE__
146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Example: "Oct 10 2002 12:05:30 r"
148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define BUILDINFO BUILDDATE " " BUILDTIME " " BUILDMODE
149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  Macros
152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
15481b54fe4e262b6051a30acd464a6c8271ca51802andrew@webrtc.org#define NOT_SUPPORTED(stat)                  \
15581b54fe4e262b6051a30acd464a6c8271ca51802andrew@webrtc.org  LOG_F(LS_ERROR) << "not supported";        \
15681b54fe4e262b6051a30acd464a6c8271ca51802andrew@webrtc.org  stat.SetLastError(VE_FUNC_NOT_SUPPORTED);  \
15781b54fe4e262b6051a30acd464a6c8271ca51802andrew@webrtc.org  return -1;
15881b54fe4e262b6051a30acd464a6c8271ca51802andrew@webrtc.org
159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if (defined(_DEBUG) && defined(_WIN32) && (_MSC_VER >= 1400))
160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #include <windows.h>
161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #include <stdio.h>
162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #define DEBUG_PRINT(...)      \
163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  {                             \
164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    char msg[256];              \
165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    sprintf(msg, __VA_ARGS__);  \
166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    OutputDebugStringA(msg);    \
167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  }
168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else
169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  // special fix for visual 2003
170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #define DEBUG_PRINT(exp)      ((void)0)
171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif  // defined(_DEBUG) && defined(_WIN32)
172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define CHECK_CHANNEL(channel)  if (CheckChannel(channel) == -1) return -1;
174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  Inline functions
177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc
180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
182ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.orginline int VoEId(int veId, int chId)
183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if (chId == -1)
185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        const int dummyChannel(99);
187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return (int) ((veId << 16) + dummyChannel);
188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return (int) ((veId << 16) + chId);
190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
192ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.orginline int VoEModuleId(int veId, int chId)
193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return (int) ((veId << 16) + chId);
195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Convert module ID to internal VoE channel ID
198ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.orginline int VoEChannelId(int moduleId)
199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return (int) (moduleId & 0xffff);
201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2033b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org}  // namespace webrtc
204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  Platform settings
207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// *** WINDOWS ***
210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32)
212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2135cf83f43c7f8aec0e7bcb95f71a60aec15d74104andrew@webrtc.org  #include <windows.h>
2145cf83f43c7f8aec0e7bcb95f71a60aec15d74104andrew@webrtc.org
215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #pragma comment( lib, "winmm.lib" )
216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #ifndef WEBRTC_EXTERNAL_TRANSPORT
218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    #pragma comment( lib, "ws2_32.lib" )
219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #endif
220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//  Defines
223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ----------------------------------------------------------------------------
224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Default device for Windows PC
226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #define WEBRTC_VOICE_ENGINE_DEFAULT_DEVICE \
227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    AudioDeviceModule::kDefaultCommunicationDevice
228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif  // #if (defined(_WIN32)
230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// *** LINUX ***
232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_LINUX
234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
235471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <arpa/inet.h>
236471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <netinet/in.h>
237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <pthread.h>
238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <sys/socket.h>
239471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <sys/types.h>
240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef QNX
241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #include <linux/net.h>
242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef ANDROID
243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #include <sys/soundcard.h>
244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // ANDROID
245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // QNX
246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <errno.h>
247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <fcntl.h>
248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <sched.h>
249471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <stdio.h>
250471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <stdlib.h>
251471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <string.h>
252471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <sys/ioctl.h>
253471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <sys/stat.h>
254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <sys/time.h>
255471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <time.h>
256471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <unistd.h>
257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define DWORD unsigned long int
259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WINAPI
260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define LPVOID void *
261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define FALSE 0
262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define TRUE 1
263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define UINT unsigned int
264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define UCHAR unsigned char
265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define TCHAR char
266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef QNX
267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define _stricmp stricmp
268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else
269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define _stricmp strcasecmp
270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif
271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define GetLastError() errno
272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WSAGetLastError() errno
273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define LPCTSTR const char*
274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define LPCSTR const char*
275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define wsprintf sprintf
276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define TEXT(a) a
277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define _ftprintf fprintf
278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define _tcslen strlen
279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define FAR
280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define __cdecl
281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define LPSOCKADDR struct sockaddr *
282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Default device for Linux and Android
284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_VOICE_ENGINE_DEFAULT_DEVICE 0
285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif  // #ifdef WEBRTC_LINUX
287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// *** WEBRTC_MAC ***
289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// including iPhone
290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef WEBRTC_MAC
292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
293471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <AudioUnit/AudioUnit.h>
294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <arpa/inet.h>
295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <errno.h>
296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <fcntl.h>
297471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <netinet/in.h>
298471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <pthread.h>
299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <sched.h>
300471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <stdio.h>
301471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <stdlib.h>
302471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <string.h>
303471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <sys/socket.h>
304471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <sys/stat.h>
305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <sys/time.h>
306471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <sys/types.h>
307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <time.h>
308471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include <unistd.h>
309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if !defined(WEBRTC_IOS)
310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #include <CoreServices/CoreServices.h>
311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #include <CoreAudio/CoreAudio.h>
312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #include <AudioToolbox/DefaultAudioOutput.h>
313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #include <AudioToolbox/AudioConverter.h>
314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  #include <CoreAudio/HostTime.h>
315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif
316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define DWORD unsigned long int
318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WINAPI
319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define LPVOID void *
320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define FALSE 0
321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define TRUE 1
322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define SOCKADDR_IN struct sockaddr_in
323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define UINT unsigned int
324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define UCHAR unsigned char
325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define TCHAR char
326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define _stricmp strcasecmp
327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define GetLastError() errno
328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WSAGetLastError() errno
329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define LPCTSTR const char*
330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define wsprintf sprintf
331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define TEXT(a) a
332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define _ftprintf fprintf
333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define _tcslen strlen
334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define FAR
335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define __cdecl
336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define LPSOCKADDR struct sockaddr *
337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define LPCSTR const char*
338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define ULONG unsigned long
339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Default device for Mac and iPhone
341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_VOICE_ENGINE_DEFAULT_DEVICE 0
342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif  // #ifdef WEBRTC_MAC
343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_VOICE_ENGINE_VOICE_ENGINE_DEFINES_H
345