From 82e20554cbf8152d67915e3ef764bad8064b6541 Mon Sep 17 00:00:00 2001 From: henrika Date: Fri, 25 Sep 2015 04:26:14 -0700 Subject: [PATCH] Modifies invalid DCHECK in AudioRecordJni::OnCacheDirectBufferAddress() Ensures that we can restart audio recording on Android without hitting a DCHECK. Also adds a symmetric design for the playout side. BUG=webrtc:5000 TEST=modules_unittests --gtest_filter=AudioDevice* Review URL: https://codereview.webrtc.org/1373443003 Cr-Commit-Position: refs/heads/master@{#10072} --- .../audio_device/android/audio_device_unittest.cc | 9 +++++++++ webrtc/modules/audio_device/android/audio_record_jni.cc | 1 + webrtc/modules/audio_device/android/audio_track_jni.cc | 2 ++ 3 files changed, 12 insertions(+) diff --git a/webrtc/modules/audio_device/android/audio_device_unittest.cc b/webrtc/modules/audio_device/android/audio_device_unittest.cc index 087bb2d386..f93763b084 100644 --- a/webrtc/modules/audio_device/android/audio_device_unittest.cc +++ b/webrtc/modules/audio_device/android/audio_device_unittest.cc @@ -831,6 +831,15 @@ TEST_F(AudioDeviceTest, StartStopPlayout) { StopPlayout(); } +// Tests that recording can be initiated, started and stopped. No audio callback +// is registered in this test. +TEST_F(AudioDeviceTest, StartStopRecording) { + StartRecording(); + StopRecording(); + StartRecording(); + StopRecording(); +} + // Verify that calling StopPlayout() will leave us in an uninitialized state // which will require a new call to InitPlayout(). This test does not call // StartPlayout() while being uninitialized since doing so will hit a diff --git a/webrtc/modules/audio_device/android/audio_record_jni.cc b/webrtc/modules/audio_device/android/audio_record_jni.cc index 8f43e4370b..ba3212afc3 100644 --- a/webrtc/modules/audio_device/android/audio_record_jni.cc +++ b/webrtc/modules/audio_device/android/audio_record_jni.cc @@ -175,6 +175,7 @@ int32_t AudioRecordJni::StopRecording() { thread_checker_java_.DetachFromThread(); initialized_ = false; recording_ = false; + direct_buffer_address_= nullptr; return 0; } diff --git a/webrtc/modules/audio_device/android/audio_track_jni.cc b/webrtc/modules/audio_device/android/audio_track_jni.cc index 297916f824..29b21ae998 100644 --- a/webrtc/modules/audio_device/android/audio_track_jni.cc +++ b/webrtc/modules/audio_device/android/audio_track_jni.cc @@ -156,6 +156,7 @@ int32_t AudioTrackJni::StopPlayout() { thread_checker_java_.DetachFromThread(); initialized_ = false; playing_ = false; + direct_buffer_address_ = nullptr; return 0; } @@ -215,6 +216,7 @@ void AudioTrackJni::OnCacheDirectBufferAddress( JNIEnv* env, jobject byte_buffer) { ALOGD("OnCacheDirectBufferAddress"); RTC_DCHECK(thread_checker_.CalledOnValidThread()); + RTC_DCHECK(!direct_buffer_address_); direct_buffer_address_ = env->GetDirectBufferAddress(byte_buffer); jlong capacity = env->GetDirectBufferCapacity(byte_buffer);