Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 |
| 11 #include <memory> | 11 #include <memory> |
| 12 #include <SLES/OpenSLES_Android.h> | |
| 12 | 13 |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "webrtc/base/arraysize.h" | |
| 14 #include "webrtc/base/format_macros.h" | 16 #include "webrtc/base/format_macros.h" |
| 15 #include "webrtc/modules/audio_device/android/build_info.h" | 17 #include "webrtc/modules/audio_device/android/build_info.h" |
| 16 #include "webrtc/modules/audio_device/android/audio_manager.h" | 18 #include "webrtc/modules/audio_device/android/audio_manager.h" |
| 17 #include "webrtc/modules/audio_device/android/ensure_initialized.h" | 19 #include "webrtc/modules/audio_device/android/ensure_initialized.h" |
| 18 | 20 |
| 19 #define PRINT(...) fprintf(stderr, __VA_ARGS__); | 21 #define PRINT(...) fprintf(stderr, __VA_ARGS__); |
| 20 | 22 |
| 21 namespace webrtc { | 23 namespace webrtc { |
| 22 | 24 |
| 23 static const char kTag[] = " "; | 25 static const char kTag[] = " "; |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 37 AudioManager* audio_manager() const { return audio_manager_.get(); } | 39 AudioManager* audio_manager() const { return audio_manager_.get(); } |
| 38 | 40 |
| 39 // A valid audio layer must always be set before calling Init(), hence we | 41 // A valid audio layer must always be set before calling Init(), hence we |
| 40 // might as well make it a part of the test fixture. | 42 // might as well make it a part of the test fixture. |
| 41 void SetActiveAudioLayer() { | 43 void SetActiveAudioLayer() { |
| 42 EXPECT_EQ(0, audio_manager()->GetDelayEstimateInMilliseconds()); | 44 EXPECT_EQ(0, audio_manager()->GetDelayEstimateInMilliseconds()); |
| 43 audio_manager()->SetActiveAudioLayer(AudioDeviceModule::kAndroidJavaAudio); | 45 audio_manager()->SetActiveAudioLayer(AudioDeviceModule::kAndroidJavaAudio); |
| 44 EXPECT_NE(0, audio_manager()->GetDelayEstimateInMilliseconds()); | 46 EXPECT_NE(0, audio_manager()->GetDelayEstimateInMilliseconds()); |
| 45 } | 47 } |
| 46 | 48 |
| 49 // One way to ensure that the engine object is valid is to create an | |
| 50 // SL Engine interface since it exposes creation methods of all the OpenSL ES | |
| 51 // object types and it is only supported on the engine object. This method | |
| 52 // also verifies that the engine interface supports at least one interface. | |
| 53 // Note that, the test below is not a full test of the SLEngineItf object | |
| 54 // but only a simple sanity test to check that the global engine object is OK. | |
| 55 bool SLEngineIsValid(SLObjectItf engine_object) { | |
|
magjed_webrtc
2016/05/31 11:24:07
If you return a bool, you will not know why SLEngi
henrika_webrtc
2016/05/31 12:04:03
Thanks. Used the second approach ;-)
| |
| 56 if (engine_object == nullptr) | |
| 57 return false; | |
| 58 // Get the SL Engine interface which is exposed by the engine object. | |
| 59 SLEngineItf engine; | |
| 60 SLresult result = | |
| 61 (*engine_object)->GetInterface(engine_object, SL_IID_ENGINE, &engine); | |
| 62 if (result != SL_RESULT_SUCCESS) | |
| 63 return false; | |
| 64 // Ensure that the SL Engine interface exposes at least one interface. | |
| 65 SLuint32 object_id = SL_OBJECTID_ENGINE; | |
| 66 SLuint32 num_supported_interfaces = 0; | |
| 67 result = (*engine)->QueryNumSupportedInterfaces(engine, object_id, | |
| 68 &num_supported_interfaces); | |
| 69 return (result == SL_RESULT_SUCCESS && num_supported_interfaces >= 1); | |
| 70 } | |
| 71 | |
| 47 std::unique_ptr<AudioManager> audio_manager_; | 72 std::unique_ptr<AudioManager> audio_manager_; |
| 48 AudioParameters playout_parameters_; | 73 AudioParameters playout_parameters_; |
| 49 AudioParameters record_parameters_; | 74 AudioParameters record_parameters_; |
| 50 }; | 75 }; |
| 51 | 76 |
| 52 TEST_F(AudioManagerTest, ConstructDestruct) { | 77 TEST_F(AudioManagerTest, ConstructDestruct) { |
| 53 } | 78 } |
| 54 | 79 |
| 80 // It should not be possible to create an OpenSL engine object if Java based | |
| 81 // audio is requested in both directions. | |
| 82 TEST_F(AudioManagerTest, GetOpenSLEngineShouldFailForJavaAudioLayer) { | |
| 83 audio_manager()->SetActiveAudioLayer(AudioDeviceModule::kAndroidJavaAudio); | |
| 84 SLObjectItf engine_object = audio_manager()->GetOpenSLEngine(); | |
| 85 EXPECT_EQ(nullptr, engine_object); | |
| 86 } | |
| 87 | |
| 88 // It should be possible to create an OpenSL engine object if OpenSL ES based | |
| 89 // audio is requested in any direction. | |
| 90 TEST_F(AudioManagerTest, GetOpenSLEngineShouldSucceedForOpenSLESAudioLayer) { | |
| 91 // List of supported audio layers that uses OpenSL ES audio. | |
| 92 const AudioDeviceModule::AudioLayer opensles_audio[] = { | |
| 93 AudioDeviceModule::kAndroidOpenSLESAudio, | |
| 94 AudioDeviceModule::kAndroidJavaInputAndOpenSLESOutputAudio}; | |
| 95 // Verify that the global (singleton) OpenSL Engine can be acquired for all | |
| 96 // audio layes that uses OpenSL ES. Note that the engine is only created once. | |
| 97 for (size_t i = 0; i < arraysize(opensles_audio); ++i) { | |
|
magjed_webrtc
2016/05/31 11:24:07
nit: Use for-each loop instead, i.e.
for (const Au
henrika_webrtc
2016/05/31 12:04:03
Thanks, done ;-)
| |
| 98 audio_manager()->SetActiveAudioLayer(opensles_audio[i]); | |
| 99 SLObjectItf engine_object = audio_manager()->GetOpenSLEngine(); | |
| 100 EXPECT_NE(nullptr, engine_object); | |
| 101 // Perform a simple sanity check of the created engine object. | |
| 102 EXPECT_TRUE(SLEngineIsValid(engine_object)); | |
| 103 } | |
| 104 } | |
| 105 | |
| 55 TEST_F(AudioManagerTest, InitClose) { | 106 TEST_F(AudioManagerTest, InitClose) { |
| 56 EXPECT_TRUE(audio_manager()->Init()); | 107 EXPECT_TRUE(audio_manager()->Init()); |
| 57 EXPECT_TRUE(audio_manager()->Close()); | 108 EXPECT_TRUE(audio_manager()->Close()); |
| 58 } | 109 } |
| 59 | 110 |
| 60 TEST_F(AudioManagerTest, IsAcousticEchoCancelerSupported) { | 111 TEST_F(AudioManagerTest, IsAcousticEchoCancelerSupported) { |
| 61 PRINT("%sAcoustic Echo Canceler support: %s\n", kTag, | 112 PRINT("%sAcoustic Echo Canceler support: %s\n", kTag, |
| 62 audio_manager()->IsAcousticEchoCancelerSupported() ? "Yes" : "No"); | 113 audio_manager()->IsAcousticEchoCancelerSupported() ? "Yes" : "No"); |
| 63 } | 114 } |
| 64 | 115 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 151 params.frames_per_10ms_buffer()); | 202 params.frames_per_10ms_buffer()); |
| 152 EXPECT_EQ(kBytesPerFrame, params.GetBytesPerFrame()); | 203 EXPECT_EQ(kBytesPerFrame, params.GetBytesPerFrame()); |
| 153 EXPECT_EQ(kBytesPerFrame * kFramesPerBuffer, params.GetBytesPerBuffer()); | 204 EXPECT_EQ(kBytesPerFrame * kFramesPerBuffer, params.GetBytesPerBuffer()); |
| 154 EXPECT_EQ(kBytesPerFrame * kFramesPer10msBuffer, | 205 EXPECT_EQ(kBytesPerFrame * kFramesPer10msBuffer, |
| 155 params.GetBytesPer10msBuffer()); | 206 params.GetBytesPer10msBuffer()); |
| 156 EXPECT_EQ(kBufferSizeInMs, params.GetBufferSizeInMilliseconds()); | 207 EXPECT_EQ(kBufferSizeInMs, params.GetBufferSizeInMilliseconds()); |
| 157 } | 208 } |
| 158 | 209 |
| 159 } // namespace webrtc | 210 } // namespace webrtc |
| 160 | 211 |
| OLD | NEW |