diff options
-rw-r--r-- | AUTHORS | 4 | ||||
-rw-r--r-- | Android.mk | 60 | ||||
-rw-r--r-- | LICENSE | 29 | ||||
-rw-r--r-- | LICENSE_THIRD_PARTY | 10 | ||||
-rw-r--r-- | OWNERS | 1 | ||||
-rw-r--r-- | PATENTS | 28 | ||||
-rw-r--r-- | PRESUBMIT.py | 35 | ||||
-rw-r--r-- | android-webrtc.mk | 100 | ||||
-rw-r--r-- | codereview.settings | 9 | ||||
-rw-r--r-- | common_settings.gypi | 76 | ||||
-rw-r--r-- | common_types.h | 595 | ||||
-rw-r--r-- | engine_configurations.h | 131 | ||||
-rw-r--r-- | gyp_gips | 129 | ||||
-rw-r--r-- | libvpx.mk | 132 | ||||
-rw-r--r-- | license_template.txt | 10 | ||||
-rw-r--r-- | typedefs.h | 107 | ||||
-rw-r--r-- | video_engine.gyp | 17 | ||||
-rw-r--r-- | voice_engine.gyp | 185 | ||||
-rw-r--r-- | webrtc.gyp | 72 |
19 files changed, 1730 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000000..c84c84be91 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,4 @@ +# Names should be added to this file like so:
+# Name or Organization <email address>
+
+Google Inc.
\ No newline at end of file diff --git a/Android.mk b/Android.mk new file mode 100644 index 0000000000..5819fdb500 --- /dev/null +++ b/Android.mk @@ -0,0 +1,60 @@ +# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. +# +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file in the root of the source +# tree. An additional intellectual property rights grant can be found +# in the file PATENTS. All contributing project authors may +# be found in the AUTHORS file in the root of the source tree. + +MY_WEBRTC_ROOT_PATH := $(call my-dir) + +# voice +include $(MY_WEBRTC_ROOT_PATH)/common_audio/resampler/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/common_audio/signal_processing_library/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/common_audio/vad/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_coding/NetEQ/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_coding/codecs/CNG/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_coding/codecs/G711/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_coding/codecs/G722/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_coding/codecs/PCM16B/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_coding/codecs/iLBC/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_coding/codecs/iSAC/fix/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_coding/codecs/iSAC/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_coding/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_conference_mixer/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_device/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_processing/aec/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_processing/aecm/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_processing/agc/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_processing/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_processing/ns/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/audio_processing/utility/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/media_file/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/rtp_rtcp/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/udp_transport/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/utility/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/system_wrappers/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/voice_engine/main/source/Android.mk + +# video +include $(MY_WEBRTC_ROOT_PATH)/common_video/jpeg/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/common_video/vplib/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/video_capture/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/video_coding/codecs/i420/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/video_coding/codecs/vp8/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/video_coding/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/video_processing/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/video_mixer/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/modules/video_render/main/source/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/video_engine/main/source/Android.mk + +# third party +#include $(MY_WEBRTC_ROOT_PATH)/third_party/libvpx/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/libvpx.mk + +# build .so +include $(MY_WEBRTC_ROOT_PATH)/android-webrtc.mk + +# build test app +include $(MY_WEBRTC_ROOT_PATH)/voice_engine/main/test/Android/native_test/Android.mk +include $(MY_WEBRTC_ROOT_PATH)/video_engine/main/test/AutoTest/source/Android.mk diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..da40b336cd --- /dev/null +++ b/LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 2011, Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/LICENSE_THIRD_PARTY b/LICENSE_THIRD_PARTY new file mode 100644 index 0000000000..ec38ec6db6 --- /dev/null +++ b/LICENSE_THIRD_PARTY @@ -0,0 +1,10 @@ +This source tree contain third party source code which is governed by third +party licenses. This file contain references to files which are under other +licenses than the one provided in the LICENSE file in the root of the source +tree. + +Files governed by third party licenses: +system_wrappers/source/condition_variable_windows.cc +system_wrappers/source/fix_interlocked_exchange_pointer_windows.h +system_wrappers/source/spreadsortlib/* +system_wrappers/source/thread_windows_set_name.h
\ No newline at end of file diff --git a/OWNERS b/OWNERS new file mode 100644 index 0000000000..f59ec20aab --- /dev/null +++ b/OWNERS @@ -0,0 +1 @@ +*
\ No newline at end of file diff --git a/PATENTS b/PATENTS new file mode 100644 index 0000000000..4f81d30dfd --- /dev/null +++ b/PATENTS @@ -0,0 +1,28 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the WebRTC project. + +Google hereby grants to you a perpetual, worldwide, non-exclusive, +no-charge, irrevocable (except as stated in this section) patent +license to make, have made, use, offer to sell, sell, import, +transfer, and otherwise run, modify and propagate the contents of this +implementation of the VoiceEngine Framework and the VideoEngine +Framework included in the WebRTC package, where such license applies +only to those patent claims, both currently owned by Google and +acquired in the future, licensable by Google that are necessarily +infringed by this implementation of the VoiceEngine Framework and the +VideoEngine Framework included in the WebRTC package. This grant does +not include claims that would be infringed only as a consequence of +further modification of this implementation. If you or your agent or +exclusive licensee institute or order or agree to the institution of +patent litigation against any entity (including a cross-claim or +counterclaim in a lawsuit) alleging that this implementation of the +VoiceEngine Framework and the VideoEngine Framework included in the +WebRTC package or any code incorporated within this implementation of +the media components included in the WebRTC package constitutes direct +or contributory patent infringement, or inducement of patent +infringement, then any patent rights granted to you under this License +for this implementation of the VoiceEngine Framework and the +VideoEngine Framework included in the WebRTC package shall terminate +as of the date such litigation is filed. diff --git a/PRESUBMIT.py b/PRESUBMIT.py new file mode 100644 index 0000000000..ddb15ceab2 --- /dev/null +++ b/PRESUBMIT.py @@ -0,0 +1,35 @@ + + + + +webrtc_license_header = ( + r'.*? Copyright \(c\) 2011 The WebRTC project authors' + r'.*?Use of this source code is governed by a BSD-style license\n' + r'.*? that can be found in the LICENSE file in the root of the source\n' + r'.*? tree. An additional intellectual property rights grant can be found\n' +r'.*? in the file PATENTS. All contributing project authors may\n' +r'.*? be found in the AUTHORS file in the root of the source tree\n' + ) + + +def CheckChangeOnUpload(input_api, output_api): + results = [] + results.extend(input_api.canned_checks.CheckLongLines(input_api, output_api,maxlen=95)) + results.extend(input_api.canned_checks.CheckChangeHasNoTabs(input_api, output_api)) + return results + + + #results.extend(CheckChangeLintsClean(input_api, output_api)) + #results.extend(input_api.canned_checks.CheckLicense(input_api, output_api, license_re=webrtc_license_header)) + + + + + +#def CheckChangeOnCommit (input_api, output_api): +# results = [] +# sources = lambda x: input_api.FilterSourceFile(x, black_list=black_list) +# results.extend(input_api.canned_checks.CheckOwners(input_api, output_api, source_file_filter=sources)) +# return results + + diff --git a/android-webrtc.mk b/android-webrtc.mk new file mode 100644 index 0000000000..db54b39496 --- /dev/null +++ b/android-webrtc.mk @@ -0,0 +1,100 @@ +# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. +# +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file in the root of the source +# tree. An additional intellectual property rights grant can be found +# in the file PATENTS. All contributing project authors may +# be found in the AUTHORS file in the root of the source tree. + +MY_APM_WHOLE_STATIC_LIBRARIES := \ + libwebrtc_spl \ + libwebrtc_resampler \ + libwebrtc_apm \ + libwebrtc_apm_utility \ + libwebrtc_vad \ + libwebrtc_ns \ + libwebrtc_agc \ + libwebrtc_aec \ + libwebrtc_aecm + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_ARM_MODE := arm +LOCAL_MODULE := libwebrtc_audio_preprocessing +LOCAL_MODULE_TAGS := optional +LOCAL_LDFLAGS := + +LOCAL_WHOLE_STATIC_LIBRARIES := \ + $(MY_APM_WHOLE_STATIC_LIBRARIES) \ + libwebrtc_system_wrappers \ + +LOCAL_SHARED_LIBRARIES := \ + libcutils \ + libdl \ + libstlport + +LOCAL_ADDITIONAL_DEPENDENCIES := + +include external/stlport/libstlport.mk +include $(BUILD_SHARED_LIBRARY) + +### + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_ARM_MODE := arm +LOCAL_MODULE := libwebrtc +LOCAL_MODULE_TAGS := optional +LOCAL_LDFLAGS := + +LOCAL_WHOLE_STATIC_LIBRARIES := \ + libwebrtc_system_wrappers \ + libwebrtc_audio_device \ + libwebrtc_pcm16b \ + libwebrtc_cng \ + libwebrtc_audio_coding \ + libwebrtc_rtp_rtcp \ + libwebrtc_media_file \ + libwebrtc_udp_transport \ + libwebrtc_utility \ + libwebrtc_neteq \ + libwebrtc_audio_conference_mixer \ + libwebrtc_isac \ + libwebrtc_ilbc \ + libwebrtc_isacfix \ + libwebrtc_g722 \ + libwebrtc_g711 \ + libwebrtc_vplib \ + libwebrtc_video_render \ + libwebrtc_video_capture \ + libwebrtc_i420 \ + libwebrtc_video_coding \ + libwebrtc_video_processing \ + libwebrtc_vp8 \ + libwebrtc_video_mixer \ + libwebrtc_voe_core \ + libwebrtc_vie_core \ + libwebrtc_vpx_enc \ + libwebrtc_jpeg \ + libvpx + +#LOCAL_LDLIBS := -ljpeg + +LOCAL_STATIC_LIBRARIES := +LOCAL_SHARED_LIBRARIES := \ + libcutils \ + libdl \ + libstlport \ + libjpeg \ + libGLESv2 \ + libOpenSLES \ + libwebrtc_audio_preprocessing + +LOCAL_ADDITIONAL_DEPENDENCIES := + +include external/stlport/libstlport.mk +include $(BUILD_SHARED_LIBRARY) diff --git a/codereview.settings b/codereview.settings new file mode 100644 index 0000000000..c76fa468a2 --- /dev/null +++ b/codereview.settings @@ -0,0 +1,9 @@ +# This file is used by gcl to get repository specific information.
+CODE_REVIEW_SERVER: webrtc-codereview.appspot.com
+CC_LIST:
+VIEW_VC:
+STATUS:
+TRY_ON_UPLOAD: False
+TRYSERVER_SVN_URL:
+GITCL_PREUPLOAD:
+GITCL_PREDCOMMIT:
diff --git a/common_settings.gypi b/common_settings.gypi new file mode 100644 index 0000000000..dd1c8f0c88 --- /dev/null +++ b/common_settings.gypi @@ -0,0 +1,76 @@ +# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. +# +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file in the root of the source +# tree. An additional intellectual property rights grant can be found +# in the file PATENTS. All contributing project authors may +# be found in the AUTHORS file in the root of the source tree. + +# This file contains common settings for building WebRTC components. + +{ + 'variables': { + 'build_with_chromium%': 0, # 1 to build webrtc with chromium + 'inside_chromium_build%': 0, + + # Selects fixed-point code where possible. + # TODO(ajm): we'd like to set this based on the target OS/architecture. + 'prefer_fixed_point%': 0, + + 'conditions': [ + ['inside_chromium_build==1', { + 'build_with_chromium': 1, + }], + ['OS=="win"', { + # Path needed to build Direct Show base classes on Windows. The code is included in Windows SDK. + 'direct_show_base_classes':'C:/Program Files/Microsoft SDKs/Windows/v7.1/Samples/multimedia/directshow/baseclasses/', + }], + ], # conditions + }, + 'target_defaults': { + 'include_dirs': [ + '.', # For common_typs.h and typedefs.h + ], + 'conditions': [ + ['OS=="linux"', { + 'defines': [ + 'WEBRTC_TARGET_PC', + 'WEBRTC_LINUX', + 'WEBRTC_THREAD_RR', + # INTEL_OPT is for iLBC floating point code optimized for Intel processors + # supporting SSE3. The compiler will be automatically switched to Intel + # compiler icc in the iLBC folder for iLBC floating point library build. + #'INTEL_OPT', + # Define WEBRTC_CLOCK_TYPE_REALTIME if the Linux system does not support CLOCK_MONOTONIC + #'WEBRTC_CLOCK_TYPE_REALTIME', + ], + }], + ['OS=="mac"', { + # Setup for Intel + 'defines': [ + 'WEBRTC_TARGET_MAC_INTEL', + 'WEBRTC_MAC_INTEL', + 'WEBRTC_MAC', + 'WEBRTC_THREAD_RR', + 'WEBRTC_CLOCK_TYPE_REALTIME', + ], + }], + ['OS=="win"', { + 'defines': [ + 'WEBRTC_TARGET_PC', + ], + }], + ['build_with_chromium==1', { + 'defines': [ + 'WEBRTC_VIDEO_EXTERNAL_CAPTURE_AND_RENDER', + ], + }], + ], # conditions + }, # target-defaults +} + +# Local Variables: +# tab-width:2 +# indent-tabs-mode:nil +# End: +# vim: set expandtab tabstop=2 shiftwidth=2: diff --git a/common_types.h b/common_types.h new file mode 100644 index 0000000000..f4f80dbf97 --- /dev/null +++ b/common_types.h @@ -0,0 +1,595 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef WEBRTC_COMMON_TYPES_H +#define WEBRTC_COMMON_TYPES_H + +#include "typedefs.h" + +#ifdef WEBRTC_EXPORT + #define WEBRTC_DLLEXPORT _declspec(dllexport) +#elif WEBRTC_DLL + #define WEBRTC_DLLEXPORT _declspec(dllimport) +#else + #define WEBRTC_DLLEXPORT +#endif + +#ifndef NULL + #define NULL 0 +#endif + +namespace webrtc { + +class InStream +{ +public: + virtual int Read(void *buf,int len) = 0; + virtual int Rewind() {return -1;} + virtual ~InStream() {} +protected: + InStream() {} +}; + +class OutStream +{ +public: + virtual bool Write(const void *buf,int len) = 0; + virtual int Rewind() {return -1;} + virtual ~OutStream() {} +protected: + OutStream() {} +}; + +enum TraceModule +{ + // not a module, triggered from the engine code + kTraceVoice = 0x0001, + // not a module, triggered from the engine code + kTraceVideo = 0x0002, + // not a module, triggered from the utility code + kTraceUtility = 0x0003, + kTraceRtpRtcp = 0x0004, + kTraceTransport = 0x0005, + kTraceSrtp = 0x0006, + kTraceAudioCoding = 0x0007, + kTraceAudioMixerServer = 0x0008, + kTraceAudioMixerClient = 0x0009, + kTraceFile = 0x000a, + kTraceVqe = 0x000b, + kTraceVideoCoding = 0x0010, + kTraceVideoMixer = 0x0011, + kTraceAudioDevice = 0x0012, + kTraceVideoRenderer = 0x0014, + kTraceVideoCapture = 0x0015, + kTraceVideoPreocessing = 0x0016 +}; + +enum TraceLevel +{ + kTraceNone = 0x0000, // no trace + kTraceStateInfo = 0x0001, + kTraceWarning = 0x0002, + kTraceError = 0x0004, + kTraceCritical = 0x0008, + kTraceApiCall = 0x0010, + kTraceDefault = 0x00ff, + + kTraceModuleCall = 0x0020, + kTraceMemory = 0x0100, // memory info + kTraceTimer = 0x0200, // timing info + kTraceStream = 0x0400, // "continuous" stream of data + + // used for debug purposes + kTraceDebug = 0x0800, // debug + kTraceInfo = 0x1000, // debug info + + kTraceAll = 0xffff +}; + +// External Trace API +class TraceCallback +{ +public: + virtual void Print(const TraceLevel level, + const char *traceString, + const int length) = 0; +protected: + virtual ~TraceCallback() {} + TraceCallback() {} +}; + + +enum FileFormats +{ + kFileFormatWavFile = 1, + kFileFormatCompressedFile = 2, + kFileFormatAviFile = 3, + kFileFormatPreencodedFile = 4, + kFileFormatPcm16kHzFile = 7, + kFileFormatPcm8kHzFile = 8, + kFileFormatPcm32kHzFile = 9 +}; + + +enum ProcessingTypes +{ + kPlaybackPerChannel = 0, + kPlaybackAllChannelsMixed, + kRecordingPerChannel, + kRecordingAllChannelsMixed +}; + +// Encryption enums +enum CipherTypes +{ + kCipherNull = 0, + kCipherAes128CounterMode = 1 +}; + +enum AuthenticationTypes +{ + kAuthNull = 0, + kAuthHmacSha1 = 3 +}; + +enum SecurityLevels +{ + kNoProtection = 0, + kEncryption = 1, + kAuthentication = 2, + kEncryptionAndAuthentication = 3 +}; + +class Encryption +{ +public: + virtual void encrypt( + int channel_no, + unsigned char* in_data, + unsigned char* out_data, + int bytes_in, + int* bytes_out) = 0; + + virtual void decrypt( + int channel_no, + unsigned char* in_data, + unsigned char* out_data, + int bytes_in, + int* bytes_out) = 0; + + virtual void encrypt_rtcp( + int channel_no, + unsigned char* in_data, + unsigned char* out_data, + int bytes_in, + int* bytes_out) = 0; + + virtual void decrypt_rtcp( + int channel_no, + unsigned char* in_data, + unsigned char* out_data, + int bytes_in, + int* bytes_out) = 0; + +protected: + virtual ~Encryption() {} + Encryption() {} +}; + +// External transport callback interface +class Transport +{ +public: + virtual int SendPacket(int channel, const void *data, int len) = 0; + virtual int SendRTCPPacket(int channel, const void *data, int len) = 0; + +protected: + virtual ~Transport() {} + Transport() {} +}; + +// ================================================================== +// Voice specific types +// ================================================================== + +// Each codec supported can be described by this structure. +struct CodecInst +{ + int pltype; + char plname[32]; + int plfreq; + int pacsize; + int channels; + int rate; +}; + +enum FrameType +{ + kFrameEmpty = 0, + kAudioFrameSpeech = 1, + kAudioFrameCN = 2, + kVideoFrameKey = 3, // independent frame + kVideoFrameDelta = 4, // depends on the previus frame + kVideoFrameGolden = 5, // depends on a old known previus frame + kVideoFrameAltRef = 6 +}; + +// RTP +enum {kRtpCsrcSize = 15}; // RFC 3550 page 13 + +enum RTPDirections +{ + kRtpIncoming = 0, + kRtpOutgoing +}; + +enum PayloadFrequencies +{ + kFreq8000Hz = 8000, + kFreq16000Hz = 16000, + kFreq32000Hz = 32000 +}; + +enum VadModes // degree of bandwidth reduction +{ + kVadConventional = 0, // lowest reduction + kVadAggressiveLow, + kVadAggressiveMid, + kVadAggressiveHigh // highest reduction +}; + +struct NetworkStatistics // NETEQ statistics +{ + // current jitter buffer size in ms + WebRtc_UWord16 currentBufferSize; + // preferred (optimal) buffer size in ms + WebRtc_UWord16 preferredBufferSize; + // loss rate (network + late) in percent (in Q14) + WebRtc_UWord16 currentPacketLossRate; + // late loss rate in percent (in Q14) + WebRtc_UWord16 currentDiscardRate; + // fraction (of original stream) of synthesized speech inserted through + // expansion (in Q14) + WebRtc_UWord16 currentExpandRate; + // fraction of synthesized speech inserted through pre-emptive expansion + // (in Q14) + WebRtc_UWord16 currentPreemptiveRate; + // fraction of data removed through acceleration (in Q14) + WebRtc_UWord16 currentAccelerateRate; +}; + +struct JitterStatistics +{ + // smallest Jitter Buffer size during call in ms + WebRtc_UWord32 jbMinSize; + // largest Jitter Buffer size during call in ms + WebRtc_UWord32 jbMaxSize; + // the average JB size, measured over time - ms + WebRtc_UWord32 jbAvgSize; + // number of times the Jitter Buffer changed (using Accelerate or + // Pre-emptive Expand) + WebRtc_UWord32 jbChangeCount; + // amount (in ms) of audio data received late + WebRtc_UWord32 lateLossMs; + // milliseconds removed to reduce jitter buffer size + WebRtc_UWord32 accelerateMs; + // milliseconds discarded through buffer flushing + WebRtc_UWord32 flushedMs; + // milliseconds of generated silence + WebRtc_UWord32 generatedSilentMs; + // milliseconds of synthetic audio data (non-background noise) + WebRtc_UWord32 interpolatedVoiceMs; + // milliseconds of synthetic audio data (background noise level) + WebRtc_UWord32 interpolatedSilentMs; + // count of tiny expansions in output audio + WebRtc_UWord32 countExpandMoreThan120ms; + // count of small expansions in output audio + WebRtc_UWord32 countExpandMoreThan250ms; + // count of medium expansions in output audio + WebRtc_UWord32 countExpandMoreThan500ms; + // count of long expansions in output audio + WebRtc_UWord32 countExpandMoreThan2000ms; + // duration of longest audio drop-out + WebRtc_UWord32 longestExpandDurationMs; + // count of times we got small network outage (inter-arrival time in + // [500, 1000) ms) + WebRtc_UWord32 countIAT500ms; + // count of times we got medium network outage (inter-arrival time in + // [1000, 2000) ms) + WebRtc_UWord32 countIAT1000ms; + // count of times we got large network outage (inter-arrival time >= + // 2000 ms) + WebRtc_UWord32 countIAT2000ms; + // longest packet inter-arrival time in ms + WebRtc_UWord32 longestIATms; + // min time incoming Packet "waited" to be played + WebRtc_UWord32 minPacketDelayMs; + // max time incoming Packet "waited" to be played + WebRtc_UWord32 maxPacketDelayMs; + // avg time incoming Packet "waited" to be played + WebRtc_UWord32 avgPacketDelayMs; +}; + +typedef struct +{ + int min; // minumum + int max; // maximum + int average; // average +} StatVal; + +typedef struct // All levels are reported in dBm0 +{ + StatVal speech_rx; // long-term speech levels on receiving side + StatVal speech_tx; // long-term speech levels on transmitting side + StatVal noise_rx; // long-term noise/silence levels on receiving side + StatVal noise_tx; // long-term noise/silence levels on transmitting side +} LevelStatistics; + +typedef struct // All levels are reported in dB +{ + StatVal erl; // Echo Return Loss + StatVal erle; // Echo Return Loss Enhancement + StatVal rerl; // RERL = ERL + ERLE + // Echo suppression inside EC at the point just before its NLP + StatVal a_nlp; +} EchoStatistics; + +enum TelephoneEventDetectionMethods +{ + kInBand = 0, + kOutOfBand = 1, + kInAndOutOfBand = 2 +}; + +enum NsModes // type of Noise Suppression +{ + kNsUnchanged = 0, // previously set mode + kNsDefault, // platform default + kNsConference, // conferencing default + kNsLowSuppression, // lowest suppression + kNsModerateSuppression, + kNsHighSuppression, + kNsVeryHighSuppression, // highest suppression +}; + +enum AgcModes // type of Automatic Gain Control +{ + kAgcUnchanged = 0, // previously set mode + kAgcDefault, // platform default + // adaptive mode for use when analog volume control exists (e.g. for + // PC softphone) + kAgcAdaptiveAnalog, + // scaling takes place in the digital domain (e.g. for conference servers + // and embedded devices) + kAgcAdaptiveDigital, + // can be used on embedded devices where the the capture signal is level + // is predictable + kAgcFixedDigital +}; + +// EC modes +enum EcModes // type of Echo Control +{ + kEcUnchanged = 0, // previously set mode + kEcDefault, // platform default + kEcConference, // conferencing default (aggressive AEC) + kEcAec, // Acoustic Echo Cancellation + kEcAecm, // AEC mobile +}; + +// AECM modes +enum AecmModes // mode of AECM +{ + kAecmQuietEarpieceOrHeadset = 0, + // Quiet earpiece or headset use + kAecmEarpiece, // most earpiece use + kAecmLoudEarpiece, // Loud earpiece or quiet speakerphone use + kAecmSpeakerphone, // most speakerphone use (default) + kAecmLoudSpeakerphone // Loud speakerphone +}; + +// AGC configuration +typedef struct +{ + unsigned short targetLeveldBOv; + unsigned short digitalCompressionGaindB; + bool limiterEnable; +} AgcConfig; // AGC configuration parameters + +enum StereoChannel +{ + kStereoLeft = 0, + kStereoRight, + kStereoBoth +}; + +// Audio device layers +enum AudioLayers +{ + kAudioPlatformDefault = 0, + kAudioWindowsWave = 1, + kAudioWindowsCore = 2, + kAudioLinuxAlsa = 3, + kAudioLinuxPulse = 4 +}; + +enum NetEqModes // NetEQ playout configurations +{ + // Optimized trade-off between low delay and jitter robustness for two-way + // communication. + kNetEqDefault = 0, + // Improved jitter robustness at the cost of increased delay. Can be + // used in one-way communication. + kNetEqStreaming = 1, + // Optimzed for decodability of fax signals rather than for perceived audio + // quality. + kNetEqFax = 2, +}; + +enum NetEqBgnModes // NetEQ Background Noise (BGN) configurations +{ + // BGN is always on and will be generated when the incoming RTP stream + // stops (default). + kBgnOn = 0, + // The BGN is faded to zero (complete silence) after a few seconds. + kBgnFade = 1, + // BGN is not used at all. Silence is produced after speech extrapolation + // has faded. + kBgnOff = 2, +}; + +enum OnHoldModes // On Hold direction +{ + kHoldSendAndPlay = 0, // Put both sending and playing in on-hold state. + kHoldSendOnly, // Put only sending in on-hold state. + kHoldPlayOnly // Put only playing in on-hold state. +}; + +enum AmrMode +{ + kRfc3267BwEfficient = 0, + kRfc3267OctetAligned = 1, + kRfc3267FileStorage = 2, +}; + +// ================================================================== +// Video specific types +// ================================================================== + +// Raw video types +enum RawVideoType +{ + kVideoI420 = 0, + kVideoYV12 = 1, + kVideoYUY2 = 2, + kVideoUYVY = 3, + kVideoIYUV = 4, + kVideoARGB = 5, + kVideoRGB24 = 6, + kVideoRGB565 = 7, + kVideoARGB4444 = 8, + kVideoARGB1555 = 9, + kVideoMJPEG = 10, + kVideoNV12 = 11, + kVideoNV21 = 12, + kVideoUnknown = 99 +}; + +// Video codec +enum { kConfigParameterSize = 128}; +enum { kPayloadNameSize = 32}; + +// H.263 specific +struct VideoCodecH263 +{ + char quality; +}; + +// H.264 specific +enum H264Packetization +{ + kH264SingleMode = 0, + kH264NonInterleavedMode = 1 +}; + +enum VideoCodecComplexity +{ + kComplexityNormal = 0, + kComplexityHigh = 1, + kComplexityHigher = 2, + kComplexityMax = 3 +}; + +enum VideoCodecProfile +{ + kProfileBase = 0x00, + kProfileMain = 0x01 +}; + +struct VideoCodecH264 +{ + H264Packetization packetization; + VideoCodecComplexity complexity; + VideoCodecProfile profile; + char level; + char quality; + + bool useFMO; + + unsigned char configParameters[kConfigParameterSize]; + unsigned char configParametersSize; +}; + +// VP8 specific +struct VideoCodecVP8 +{ + bool pictureLossIndicationOn; + bool feedbackModeOn; + VideoCodecComplexity complexity; +}; + +// MPEG-4 specific +struct VideoCodecMPEG4 +{ + unsigned char configParameters[kConfigParameterSize]; + unsigned char configParametersSize; + char level; +}; + +// Unknown specific +struct VideoCodecGeneric +{ +}; + +// Video codec types +enum VideoCodecType +{ + kVideoCodecH263, + kVideoCodecH264, + kVideoCodecVP8, + kVideoCodecMPEG4, + kVideoCodecI420, + kVideoCodecRED, + kVideoCodecULPFEC, + kVideoCodecUnknown +}; + +union VideoCodecUnion +{ + VideoCodecH263 H263; + VideoCodecH264 H264; + VideoCodecVP8 VP8; + VideoCodecMPEG4 MPEG4; + VideoCodecGeneric Generic; +}; + +// Common video codec properties +struct VideoCodec +{ + VideoCodecType codecType; + char plName[kPayloadNameSize]; + unsigned char plType; + + unsigned short width; + unsigned short height; + + unsigned int startBitrate; + unsigned int maxBitrate; + unsigned int minBitrate; + unsigned char maxFramerate; + + VideoCodecUnion codecSpecific; + + unsigned int qpMax; +}; + +} // namespace webrtc + +#endif // WEBRTC_COMMON_TYPES_H diff --git a/engine_configurations.h b/engine_configurations.h new file mode 100644 index 0000000000..c24e3d2ced --- /dev/null +++ b/engine_configurations.h @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef WEBRTC_ENGINE_CONFIGURATIONS_H_ +#define WEBRTC_ENGINE_CONFIGURATIONS_H_ + +// ============================================================================ +// Voice and Video +// ============================================================================ + +// #define WEBRTC_EXTERNAL_TRANSPORT + +// ---------------------------------------------------------------------------- +// [Voice] Codec settings +// ---------------------------------------------------------------------------- + +#define WEBRTC_CODEC_ILBC +#define WEBRTC_CODEC_ISAC // floating-point iSAC implementation (default) +// #define WEBRTC_CODEC_ISACFX // fix-point iSAC implementation +#define WEBRTC_CODEC_G722 +#define WEBRTC_CODEC_PCM16 +#define WEBRTC_CODEC_RED +#define WEBRTC_CODEC_AVT + +// ---------------------------------------------------------------------------- +// [Video] Codec settings +// ---------------------------------------------------------------------------- + +#define VIDEOCODEC_I420 +#define VIDEOCODEC_VP8 + +// ============================================================================ +// VoiceEngine +// ============================================================================ + +// ---------------------------------------------------------------------------- +// Settings for VoiceEngine +// ---------------------------------------------------------------------------- + +#define WEBRTC_VOICE_ENGINE_AGC // Near-end AGC +#define WEBRTC_VOICE_ENGINE_ECHO // Near-end AEC +#define WEBRTC_VOICE_ENGINE_NR // Near-end NS +#define WEBRTC_VOICE_ENGINE_TYPING_DETECTION +#define WEBRTC_VOE_EXTERNAL_REC_AND_PLAYOUT + +// ---------------------------------------------------------------------------- +// VoiceEngine sub-APIs +// ---------------------------------------------------------------------------- + +#define WEBRTC_VOICE_ENGINE_AUDIO_PROCESSING_API +#define WEBRTC_VOICE_ENGINE_CALL_REPORT_API +#define WEBRTC_VOICE_ENGINE_CODEC_API +#define WEBRTC_VOICE_ENGINE_DTMF_API +#define WEBRTC_VOICE_ENGINE_ENCRYPTION_API +#define WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API +#define WEBRTC_VOICE_ENGINE_FILE_API +#define WEBRTC_VOICE_ENGINE_HARDWARE_API +#define WEBRTC_VOICE_ENGINE_NETEQ_STATS_API +#define WEBRTC_VOICE_ENGINE_NETWORK_API +#define WEBRTC_VOICE_ENGINE_RTP_RTCP_API +#define WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API +#define WEBRTC_VOICE_ENGINE_VOLUME_CONTROL_API + +// ============================================================================ +// VideoEngine +// ============================================================================ + +// ---------------------------------------------------------------------------- +// Settings for special VideoEngine configurations +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// VideoEngine sub-API:s +// ---------------------------------------------------------------------------- + +#define WEBRTC_VIDEO_ENGINE_CAPTURE_API +#define WEBRTC_VIDEO_ENGINE_CODEC_API +#define WEBRTC_VIDEO_ENGINE_ENCRYPTION_API +#define WEBRTC_VIDEO_ENGINE_FILE_API +#define WEBRTC_VIDEO_ENGINE_IMAGE_PROCESS_API +#define WEBRTC_VIDEO_ENGINE_NETWORK_API +#define WEBRTC_VIDEO_ENGINE_RENDER_API +#define WEBRTC_VIDEO_ENGINE_RTP_RTCP_API +// #define WEBRTC_VIDEO_ENGINE_EXTERNAL_CODEC_API + +// ============================================================================ +// Platform specific configurations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// VideoEngine Windows +// ---------------------------------------------------------------------------- + +#if defined(_WIN32) + // #define DIRECTDRAW_RENDERING + #define DIRECT3D9_RENDERING // Requires DirectX 9. +#endif + +// ---------------------------------------------------------------------------- +// VideoEngine MAC +// ---------------------------------------------------------------------------- + +#if defined(WEBRTC_MAC) && !defined(MAC_IPHONE) + // #define CARBON_RENDERING + #define COCOA_RENDERING +#endif + +// ---------------------------------------------------------------------------- +// VideoEngine Mobile iPhone +// ---------------------------------------------------------------------------- + +#if defined(MAC_IPHONE) + #define EAGL_RENDERING +#endif + +// ---------------------------------------------------------------------------- +// Deprecated +// ---------------------------------------------------------------------------- + +// #define WEBRTC_CODEC_G729 +// #define WEBRTC_DTMF_DETECTION +// #define WEBRTC_SRTP +// #define WEBRTC_SRTP_ALLOW_ROC_ITERATION + +#endif // WEBRTC_ENGINE_CONFIGURATIONS_H_ diff --git a/gyp_gips b/gyp_gips new file mode 100644 index 0000000000..824d7c12c7 --- /dev/null +++ b/gyp_gips @@ -0,0 +1,129 @@ +#!/usr/bin/python
+
+# Copyright (c) 2009 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This script is wrapper for Chromium that adds some support for how GYP
+# is invoked by Chromium beyond what can be done in the gclient hooks.
+
+import glob
+import os
+import shlex
+import sys
+
+script_dir = os.path.dirname(__file__)
+chrome_src = '../..';#os.path.normpath(os.path.join(script_dir, os.pardir))
+
+sys.path.insert(0, os.path.join(chrome_src, 'tools', 'gyp', 'pylib'))
+import gyp
+
+def apply_gyp_environment(file_path=None):
+ """
+ Reads in a *.gyp_env file and applies the valid keys to os.environ.
+ """
+ if not file_path or not os.path.exists(file_path):
+ return
+ file_contents = open(file_path).read()
+ try:
+ file_data = eval(file_contents, {'__builtins__': None}, None)
+ except SyntaxError, e:
+ e.filename = os.path.abspath(file_path)
+ raise
+ supported_vars = ( 'CHROMIUM_GYP_FILE',
+ 'CHROMIUM_GYP_SYNTAX_CHECK',
+ 'GYP_DEFINES',
+ 'GYP_GENERATOR_FLAGS',
+ 'GYP_GENERATOR_OUTPUT', )
+ for var in supported_vars:
+ val = file_data.get(var)
+ if val:
+ if var in os.environ:
+ print 'INFO: Environment value for "%s" overrides value in %s.' % (
+ var, os.path.abspath(file_path)
+ )
+ else:
+ os.environ[var] = val
+
+def additional_include_files(args=[]):
+ """
+ Returns a list of additional (.gypi) files to include, without
+ duplicating ones that are already specified on the command line.
+ """
+ # Determine the include files specified on the command line.
+ # This doesn't cover all the different option formats you can use,
+ # but it's mainly intended to avoid duplicating flags on the automatic
+ # makefile regeneration which only uses this format.
+ specified_includes = set()
+ for arg in args:
+ if arg.startswith('-I') and len(arg) > 2:
+ specified_includes.add(os.path.realpath(arg[2:]))
+
+ result = []
+ def AddInclude(path):
+ if os.path.realpath(path) not in specified_includes:
+ result.append(path)
+
+ # Always include common.gypi & features_override.gypi
+ AddInclude(os.path.join(script_dir, '../../build/common.gypi'))
+ AddInclude(os.path.join(script_dir, '../../build/features_override.gypi'))
+
+ # Optionally add supplemental .gypi files if present.
+ supplements = glob.glob(os.path.join(chrome_src, '*', 'supplement.gypi'))
+ for supplement in supplements:
+ AddInclude(supplement)
+
+ return result
+
+if __name__ == '__main__':
+ args = sys.argv[1:]
+
+ if 'SKIP_CHROMIUM_GYP_ENV' not in os.environ:
+ # Update the environment based on chromium.gyp_env
+ gyp_env_path = os.path.join(os.path.dirname(chrome_src), 'chromium.gyp_env')
+ apply_gyp_environment(gyp_env_path)
+
+ # This could give false positives since it doesn't actually do real option
+ # parsing. Oh well.
+ gyp_file_specified = False
+ for arg in args:
+ if arg.endswith('.gyp'):
+ gyp_file_specified = True
+ break
+
+ # If we didn't get a file, check an env var, and then fall back to
+ # assuming 'all.gyp' from the same directory as the script.
+ if not gyp_file_specified:
+ gyp_file = os.environ.get('CHROMIUM_GYP_FILE')
+ if gyp_file:
+ # Note that CHROMIUM_GYP_FILE values can't have backslashes as
+ # path separators even on Windows due to the use of shlex.split().
+ args.extend(shlex.split(gyp_file))
+ else:
+ args.append(os.path.join(script_dir, 'video_engine.gyp'))
+
+ args.extend(['-I' + i for i in additional_include_files(args)])
+
+ # There shouldn't be a circular dependency relationship between .gyp files,
+ # but in Chromium's .gyp files, on non-Mac platforms, circular relationships
+ # currently exist. The check for circular dependencies is currently
+ # bypassed on other platforms, but is left enabled on the Mac, where a
+ # violation of the rule causes Xcode to misbehave badly.
+ # TODO(mark): Find and kill remaining circular dependencies, and remove this
+ # option. http://crbug.com/35878.
+ # TODO(tc): Fix circular dependencies in ChromiumOS then add linux2 to the
+ # list.
+ if sys.platform not in ('darwin',):
+ args.append('--no-circular-check')
+
+ # If CHROMIUM_GYP_SYNTAX_CHECK is set to 1, it will invoke gyp with --check
+ # to enfore syntax checking.
+ syntax_check = os.environ.get('CHROMIUM_GYP_SYNTAX_CHECK')
+ if syntax_check and int(syntax_check):
+ args.append('--check')
+
+ print 'Updating projects from gyp files...'
+ sys.stdout.flush()
+
+ # Off we go...
+ sys.exit(gyp.main(args))
diff --git a/libvpx.mk b/libvpx.mk new file mode 100644 index 0000000000..792c70a400 --- /dev/null +++ b/libvpx.mk @@ -0,0 +1,132 @@ +# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. +# +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file in the root of the source +# tree. An additional intellectual property rights grant can be found +# in the file PATENTS. All contributing project authors may +# be found in the AUTHORS file in the root of the source tree. + +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +MY_LIBVPX_DEC_SRC = \ + vpx/src/vpx_codec.c \ + vpx/src/vpx_decoder.c \ + vpx/src/vpx_image.c \ + vpx_mem/vpx_mem.c \ + vpx_scale/generic/vpxscale.c \ + vpx_scale/generic/yv12config.c \ + vpx_scale/generic/yv12extend.c \ + vpx_scale/generic/gen_scalers.c \ + vpx_scale/generic/scalesystemdependant.c \ + vp8/common/alloccommon.c \ + vp8/common/blockd.c \ + vp8/common/debugmodes.c \ + vp8/common/entropy.c \ + vp8/common/entropymode.c \ + vp8/common/entropymv.c \ + vp8/common/extend.c \ + vp8/common/filter.c \ + vp8/common/findnearmv.c \ + vp8/common/generic/systemdependent.c \ + vp8/common/idctllm.c \ + vp8/common/invtrans.c \ + vp8/common/loopfilter.c \ + vp8/common/loopfilter_filters.c \ + vp8/common/mbpitch.c \ + vp8/common/modecont.c \ + vp8/common/modecontext.c \ + vp8/common/quant_common.c \ + vp8/common/recon.c \ + vp8/common/reconinter.c \ + vp8/common/reconintra.c \ + vp8/common/reconintra4x4.c \ + vp8/common/setupintrarecon.c \ + vp8/common/swapyv12buffer.c \ + vp8/common/textblit.c \ + vp8/common/treecoder.c \ + vp8/vp8_cx_iface.c \ + vp8/vp8_dx_iface.c \ + vp8/decoder/generic/dsystemdependent.c \ + vp8/decoder/dboolhuff.c \ + vp8/decoder/decodemv.c \ + vp8/decoder/decodframe.c \ + vp8/decoder/dequantize.c \ + vp8/decoder/detokenize.c \ + vp8/decoder/onyxd_if.c \ + vp8/decoder/reconintra_mt.c \ + vp8/decoder/threading.c \ + vpx_config.c \ + vp8/decoder/idct_blk.c + +MY_LIBVPX_ENC_PATH = ../libvpx + +LOCAL_SRC_FILES = \ + $(MY_LIBVPX_ENC_PATH)/vpx/src/vpx_encoder.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/bitstream.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/boolhuff.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/dct.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/encodeframe.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/encodeintra.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/encodemb.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/encodemv.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/ethreading.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/firstpass.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/arm/arm_csystemdependent.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/mcomp.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/modecosts.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/pickinter.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/picklpf.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/psnr.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/quantize.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/ratectrl.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/rdopt.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/sad_c.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/segmentation.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/tokenize.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/treewriter.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/onyx_if.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/temporal_filter.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/arm/variance_arm.c \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/arm/variance_arm.h \ + $(MY_LIBVPX_ENC_PATH)/vp8/encoder/variance_c.c + +# $(MY_LIBVPX_ENC_PATH)/vp8/encoder/generic/csystemdependent.c +# $(MY_LIBVPX_ENC_PATH)/vp8/encoder/variance_c.c +# $(MY_LIBVPX_ENC_PATH)/vp8/decoder/idct_blk.c \ +# md5_utils.c +# args.c \ +# tools_common.c \ +# nestegg/halloc/src/halloc.c \ +# nestegg/src/nestegg.c \ +# vpxdec.c \ +# y4minput.c \ +# libmkv/EbmlWriter.c \ +# vpxenc.c \ +# simple_decoder.c \ +# postproc.c \ +# decode_to_md5.c \ +# simple_encoder.c \ +# twopass_encoder.c \ +# force_keyframe.c \ +# decode_with_drops.c \ +# error_resilient.c \ +# vp8_scalable_patterns.c \ +# vp8_set_maps.c \ +# vp8cx_set_ref.c + +LOCAL_CFLAGS := \ + -DHAVE_CONFIG_H=vpx_config.h \ + -include $(LOCAL_PATH)/third_party_mods/libvpx/source/config/android/vpx_config.h + +LOCAL_MODULE := libwebrtc_vpx_enc + +LOCAL_C_INCLUDES := \ + external/libvpx \ + external/libvpx/vpx_ports \ + external/libvpx/vp8/common \ + external/libvpx/vp8/encoder \ + external/libvpx/vp8 \ + external/libvpx/vpx_codec + +include $(BUILD_STATIC_LIBRARY) diff --git a/license_template.txt b/license_template.txt new file mode 100644 index 0000000000..5a3e653f39 --- /dev/null +++ b/license_template.txt @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + diff --git a/typedefs.h b/typedefs.h new file mode 100644 index 0000000000..ae71690f18 --- /dev/null +++ b/typedefs.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +/* + * + * This file contains type definitions used in all WebRtc APIs. + * + */ + +/* Reserved words definitions */ +#define WEBRTC_EXTERN extern +#define G_CONST const +#define WEBRTC_INLINE extern __inline + +#ifndef WEBRTC_TYPEDEFS_H +#define WEBRTC_TYPEDEFS_H + +/* Define WebRtc preprocessor identifiers based on the current build platform */ +#if defined(WIN32) + // Windows & Windows Mobile + #if !defined(WEBRTC_TARGET_PC) + #define WEBRTC_TARGET_PC + #endif +#elif defined(__APPLE__) + // Mac OS X + #if defined(__LITTLE_ENDIAN__ ) //TODO: is this used? + #if !defined(WEBRTC_TARGET_MAC_INTEL) + #define WEBRTC_TARGET_MAC_INTEL + #endif + #else + #if !defined(WEBRTC_TARGET_MAC) + #define WEBRTC_TARGET_MAC + #endif + #endif +#else + // Linux etc. + #if !defined(WEBRTC_TARGET_PC) + #define WEBRTC_TARGET_PC + #endif +#endif + +#if defined(WEBRTC_TARGET_PC) + +#if !defined(_MSC_VER) + #include <stdint.h> +#else + // Define C99 equivalent types. + // Since MSVC doesn't include these headers, we have to write our own + // version to provide a compatibility layer between MSVC and the WebRTC + // headers. + typedef signed char int8_t; + typedef signed short int16_t; + typedef signed int int32_t; + typedef signed long long int64_t; + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + typedef unsigned long long uint64_t; +#endif + +#if defined(WIN32) + typedef __int64 WebRtc_Word64; + typedef unsigned __int64 WebRtc_UWord64; +#else + typedef int64_t WebRtc_Word64; + typedef uint64_t WebRtc_UWord64; +#endif + typedef int32_t WebRtc_Word32; + typedef uint32_t WebRtc_UWord32; + typedef int16_t WebRtc_Word16; + typedef uint16_t WebRtc_UWord16; + typedef char WebRtc_Word8; + typedef uint8_t WebRtc_UWord8; + + /* Define endian for the platform */ + #define WEBRTC_LITTLE_ENDIAN + +#elif defined(WEBRTC_TARGET_MAC_INTEL) + #include <stdint.h> + + typedef int64_t WebRtc_Word64; + typedef uint64_t WebRtc_UWord64; + typedef int32_t WebRtc_Word32; + typedef uint32_t WebRtc_UWord32; + typedef int16_t WebRtc_Word16; + typedef char WebRtc_Word8; + typedef uint16_t WebRtc_UWord16; + typedef uint8_t WebRtc_UWord8; + + /* Define endian for the platform */ + #define WEBRTC_LITTLE_ENDIAN + +#else + + #error "No platform defined for WebRtc type definitions (webrtc_typedefs.h)" + +#endif + + +#endif // WEBRTC_TYPEDEFS_H diff --git a/video_engine.gyp b/video_engine.gyp new file mode 100644 index 0000000000..28131f02a2 --- /dev/null +++ b/video_engine.gyp @@ -0,0 +1,17 @@ +# Copyright (c) 2009 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'includes': [ + 'common_settings.gypi', # Common settings + # Defines target vie_auto_test + 'video_engine/main/test/AutoTest/vie_auto_test.gypi', + ], +} + +# Local Variables: +# tab-width:2 +# indent-tabs-mode:nil +# End: +# vim: set expandtab tabstop=2 shiftwidth=2: diff --git a/voice_engine.gyp b/voice_engine.gyp new file mode 100644 index 0000000000..de513500c3 --- /dev/null +++ b/voice_engine.gyp @@ -0,0 +1,185 @@ +# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. +# +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file in the root of the source +# tree. An additional intellectual property rights grant can be found +# in the file PATENTS. All contributing project authors may +# be found in the AUTHORS file in the root of the source tree. + +{ + 'includes': [ + 'common_settings.gypi', + ], + 'targets': [ + # Auto test - command line test for all platforms + { + 'target_name': 'voe_auto_test', + 'type': 'executable', + 'dependencies': [ + 'voice_engine/main/source/voice_engine_core.gyp:voice_engine_core', + 'system_wrappers/source/system_wrappers.gyp:system_wrappers', + ], + 'include_dirs': [ + 'voice_engine/main/test/auto_test', + ], + 'sources': [ + 'voice_engine/main/test/auto_test/voe_cpu_test.cc', + 'voice_engine/main/test/auto_test/voe_cpu_test.h', + 'voice_engine/main/test/auto_test/voe_extended_test.cc', + 'voice_engine/main/test/auto_test/voe_extended_test.h', + 'voice_engine/main/test/auto_test/voe_standard_test.cc', + 'voice_engine/main/test/auto_test/voe_standard_test.h', + 'voice_engine/main/test/auto_test/voe_stress_test.cc', + 'voice_engine/main/test/auto_test/voe_stress_test.h', + 'voice_engine/main/test/auto_test/voe_test_defines.h', + 'voice_engine/main/test/auto_test/voe_test_interface.h', + 'voice_engine/main/test/auto_test/voe_unit_test.cc', + 'voice_engine/main/test/auto_test/voe_unit_test.h', + ], + 'conditions': [ + ['OS=="linux" or OS=="mac"', { + 'actions': [ + { + 'action_name': 'copy audio file', + 'inputs': [ + 'voice_engine/main/test/auto_test/audio_long16.pcm', + ], + 'outputs': [ + '/tmp/audio_long16.pcm', + ], + 'action': [ + '/bin/sh', '-c', + 'cp -f voice_engine/main/test/auto_test/audio_* /tmp/;'\ + 'cp -f voice_engine/main/test/auto_test/audio_short16.pcm /tmp/;', + ], + }, + ], + }], + ['OS=="win"', { + 'dependencies': [ + 'voice_engine.gyp:voe_ui_win_test', + ], + }], + ['OS=="win"', { + 'actions': [ + { + 'action_name': 'copy audio file', + 'inputs': [ + 'voice_engine/main/test/auto_test/audio_long16.pcm', + ], + 'outputs': [ + '/tmp/audio_long16.pcm', + ], + 'action': [ + 'cmd', '/c', + 'xcopy /Y /R .\\voice_engine\\main\\test\\auto_test\\audio_* \\tmp', + ], + }, + { + 'action_name': 'copy audio audio_short16.pcm', + 'inputs': [ + 'voice_engine/main/test/auto_test/audio_short16.pcm', + ], + 'outputs': [ + '/tmp/audio_short16.pcm', + ], + 'action': [ + 'cmd', '/c', + 'xcopy /Y /R .\\voice_engine\\main\\test\\auto_test\\audio_short16.pcm \\tmp', + ], + }, + ], + }], + ], + }, + ], + 'conditions': [ + ['OS=="win"', { + 'targets': [ + # WinTest - GUI test for Windows + { + 'target_name': 'voe_ui_win_test', + 'type': 'executable', + 'dependencies': [ + 'voice_engine/main/source/voice_engine_core.gyp:voice_engine_core', + 'system_wrappers/source/system_wrappers.gyp:system_wrappers', + ], + 'include_dirs': [ + 'voice_engine/main/test/win_test', + ], + 'sources': [ + 'voice_engine/main/test/win_test/Resource.h', + 'voice_engine/main/test/win_test/WinTest.cpp', + 'voice_engine/main/test/win_test/WinTest.h', + 'voice_engine/main/test/win_test/WinTest.rc', + 'voice_engine/main/test/win_test/WinTestDlg.cpp', + 'voice_engine/main/test/win_test/WinTestDlg.h', + 'voice_engine/main/test/win_test/res/WinTest.ico', + 'voice_engine/main/test/win_test/res/WinTest.rc2', + 'voice_engine/main/test/win_test/stdafx.cpp', + 'voice_engine/main/test/win_test/stdafx.h', + ], + 'actions': [ + { + 'action_name': 'copy audio file', + 'inputs': [ + 'voice_engine/main/test/win_test/audio_tiny11.wav', + ], + 'outputs': [ + '/tmp/audio_tiny11.wav', + ], + 'action': [ + 'cmd', '/c', + 'xcopy /Y /R .\\voice_engine\\main\\test\\win_test\\audio_* \\tmp', + ], + }, + { + 'action_name': 'copy audio audio_short16.pcm', + 'inputs': [ + 'voice_engine/main/test/win_test/audio_short16.pcm', + ], + 'outputs': [ + '/tmp/audio_short16.pcm', + ], + 'action': [ + 'cmd', '/c', + 'xcopy /Y /R .\\voice_engine\\main\\test\\win_test\\audio_short16.pcm \\tmp', + ], + }, + { + 'action_name': 'copy audio_long16noise.pcm', + 'inputs': [ + 'voice_engine/main/test/win_test/saudio_long16noise.pcm', + ], + 'outputs': [ + '/tmp/audio_long16noise.pcm', + ], + 'action': [ + 'cmd', '/c', + 'xcopy /Y /R .\\voice_engine\\main\\test\\win_test\\audio_long16noise.pcm \\tmp', + ], + }, + ], + 'configurations': { + 'Common_Base': { + 'msvs_configuration_attributes': { + 'UseOfMFC': '1', # Static + }, + }, + }, + 'msvs_settings': { + 'VCLinkerTool': { + 'SubSystem': '2', # Windows + }, + }, + }, + ], + }], + ], +} + +# Local Variables: +# tab-width:2 +# indent-tabs-mode:nil +# End: +# vim: set expandtab tabstop=2 shiftwidth=2: diff --git a/webrtc.gyp b/webrtc.gyp new file mode 100644 index 0000000000..2605465863 --- /dev/null +++ b/webrtc.gyp @@ -0,0 +1,72 @@ +# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. +# +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file in the root of the source +# tree. An additional intellectual property rights grant can be found +# in the file PATENTS. All contributing project authors may +# be found in the AUTHORS file in the root of the source tree. + +{ + 'includes': [ + 'common_settings.gypi', # Common settings + ], + 'targets': [ + { + 'target_name': 'auto_tests', + 'type': 'none', + 'dependencies': [ + 'voice_engine.gyp:voe_auto_test', + 'video_engine.gyp:vie_auto_test', + ], + }, + + { + 'target_name': 'peerconnection_client', + 'conditions': [ + ['OS=="win"', { + 'type': 'executable', + 'sources': [ + 'peerconnection/samples/client/conductor.cc', + 'peerconnection/samples/client/conductor.h', + 'peerconnection/samples/client/defaults.cc', + 'peerconnection/samples/client/defaults.h', + 'peerconnection/samples/client/main.cc', + 'peerconnection/samples/client/main_wnd.cc', + 'peerconnection/samples/client/main_wnd.h', + 'peerconnection/samples/client/peer_connection_client.cc', + 'peerconnection/samples/client/peer_connection_client.h', + '../third_party/libjingle/source/talk/base/win32socketinit.cc', + '../third_party/libjingle/source/talk/base/win32socketserver.cc', + ], + 'msvs_settings': { + 'VCLinkerTool': { + 'SubSystem': '2', # Windows + }, + }, + }, { + 'type': 'none', + }], + ], # conditions + 'dependencies': [ + '../third_party/libjingle/libjingle.gyp:libjingle_app', + ], + 'include_dirs': [ + '../third_party/libjingle/source', + ], + }, + + { + 'target_name': 'peerconnection_server', + 'type': 'executable', + 'sources': [ + 'peerconnection/samples/server/data_socket.cc', + 'peerconnection/samples/server/data_socket.h', + 'peerconnection/samples/server/main.cc', + 'peerconnection/samples/server/peer_channel.cc', + 'peerconnection/samples/server/peer_channel.h', + 'peerconnection/samples/server/utils.cc', + 'peerconnection/samples/server/utils.h', + ], + }, + ], +} |