128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org/* 228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * libjingle 35f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * Copyright 2013 Google Inc. 428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * this list of conditions and the following disclaimer. 1028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 1128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 1228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * and/or other materials provided with the distribution. 1328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 1428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * derived from this software without specific prior written permission. 1528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 1628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 1728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 1928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 2528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org */ 2728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 2828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include "talk/app/webrtc/localaudiosource.h" 2928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 3028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include <string> 3128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include <vector> 3228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 3328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include "talk/app/webrtc/test/fakeconstraints.h" 3428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include "talk/media/base/fakemediaengine.h" 3528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include "talk/media/base/fakevideorenderer.h" 36a09a99950ec40aef6421e4ba35eee7196b7a6e68buildbot@webrtc.org#include "webrtc/base/gunit.h" 3728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 3828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgusing webrtc::LocalAudioSource; 3928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgusing webrtc::MediaConstraintsInterface; 4028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgusing webrtc::MediaSourceInterface; 4197077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.orgusing webrtc::PeerConnectionFactoryInterface; 4228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 4328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgTEST(LocalAudioSourceTest, SetValidOptions) { 4428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org webrtc::FakeConstraints constraints; 4570c7fe14ac322a3abac2726d29ae3264b956e3daTommi constraints.AddMandatory( 4670c7fe14ac322a3abac2726d29ae3264b956e3daTommi MediaConstraintsInterface::kGoogEchoCancellation, false); 4728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org constraints.AddOptional( 48441f6347311bcf2079435c3888d67e1fb321f9f8Henrik Lundin MediaConstraintsInterface::kExtendedFilterEchoCancellation, true); 491ba344a07060bf57db649299835ec4f093d58d40Bjorn Volcker constraints.AddOptional(MediaConstraintsInterface::kDAEchoCancellation, true); 5028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org constraints.AddOptional(MediaConstraintsInterface::kAutoGainControl, true); 5128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org constraints.AddOptional( 5228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org MediaConstraintsInterface::kExperimentalAutoGainControl, true); 5328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org constraints.AddMandatory(MediaConstraintsInterface::kNoiseSuppression, false); 5428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org constraints.AddOptional(MediaConstraintsInterface::kHighpassFilter, true); 551ba344a07060bf57db649299835ec4f093d58d40Bjorn Volcker constraints.AddOptional(MediaConstraintsInterface::kAecDump, true); 5628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 57d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_refptr<LocalAudioSource> source = 5897077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(), 5997077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org &constraints); 6028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 61be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg EXPECT_EQ(rtc::Optional<bool>(false), source->options().echo_cancellation); 62be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg EXPECT_EQ(rtc::Optional<bool>(true), source->options().extended_filter_aec); 63be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg EXPECT_EQ(rtc::Optional<bool>(true), source->options().delay_agnostic_aec); 64be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg EXPECT_EQ(rtc::Optional<bool>(true), source->options().auto_gain_control); 65be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg EXPECT_EQ(rtc::Optional<bool>(true), source->options().experimental_agc); 66be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg EXPECT_EQ(rtc::Optional<bool>(false), source->options().noise_suppression); 67be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg EXPECT_EQ(rtc::Optional<bool>(true), source->options().highpass_filter); 68be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg EXPECT_EQ(rtc::Optional<bool>(true), source->options().aec_dump); 6928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org} 7028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 7128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgTEST(LocalAudioSourceTest, OptionNotSet) { 7228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org webrtc::FakeConstraints constraints; 73d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_refptr<LocalAudioSource> source = 7497077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(), 7597077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org &constraints); 76be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg EXPECT_EQ(rtc::Optional<bool>(), source->options().highpass_filter); 7728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org} 7828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 7928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgTEST(LocalAudioSourceTest, MandatoryOverridesOptional) { 8028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org webrtc::FakeConstraints constraints; 8170c7fe14ac322a3abac2726d29ae3264b956e3daTommi constraints.AddMandatory( 8270c7fe14ac322a3abac2726d29ae3264b956e3daTommi MediaConstraintsInterface::kGoogEchoCancellation, false); 8370c7fe14ac322a3abac2726d29ae3264b956e3daTommi constraints.AddOptional( 8470c7fe14ac322a3abac2726d29ae3264b956e3daTommi MediaConstraintsInterface::kGoogEchoCancellation, true); 8528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 86d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_refptr<LocalAudioSource> source = 8797077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(), 8897077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org &constraints); 8928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 90be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg EXPECT_EQ(rtc::Optional<bool>(false), source->options().echo_cancellation); 9128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org} 9228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 9328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgTEST(LocalAudioSourceTest, InvalidOptional) { 9428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org webrtc::FakeConstraints constraints; 9528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org constraints.AddOptional(MediaConstraintsInterface::kHighpassFilter, false); 9628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org constraints.AddOptional("invalidKey", false); 9728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 98d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_refptr<LocalAudioSource> source = 9997077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(), 10097077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org &constraints); 10128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 10228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org EXPECT_EQ(MediaSourceInterface::kLive, source->state()); 103be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg EXPECT_EQ(rtc::Optional<bool>(false), source->options().highpass_filter); 10428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org} 10528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 10628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgTEST(LocalAudioSourceTest, InvalidMandatory) { 10728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org webrtc::FakeConstraints constraints; 10828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org constraints.AddMandatory(MediaConstraintsInterface::kHighpassFilter, false); 10928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org constraints.AddMandatory("invalidKey", false); 11028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 111d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_refptr<LocalAudioSource> source = 11297077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(), 11397077a3ab27259164eb121034b6e0ebe9ba592dfwu@webrtc.org &constraints); 11428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 11538d88816e395dfc32b355769f67a6f39c18bd511xians@webrtc.org EXPECT_EQ(MediaSourceInterface::kLive, source->state()); 116be57983f4bd875c39a229bab5112b32dad004057Karl Wiberg EXPECT_EQ(rtc::Optional<bool>(false), source->options().highpass_filter); 11728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org} 118