diff options
author | Eric Laurent <elaurent@google.com> | 2011-06-18 10:34:05 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2011-07-18 09:43:23 -0700 |
commit | 44ff4cd8be50768d5bd471bc6c034acefa0b59ca (patch) | |
tree | 6a6e1e6b9060adb7e8a2c0d8eff397fca6ad5b3a /core/jni/android_media_AudioRecord.cpp | |
parent | 464d5b3da21c84ba13dc69c611d40f6bed49badb (diff) | |
download | frameworks_base-44ff4cd8be50768d5bd471bc6c034acefa0b59ca.zip frameworks_base-44ff4cd8be50768d5bd471bc6c034acefa0b59ca.tar.gz frameworks_base-44ff4cd8be50768d5bd471bc6c034acefa0b59ca.tar.bz2 |
AudioRecord JAVA: expose audio session Id
Added getAudioSessionId() method to AudioRecord class so that applications can
retrieve the AudioRecord's session ID and attach audio pre processes.
Change-Id: I1914770f0e54d97c9aef6a9eb36fff69b6d31552
Diffstat (limited to 'core/jni/android_media_AudioRecord.cpp')
-rw-r--r-- | core/jni/android_media_AudioRecord.cpp | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp index 50d9ca1..9be3779 100644 --- a/core/jni/android_media_AudioRecord.cpp +++ b/core/jni/android_media_AudioRecord.cpp @@ -127,7 +127,7 @@ static void recorderCallback(int event, void* user, void *info) { static int android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, jint source, jint sampleRateInHertz, jint channels, - jint audioFormat, jint buffSizeInBytes) + jint audioFormat, jint buffSizeInBytes, jintArray jSession) { //LOGV(">> Entering android_media_AudioRecord_setup"); //LOGV("sampleRate=%d, audioFormat=%d, channels=%x, buffSizeInBytes=%d", @@ -162,6 +162,20 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, return AUDIORECORD_ERROR_SETUP_INVALIDSOURCE; } + if (jSession == NULL) { + LOGE("Error creating AudioRecord: invalid session ID pointer"); + return AUDIORECORD_ERROR; + } + + jint* nSession = (jint *) env->GetPrimitiveArrayCritical(jSession, NULL); + if (nSession == NULL) { + LOGE("Error creating AudioRecord: Error retrieving session id pointer"); + return AUDIORECORD_ERROR; + } + int sessionId = nSession[0]; + env->ReleasePrimitiveArrayCritical(jSession, nSession, 0); + nSession = NULL; + audiorecord_callback_cookie *lpCallbackData = NULL; AudioRecord* lpRecorder = NULL; @@ -193,13 +207,24 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, recorderCallback,// callback_t lpCallbackData,// void* user 0, // notificationFrames, - true); // threadCanCallJava) + true, // threadCanCallJava) + sessionId); if(lpRecorder->initCheck() != NO_ERROR) { LOGE("Error creating AudioRecord instance: initialization check failed."); goto native_init_failure; } + nSession = (jint *) env->GetPrimitiveArrayCritical(jSession, NULL); + if (nSession == NULL) { + LOGE("Error creating AudioRecord: Error retrieving session id pointer"); + goto native_init_failure; + } + // read the audio session ID back from AudioTrack in case a new session was created during set() + nSession[0] = lpRecorder->getSessionId(); + env->ReleasePrimitiveArrayCritical(jSession, nSession, 0); + nSession = NULL; + // save our newly created C++ AudioRecord in the "nativeRecorderInJavaObj" field // of the Java object env->SetIntField(thiz, javaAudioRecordFields.nativeRecorderInJavaObj, (int)lpRecorder); @@ -485,7 +510,7 @@ static JNINativeMethod gMethods[] = { // name, signature, funcPtr {"native_start", "()I", (void *)android_media_AudioRecord_start}, {"native_stop", "()V", (void *)android_media_AudioRecord_stop}, - {"native_setup", "(Ljava/lang/Object;IIIII)I", + {"native_setup", "(Ljava/lang/Object;IIIII[I)I", (void *)android_media_AudioRecord_setup}, {"native_finalize", "()V", (void *)android_media_AudioRecord_finalize}, {"native_release", "()V", (void *)android_media_AudioRecord_release}, |