Chromium Code Reviews| Index: content/renderer/media/media_stream_audio_processor_unittest.cc |
| diff --git a/content/renderer/media/media_stream_audio_processor_unittest.cc b/content/renderer/media/media_stream_audio_processor_unittest.cc |
| index ba938a6d019adcf101f9d03f4df938520dff8d2b..1eb28489893105e6bbd3260c344359087a689c0c 100644 |
| --- a/content/renderer/media/media_stream_audio_processor_unittest.cc |
| +++ b/content/renderer/media/media_stream_audio_processor_unittest.cc |
| @@ -11,6 +11,7 @@ |
| #include "content/public/common/content_switches.h" |
| #include "content/public/common/media_stream_request.h" |
| #include "content/renderer/media/media_stream_audio_processor.h" |
| +#include "content/renderer/media/media_stream_audio_processor_options.h" |
| #include "content/renderer/media/mock_media_constraint_factory.h" |
| #include "media/audio/audio_parameters.h" |
| #include "media/base/audio_bus.h" |
| @@ -153,12 +154,12 @@ class MediaStreamAudioProcessorTest : public ::testing::Test { |
| TEST_F(MediaStreamAudioProcessorTest, WithoutAudioProcessing) { |
| // Setup the audio processor without enabling the flag. |
| - blink::WebMediaConstraints constraints; |
| + MockMediaConstraintFactory constraint_factory; |
| scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
| new WebRtcAudioDeviceImpl()); |
| scoped_refptr<MediaStreamAudioProcessor> audio_processor( |
| new talk_base::RefCountedObject<MediaStreamAudioProcessor>( |
| - constraints, 0, MEDIA_DEVICE_AUDIO_CAPTURE, |
| + constraint_factory.CreateWebMediaConstraints(), 0, |
| webrtc_audio_device.get())); |
| EXPECT_FALSE(audio_processor->has_audio_processing()); |
| audio_processor->OnCaptureFormatChanged(params_); |
| @@ -176,12 +177,12 @@ TEST_F(MediaStreamAudioProcessorTest, WithAudioProcessing) { |
| // Setup the audio processor with the flag enabled. |
| CommandLine::ForCurrentProcess()->AppendSwitch( |
| switches::kEnableAudioTrackProcessing); |
| - blink::WebMediaConstraints constraints; |
| + MockMediaConstraintFactory constraint_factory; |
| scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
| new WebRtcAudioDeviceImpl()); |
| scoped_refptr<MediaStreamAudioProcessor> audio_processor( |
| new talk_base::RefCountedObject<MediaStreamAudioProcessor>( |
| - constraints, 0, MEDIA_DEVICE_AUDIO_CAPTURE, |
| + constraint_factory.CreateWebMediaConstraints(), 0, |
| webrtc_audio_device.get())); |
| EXPECT_TRUE(audio_processor->has_audio_processing()); |
| audio_processor->OnCaptureFormatChanged(params_); |
| @@ -200,13 +201,16 @@ TEST_F(MediaStreamAudioProcessorTest, VerifyTabCaptureWithoutAudioProcessing) { |
| // Setup the audio processor with enabling the flag. |
| CommandLine::ForCurrentProcess()->AppendSwitch( |
| switches::kEnableAudioTrackProcessing); |
| - blink::WebMediaConstraints constraints; |
| scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( |
| new WebRtcAudioDeviceImpl()); |
| - // Create MediaStreamAudioProcessor instance for MEDIA_TAB_AUDIO_CAPTURE type. |
| + // Create MediaStreamAudioProcessor instance for kMediaStreamSourceTab source. |
| + MockMediaConstraintFactory tab_constraint_factory; |
| + const std::string tab_string = kMediaStreamSourceTab; |
| + tab_constraint_factory.AddMandatory(kMediaStreamSource, |
| + tab_string); |
| scoped_refptr<MediaStreamAudioProcessor> audio_processor( |
| new talk_base::RefCountedObject<MediaStreamAudioProcessor>( |
| - constraints, 0, MEDIA_TAB_AUDIO_CAPTURE, |
| + tab_constraint_factory.CreateWebMediaConstraints(), 0, |
| webrtc_audio_device.get())); |
| EXPECT_FALSE(audio_processor->has_audio_processing()); |
| audio_processor->OnCaptureFormatChanged(params_); |
| @@ -216,11 +220,15 @@ TEST_F(MediaStreamAudioProcessorTest, VerifyTabCaptureWithoutAudioProcessing) { |
| params_.channels(), |
| params_.sample_rate() / 100); |
| - // Create MediaStreamAudioProcessor instance for MEDIA_LOOPBACK_AUDIO_CAPTURE. |
| - audio_processor = |
| - new talk_base::RefCountedObject<MediaStreamAudioProcessor>( |
| - constraints, 0, MEDIA_LOOPBACK_AUDIO_CAPTURE, |
| - webrtc_audio_device.get()); |
| + // Create MediaStreamAudioProcessor instance for kMediaStreamSourceSystem |
| + // source. |
| + MockMediaConstraintFactory system_constraint_factory; |
| + const std::string system_string = kMediaStreamSourceSystem; |
| + system_constraint_factory.AddMandatory(kMediaStreamSource, |
| + system_string); |
| + audio_processor = new talk_base::RefCountedObject<MediaStreamAudioProcessor>( |
| + system_constraint_factory.CreateWebMediaConstraints(), 0, |
| + webrtc_audio_device.get()); |
| EXPECT_FALSE(audio_processor->has_audio_processing()); |
| // Set |audio_processor| to NULL to make sure |webrtc_audio_device| outlives |
| @@ -241,7 +249,7 @@ TEST_F(MediaStreamAudioProcessorTest, TurnOffDefaultConstraints) { |
| scoped_refptr<MediaStreamAudioProcessor> audio_processor( |
| new talk_base::RefCountedObject<MediaStreamAudioProcessor>( |
| constraint_factory.CreateWebMediaConstraints(), 0, |
| - MEDIA_DEVICE_AUDIO_CAPTURE, webrtc_audio_device.get())); |
| + webrtc_audio_device.get())); |
| EXPECT_FALSE(audio_processor->has_audio_processing()); |
| audio_processor->OnCaptureFormatChanged(params_); |
| @@ -254,4 +262,104 @@ TEST_F(MediaStreamAudioProcessorTest, TurnOffDefaultConstraints) { |
| audio_processor = NULL; |
| } |
| +TEST_F(MediaStreamAudioProcessorTest, VerifyConstraints) { |
| + // Setup the audio processor with enabling the flag. |
| + CommandLine::ForCurrentProcess()->AppendSwitch( |
| + switches::kEnableAudioTrackProcessing); |
| + |
| + static const char* kDefaultAudioConstraints[] = { |
| + MediaAudioConstraints::kEchoCancellation, |
| + MediaAudioConstraints::kGoogAudioMirroring, |
| + MediaAudioConstraints::kGoogAutoGainControl, |
| + MediaAudioConstraints::kGoogEchoCancellation, |
| + MediaAudioConstraints::kGoogExperimentalEchoCancellation, |
| + MediaAudioConstraints::kGoogExperimentalAutoGainControl, |
| + MediaAudioConstraints::kGoogExperimentalNoiseSuppression, |
| + MediaAudioConstraints::kGoogHighpassFilter, |
| + MediaAudioConstraints::kGoogNoiseSuppression, |
| + MediaAudioConstraints::kGoogTypingNoiseDetection |
| + }; |
| + |
| + // Verify mandatory constraints. |
| + for (size_t i = 0; i < arraysize(kDefaultAudioConstraints); ++i) { |
| + MockMediaConstraintFactory constraint_factory; |
| + constraint_factory.AddMandatory(kDefaultAudioConstraints[i], false); |
| + blink::WebMediaConstraints constraints = |
| + constraint_factory.CreateWebMediaConstraints(); |
| + MediaAudioConstraints audio_constraints(constraints, 0); |
| + EXPECT_FALSE(audio_constraints.GetProperty(kDefaultAudioConstraints[i])); |
| + } |
| + |
| + // Verify optional constraints. |
| + for (size_t i = 0; i < arraysize(kDefaultAudioConstraints); ++i) { |
| + MockMediaConstraintFactory constraint_factory; |
| + constraint_factory.AddOptional(kDefaultAudioConstraints[i], false); |
| + blink::WebMediaConstraints constraints = |
| + constraint_factory.CreateWebMediaConstraints(); |
| + MediaAudioConstraints audio_constraints(constraints, 0); |
| + EXPECT_FALSE(audio_constraints.GetProperty(kDefaultAudioConstraints[i])); |
| + } |
| + |
| + { |
| + // Verify echo cancellation is off when platform aec effect is on. |
| + MockMediaConstraintFactory constraint_factory; |
| + MediaAudioConstraints audio_constraints( |
| + constraint_factory.CreateWebMediaConstraints(), |
| + media::AudioParameters::ECHO_CANCELLER); |
| + EXPECT_FALSE(audio_constraints.GetEchoCancellationProperty()); |
| + } |
| + |
| + { |
| + // Verify |kEchoCancellation| overwrite |kGoogEchoCancellation|. |
| + MockMediaConstraintFactory constraint_factory_1; |
| + constraint_factory_1.AddOptional(MediaAudioConstraints::kEchoCancellation, |
| + true); |
| + constraint_factory_1.AddOptional( |
| + MediaAudioConstraints::kGoogEchoCancellation, false); |
| + blink::WebMediaConstraints constraints_1 = |
| + constraint_factory_1.CreateWebMediaConstraints(); |
| + MediaAudioConstraints audio_constraints_1(constraints_1, 0); |
| + EXPECT_TRUE(audio_constraints_1.GetEchoCancellationProperty()); |
| + |
| + MockMediaConstraintFactory constraint_factory_2; |
| + constraint_factory_2.AddOptional(MediaAudioConstraints::kEchoCancellation, |
| + false); |
| + constraint_factory_2.AddOptional( |
| + MediaAudioConstraints::kGoogEchoCancellation, true); |
| + blink::WebMediaConstraints constraints_2 = |
| + constraint_factory_2.CreateWebMediaConstraints(); |
| + MediaAudioConstraints audio_constraints_2(constraints_2, 0); |
| + EXPECT_FALSE(audio_constraints_2.GetEchoCancellationProperty()); |
| + }MockMediaConstraintFactory constraint_factory; |
|
tommi (sloooow) - chröme
2014/05/07 14:19:45
missing \n?
is the intent that constraint_factory
no longer working on chromium
2014/05/07 15:45:00
No idea how it got moved here, corrected now.
|
| + |
| + |
| + { |
| + // When |kEchoCancellation| is explicitly set to false, the default values |
| + // for all the constraints except |kMediaStreamAudioDucking| are false. |
| + constraint_factory.AddOptional(MediaAudioConstraints::kEchoCancellation, |
| + false); |
| + blink::WebMediaConstraints constraints = |
| + constraint_factory.CreateWebMediaConstraints(); |
| + MediaAudioConstraints audio_constraints(constraints, 0); |
| + for (size_t i = 0; i < arraysize(kDefaultAudioConstraints); ++i) { |
| + EXPECT_FALSE(audio_constraints.GetProperty(kDefaultAudioConstraints[i])); |
| + } |
| + EXPECT_FALSE(audio_constraints.NeedsAudioProcessing()); |
| +#if defined(OS_WIN) |
| + EXPECT_TRUE(audio_constraints.GetProperty(kMediaStreamAudioDucking)); |
| +#else |
| + EXPECT_FALSE(audio_constraints.GetProperty(kMediaStreamAudioDucking)); |
| +#endif |
| + } |
| +} |
| + |
| +TEST_F(MediaStreamAudioProcessorTest, ValidateConstraints) { |
| + MockMediaConstraintFactory constraint_factory; |
| + const std::string dummy_constraint = "dummy"; |
| + constraint_factory.AddMandatory(dummy_constraint, true); |
| + MediaAudioConstraints audio_constraints( |
| + constraint_factory.CreateWebMediaConstraints(), 0); |
| + EXPECT_FALSE(audio_constraints.IsValid()); |
| +} |
| + |
| } // namespace content |