From d2fb5f510f0b05925b4bb909fb25f1fcbee2544b Mon Sep 17 00:00:00 2001 From: Alex Narest Date: Thu, 2 Jan 2020 15:35:23 +0100 Subject: [PATCH] Fixes WebRtcAudioTrack crash while stopping TBR=henrika@webrtc.org Bug: webrtc:11248 Change-Id: I5b829b5193d2accdfbf1e06c5317a5cd441c48c3 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/163990 Commit-Queue: Alex Narest Commit-Queue: Alex Narest Reviewed-by: Alex Narest Cr-Commit-Position: refs/heads/master@{#30133} --- .../org/webrtc/audio/WebRtcAudioTrack.java | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/sdk/android/src/java/org/webrtc/audio/WebRtcAudioTrack.java b/sdk/android/src/java/org/webrtc/audio/WebRtcAudioTrack.java index 01d22fd4b0..edc9dd179d 100644 --- a/sdk/android/src/java/org/webrtc/audio/WebRtcAudioTrack.java +++ b/sdk/android/src/java/org/webrtc/audio/WebRtcAudioTrack.java @@ -142,20 +142,6 @@ class WebRtcAudioTrack { // counting number of written frames and subtracting the result from // audioTrack.getPlaybackHeadPosition(). } - - // Stops playing the audio data. Since the instance was created in - // MODE_STREAM mode, audio will stop playing after the last buffer that - // was written has been played. - if (audioTrack != null) { - Logging.d(TAG, "Calling AudioTrack.stop..."); - try { - audioTrack.stop(); - Logging.d(TAG, "AudioTrack.stop is done."); - doAudioTrackStateCallback(AUDIO_TRACK_STOP); - } catch (IllegalStateException e) { - Logging.e(TAG, "AudioTrack.stop failed: " + e.getMessage()); - } - } } private int writeBytes(AudioTrack audioTrack, ByteBuffer byteBuffer, int sizeInBytes) { @@ -320,6 +306,16 @@ class WebRtcAudioTrack { } Logging.d(TAG, "AudioTrackThread has now been stopped."); audioThread = null; + if (audioTrack != null) { + Logging.d(TAG, "Calling AudioTrack.stop..."); + try { + audioTrack.stop(); + Logging.d(TAG, "AudioTrack.stop is done."); + doAudioTrackStateCallback(AUDIO_TRACK_STOP); + } catch (IllegalStateException e) { + Logging.e(TAG, "AudioTrack.stop failed: " + e.getMessage()); + } + } releaseAudioResources(); return true; }