Merge stage-aosp-master into pi-dev-plus-aosp
am: 50af6ca0bc

Change-Id: Ia57643ca6ba1aa70eec16c001f835b6ea236c6db
diff --git a/src/Android.bp b/src/Android.bp
index 7a9187b..b97b66d 100644
--- a/src/Android.bp
+++ b/src/Android.bp
@@ -86,6 +86,10 @@
         "-Werror",
     ],
 
+    ldflags: [
+        "-Wl,--exclude-libs,ALL",
+    ],
+
     product_variables: {
         platform_sdk_version: {
             // API level
@@ -211,14 +215,11 @@
         "libutils",
         "libmedia",
         "libmedia_omx",
-        "libmediaextractor",
         "libaudioclient",
         "libaudiomanager",
         "libbinder",
         "libstagefright",
         "libstagefright_foundation",
-        "libcutils",
-        "libnativewindow",
         "libgui",
         "libdl",
         "libandroid_runtime",
diff --git a/src/android/AudioPlayer_to_android.cpp b/src/android/AudioPlayer_to_android.cpp
index de27cae..d8940b8 100644
--- a/src/android/AudioPlayer_to_android.cpp
+++ b/src/android/AudioPlayer_to_android.cpp
@@ -1697,6 +1697,9 @@
                 pAudioPlayer->mSessionId);
         android::status_t status = pat->initCheck();
         if (status != android::NO_ERROR) {
+            // AudioTracks are meant to be refcounted, so their dtor is protected.
+            static_cast<void>(android::sp<android::AudioTrack>(pat));
+
             SL_LOGE("AudioTrack::initCheck status %u", status);
             // FIXME should return a more specific result depending on status
             result = SL_RESULT_CONTENT_UNSUPPORTED;
diff --git a/src/android/android_AudioSfDecoder.h b/src/android/android_AudioSfDecoder.h
index d62f0ed..0043539 100644
--- a/src/android/android_AudioSfDecoder.h
+++ b/src/android/android_AudioSfDecoder.h
@@ -19,7 +19,6 @@
 
 #include <media/DataSource.h>
 #include <media/MediaSource.h>
-#include <media/MediaExtractor.h>
 #include <media/stagefright/FileSource.h>
 #include <media/stagefright/MediaDefs.h>
 #include <media/stagefright/MetaData.h>
diff --git a/src/itf/IAndroidConfiguration.cpp b/src/itf/IAndroidConfiguration.cpp
index 7bdb235..412ef70 100644
--- a/src/itf/IAndroidConfiguration.cpp
+++ b/src/itf/IAndroidConfiguration.cpp
@@ -23,6 +23,14 @@
 
 #include <android_runtime/AndroidRuntime.h>
 
+extern jmethodID gMidAudioTrackRoutingProxy_ctor;
+extern jmethodID gMidAudioTrackRoutingProxy_release;
+extern jmethodID gMidAudioRecordRoutingProxy_ctor;
+extern jmethodID gMidAudioRecordRoutingProxy_release;
+
+extern jclass gClsAudioTrackRoutingProxy;
+extern jclass gClsAudioRecordRoutingProxy;
+
 static SLresult IAndroidConfiguration_SetConfiguration(SLAndroidConfigurationItf self,
         const SLchar *configKey,
         const void *pConfigValue,
@@ -150,17 +158,11 @@
 
     JNIEnv* j_env = android::AndroidRuntime::getJNIEnv();
 
-    // Get the constructor for (Java) AudioTrackRoutingProxy
-    jclass clsAudioTrackRoutingProxy =
-            j_env->FindClass("android/media/AudioTrackRoutingProxy");
-    jmethodID midAudioTrackRoutingProxy_ctor =
-        j_env->GetMethodID(clsAudioTrackRoutingProxy, "<init>", "(J)V");
-
     j_env->ExceptionClear();
 
     jobject localObjRef =
-        j_env->NewObject(clsAudioTrackRoutingProxy,
-                         midAudioTrackRoutingProxy_ctor,
+        j_env->NewObject(gClsAudioTrackRoutingProxy,
+                         gMidAudioTrackRoutingProxy_ctor,
                          (jlong)pAudioTrack /*audioTrackObjInLong*/);
 
     *proxyObj = j_env->NewGlobalRef(localObjRef);
@@ -226,16 +228,10 @@
 
     JNIEnv* j_env = android::AndroidRuntime::getJNIEnv();
 
-    // Get the constructor for (Java) AudioRecordRoutingProxy
-    jclass clsAudioRecordRoutingProxy =
-            j_env->FindClass("android/media/AudioRecordRoutingProxy");
-    jmethodID midAudioRecordRoutingProxy_ctor =
-        j_env->GetMethodID(clsAudioRecordRoutingProxy, "<init>", "(J)V");
-
     j_env->ExceptionClear();
     jobject localObjRef =
-        j_env->NewObject(clsAudioRecordRoutingProxy,
-                         midAudioRecordRoutingProxy_ctor,
+        j_env->NewObject(gClsAudioRecordRoutingProxy,
+                         gMidAudioRecordRoutingProxy_ctor,
                          (jlong)pAudioRecord /*audioRecordObjInLong*/);
 
     *proxyObj = j_env->NewGlobalRef(localObjRef);
@@ -332,14 +328,8 @@
             {
                 JNIEnv* j_env = android::AndroidRuntime::getJNIEnv();
 
-                // Get the release method for (Java) AudioTrackRoutingProxy
-                jclass clsAudioTrackRoutingProxy =
-                        j_env->FindClass("android/media/AudioTrackRoutingProxy");
-                jmethodID midAudioTrackRoutingProxy_release =
-                    j_env->GetMethodID(clsAudioTrackRoutingProxy, "native_release", "()V");
-
                 j_env->ExceptionClear();
-                j_env->CallVoidMethod(iConfig->mRoutingProxy, midAudioTrackRoutingProxy_release);
+                j_env->CallVoidMethod(iConfig->mRoutingProxy, gMidAudioTrackRoutingProxy_release);
                 if (j_env->ExceptionCheck()) {
                     SL_LOGE("Java exception releasing recorder routing object.");
                     result = SL_RESULT_INTERNAL_ERROR;
@@ -353,14 +343,8 @@
             {
                 JNIEnv* j_env = android::AndroidRuntime::getJNIEnv();
 
-                // Get the release method for (Java) AudioTrackRoutingProxy
-                jclass clsAudioRecordRoutingProxy =
-                        j_env->FindClass("android/media/AudioRecordRoutingProxy");
-                jmethodID midAudioRecordRoutingProxy_release =
-                    j_env->GetMethodID(clsAudioRecordRoutingProxy, "native_release", "()V");
-
                 j_env->ExceptionClear();
-                j_env->CallVoidMethod(iConfig->mRoutingProxy, midAudioRecordRoutingProxy_release);
+                j_env->CallVoidMethod(iConfig->mRoutingProxy, gMidAudioRecordRoutingProxy_release);
                 if (j_env->ExceptionCheck()) {
                     SL_LOGE("Java exception releasing recorder routing object.");
                     result = SL_RESULT_INTERNAL_ERROR;