From 68d5ebd1da6bd4744314749d4fdbaf216414ea94 Mon Sep 17 00:00:00 2001 From: Glenn Kasten Date: Tue, 12 May 2015 13:17:07 -0700 Subject: [PATCH] Improve error handling for AudioTrack write with PTS Pick up some of the error handling from AudioTrack write ByteBuffer Change-Id: I62f233c2026759dbe57d7e1f48d62babaa49e5b8 --- media/java/android/media/AudioTrack.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java index f76189ca79635..7293c6c0bc043 100644 --- a/media/java/android/media/AudioTrack.java +++ b/media/java/android/media/AudioTrack.java @@ -1990,9 +1990,24 @@ public class AudioTrack * The dead object error code is not returned if some data was successfully transferred. * In this case, the error is returned at the next write(). */ - public int write(ByteBuffer audioData, int sizeInBytes, + public int write(@NonNull ByteBuffer audioData, int sizeInBytes, @WriteMode int writeMode, long timestamp) { + if (mState == STATE_UNINITIALIZED) { + Log.e(TAG, "AudioTrack.write() called in invalid state STATE_UNINITIALIZED"); + return ERROR_INVALID_OPERATION; + } + + if ((writeMode != WRITE_BLOCKING) && (writeMode != WRITE_NON_BLOCKING)) { + Log.e(TAG, "AudioTrack.write() called with invalid blocking mode"); + return ERROR_BAD_VALUE; + } + + if (mDataLoadMode != MODE_STREAM) { + Log.e(TAG, "AudioTrack.write() with timestamp called for non-streaming mode track"); + return ERROR_INVALID_OPERATION; + } + if ((mAttributes.getFlags() & AudioAttributes.FLAG_HW_AV_SYNC) == 0) { Log.d(TAG, "AudioTrack.write() called on a regular AudioTrack. Ignoring pts..."); return write(audioData, sizeInBytes, writeMode);