diff options
| author | Eric Laurent <elaurent@google.com> | 2016-05-23 12:41:50 -0700 |
|---|---|---|
| committer | Eric Laurent <elaurent@google.com> | 2016-05-23 17:36:43 -0700 |
| commit | 219de73da2a986ddcbfbc593c4e4e01c858ce245 (patch) | |
| tree | 4f71aeb7df83328a238e835ef30af69396727ab5 /core | |
| parent | a56e732c01f10ebd27185a66ee4330f50c8cd57b (diff) | |
Fix AudioTrack and AudioRecord documentation
Improve documentation for error codes returned by
AudioTrack.write() and AudioRecord.read() methods.
Fix native to JAVA error code conversion in JNI.
Bug: 28906466
Change-Id: I4d48b1d428834b7a39a14e2d81b6c164696817a8
Diffstat (limited to 'core')
| -rw-r--r-- | core/jni/android_media_AudioRecord.cpp | 16 | ||||
| -rw-r--r-- | core/jni/android_media_AudioTrack.cpp | 17 |
2 files changed, 20 insertions, 13 deletions
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp index 1bc4285a23d7..1fc08eddb721 100644 --- a/core/jni/android_media_AudioRecord.cpp +++ b/core/jni/android_media_AudioRecord.cpp @@ -479,17 +479,13 @@ void envReleaseArrayElements(JNIEnv *env, jfloatArray array, jfloat *elems, jint static inline jint interpretReadSizeError(ssize_t readSize) { - ALOGE_IF(readSize != WOULD_BLOCK, "Error %zd during AudioRecord native read", readSize); - switch (readSize) { - case WOULD_BLOCK: + if (readSize == WOULD_BLOCK) { return (jint)0; - case BAD_VALUE: - return (jint)AUDIO_JAVA_BAD_VALUE; - default: - // may be possible for other errors such as - // NO_INIT to happen if restoreRecord_l fails. - case INVALID_OPERATION: - return (jint)AUDIO_JAVA_INVALID_OPERATION; + } else if (readSize == NO_INIT) { + return AUDIO_JAVA_DEAD_OBJECT; + } else { + ALOGE("Error %zd during AudioRecord native read", readSize); + return nativeToJavaStatus(readSize); } } diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp index 024c21de4a50..982a1f88d87a 100644 --- a/core/jni/android_media_AudioTrack.cpp +++ b/core/jni/android_media_AudioTrack.cpp @@ -606,6 +606,18 @@ void envReleaseArrayElements(JNIEnv *env, jfloatArray array, jfloat *elems, jint env->ReleaseFloatArrayElements(array, elems, mode); } +static inline +jint interpretWriteSizeError(ssize_t writeSize) { + if (writeSize == WOULD_BLOCK) { + return (jint)0; + } else if (writeSize == NO_INIT) { + return AUDIO_JAVA_DEAD_OBJECT; + } else { + ALOGE("Error %zd during AudioTrack native read", writeSize); + return nativeToJavaStatus(writeSize); + } +} + // ---------------------------------------------------------------------------- template <typename T> static jint writeToTrack(const sp<AudioTrack>& track, jint audioFormat, const T *data, @@ -628,11 +640,10 @@ static jint writeToTrack(const sp<AudioTrack>& track, jint audioFormat, const T memcpy(track->sharedBuffer()->pointer(), data + offsetInSamples, sizeInBytes); written = sizeInBytes; } - if (written > 0) { + if (written >= 0) { return written / sizeof(T); } - // for compatibility, error codes pass through unchanged - return written; + return interpretWriteSizeError(written); } // ---------------------------------------------------------------------------- |
