OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chromeos/audio/cras_audio_handler.h" | 5 #include "chromeos/audio/cras_audio_handler.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
11 | 11 |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
15 #include "base/message_loop/message_loop.h" | 15 #include "base/message_loop/message_loop.h" |
16 #include "base/run_loop.h" | 16 #include "base/run_loop.h" |
17 #include "base/threading/thread_task_runner_handle.h" | 17 #include "base/threading/thread_task_runner_handle.h" |
18 #include "base/values.h" | 18 #include "base/values.h" |
19 #include "chromeos/audio/audio_devices_pref_handler.h" | 19 #include "chromeos/audio/audio_devices_pref_handler.h" |
20 #include "chromeos/audio/audio_devices_pref_handler_stub.h" | 20 #include "chromeos/audio/audio_devices_pref_handler_stub.h" |
21 #include "chromeos/dbus/audio_node.h" | 21 #include "chromeos/dbus/audio_node.h" |
22 #include "chromeos/dbus/dbus_thread_manager.h" | 22 #include "chromeos/dbus/dbus_thread_manager.h" |
23 #include "chromeos/dbus/fake_cras_audio_client.h" | 23 #include "chromeos/dbus/fake_cras_audio_client.h" |
24 #include "media/base/video_facing.h" | |
24 #include "testing/gtest/include/gtest/gtest.h" | 25 #include "testing/gtest/include/gtest/gtest.h" |
25 | 26 |
26 namespace chromeos { | 27 namespace chromeos { |
27 namespace { | 28 namespace { |
28 | 29 |
29 const uint64_t kInternalSpeakerId = 10001; | 30 const uint64_t kInternalSpeakerId = 10001; |
30 const uint64_t kHeadphoneId = 10002; | 31 const uint64_t kHeadphoneId = 10002; |
31 const uint64_t kInternalMicId = 10003; | 32 const uint64_t kInternalMicId = 10003; |
32 const uint64_t kUSBMicId = 10004; | 33 const uint64_t kUSBMicId = 10004; |
33 const uint64_t kBluetoothHeadsetId = 10005; | 34 const uint64_t kBluetoothHeadsetId = 10005; |
34 const uint64_t kHDMIOutputId = 10006; | 35 const uint64_t kHDMIOutputId = 10006; |
35 const uint64_t kUSBHeadphoneId1 = 10007; | 36 const uint64_t kUSBHeadphoneId1 = 10007; |
36 const uint64_t kUSBHeadphoneId2 = 10008; | 37 const uint64_t kUSBHeadphoneId2 = 10008; |
37 const uint64_t kMicJackId = 10009; | 38 const uint64_t kMicJackId = 10009; |
38 const uint64_t kKeyboardMicId = 10010; | 39 const uint64_t kKeyboardMicId = 10010; |
40 const uint64_t kFrontMicId = 10011; | |
41 const uint64_t kRearMicId = 10012; | |
39 const uint64_t kOtherTypeOutputId = 90001; | 42 const uint64_t kOtherTypeOutputId = 90001; |
40 const uint64_t kOtherTypeInputId = 90002; | 43 const uint64_t kOtherTypeInputId = 90002; |
41 const uint64_t kUSBJabraSpeakerOutputId1 = 90003; | 44 const uint64_t kUSBJabraSpeakerOutputId1 = 90003; |
42 const uint64_t kUSBJabraSpeakerOutputId2 = 90004; | 45 const uint64_t kUSBJabraSpeakerOutputId2 = 90004; |
43 const uint64_t kUSBJabraSpeakerInputId1 = 90005; | 46 const uint64_t kUSBJabraSpeakerInputId1 = 90005; |
44 const uint64_t kUSBJabraSpeakerInputId2 = 90006; | 47 const uint64_t kUSBJabraSpeakerInputId2 = 90006; |
45 const uint64_t kUSBCameraInputId = 90007; | 48 const uint64_t kUSBCameraInputId = 90007; |
46 | 49 |
47 struct AudioNodeInfo { | 50 struct AudioNodeInfo { |
48 bool is_input; | 51 bool is_input; |
(...skipping 15 matching lines...) Expand all Loading... | |
64 const AudioNodeInfo kMicJack[] = { | 67 const AudioNodeInfo kMicJack[] = { |
65 {true, kMicJackId, "Fake Mic Jack", "MIC", "Mic Jack"}}; | 68 {true, kMicJackId, "Fake Mic Jack", "MIC", "Mic Jack"}}; |
66 | 69 |
67 const AudioNodeInfo kUSBMic[] = { | 70 const AudioNodeInfo kUSBMic[] = { |
68 {true, kUSBMicId, "Fake USB Mic", "USB", "USB Microphone"}}; | 71 {true, kUSBMicId, "Fake USB Mic", "USB", "USB Microphone"}}; |
69 | 72 |
70 const AudioNodeInfo kKeyboardMic[] = {{true, kKeyboardMicId, | 73 const AudioNodeInfo kKeyboardMic[] = {{true, kKeyboardMicId, |
71 "Fake Keyboard Mic", "KEYBOARD_MIC", | 74 "Fake Keyboard Mic", "KEYBOARD_MIC", |
72 "Keyboard Mic"}}; | 75 "Keyboard Mic"}}; |
73 | 76 |
77 const AudioNodeInfo kFrontMic[] = { | |
78 {true, kFrontMicId, "Fake Front Mic", "FRONT_MIC", "Front Mic"}}; | |
79 | |
80 const AudioNodeInfo kRearMic[] = { | |
81 {true, kRearMicId, "Fake Rear Mic", "REAR_MIC", "Rear Mic"}}; | |
82 | |
74 const AudioNodeInfo kOtherTypeOutput[] = {{false, kOtherTypeOutputId, | 83 const AudioNodeInfo kOtherTypeOutput[] = {{false, kOtherTypeOutputId, |
75 "Output Device", "SOME_OTHER_TYPE", | 84 "Output Device", "SOME_OTHER_TYPE", |
76 "Other Type Output Device"}}; | 85 "Other Type Output Device"}}; |
77 | 86 |
78 const AudioNodeInfo kOtherTypeInput[] = {{true, kOtherTypeInputId, | 87 const AudioNodeInfo kOtherTypeInput[] = {{true, kOtherTypeInputId, |
79 "Input Device", "SOME_OTHER_TYPE", | 88 "Input Device", "SOME_OTHER_TYPE", |
80 "Other Type Input Device"}}; | 89 "Other Type Input Device"}}; |
81 | 90 |
82 const AudioNodeInfo kBluetoothHeadset[] = {{false, kBluetoothHeadsetId, | 91 const AudioNodeInfo kBluetoothHeadset[] = {{false, kBluetoothHeadsetId, |
83 "Bluetooth Headset", "BLUETOOTH", | 92 "Bluetooth Headset", "BLUETOOTH", |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
204 int output_mute_changed_count_ = 0; | 213 int output_mute_changed_count_ = 0; |
205 int input_mute_changed_count_ = 0; | 214 int input_mute_changed_count_ = 0; |
206 int output_volume_changed_count_ = 0; | 215 int output_volume_changed_count_ = 0; |
207 int input_gain_changed_count_ = 0; | 216 int input_gain_changed_count_ = 0; |
208 bool output_mute_by_system_ = false; // output mute state adjusted by system. | 217 bool output_mute_by_system_ = false; // output mute state adjusted by system. |
209 int output_channel_remixing_changed_count_ = 0; | 218 int output_channel_remixing_changed_count_ = 0; |
210 | 219 |
211 DISALLOW_COPY_AND_ASSIGN(TestObserver); | 220 DISALLOW_COPY_AND_ASSIGN(TestObserver); |
212 }; | 221 }; |
213 | 222 |
223 class FakeVideoCaptureMagner { | |
shenghao
2017/03/01 11:25:55
s/FakeVideoCaptureMagner/FakeVideoCaptureManager/
jennyz
2017/03/02 17:31:41
Done.
| |
224 public: | |
225 FakeVideoCaptureMagner() {} | |
226 virtual ~FakeVideoCaptureMagner() {} | |
227 | |
228 void AddObserver(media::VideoCaptureObserver* observer) { | |
229 observers_.AddObserver(observer); | |
230 } | |
231 | |
232 void RemoveAllObservers() { observers_.Clear(); } | |
233 | |
234 void NotifyVideoCaptureStarted(media::VideoFacingMode facing) { | |
235 for (auto& observer : observers_) | |
236 observer.OnVideoCaptureStarted(facing); | |
237 } | |
238 | |
239 void NotifyVideoCaptureStopped(media::VideoFacingMode facing) { | |
240 for (auto& observer : observers_) | |
241 observer.OnVideoCaptureStarted(facing); | |
242 } | |
243 | |
244 private: | |
245 base::ObserverList<media::VideoCaptureObserver> observers_; | |
246 DISALLOW_COPY_AND_ASSIGN(FakeVideoCaptureMagner); | |
247 }; | |
248 | |
214 } // namespace | 249 } // namespace |
215 | 250 |
216 // Test param is the version of stabel device id used by audio node. | 251 // Test param is the version of stabel device id used by audio node. |
217 class CrasAudioHandlerTest : public testing::TestWithParam<int> { | 252 class CrasAudioHandlerTest : public testing::TestWithParam<int> { |
218 public: | 253 public: |
219 CrasAudioHandlerTest() {} | 254 CrasAudioHandlerTest() {} |
220 ~CrasAudioHandlerTest() override {} | 255 ~CrasAudioHandlerTest() override {} |
221 | 256 |
222 void SetUp() override {} | 257 void SetUp() override { |
258 video_capture_manager_.reset(new FakeVideoCaptureMagner); | |
259 } | |
223 | 260 |
224 void TearDown() override { | 261 void TearDown() override { |
225 cras_audio_handler_->RemoveAudioObserver(test_observer_.get()); | 262 cras_audio_handler_->RemoveAudioObserver(test_observer_.get()); |
226 test_observer_.reset(); | 263 test_observer_.reset(); |
264 video_capture_manager_->RemoveAllObservers(); | |
265 video_capture_manager_.reset(); | |
227 CrasAudioHandler::Shutdown(); | 266 CrasAudioHandler::Shutdown(); |
228 audio_pref_handler_ = nullptr; | 267 audio_pref_handler_ = nullptr; |
229 DBusThreadManager::Shutdown(); | 268 DBusThreadManager::Shutdown(); |
230 } | 269 } |
231 | 270 |
232 AudioNode GenerateAudioNode(const AudioNodeInfo* node_info) { | 271 AudioNode GenerateAudioNode(const AudioNodeInfo* node_info) { |
233 uint64_t stable_device_id_v2 = GetParam() == 1 ? 0 : (node_info->id ^ 0xFF); | 272 uint64_t stable_device_id_v2 = GetParam() == 1 ? 0 : (node_info->id ^ 0xFF); |
234 uint64_t stable_device_id_v1 = node_info->id; | 273 uint64_t stable_device_id_v1 = node_info->id; |
235 return AudioNode(node_info->is_input, node_info->id, GetParam() == 2, | 274 return AudioNode(node_info->is_input, node_info->id, GetParam() == 2, |
236 stable_device_id_v1, stable_device_id_v2, | 275 stable_device_id_v1, stable_device_id_v2, |
(...skipping 13 matching lines...) Expand all Loading... | |
250 void SetUpCrasAudioHandler(const AudioNodeList& audio_nodes) { | 289 void SetUpCrasAudioHandler(const AudioNodeList& audio_nodes) { |
251 DBusThreadManager::Initialize(); | 290 DBusThreadManager::Initialize(); |
252 fake_cras_audio_client_ = static_cast<FakeCrasAudioClient*>( | 291 fake_cras_audio_client_ = static_cast<FakeCrasAudioClient*>( |
253 DBusThreadManager::Get()->GetCrasAudioClient()); | 292 DBusThreadManager::Get()->GetCrasAudioClient()); |
254 fake_cras_audio_client_->SetAudioNodesForTesting(audio_nodes); | 293 fake_cras_audio_client_->SetAudioNodesForTesting(audio_nodes); |
255 audio_pref_handler_ = new AudioDevicesPrefHandlerStub(); | 294 audio_pref_handler_ = new AudioDevicesPrefHandlerStub(); |
256 CrasAudioHandler::Initialize(audio_pref_handler_); | 295 CrasAudioHandler::Initialize(audio_pref_handler_); |
257 cras_audio_handler_ = CrasAudioHandler::Get(); | 296 cras_audio_handler_ = CrasAudioHandler::Get(); |
258 test_observer_.reset(new TestObserver); | 297 test_observer_.reset(new TestObserver); |
259 cras_audio_handler_->AddAudioObserver(test_observer_.get()); | 298 cras_audio_handler_->AddAudioObserver(test_observer_.get()); |
299 video_capture_manager_->AddObserver(cras_audio_handler_); | |
260 base::RunLoop().RunUntilIdle(); | 300 base::RunLoop().RunUntilIdle(); |
261 } | 301 } |
262 | 302 |
263 // Set up cras audio handlers with |audio_nodes| and set the active state of | 303 // Set up cras audio handlers with |audio_nodes| and set the active state of |
264 // |active_device_in_pref| as active and |activate_by_user| in the pref, | 304 // |active_device_in_pref| as active and |activate_by_user| in the pref, |
265 // and rest of nodes in |audio_nodes_in_pref| as inactive. | 305 // and rest of nodes in |audio_nodes_in_pref| as inactive. |
266 void SetupCrasAudioHandlerWithActiveNodeInPref( | 306 void SetupCrasAudioHandlerWithActiveNodeInPref( |
267 const AudioNodeList& audio_nodes, | 307 const AudioNodeList& audio_nodes, |
268 const AudioNodeList& audio_nodes_in_pref, | 308 const AudioNodeList& audio_nodes_in_pref, |
269 const AudioDevice& active_device_in_pref, | 309 const AudioDevice& active_device_in_pref, |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
341 | 381 |
342 bool IsDuringHDMIRediscoverGracePeriod() { | 382 bool IsDuringHDMIRediscoverGracePeriod() { |
343 return cras_audio_handler_->hdmi_rediscovering(); | 383 return cras_audio_handler_->hdmi_rediscovering(); |
344 } | 384 } |
345 | 385 |
346 void RestartAudioClient() { | 386 void RestartAudioClient() { |
347 cras_audio_handler_->AudioClientRestarted(); | 387 cras_audio_handler_->AudioClientRestarted(); |
348 base::RunLoop().RunUntilIdle(); | 388 base::RunLoop().RunUntilIdle(); |
349 } | 389 } |
350 | 390 |
391 void StartFrontFacingCamera() { | |
392 video_capture_manager_->NotifyVideoCaptureStarted( | |
393 media::MEDIA_VIDEO_FACING_USER); | |
394 } | |
395 | |
396 void StopFrontFacingCamera() { | |
397 video_capture_manager_->NotifyVideoCaptureStopped( | |
398 media::MEDIA_VIDEO_FACING_USER); | |
399 } | |
400 | |
401 void StartRearFacingCamera() { | |
402 video_capture_manager_->NotifyVideoCaptureStarted( | |
403 media::MEDIA_VIDEO_FACING_ENVIRONMENT); | |
404 } | |
405 | |
406 void StopRearFacingCamera() { | |
407 video_capture_manager_->NotifyVideoCaptureStopped( | |
408 media::MEDIA_VIDEO_FACING_ENVIRONMENT); | |
409 } | |
410 | |
351 protected: | 411 protected: |
352 base::MessageLoopForUI message_loop_; | 412 base::MessageLoopForUI message_loop_; |
353 CrasAudioHandler* cras_audio_handler_ = nullptr; // Not owned. | 413 CrasAudioHandler* cras_audio_handler_ = nullptr; // Not owned. |
354 FakeCrasAudioClient* fake_cras_audio_client_ = nullptr; // Not owned. | 414 FakeCrasAudioClient* fake_cras_audio_client_ = nullptr; // Not owned. |
355 std::unique_ptr<TestObserver> test_observer_; | 415 std::unique_ptr<TestObserver> test_observer_; |
356 scoped_refptr<AudioDevicesPrefHandlerStub> audio_pref_handler_; | 416 scoped_refptr<AudioDevicesPrefHandlerStub> audio_pref_handler_; |
417 std::unique_ptr<FakeVideoCaptureMagner> video_capture_manager_; | |
357 | 418 |
358 private: | 419 private: |
359 DISALLOW_COPY_AND_ASSIGN(CrasAudioHandlerTest); | 420 DISALLOW_COPY_AND_ASSIGN(CrasAudioHandlerTest); |
360 }; | 421 }; |
361 | 422 |
362 class HDMIRediscoverWaiter { | 423 class HDMIRediscoverWaiter { |
363 public: | 424 public: |
364 HDMIRediscoverWaiter(CrasAudioHandlerTest* cras_audio_handler_test, | 425 HDMIRediscoverWaiter(CrasAudioHandlerTest* cras_audio_handler_test, |
365 int grace_period_duration_in_ms) | 426 int grace_period_duration_in_ms) |
366 : cras_audio_handler_test_(cras_audio_handler_test), | 427 : cras_audio_handler_test_(cras_audio_handler_test), |
(...skipping 3306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3673 EXPECT_TRUE( | 3734 EXPECT_TRUE( |
3674 cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output)); | 3735 cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output)); |
3675 EXPECT_EQ(kInternalSpeaker->id, active_output.id); | 3736 EXPECT_EQ(kInternalSpeaker->id, active_output.id); |
3676 EXPECT_EQ(kInternalSpeaker->id, | 3737 EXPECT_EQ(kInternalSpeaker->id, |
3677 cras_audio_handler_->GetPrimaryActiveOutputNode()); | 3738 cras_audio_handler_->GetPrimaryActiveOutputNode()); |
3678 EXPECT_FALSE(cras_audio_handler_->IsOutputMuted()); | 3739 EXPECT_FALSE(cras_audio_handler_->IsOutputMuted()); |
3679 EXPECT_EQ(1, test_observer_->output_mute_changed_count()); | 3740 EXPECT_EQ(1, test_observer_->output_mute_changed_count()); |
3680 EXPECT_TRUE(test_observer_->output_mute_by_system()); | 3741 EXPECT_TRUE(test_observer_->output_mute_by_system()); |
3681 } | 3742 } |
3682 | 3743 |
3744 TEST_P(CrasAudioHandlerTest, FrontCameraStartStop) { | |
3745 AudioNodeList audio_nodes = GenerateAudioNodeList({kFrontMic, kRearMic}); | |
3746 SetUpCrasAudioHandler(audio_nodes); | |
3747 | |
3748 // Verify the audio devices size. | |
3749 AudioDeviceList audio_devices; | |
3750 cras_audio_handler_->GetAudioDevices(&audio_devices); | |
3751 EXPECT_EQ(audio_nodes.size(), audio_devices.size()); | |
3752 | |
3753 // Verify the front mic has been selected as the active input. | |
3754 EXPECT_EQ(kFrontMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3755 EXPECT_TRUE(cras_audio_handler_->HasDualInternalMic()); | |
3756 | |
3757 // Start the front facing camera. | |
3758 StartFrontFacingCamera(); | |
3759 // Verify the front mic has been selected as the active input. | |
3760 EXPECT_EQ(kFrontMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3761 | |
3762 // Stop the front facing camera. | |
3763 StopFrontFacingCamera(); | |
3764 // Verify the front mic has been selected as the active input. | |
3765 EXPECT_EQ(kFrontMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3766 } | |
3767 | |
3768 TEST_P(CrasAudioHandlerTest, RearCameraStartStop) { | |
3769 AudioNodeList audio_nodes = GenerateAudioNodeList({kFrontMic, kRearMic}); | |
3770 SetUpCrasAudioHandler(audio_nodes); | |
3771 | |
3772 // Verify the audio devices size. | |
3773 AudioDeviceList audio_devices; | |
3774 cras_audio_handler_->GetAudioDevices(&audio_devices); | |
3775 EXPECT_EQ(audio_nodes.size(), audio_devices.size()); | |
3776 | |
3777 // Verify the front mic has been selected as the active input. | |
3778 EXPECT_EQ(kFrontMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3779 EXPECT_TRUE(cras_audio_handler_->HasDualInternalMic()); | |
3780 | |
3781 // Start the rear facing camera. | |
3782 StartRearFacingCamera(); | |
3783 // Verify the active input is switched to the rear mic. | |
3784 EXPECT_EQ(kRearMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3785 | |
3786 // Stop the rear facing camera. | |
3787 StopFrontFacingCamera(); | |
3788 // Verify the active input is switched back to front mic. | |
3789 EXPECT_EQ(kFrontMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3790 } | |
3791 | |
3792 TEST_P(CrasAudioHandlerTest, SwitchFrontRearCamera) { | |
shenghao
2017/03/01 11:25:55
I think it's beneficial to add a test for the case
jennyz
2017/03/02 17:31:41
Added such a case at the end.
| |
3793 AudioNodeList audio_nodes = GenerateAudioNodeList({kFrontMic, kRearMic}); | |
3794 SetUpCrasAudioHandler(audio_nodes); | |
3795 | |
3796 // Verify the audio devices size. | |
3797 AudioDeviceList audio_devices; | |
3798 cras_audio_handler_->GetAudioDevices(&audio_devices); | |
3799 EXPECT_EQ(audio_nodes.size(), audio_devices.size()); | |
3800 | |
3801 // Verify the front mic has been selected as the active input. | |
3802 EXPECT_EQ(kFrontMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3803 EXPECT_TRUE(cras_audio_handler_->HasDualInternalMic()); | |
3804 | |
3805 // Start the front facing camera. | |
3806 StartFrontFacingCamera(); | |
3807 // Verify the front mic has been selected as the active input. | |
3808 EXPECT_EQ(kFrontMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3809 | |
3810 // Simulates the camera app switching from front camera to rear camera. | |
3811 StopFrontFacingCamera(); | |
3812 StartRearFacingCamera(); | |
3813 | |
3814 // Verify the rear mic has been selected as the active input. | |
3815 EXPECT_EQ(kRearMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3816 } | |
3817 | |
3818 TEST_P(CrasAudioHandlerTest, StartFrontCameraWithActiveExternalInput) { | |
3819 AudioNodeList audio_nodes = | |
3820 GenerateAudioNodeList({kFrontMic, kRearMic, kMicJack}); | |
3821 SetUpCrasAudioHandler(audio_nodes); | |
3822 | |
3823 // Verify the audio devices size. | |
3824 AudioDeviceList audio_devices; | |
3825 cras_audio_handler_->GetAudioDevices(&audio_devices); | |
3826 EXPECT_EQ(audio_nodes.size(), audio_devices.size()); | |
3827 | |
3828 // Verify the mic Jack has been selected as the active input. | |
3829 EXPECT_EQ(kMicJackId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3830 EXPECT_TRUE(cras_audio_handler_->HasDualInternalMic()); | |
3831 | |
3832 // Start the front facing camera. | |
3833 StartFrontFacingCamera(); | |
3834 // Verify the mic Jack has been selected as the active input. | |
3835 EXPECT_EQ(kMicJackId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3836 | |
3837 // Stop the front facing camera. | |
3838 StopFrontFacingCamera(); | |
3839 // Verify the mic Jack remains as the active input. | |
3840 EXPECT_EQ(kMicJackId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3841 } | |
3842 | |
3843 TEST_P(CrasAudioHandlerTest, StartFrontCameraWithInactiveExternalInput) { | |
3844 AudioNodeList audio_nodes = | |
3845 GenerateAudioNodeList({kFrontMic, kRearMic, kMicJack}); | |
3846 SetUpCrasAudioHandler(audio_nodes); | |
3847 | |
3848 // Verify the audio devices size. | |
3849 AudioDeviceList audio_devices; | |
3850 cras_audio_handler_->GetAudioDevices(&audio_devices); | |
3851 EXPECT_EQ(audio_nodes.size(), audio_devices.size()); | |
3852 | |
3853 // Verify the mic Jack has been selected as the active input. | |
3854 EXPECT_EQ(kMicJackId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3855 EXPECT_TRUE(cras_audio_handler_->HasDualInternalMic()); | |
3856 | |
3857 // Change the active input to internal mic. | |
3858 cras_audio_handler_->SwitchToFrontOrRearMic(); | |
3859 // Verify the active input has been switched to front mic. | |
3860 EXPECT_EQ(kFrontMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3861 | |
3862 // Start the front facing camera. | |
3863 StartFrontFacingCamera(); | |
3864 // Verify the front mic has been selected as the active input. | |
3865 EXPECT_EQ(kFrontMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3866 | |
3867 // Stop the front facing camera. | |
3868 StopFrontFacingCamera(); | |
3869 // Verify the active input remains as front mic. | |
3870 EXPECT_EQ(kFrontMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3871 } | |
3872 | |
3873 TEST_P(CrasAudioHandlerTest, StartFrontCameraWithoutDualMic) { | |
3874 AudioNodeList audio_nodes = GenerateAudioNodeList({kInternalMic}); | |
3875 SetUpCrasAudioHandler(audio_nodes); | |
3876 | |
3877 // Verify the audio devices size. | |
3878 AudioDeviceList audio_devices; | |
3879 cras_audio_handler_->GetAudioDevices(&audio_devices); | |
3880 EXPECT_EQ(audio_nodes.size(), audio_devices.size()); | |
3881 | |
3882 // Verify the mic Jack has been selected as the active input. | |
3883 EXPECT_EQ(kInternalMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3884 EXPECT_FALSE(cras_audio_handler_->HasDualInternalMic()); | |
3885 | |
3886 // Start the front facing camera. | |
3887 StartFrontFacingCamera(); | |
3888 // Verify the internal mic has been selected as the active input. | |
3889 EXPECT_EQ(kInternalMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3890 | |
3891 // Stop the front facing camera. | |
3892 StopFrontFacingCamera(); | |
3893 // Verify the active input remains as interanl mic. | |
3894 EXPECT_EQ(kInternalMicId, cras_audio_handler_->GetPrimaryActiveInputNode()); | |
3895 } | |
3896 | |
3683 } // namespace chromeos | 3897 } // namespace chromeos |
OLD | NEW |