MediaTranscodingService: Separate jni file into a sperate library.

This is needed when we move MediaTranscodeManager into apex.
Also rework the MediaTranscodeManager test so it could be invoked with
instrument.

Bug: 145628554
Test: MediaTranscodeManagerTest.
Change-Id: If0572af30d3aa7b7189ea0fc89582b83dd0d5d35
diff --git a/media/java/android/media/MediaTranscodeManager.java b/media/java/android/media/MediaTranscodeManager.java
index 2c431b9..5122cbe 100644
--- a/media/java/android/media/MediaTranscodeManager.java
+++ b/media/java/android/media/MediaTranscodeManager.java
@@ -397,7 +397,7 @@
     }
 
     static {
-        System.loadLibrary("media_jni");
+        System.loadLibrary("mediatranscodemanager_jni");
         native_init();
     }
 }
diff --git a/media/jni/Android.bp b/media/jni/Android.bp
index d2294b3..7518496 100644
--- a/media/jni/Android.bp
+++ b/media/jni/Android.bp
@@ -21,7 +21,6 @@
         "android_media_MediaProfiles.cpp",
         "android_media_MediaRecorder.cpp",
         "android_media_MediaSync.cpp",
-        "android_media_MediaTranscodeManager.cpp",
         "android_media_ResampleInputStream.cpp",
         "android_media_Streams.cpp",
         "android_media_SyncParams.cpp",
@@ -166,3 +165,27 @@
         "-Wunreachable-code",
     ],
 }
+
+cc_library_shared {
+    name: "libmediatranscodemanager_jni",
+    srcs: [
+        "android_media_MediaTranscodeManager.cpp",
+    ],
+
+    shared_libs: [
+        "libandroid_runtime",
+        "libcutils",
+        "liblog",
+        "libmedia",
+    ],
+
+    export_include_dirs: ["."],
+
+    cflags: [
+        "-Wall",
+        "-Werror",
+        "-Wno-error=deprecated-declarations",
+        "-Wunused",
+        "-Wunreachable-code",
+    ],
+}
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
index 5cb42a9a..963b650 100644
--- a/media/jni/android_media_MediaPlayer.cpp
+++ b/media/jni/android_media_MediaPlayer.cpp
@@ -1453,7 +1453,6 @@
 extern int register_android_mtp_MtpDatabase(JNIEnv *env);
 extern int register_android_mtp_MtpDevice(JNIEnv *env);
 extern int register_android_mtp_MtpServer(JNIEnv *env);
-extern int register_android_media_MediaTranscodeManager(JNIEnv *env);
 
 jint JNI_OnLoad(JavaVM* vm, void* /* reserved */)
 {
@@ -1566,11 +1565,6 @@
         goto bail;
     }
 
-    if (register_android_media_MediaTranscodeManager(env) < 0) {
-        ALOGE("ERROR: MediaTranscodeManager native registration failed");
-        goto bail;
-    }
-
     /* success -- return valid version number */
     result = JNI_VERSION_1_4;
 
diff --git a/media/jni/android_media_MediaTranscodeManager.cpp b/media/jni/android_media_MediaTranscodeManager.cpp
index 0b4048c..6695f85 100644
--- a/media/jni/android_media_MediaTranscodeManager.cpp
+++ b/media/jni/android_media_MediaTranscodeManager.cpp
@@ -100,3 +100,26 @@
     return AndroidRuntime::registerNativeMethods(env,
                 "android/media/MediaTranscodeManager", gMethods, NELEM(gMethods));
 }
+
+jint JNI_OnLoad(JavaVM* vm, void* /* reserved */)
+{
+    JNIEnv* env = NULL;
+    jint result = -1;
+
+    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
+        ALOGE("ERROR: GetEnv failed\n");
+        return result;
+    }
+    assert(env != NULL);
+
+    if (register_android_media_MediaTranscodeManager(env) < 0) {
+        ALOGE("ERROR: MediaTranscodeManager native registration failed");
+        goto bail;
+    }
+
+    /* success -- return valid version number */
+    result = JNI_VERSION_1_4;
+
+bail:
+    return result;
+}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
index a9dc886..2d1820e 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
@@ -16,27 +16,29 @@
 
 package com.android.mediaframeworktest;
 
+import android.os.Bundle;
+import android.test.InstrumentationTestRunner;
+import android.test.InstrumentationTestSuite;
+
 import com.android.mediaframeworktest.functional.CameraTest;
 import com.android.mediaframeworktest.functional.MediaMetadataTest;
 import com.android.mediaframeworktest.functional.MediaMimeTest;
 import com.android.mediaframeworktest.functional.MediaPlayerInvokeTest;
-import com.android.mediaframeworktest.functional.mediaplayback.MediaPlayerApiTest;
-import com.android.mediaframeworktest.functional.mediarecorder.MediaRecorderTest;
-import com.android.mediaframeworktest.functional.audio.SimTonesTest;
-import com.android.mediaframeworktest.functional.audio.MediaAudioTrackTest;
-import com.android.mediaframeworktest.functional.audio.MediaAudioManagerTest;
+import com.android.mediaframeworktest.functional.MediaTranscodeManagerTest;
 import com.android.mediaframeworktest.functional.audio.MediaAudioEffectTest;
