summaryrefslogtreecommitdiffstats
path: root/core/jni/android_media_AudioRecord.cpp
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2011-06-18 10:34:05 -0700
committerEric Laurent <elaurent@google.com>2011-07-18 09:43:23 -0700
commit44ff4cd8be50768d5bd471bc6c034acefa0b59ca (patch)
tree6a6e1e6b9060adb7e8a2c0d8eff397fca6ad5b3a /core/jni/android_media_AudioRecord.cpp
parent464d5b3da21c84ba13dc69c611d40f6bed49badb (diff)
downloadframeworks_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.cpp31
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},