diff options
-rw-r--r-- | src/android/AudioPlayer_to_android.cpp | 21 | ||||
-rw-r--r-- | src/android/AudioRecorder_to_android.cpp | 21 | ||||
-rw-r--r-- | src/itf/IAndroidConfiguration.c | 26 |
3 files changed, 55 insertions, 13 deletions
diff --git a/src/android/AudioPlayer_to_android.cpp b/src/android/AudioPlayer_to_android.cpp index 2069a0b..685b54a 100644 --- a/src/android/AudioPlayer_to_android.cpp +++ b/src/android/AudioPlayer_to_android.cpp @@ -22,6 +22,8 @@ #include "android/include/AacBqToPcmCbRenderer.h" #include "android/channels.h" +#include <android_runtime/AndroidRuntime.h> + #include <fcntl.h> #include <sys/stat.h> @@ -1519,7 +1521,26 @@ SLresult android_audioPlayer_realize(CAudioPlayer *pAudioPlayer, SLboolean async // This use case does not have a separate "prepare" step pAudioPlayer->mAndroidObjState = ANDROID_READY; + + // If there is a JavaAudioRoutingProxy associated with this player, hook it up... + JNIEnv* j_env = NULL; + jclass clsAudioTrack = NULL; + jmethodID midRoutingProxy_connect = NULL; + if (pAudioPlayer->mAndroidConfiguration.mRoutingProxy != NULL && + (j_env = android::AndroidRuntime::getJNIEnv()) != NULL && + (clsAudioTrack = j_env->FindClass("android/media/AudioTrack")) != NULL && + (midRoutingProxy_connect = + j_env->GetMethodID(clsAudioTrack, "deferred_connect", "(J)V")) != NULL) { + j_env->ExceptionClear(); + j_env->CallVoidMethod(pAudioPlayer->mAndroidConfiguration.mRoutingProxy, + midRoutingProxy_connect, + pAudioPlayer->mAudioTrack.get()); + if (j_env->ExceptionCheck()) { + SL_LOGE("Java exception releasing recorder routing object."); + result = SL_RESULT_INTERNAL_ERROR; + } } + } break; //----------------------------------- diff --git a/src/android/AudioRecorder_to_android.cpp b/src/android/AudioRecorder_to_android.cpp index d2c63cd..bf6ecc4 100644 --- a/src/android/AudioRecorder_to_android.cpp +++ b/src/android/AudioRecorder_to_android.cpp @@ -23,6 +23,8 @@ #include <system/audio.h> #include <SLES/OpenSLES_Android.h> +#include <android_runtime/AndroidRuntime.h> + #define KEY_RECORDING_SOURCE_PARAMSIZE sizeof(SLuint32) #define KEY_RECORDING_PRESET_PARAMSIZE sizeof(SLuint32) @@ -481,6 +483,25 @@ SLresult android_audioRecorder_realize(CAudioRecorder* ar, SLboolean async) { ar->mAudioRecord.clear(); } + // If there is a JavaAudioRoutingProxy associated with this recorder, hook it up... + JNIEnv* j_env = NULL; + jclass clsAudioRecord = NULL; + jmethodID midRoutingProxy_connect = NULL; + if (ar->mAndroidConfiguration.mRoutingProxy != NULL && + (j_env = android::AndroidRuntime::getJNIEnv()) != NULL && + (clsAudioRecord = j_env->FindClass("android/media/AudioRecord")) != NULL && + (midRoutingProxy_connect = + j_env->GetMethodID(clsAudioRecord, "deferred_connect", "(J)V")) != NULL) { + j_env->ExceptionClear(); + j_env->CallVoidMethod(ar->mAndroidConfiguration.mRoutingProxy, + midRoutingProxy_connect, + ar->mAudioRecord.get()); + if (j_env->ExceptionCheck()) { + SL_LOGE("Java exception releasing recorder routing object."); + result = SL_RESULT_INTERNAL_ERROR; + } + } + return result; } diff --git a/src/itf/IAndroidConfiguration.c b/src/itf/IAndroidConfiguration.c index 9b2dd8e..bc0b666 100644 --- a/src/itf/IAndroidConfiguration.c +++ b/src/itf/IAndroidConfiguration.c @@ -115,19 +115,19 @@ static SLresult ValidatePlayerConfig(IAndroidConfiguration* iConfig) { switch (player->mAndroidObjType) { case AUDIOPLAYER_FROM_PCM_BUFFERQUEUE: - if (player->mObject.mState != SL_OBJECT_STATE_REALIZED) { - // Make sure the player has been realized. - result = SL_RESULT_PRECONDITIONS_VIOLATED; - SL_LOGE("Error creating routing object - Player not realized."); - } else { - android::AudioTrack* pAudioTrack = player->mAudioTrack.get(); - if (pAudioTrack == NULL) { - result = SL_RESULT_INTERNAL_ERROR; - SL_LOGE("Error creating routing object - Couldn't get AudioTrack."); - } else { - result = SL_RESULT_SUCCESS; - } - } +// if (player->mObject.mState != SL_OBJECT_STATE_REALIZED) { +// // Make sure the player has been realized. +// result = SL_RESULT_PRECONDITIONS_VIOLATED; +// SL_LOGE("Error creating routing object - Player not realized."); +// } else { +// android::AudioTrack* pAudioTrack = player->mAudioTrack.get(); +// if (pAudioTrack == NULL) { +// result = SL_RESULT_INTERNAL_ERROR; +// SL_LOGE("Error creating routing object - Couldn't get AudioTrack."); +// } else { + result = SL_RESULT_SUCCESS; +// } +// } break; default: |