+import com.android.mediaframeworktest.functional.audio.MediaAudioManagerTest;
+import com.android.mediaframeworktest.functional.audio.MediaAudioTrackTest;
 import com.android.mediaframeworktest.functional.audio.MediaBassBoostTest;
 import com.android.mediaframeworktest.functional.audio.MediaEnvReverbTest;
 import com.android.mediaframeworktest.functional.audio.MediaEqualizerTest;
 import com.android.mediaframeworktest.functional.audio.MediaPresetReverbTest;
 import com.android.mediaframeworktest.functional.audio.MediaVirtualizerTest;
 import com.android.mediaframeworktest.functional.audio.MediaVisualizerTest;
-import junit.framework.TestSuite;
+import com.android.mediaframeworktest.functional.audio.SimTonesTest;
+import com.android.mediaframeworktest.functional.mediaplayback.MediaPlayerApiTest;
+import com.android.mediaframeworktest.functional.mediarecorder.MediaRecorderTest;
 
-import android.os.Bundle;
-import android.test.InstrumentationTestRunner;
-import android.test.InstrumentationTestSuite;
+import junit.framework.TestSuite;
 
 
 /**
@@ -69,6 +71,7 @@
         suite.addTestSuite(MediaEnvReverbTest.class);
         suite.addTestSuite(MediaEqualizerTest.class);
         suite.addTestSuite(MediaPresetReverbTest.class);
+        suite.addTestSuite(MediaTranscodeManagerTest.class);
         suite.addTestSuite(MediaVirtualizerTest.class);
         suite.addTestSuite(MediaVisualizerTest.class);
         return suite;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediatranscodemanager/MediaTranscodeManagerTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediatranscodemanager/MediaTranscodeManagerTest.java
index eeda50e..1d2cc44 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediatranscodemanager/MediaTranscodeManagerTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediatranscodemanager/MediaTranscodeManagerTest.java
@@ -14,32 +14,66 @@
  * limitations under the License.
  */
 
-package com.android.mediaframeworktest.functional.mediatranscodemanager;
+package com.android.mediaframeworktest.functional;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import android.content.Context;
 import android.media.MediaTranscodeManager;
+import android.test.ActivityInstrumentationTestCase2;
 import android.util.Log;
 
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
+import com.android.mediaframeworktest.MediaFrameworkTest;
 
 import org.junit.Test;
-import org.junit.runner.RunWith;
 
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 
-@RunWith(AndroidJUnit4.class)
-public class MediaTranscodeManagerTest {
+/*
+ * Functional tests for MediaTranscodeManager in the media framework.
+ *
+ * To run this test suite:
+     make frameworks/base/media/tests/MediaFrameworkTest
+     make mediaframeworktest
+
+     adb install -r out/target/product/dream/data/app/mediaframeworktest.apk
+
+     adb shell am instrument -e class \
+     com.android.mediaframeworktest.functional.MediaTranscodeManagerTest \
+     -w com.android.mediaframeworktest/.MediaFrameworkTestRunner
+ *
+ */
+public class MediaTranscodeManagerTest
+        extends ActivityInstrumentationTestCase2<MediaFrameworkTest>  {
     private static final String TAG = "MediaTranscodeManagerTest";
+    private Context mContext;
+    private MediaTranscodeManager mMediaTranscodeManager = null;
 
     /**  The time to wait for the transcode operation to complete before failing the test. */
     private static final int TRANSCODE_TIMEOUT_SECONDS = 2;
 
+    public MediaTranscodeManagerTest() {
+        super("com.android.MediaTranscodeManagerTest", MediaFrameworkTest.class);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        mContext = getActivity();
+        mMediaTranscodeManager =
+                MediaTranscodeManager.getInstance(mContext);
+        assertNotNull(mMediaTranscodeManager);
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
     @Test
     public void testMediaTranscodeManager() throws InterruptedException {
         Log.d(TAG, "Starting: testMediaTranscodeManager");
@@ -49,12 +83,8 @@
                 new MediaTranscodeManager.TranscodingRequest.Builder().build();
         Executor listenerExecutor = Executors.newSingleThreadExecutor();
 
-        MediaTranscodeManager mediaTranscodeManager =
-                MediaTranscodeManager.getInstance(ApplicationProvider.getApplicationContext());
-        assertNotNull(mediaTranscodeManager);
-
         MediaTranscodeManager.TranscodingJob job;
-        job = mediaTranscodeManager.enqueueTranscodingRequest(request, listenerExecutor,
+        job = mMediaTranscodeManager.enqueueTranscodingRequest(request, listenerExecutor,
                 transcodingJob -> {
                 Log.d(TAG, "Transcoding completed with result: " + transcodingJob.getResult());
                 transcodeCompleteSemaphore.release();