NuPlayer2: fork the native code for MediaPlayer2

Forked from fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48
NuPlayer2Decoder uses NdkMediaCodec, NdkMediaCrypto.
NuPlayer2Drm uses NdkMediaDrm.
No more IMediaHTTPService and IMediaHTTPConnection in NuPlayer2.
Test: compiles
Bug: 69805888

Change-Id: Ica3c168d40dcf114fb44e8688a9ede671e8d77ef
diff --git a/media/libmedia/MediaPlayer2Factory.h b/media/libmedia/MediaPlayer2Factory.h
new file mode 100644
index 0000000..5813b2e
--- /dev/null
+++ b/media/libmedia/MediaPlayer2Factory.h
@@ -0,0 +1,90 @@
+/*
+**
+** Copyright 2017, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+#ifndef ANDROID_MEDIAPLAYER2FACTORY_H
+#define ANDROID_MEDIAPLAYER2FACTORY_H
+
+#include <media/MediaPlayer2Interface.h>
+#include <media/stagefright/foundation/ABase.h>
+
+namespace android {
+
+class MediaPlayer2Factory {
+  public:
+    class IFactory {
+      public:
+        virtual ~IFactory() { }
+
+        virtual float scoreFactory(const sp<MediaPlayer2Engine>& /*client*/,
+                                   const char* /*url*/,
+                                   float /*curScore*/) { return 0.0; }
+
+        virtual float scoreFactory(const sp<MediaPlayer2Engine>& /*client*/,
+                                   int /*fd*/,
+                                   int64_t /*offset*/,
+                                   int64_t /*length*/,
+                                   float /*curScore*/) { return 0.0; }
+
+        virtual float scoreFactory(const sp<MediaPlayer2Engine>& /*client*/,
+                                   const sp<IStreamSource> &/*source*/,
+                                   float /*curScore*/) { return 0.0; }
+
+        virtual float scoreFactory(const sp<MediaPlayer2Engine>& /*client*/,
+                                   const sp<DataSource> &/*source*/,
+                                   float /*curScore*/) { return 0.0; }
+
+        virtual sp<MediaPlayer2Base> createPlayer(pid_t pid) = 0;
+    };
+
+    static status_t registerFactory(IFactory* factory,
+                                    player2_type type);
+    static void unregisterFactory(player2_type type);
+    static player2_type getPlayerType(const sp<MediaPlayer2Engine>& client,
+                                      const char* url);
+    static player2_type getPlayerType(const sp<MediaPlayer2Engine>& client,
+                                      int fd,
+                                      int64_t offset,
+                                      int64_t length);
+    static player2_type getPlayerType(const sp<MediaPlayer2Engine>& client,
+                                      const sp<IStreamSource> &source);
+    static player2_type getPlayerType(const sp<MediaPlayer2Engine>& client,
+                                      const sp<DataSource> &source);
+
+    static sp<MediaPlayer2Base> createPlayer(player2_type playerType,
+                                             void* cookie,
+                                             notify_callback_f notifyFunc,
+                                             pid_t pid);
+
+    static void registerBuiltinFactories();
+
+  private:
+    typedef KeyedVector<player2_type, IFactory*> tFactoryMap;
+
+    MediaPlayer2Factory() { }
+
+    static status_t registerFactory_l(IFactory* factory,
+                                      player2_type type);
+
+    static Mutex       sLock;
+    static tFactoryMap sFactoryMap;
+    static bool        sInitComplete;
+
+    DISALLOW_EVIL_CONSTRUCTORS(MediaPlayer2Factory);
+};
+
+}  // namespace android
+#endif  // ANDROID_MEDIAPLAYER2FACTORY_H