Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(574)

Side by Side Diff: webrtc/modules/audio_device/android/audio_device_unittest.cc

Issue 2119633004: Adds support for OpenSL ES based audio capture on Android (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 24 matching lines...) Expand all
35 35
36 using std::cout; 36 using std::cout;
37 using std::endl; 37 using std::endl;
38 using ::testing::_; 38 using ::testing::_;
39 using ::testing::AtLeast; 39 using ::testing::AtLeast;
40 using ::testing::Gt; 40 using ::testing::Gt;
41 using ::testing::Invoke; 41 using ::testing::Invoke;
42 using ::testing::NiceMock; 42 using ::testing::NiceMock;
43 using ::testing::NotNull; 43 using ::testing::NotNull;
44 using ::testing::Return; 44 using ::testing::Return;
45 using ::testing::TestWithParam;
46 45
47 // #define ENABLE_DEBUG_PRINTF 46 // #define ENABLE_DEBUG_PRINTF
48 #ifdef ENABLE_DEBUG_PRINTF 47 #ifdef ENABLE_DEBUG_PRINTF
49 #define PRINTD(...) fprintf(stderr, __VA_ARGS__); 48 #define PRINTD(...) fprintf(stderr, __VA_ARGS__);
50 #else 49 #else
51 #define PRINTD(...) ((void)0) 50 #define PRINTD(...) ((void)0)
52 #endif 51 #endif
53 #define PRINT(...) fprintf(stderr, __VA_ARGS__); 52 #define PRINT(...) fprintf(stderr, __VA_ARGS__);
54 53
55 namespace webrtc { 54 namespace webrtc {
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 AudioParameters record_parameters_; 711 AudioParameters record_parameters_;
713 std::unique_ptr<BuildInfo> build_info_; 712 std::unique_ptr<BuildInfo> build_info_;
714 }; 713 };
715 714
716 TEST_F(AudioDeviceTest, ConstructDestruct) { 715 TEST_F(AudioDeviceTest, ConstructDestruct) {
717 // Using the test fixture to create and destruct the audio device module. 716 // Using the test fixture to create and destruct the audio device module.
718 } 717 }
719 718
720 // We always ask for a default audio layer when the ADM is constructed. But the 719 // We always ask for a default audio layer when the ADM is constructed. But the
721 // ADM will then internally set the best suitable combination of audio layers, 720 // ADM will then internally set the best suitable combination of audio layers,
722 // for input and output based on if low-latency output audio in combination 721 // for input and output based on if low-latency output and/or input audio in
723 // with OpenSL ES is supported or not. This test ensures that the correct 722 // combination with OpenSL ES is supported or not. This test ensures that the
724 // selection is done. 723 // correct selection is done.
725 TEST_F(AudioDeviceTest, VerifyDefaultAudioLayer) { 724 TEST_F(AudioDeviceTest, VerifyDefaultAudioLayer) {
726 const AudioDeviceModule::AudioLayer audio_layer = GetActiveAudioLayer(); 725 const AudioDeviceModule::AudioLayer audio_layer = GetActiveAudioLayer();
727 bool low_latency_output = audio_manager()->IsLowLatencyPlayoutSupported(); 726 bool low_latency_output = audio_manager()->IsLowLatencyPlayoutSupported();
728 AudioDeviceModule::AudioLayer expected_audio_layer = low_latency_output ? 727 bool low_latency_input = audio_manager()->IsLowLatencyRecordSupported();
729 AudioDeviceModule::kAndroidJavaInputAndOpenSLESOutputAudio : 728 AudioDeviceModule::AudioLayer expected_audio_layer;
730 AudioDeviceModule::kAndroidJavaAudio; 729 if (low_latency_output && low_latency_input)
tommi 2016/09/15 09:34:12 use {} since lines 732-733 wrap
henrika_webrtc 2016/09/16 13:30:47 Done.
730 expected_audio_layer = AudioDeviceModule::kAndroidOpenSLESAudio;
731 else if (low_latency_output && !low_latency_input)
732 expected_audio_layer =
733 AudioDeviceModule::kAndroidJavaInputAndOpenSLESOutputAudio;
734 else
735 expected_audio_layer = AudioDeviceModule::kAndroidJavaAudio;
731 EXPECT_EQ(expected_audio_layer, audio_layer); 736 EXPECT_EQ(expected_audio_layer, audio_layer);
732 } 737 }
733 738
734 // Verify that it is possible to explicitly create the two types of supported 739 // Verify that it is possible to explicitly create the two types of supported
735 // ADMs. These two tests overrides the default selection of native audio layer 740 // ADMs. These two tests overrides the default selection of native audio layer
736 // by ignoring if the device supports low-latency output or not. 741 // by ignoring if the device supports low-latency output or not.
737 TEST_F(AudioDeviceTest, CorrectAudioLayerIsUsedForCombinedJavaOpenSLCombo) { 742 TEST_F(AudioDeviceTest, CorrectAudioLayerIsUsedForCombinedJavaOpenSLCombo) {
738 AudioDeviceModule::AudioLayer expected_layer = 743 AudioDeviceModule::AudioLayer expected_layer =
739 AudioDeviceModule::kAndroidJavaInputAndOpenSLESOutputAudio; 744 AudioDeviceModule::kAndroidJavaInputAndOpenSLESOutputAudio;
740 AudioDeviceModule::AudioLayer active_layer = TestActiveAudioLayer( 745 AudioDeviceModule::AudioLayer active_layer = TestActiveAudioLayer(
741 expected_layer); 746 expected_layer);
742 EXPECT_EQ(expected_layer, active_layer); 747 EXPECT_EQ(expected_layer, active_layer);
743 } 748 }
744 749
745 TEST_F(AudioDeviceTest, CorrectAudioLayerIsUsedForJavaInBothDirections) { 750 TEST_F(AudioDeviceTest, CorrectAudioLayerIsUsedForJavaInBothDirections) {
746 AudioDeviceModule::AudioLayer expected_layer = 751 AudioDeviceModule::AudioLayer expected_layer =
747 AudioDeviceModule::kAndroidJavaAudio; 752 AudioDeviceModule::kAndroidJavaAudio;
748 AudioDeviceModule::AudioLayer active_layer = TestActiveAudioLayer( 753 AudioDeviceModule::AudioLayer active_layer = TestActiveAudioLayer(
749 expected_layer); 754 expected_layer);
750 EXPECT_EQ(expected_layer, active_layer); 755 EXPECT_EQ(expected_layer, active_layer);
751 } 756 }
752 757
758 TEST_F(AudioDeviceTest, CorrectAudioLayerIsUsedForOpenSLInBothDirections) {
759 AudioDeviceModule::AudioLayer expected_layer =
760 AudioDeviceModule::kAndroidOpenSLESAudio;
761 AudioDeviceModule::AudioLayer active_layer =
762 TestActiveAudioLayer(expected_layer);
763 EXPECT_EQ(expected_layer, active_layer);
764 }
765
753 // The Android ADM supports two different delay reporting modes. One for the 766 // The Android ADM supports two different delay reporting modes. One for the
754 // low-latency output path (in combination with OpenSL ES), and one for the 767 // low-latency output path (in combination with OpenSL ES), and one for the
755 // high-latency output path (Java backends in both directions). These two tests 768 // high-latency output path (Java backends in both directions). These two tests
756 // verifies that the audio manager reports correct delay estimate given the 769 // verifies that the audio manager reports correct delay estimate given the
757 // selected audio layer. Note that, this delay estimate will only be utilized 770 // selected audio layer. Note that, this delay estimate will only be utilized
758 // if the HW AEC is disabled. 771 // if the HW AEC is disabled.
759 TEST_F(AudioDeviceTest, UsesCorrectDelayEstimateForHighLatencyOutputPath) { 772 TEST_F(AudioDeviceTest, UsesCorrectDelayEstimateForHighLatencyOutputPath) {
760 EXPECT_EQ(kHighLatencyModeDelayEstimateInMilliseconds, 773 EXPECT_EQ(kHighLatencyModeDelayEstimateInMilliseconds,
761 TestDelayOnAudioLayer(AudioDeviceModule::kAndroidJavaAudio)); 774 TestDelayOnAudioLayer(AudioDeviceModule::kAndroidJavaAudio));
762 } 775 }
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 TEST_F(AudioDeviceTest, StartStopRecording) { 869 TEST_F(AudioDeviceTest, StartStopRecording) {
857 StartRecording(); 870 StartRecording();
858 StopRecording(); 871 StopRecording();
859 StartRecording(); 872 StartRecording();
860 StopRecording(); 873 StopRecording();
861 } 874 }
862 875
863 // Verify that calling StopPlayout() will leave us in an uninitialized state 876 // Verify that calling StopPlayout() will leave us in an uninitialized state
864 // which will require a new call to InitPlayout(). This test does not call 877 // which will require a new call to InitPlayout(). This test does not call
865 // StartPlayout() while being uninitialized since doing so will hit a 878 // StartPlayout() while being uninitialized since doing so will hit a
866 // RTC_DCHECK. 879 // RTC_DCHECK and death tests are not supported on Android.
867 TEST_F(AudioDeviceTest, StopPlayoutRequiresInitToRestart) { 880 TEST_F(AudioDeviceTest, StopPlayoutRequiresInitToRestart) {
868 EXPECT_EQ(0, audio_device()->InitPlayout()); 881 EXPECT_EQ(0, audio_device()->InitPlayout());
869 EXPECT_EQ(0, audio_device()->StartPlayout()); 882 EXPECT_EQ(0, audio_device()->StartPlayout());
870 EXPECT_EQ(0, audio_device()->StopPlayout()); 883 EXPECT_EQ(0, audio_device()->StopPlayout());
871 EXPECT_FALSE(audio_device()->PlayoutIsInitialized()); 884 EXPECT_FALSE(audio_device()->PlayoutIsInitialized());
872 } 885 }
873 886
887 // Verify that calling StopRecording() will leave us in an uninitialized state
888 // which will require a new call to InitRecording(). This test does not call
889 // StartRecording() while being uninitialized since doing so will hit a
890 // RTC_DCHECK and death tests are not supported on Android.
891 TEST_F(AudioDeviceTest, StopRecordingRequiresInitToRestart) {
892 EXPECT_EQ(0, audio_device()->InitRecording());
893 EXPECT_EQ(0, audio_device()->StartRecording());
894 EXPECT_EQ(0, audio_device()->StopRecording());
895 EXPECT_FALSE(audio_device()->RecordingIsInitialized());
896 }
897
874 // Start playout and verify that the native audio layer starts asking for real 898 // Start playout and verify that the native audio layer starts asking for real
875 // audio samples to play out using the NeedMorePlayData callback. 899 // audio samples to play out using the NeedMorePlayData callback.
876 TEST_F(AudioDeviceTest, StartPlayoutVerifyCallbacks) { 900 TEST_F(AudioDeviceTest, StartPlayoutVerifyCallbacks) {
877 MockAudioTransport mock(kPlayout); 901 MockAudioTransport mock(kPlayout);
878 mock.HandleCallbacks(test_is_done_.get(), nullptr, kNumCallbacks); 902 mock.HandleCallbacks(test_is_done_.get(), nullptr, kNumCallbacks);
879 EXPECT_CALL(mock, NeedMorePlayData(playout_frames_per_10ms_buffer(), 903 EXPECT_CALL(mock, NeedMorePlayData(playout_frames_per_10ms_buffer(),
880 kBytesPerSample, 904 kBytesPerSample,
881 playout_channels(), 905 playout_channels(),
882 playout_sample_rate(), 906 playout_sample_rate(),
883 NotNull(), 907 NotNull(),
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 StopPlayout(); 1051 StopPlayout();
1028 StopRecording(); 1052 StopRecording();
1029 // Verify that the correct number of transmitted impulses are detected. 1053 // Verify that the correct number of transmitted impulses are detected.
1030 EXPECT_EQ(latency_audio_stream->num_latency_values(), 1054 EXPECT_EQ(latency_audio_stream->num_latency_values(),
1031 static_cast<size_t>( 1055 static_cast<size_t>(
1032 kImpulseFrequencyInHz * kMeasureLatencyTimeInSec - 1)); 1056 kImpulseFrequencyInHz * kMeasureLatencyTimeInSec - 1));
1033 latency_audio_stream->PrintResults(); 1057 latency_audio_stream->PrintResults();
1034 } 1058 }
1035 1059
1036 } // namespace webrtc 1060 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698