iOS audio session isInterrupted flag does not get reset correctly:
BUG=webrtc:7605 Review-Url: https://codereview.webrtc.org/2872953002 Cr-Commit-Position: refs/heads/master@{#18072}
This commit is contained in:
parent
d277a7ccce
commit
5171a7f58c
@ -174,6 +174,7 @@ rtc_static_library("audio_device") {
|
||||
}
|
||||
if (is_ios) {
|
||||
public_deps = [
|
||||
"../../base:gtest_prod",
|
||||
"../../base:rtc_base",
|
||||
"../../sdk:rtc_sdk_common_objc",
|
||||
]
|
||||
@ -298,7 +299,7 @@ if (rtc_include_tests) {
|
||||
if (is_ios) {
|
||||
sources += [ "ios/objc/RTCAudioSessionTest.mm" ]
|
||||
if (target_cpu != "x64") {
|
||||
sources += [ "ios/audio_device_unittest_ios.cc" ]
|
||||
sources += [ "ios/audio_device_unittest_ios.mm" ]
|
||||
}
|
||||
deps += [ "//third_party/ocmock" ]
|
||||
}
|
||||
|
||||
@ -14,6 +14,7 @@
|
||||
#include <memory>
|
||||
|
||||
#include "WebRTC/RTCMacros.h"
|
||||
#include "webrtc/base/gtest_prod_util.h"
|
||||
#include "webrtc/base/thread.h"
|
||||
#include "webrtc/base/thread_checker.h"
|
||||
#include "webrtc/modules/audio_device/audio_device_generic.h"
|
||||
@ -292,6 +293,9 @@ class AudioDeviceIOS : public AudioDeviceGeneric,
|
||||
|
||||
// Set to true if we've activated the audio session.
|
||||
bool has_configured_session_;
|
||||
|
||||
// Exposes private members for testing purposes only.
|
||||
FRIEND_TEST_ALL_PREFIXES(AudioDeviceTest, testInterruptedAudioSession);
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
@ -797,6 +797,7 @@ bool AudioDeviceIOS::InitPlayOrRecord() {
|
||||
RTCAudioSession* session = [RTCAudioSession sharedInstance];
|
||||
// Subscribe to audio session events.
|
||||
[session pushDelegate:audio_session_observer_];
|
||||
is_interrupted_ = session.isInterrupted ? true : false;
|
||||
|
||||
// Lock the session to make configuration changes.
|
||||
[session lockForConfiguration];
|
||||
|
||||
@ -32,6 +32,9 @@
|
||||
#include "webrtc/test/gtest.h"
|
||||
#include "webrtc/test/testsupport/fileutils.h"
|
||||
|
||||
#import "webrtc/modules/audio_device/ios/objc/RTCAudioSession.h"
|
||||
#import "webrtc/modules/audio_device/ios/objc/RTCAudioSession+Private.h"
|
||||
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
using ::testing::_;
|
||||
@ -822,4 +825,36 @@ TEST_F(AudioDeviceTest, DISABLED_MeasureLoopbackLatency) {
|
||||
latency_audio_stream->PrintResults();
|
||||
}
|
||||
|
||||
TEST_F(AudioDeviceTest, testInterruptedAudioSession) {
|
||||
RTCAudioSession *session = [RTCAudioSession sharedInstance];
|
||||
std::unique_ptr<webrtc::AudioDeviceIOS> audio_device;
|
||||
audio_device.reset(new webrtc::AudioDeviceIOS());
|
||||
std::unique_ptr<webrtc::AudioDeviceBuffer> audio_buffer;
|
||||
audio_buffer.reset(new webrtc::AudioDeviceBuffer());
|
||||
audio_device->AttachAudioBuffer(audio_buffer.get());
|
||||
audio_device->Init();
|
||||
audio_device->InitPlayout();
|
||||
// Force interruption.
|
||||
[session notifyDidBeginInterruption];
|
||||
|
||||
// Wait for notification to propagate.
|
||||
rtc::MessageQueueManager::ProcessAllMessageQueues();
|
||||
EXPECT_TRUE(audio_device->is_interrupted_);
|
||||
|
||||
// Force it for testing.
|
||||
audio_device->playing_ = false;
|
||||
audio_device->ShutdownPlayOrRecord();
|
||||
// Force it for testing.
|
||||
audio_device->audio_is_initialized_ = false;
|
||||
|
||||
[session notifyDidEndInterruptionWithShouldResumeSession:YES];
|
||||
// Wait for notification to propagate.
|
||||
rtc::MessageQueueManager::ProcessAllMessageQueues();
|
||||
EXPECT_TRUE(audio_device->is_interrupted_);
|
||||
|
||||
audio_device->Init();
|
||||
audio_device->InitPlayout();
|
||||
EXPECT_FALSE(audio_device->is_interrupted_);
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
Loading…
x
Reference in New Issue
Block a user