1/*
2 *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_VIDEO_ENGINE_VIE_DEFINES_H_
12#define WEBRTC_VIDEO_ENGINE_VIE_DEFINES_H_
13
14#include "webrtc/engine_configurations.h"
15
16// TODO(mflodman) Remove.
17#ifdef WEBRTC_ANDROID
18#include <arpa/inet.h>  // NOLINT
19#include <linux/net.h>  // NOLINT
20#include <netinet/in.h>  // NOLINT
21#include <pthread.h>  // NOLINT
22#include <stdio.h>  // NOLINT
23#include <stdlib.h>  // NOLINT
24#include <string.h>  // NOLINT
25#include <sys/socket.h>  // NOLINT
26#include <sys/time.h>  // NOLINT
27#include <sys/types.h>  // NOLINT
28#include <time.h>  // NOLINT
29#endif
30
31namespace webrtc {
32
33// General
34enum { kViEMinKeyRequestIntervalMs = 300 };
35
36// ViEBase
37enum { kViEMaxNumberOfChannels = 64 };
38enum { kViEVersionMaxMessageSize = 1024 };
39enum { kViEMaxModuleVersionSize = 960 };
40
41// ViECapture
42enum { kViEMaxCaptureDevices = 256 };
43enum { kViECaptureDefaultWidth = 352 };
44enum { kViECaptureDefaultHeight = 288 };
45enum { kViECaptureDefaultFramerate = 30 };
46enum { kViECaptureMaxSnapshotWaitTimeMs = 500 };
47
48// ViECodec
49enum { kViEMaxCodecWidth = 4096 };
50enum { kViEMaxCodecHeight = 3072 };
51enum { kViEMaxCodecFramerate = 60 };
52enum { kViEMinCodecBitrate = 30 };
53
54// ViENetwork
55enum { kViEMaxMtu = 1500 };
56enum { kViESocketThreads = 1 };
57enum { kViENumReceiveSocketBuffers = 500 };
58
59// ViERender
60// Max valid time set in SetRenderTimeoutImage
61enum { kViEMaxRenderTimeoutTimeMs  = 10000 };
62// Min valid time set in SetRenderTimeoutImage
63enum { kViEMinRenderTimeoutTimeMs = 33 };
64enum { kViEDefaultRenderDelayMs = 10 };
65
66// ViERTP_RTCP
67enum { kSendSidePacketHistorySize = 600 };
68
69// NACK
70enum { kMaxPacketAgeToNack = 450 };  // In sequence numbers.
71enum { kMaxNackListSize = 250 };
72
73// Id definitions
74enum {
75  kViEChannelIdBase = 0x0,
76  kViEChannelIdMax = 0xFF,
77  kViECaptureIdBase = 0x1001,
78  kViECaptureIdMax = 0x10FF,
79  kViEDummyChannelId = 0xFFFF
80};
81
82// Module id
83// Create a unique id based on the ViE instance id and the
84// channel id. ViE id > 0 and 0 <= channel id <= 255
85
86inline int ViEId(const int vieId, const int channelId = -1) {
87  if (channelId == -1) {
88    return static_cast<int>((vieId << 16) + kViEDummyChannelId);
89  }
90  return static_cast<int>((vieId << 16) + channelId);
91}
92
93inline int ViEModuleId(const int vieId, const int channelId = -1) {
94  if (channelId == -1) {
95    return static_cast<int>((vieId << 16) + kViEDummyChannelId);
96  }
97  return static_cast<int>((vieId << 16) + channelId);
98}
99
100inline int ChannelId(const int moduleId) {
101  return static_cast<int>(moduleId & 0xffff);
102}
103
104//  Build information macros
105#if defined(_DEBUG) || defined(DEBUG)
106#define BUILDMODE "d"
107#elif defined(NDEBUG)
108#define BUILDMODE "r"
109#else
110#define BUILDMODE "?"
111#endif
112
113#define BUILDTIME __TIME__
114#define BUILDDATE __DATE__
115
116// Example: "Oct 10 2002 12:05:30 r".
117#define BUILDINFO BUILDDATE " " BUILDTIME " " BUILDMODE
118
119// Windows specific.
120#if defined(_WIN32)
121  #define RENDER_MODULE_TYPE kRenderWindows
122
123  // Include libraries.
124  #pragma comment(lib, "winmm.lib")
125
126  #ifndef WEBRTC_EXTERNAL_TRANSPORT
127  #pragma comment(lib, "ws2_32.lib")
128  #pragma comment(lib, "Iphlpapi.lib")   // _GetAdaptersAddresses
129  #endif
130#endif
131
132// Mac specific.
133#ifdef WEBRTC_MAC
134  #define SLEEP(x) usleep(x * 1000)
135  #define RENDER_MODULE_TYPE kRenderWindows
136#endif
137
138// Android specific.
139#ifdef WEBRTC_ANDROID
140  #define FAR
141  #define __cdecl
142#endif  // WEBRTC_ANDROID
143
144}  // namespace webrtc
145
146#endif  // WEBRTC_VIDEO_ENGINE_VIE_DEFINES_H_
147