release AudioTrack after each play
- Otherwise, resource leak happens in audioflinger which causes allocation failure when all tests are run.
- may be the cause for 5939203
Change-Id: I22420aa7effe610c372103ff29df5b1289ec3c08
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/Utils.java b/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/Utils.java
index 704b1df..f2019c2 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/Utils.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/Utils.java
@@ -316,17 +316,17 @@
return data.length / AudioQualityVerifierActivity.BYTES_PER_SAMPLE;
}
- public static void playRawFile(String filename) {
+ public static AudioTrack playRawFile(String filename) {
byte[] data = readFile(filename);
if (data == null) {
Log.e(TAG, "Cannot read " + filename);
- return;
+ return null;
}
- playRaw(data);
+ return playRaw(data);
}
- public static void playStim(Context context, int stimNum) {
- Utils.playRaw(getStim(context, stimNum));
+ public static AudioTrack playStim(Context context, int stimNum) {
+ return Utils.playRaw(getStim(context, stimNum));
}
public static byte[] getStim(Context context, int stimNum) {
@@ -337,13 +337,15 @@
return AudioAssets.getPinkNoise(context, ampl, duration);
}
- public static void playRaw(byte[] data) {
+ public static AudioTrack playRaw(byte[] data) {
Log.i(TAG, "Playing " + data.length + " bytes of pre-recorded audio");
AudioTrack at = new AudioTrack(AudioQualityVerifierActivity.PLAYBACK_STREAM, AudioQualityVerifierActivity.SAMPLE_RATE,
AudioFormat.CHANNEL_OUT_MONO, AudioQualityVerifierActivity.AUDIO_FORMAT,
data.length, AudioTrack.MODE_STREAM);
writeAudio(at, data);
at.play();
+
+ return at;
}
/**
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/experiments/LoopbackExperiment.java b/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/experiments/LoopbackExperiment.java
index 16039cb..109fdfe 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/experiments/LoopbackExperiment.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/experiments/LoopbackExperiment.java
@@ -24,6 +24,7 @@
import android.content.Context;
import android.media.AudioFormat;
import android.media.AudioRecord;
+import android.media.AudioTrack;
import android.media.MediaRecorder;
import android.util.Log;
@@ -72,13 +73,15 @@
mRecorder.start();
Utils.delay(END_DELAY_MS);
- Utils.playRaw(playbackData);
+ AudioTrack track = Utils.playRaw(playbackData);
int timeout = duration + 2 * END_DELAY_MS;
try {
mRecorder.join(timeout);
} catch (InterruptedException e) {}
+ track.stop();
+ track.release();
return recordedData;
}