libstagefright_wfd: compilation fixes

* Among others, adapt to the ABuffer API changes in
  "f03606d9 Move MediaBufferXXX from foundation to libmediaextractor"

Change-Id: Ie92fc035c6430f1458d45995a5b2627d0bc75122
Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: DennySPb <dennyspb@gmail.com>

libstagefright_wfd: Adapt to A11 changes

Change-Id: I69f13c93a68b1ad60e085000361331a3fdc98049
Signed-off-by: DennySPb <dennyspb@gmail.com>

libstagefright: Remove libmediaextractor dependency

Change-Id: Ifb564aafcf6f9bd45010500a589050b6577c0f7a
Signed-off-by: DennySPb <dennyspb@gmail.com>

Remove libmediaextractor dependency from libstagefright_wfd

Change-Id: I3d417d2f2ce468eb9d45f55f7818bb9a46348667
Signed-off-by: DennySPb <dennyspb@gmail.com>

libstagefright_wfd: Log MediaExtractor entry point to MediaMetrics

Change-Id: Ic8fac2cd5ee4d3bb59804e69efc1d5c482aa2417

Change-Id: Ie92fc035c6430f1458d45995a5b2627d0bc75122
diff --git a/media/libmedia/Android.bp b/media/libmedia/Android.bp
index 894c459..2d53b35 100644
--- a/media/libmedia/Android.bp
+++ b/media/libmedia/Android.bp
@@ -351,6 +351,7 @@
         "BufferingSettings.cpp",
         "CharacterEncodingDetector.cpp",
         "IDataSource.cpp",
+        "IHDCP.cpp",
         "IMediaDeathNotifier.cpp",
         "IMediaExtractor.cpp",
         "IMediaHTTPConnection.cpp",
@@ -417,6 +418,7 @@
         "libmedia_codeclist",
         "libmedia_omx",
         "libstagefright_foundation",
+        "libui",
     ],
 
     export_shared_lib_headers: [
diff --git a/media/libmedia/IHDCP.cpp b/media/libmedia/IHDCP.cpp
index a46017f..31e3753 100644
--- a/media/libmedia/IHDCP.cpp
+++ b/media/libmedia/IHDCP.cpp
@@ -55,7 +55,7 @@
     }
 };
 
-IMPLEMENT_META_INTERFACE(HDCPObserver, "android.hardware.IHDCPObserver");
+DO_NOT_DIRECTLY_USE_ME_IMPLEMENT_META_INTERFACE(HDCPObserver, "android.hardware.IHDCPObserver");
 
 struct BpHDCP : public BpInterface<IHDCP> {
     explicit BpHDCP(const sp<IBinder> &impl)
@@ -166,7 +166,7 @@
     }
 };
 
-IMPLEMENT_META_INTERFACE(HDCP, "android.hardware.IHDCP");
+DO_NOT_DIRECTLY_USE_ME_IMPLEMENT_META_INTERFACE(HDCP, "android.hardware.IHDCP");
 
 status_t BnHDCPObserver::onTransact(
         uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags) {
diff --git a/media/libstagefright/SurfaceMediaSource.cpp b/media/libstagefright/SurfaceMediaSource.cpp
index 4b3076a..333c618 100644
--- a/media/libstagefright/SurfaceMediaSource.cpp
+++ b/media/libstagefright/SurfaceMediaSource.cpp
@@ -217,7 +217,7 @@
 
 #if DEBUG_PENDING_BUFFERS
         for (size_t i = 0; i < mPendingBuffers.size(); ++i) {
-            ALOGI("%d: %p", i, mPendingBuffers.itemAt(i));
+            ALOGI("%zu: %p", i, mPendingBuffers.itemAt(i));
         }
 #endif
 
@@ -355,7 +355,7 @@
 
     (*buffer)->setObserver(this);
     (*buffer)->add_ref();
-    (*buffer)->meta_data()->setInt64(kKeyTime, mCurrentTimestamp / 1000);
+    (*buffer)->meta_data().setInt64(kKeyTime, mCurrentTimestamp / 1000);
     ALOGV("Frames encoded = %d, timestamp = %" PRId64 ", time diff = %" PRId64,
             mNumFramesEncoded, mCurrentTimestamp / 1000,
             mCurrentTimestamp / 1000 - prevTimeStamp / 1000);
diff --git a/media/libstagefright/include/media/stagefright/SurfaceMediaSource.h b/media/libstagefright/include/media/stagefright/SurfaceMediaSource.h
index d49e44c..c67defe 100644
--- a/media/libstagefright/include/media/stagefright/SurfaceMediaSource.h
+++ b/media/libstagefright/include/media/stagefright/SurfaceMediaSource.h
@@ -22,12 +22,12 @@
 
 #include <utils/threads.h>
 #include <utils/Vector.h>
-#include <media/MediaSource.h>
+#include <media/stagefright/MediaSource.h>
 #include <media/stagefright/MediaBuffer.h>
 
 #include <media/hardware/MetadataBufferType.h>
 
-#include "foundation/ABase.h"
+#include <media/stagefright/foundation/ABase.h>
 
 namespace android {
 // ----------------------------------------------------------------------------
@@ -187,7 +187,7 @@
     size_t mNumPendingBuffers;
 
 #if DEBUG_PENDING_BUFFERS
-    Vector<MediaBuffer *> mPendingBuffers;
+    Vector<MediaBufferBase *> mPendingBuffers;
 #endif
 
     // mCurrentTimestamp is the timestamp for the current texture. It
diff --git a/media/libstagefright/tests/DummyRecorder.cpp b/media/libstagefright/tests/DummyRecorder.cpp
index c79e6b1..596b7e6 100644
--- a/media/libstagefright/tests/DummyRecorder.cpp
+++ b/media/libstagefright/tests/DummyRecorder.cpp
@@ -17,7 +17,7 @@
 #define LOG_TAG "DummyRecorder"
 // #define LOG_NDEBUG 0
 
-#include <media/MediaSource.h>
+#include <media/stagefright/MediaSource.h>
 #include <media/stagefright/MediaBuffer.h>
 #include "DummyRecorder.h"
 
diff --git a/media/libstagefright/wifi-display/Android.bp b/media/libstagefright/wifi-display/Android.bp
index bf9f6e8..bfb3013 100644
--- a/media/libstagefright/wifi-display/Android.bp
+++ b/media/libstagefright/wifi-display/Android.bp
@@ -26,6 +26,7 @@
         "libcutils",
         "liblog",
         "libmedia",
+        "libmedia_omx",
         "libstagefright",
         "libstagefright_foundation",
         "libui",
@@ -33,6 +34,11 @@
         "libutils",
     ],
 
+    header_libs: [
+        "libmediadrm_headers",
+        "libmediametrics_headers",
+    ],
+
     cflags: [
         "-Wno-multichar",
         "-Werror",
diff --git a/media/libstagefright/wifi-display/MediaSender.cpp b/media/libstagefright/wifi-display/MediaSender.cpp
index cc412f5..6f1dbbf 100644
--- a/media/libstagefright/wifi-display/MediaSender.cpp
+++ b/media/libstagefright/wifi-display/MediaSender.cpp
@@ -23,10 +23,9 @@
 #include "rtp/RTPSender.h"
 #include "source/TSPacketizer.h"
 
-#include "include/avc_utils.h"
-
 #include <media/IHDCP.h>
 #include <media/stagefright/MediaBuffer.h>
+#include <media/stagefright/foundation/avc_utils.h>
 #include <media/stagefright/foundation/ABuffer.h>
 #include <media/stagefright/foundation/ADebug.h>
 #include <media/stagefright/foundation/AMessage.h>
@@ -400,7 +399,7 @@
     bool manuallyPrependSPSPPS =
         !info.mIsAudio
         && (info.mFlags & FLAG_MANUALLY_PREPEND_SPS_PPS)
-        && IsIDR(accessUnit);
+        && IsIDR(accessUnit->data(), accessUnit->size());
 
     if (mHDCP != NULL && !info.mIsAudio) {
         isHDCPEncrypted = true;
diff --git a/media/libstagefright/wifi-display/rtp/RTPSender.cpp b/media/libstagefright/wifi-display/rtp/RTPSender.cpp
index ca9fdd2..bfdd5fc 100644
--- a/media/libstagefright/wifi-display/rtp/RTPSender.cpp
+++ b/media/libstagefright/wifi-display/rtp/RTPSender.cpp
@@ -20,16 +20,16 @@
 
 #include "RTPSender.h"
 
+#include <media/stagefright/foundation/avc_utils.h>
 #include <media/stagefright/foundation/ABuffer.h>
 #include <media/stagefright/foundation/ADebug.h>
 #include <media/stagefright/foundation/AMessage.h>
 #include <media/stagefright/foundation/ANetworkSession.h>
+#include <media/stagefright/foundation/ByteUtils.h>
 #include <media/stagefright/foundation/hexdump.h>
 #include <media/stagefright/MediaErrors.h>
 #include <media/stagefright/Utils.h>
 
-#include "include/avc_utils.h"
-
 namespace android {
 
 RTPSender::RTPSender(
diff --git a/media/libstagefright/wifi-display/source/Converter.cpp b/media/libstagefright/wifi-display/source/Converter.cpp
index 273af18..5502b06 100644
--- a/media/libstagefright/wifi-display/source/Converter.cpp
+++ b/media/libstagefright/wifi-display/source/Converter.cpp
@@ -21,19 +21,20 @@
 #include "Converter.h"
 
 #include "MediaPuller.h"
-#include "include/avc_utils.h"
 
 #include <cutils/properties.h>
 #include <gui/Surface.h>
-#include <media/ICrypto.h>
+#include <mediadrm/ICrypto.h>
 #include <media/MediaCodecBuffer.h>
+#include <media/stagefright/foundation/avc_utils.h>
 #include <media/stagefright/foundation/ABuffer.h>
 #include <media/stagefright/foundation/ADebug.h>
 #include <media/stagefright/foundation/AMessage.h>
-#include <media/stagefright/MediaBuffer.h>
+#include <media/stagefright/MediaBufferBase.h>
 #include <media/stagefright/MediaCodec.h>
 #include <media/stagefright/MediaDefs.h>
 #include <media/stagefright/MediaErrors.h>
+#include <media/MediaBufferHolder.h>
 
 #include <arpa/inet.h>
 
@@ -305,7 +306,7 @@
                     sp<ABuffer> accessUnit;
                     CHECK(msg->findBuffer("accessUnit", &accessUnit));
 
-                    accessUnit->setMediaBufferBase(NULL);
+                    accessUnit->meta()->setObject("mediaBufferHolder", sp<MediaBufferHolder>(nullptr));
                 }
                 break;
             }
@@ -328,7 +329,7 @@
                         ALOGI("dropping frame.");
                     }
 
-                    accessUnit->setMediaBufferBase(NULL);
+                    accessUnit->meta()->setObject("mediaBufferHolder", sp<MediaBufferHolder>(nullptr));
                     break;
                 }
 
@@ -625,13 +626,17 @@
                    buffer->data(),
                    buffer->size());
 
-            MediaBuffer *mediaBuffer =
-                (MediaBuffer *)(buffer->getMediaBufferBase());
-            if (mediaBuffer != NULL) {
-                mEncoderInputBuffers.itemAt(bufferIndex)->setMediaBufferBase(
-                        mediaBuffer);
+            MediaBufferBase *mediaBuffer = NULL;
+            sp<RefBase> holder;
 
-                buffer->setMediaBufferBase(NULL);
+            if (buffer->meta()->findObject("mediaBufferHolder", &holder)) {
+                mediaBuffer = (holder != nullptr) ?
+                    static_cast<MediaBufferHolder*>(holder.get())->mediaBuffer() : nullptr;
+            }
+            if (mediaBuffer != NULL) {
+                mEncoderInputBuffers.itemAt(bufferIndex)->meta()->setObject("mediaBufferHolder", new MediaBufferHolder(mediaBuffer));
+
+                buffer->meta()->setObject("mediaBufferHolder", sp<MediaBufferHolder>(nullptr));
             }
         } else {
             flags = MediaCodec::BUFFER_FLAG_EOS;
@@ -763,7 +768,7 @@
                 if (mNeedToManuallyPrependSPSPPS
                         && mIsH264
                         && (mFlags & FLAG_PREPEND_CSD_IF_NECESSARY)
-                        && IsIDR(buffer)) {
+                        && IsIDR(buffer->data(), buffer->size())) {
                     buffer = prependCSD(buffer);
                 }
 
diff --git a/media/libstagefright/wifi-display/source/MediaPuller.cpp b/media/libstagefright/wifi-display/source/MediaPuller.cpp
index ce07a4e..7bdef1d 100644
--- a/media/libstagefright/wifi-display/source/MediaPuller.cpp
+++ b/media/libstagefright/wifi-display/source/MediaPuller.cpp
@@ -23,9 +23,10 @@
 #include <media/stagefright/foundation/ABuffer.h>
 #include <media/stagefright/foundation/ADebug.h>
 #include <media/stagefright/foundation/AMessage.h>
-#include <media/stagefright/MediaBuffer.h>
+#include <media/stagefright/MediaBufferBase.h>
 #include <media/stagefright/MediaSource.h>
 #include <media/stagefright/MetaData.h>
+#include <media/MediaBufferHolder.h>
 
 namespace android {
 
@@ -138,7 +139,7 @@
                 break;
             }
 
-            MediaBuffer *mbuf;
+            MediaBufferBase *mbuf;
             status_t err = mSource->read(&mbuf);
 
             if (mPaused) {
@@ -163,7 +164,7 @@
                 notify->post();
             } else {
                 int64_t timeUs;
-                CHECK(mbuf->meta_data()->findInt64(kKeyTime, &timeUs));
+                CHECK(mbuf->meta_data().findInt64(kKeyTime, &timeUs));
 
                 sp<ABuffer> accessUnit = new ABuffer(mbuf->range_length());
 
@@ -177,9 +178,9 @@
                     mbuf->release();
                     mbuf = NULL;
                 } else {
-                    // video encoder will release MediaBuffer when done
+                    // video encoder will release MediaBufferBase when done
                     // with underlying data.
-                    accessUnit->setMediaBufferBase(mbuf);
+                    accessUnit->meta()->setObject("mediaBufferHolder", new MediaBufferHolder(mbuf));
                 }
 
                 sp<AMessage> notify = mNotify->dup();
diff --git a/media/libstagefright/wifi-display/source/PlaybackSession.cpp b/media/libstagefright/wifi-display/source/PlaybackSession.cpp
index f1ecca0..0240d2a 100644
--- a/media/libstagefright/wifi-display/source/PlaybackSession.cpp
+++ b/media/libstagefright/wifi-display/source/PlaybackSession.cpp
@@ -23,13 +23,13 @@
 #include "Converter.h"
 #include "MediaPuller.h"
 #include "RepeaterSource.h"
-#include "include/avc_utils.h"
 #include "WifiDisplaySource.h"
 
 #include <binder/IServiceManager.h>
 #include <cutils/properties.h>
 #include <media/IHDCP.h>
 #include <media/IMediaHTTPService.h>
+#include <media/stagefright/foundation/avc_utils.h>
 #include <media/stagefright/foundation/ABitReader.h>
 #include <media/stagefright/foundation/ABuffer.h>
 #include <media/stagefright/foundation/ADebug.h>
@@ -43,6 +43,7 @@
 #include <media/stagefright/NuMediaExtractor.h>
 #include <media/stagefright/SurfaceMediaSource.h>
 #include <media/stagefright/Utils.h>
+#include <media/IOMX.h>
 
 #include <OMX_IVCommon.h>
 
@@ -747,7 +748,7 @@
 
 status_t WifiDisplaySource::PlaybackSession::setupMediaPacketizer(
         bool enableAudio, bool enableVideo) {
-    mExtractor = new NuMediaExtractor;
+    mExtractor = new NuMediaExtractor(NuMediaExtractor::EntryPoint::OTHER);
 
     status_t err = mExtractor->setDataSource(
             NULL /* httpService */, mMediaPath.c_str());
@@ -1069,8 +1070,11 @@
 }
 
 status_t WifiDisplaySource::PlaybackSession::addAudioSource(bool usePCMAudio) {
+    audio_attributes_t attr = AUDIO_ATTRIBUTES_INITIALIZER;
+    attr.source = AUDIO_SOURCE_REMOTE_SUBMIX;
+
     sp<AudioSource> audioSource = new AudioSource(
-            AUDIO_SOURCE_REMOTE_SUBMIX,
+            &attr,
             mOpPackageName,
             48000 /* sampleRate */,
             2 /* channelCount */);
diff --git a/media/libstagefright/wifi-display/source/RepeaterSource.cpp b/media/libstagefright/wifi-display/source/RepeaterSource.cpp
index af6b663..e225a02 100644
--- a/media/libstagefright/wifi-display/source/RepeaterSource.cpp
+++ b/media/libstagefright/wifi-display/source/RepeaterSource.cpp
@@ -7,7 +7,7 @@
 #include <media/stagefright/foundation/ADebug.h>
 #include <media/stagefright/foundation/ALooper.h>
 #include <media/stagefright/foundation/AMessage.h>
-#include <media/stagefright/MediaBuffer.h>
+#include <media/stagefright/MediaBufferBase.h>
 #include <media/stagefright/MetaData.h>
 
 namespace android {
@@ -107,7 +107,7 @@
 }
 
 status_t RepeaterSource::read(
-        MediaBuffer **buffer, const ReadOptions *options) {
+        MediaBufferBase **buffer, const ReadOptions *options) {
     int64_t seekTimeUs;
     ReadOptions::SeekMode seekMode;
     CHECK(options == NULL || !options->getSeekTo(&seekTimeUs, &seekMode));
@@ -155,7 +155,7 @@
             {
                 mBuffer->add_ref();
                 *buffer = mBuffer;
-                (*buffer)->meta_data()->setInt64(kKeyTime, bufferTimeUs);
+                (*buffer)->meta_data().setInt64(kKeyTime, bufferTimeUs);
                 ++mFrameCount;
             }
         }
@@ -180,7 +180,7 @@
     switch (msg->what()) {
         case kWhatRead:
         {
-            MediaBuffer *buffer;
+            MediaBufferBase *buffer;
             status_t err = mSource->read(&buffer);
 
             ALOGV("read mbuf %p", buffer);
diff --git a/media/libstagefright/wifi-display/source/RepeaterSource.h b/media/libstagefright/wifi-display/source/RepeaterSource.h
index 8d414fd..1647fb1 100644
--- a/media/libstagefright/wifi-display/source/RepeaterSource.h
+++ b/media/libstagefright/wifi-display/source/RepeaterSource.h
@@ -20,7 +20,7 @@
     virtual sp<MetaData> getFormat();
 
     virtual status_t read(
-            MediaBuffer **buffer, const ReadOptions *options);
+            MediaBufferBase **buffer, const ReadOptions *options);
 
     void onMessageReceived(const sp<AMessage> &msg);
 
@@ -50,7 +50,7 @@
     sp<ALooper> mLooper;
     sp<AHandlerReflector<RepeaterSource> > mReflector;
 
-    MediaBuffer *mBuffer;
+    MediaBufferBase *mBuffer;
     status_t mResult;
     int64_t mLastBufferUpdateUs;
 
diff --git a/media/libstagefright/wifi-display/source/TSPacketizer.cpp b/media/libstagefright/wifi-display/source/TSPacketizer.cpp
index 865ba94..7d30ae2 100644
--- a/media/libstagefright/wifi-display/source/TSPacketizer.cpp
+++ b/media/libstagefright/wifi-display/source/TSPacketizer.cpp
@@ -19,8 +19,8 @@
 #include <utils/Log.h>
 
 #include "TSPacketizer.h"
-#include "include/avc_utils.h"
 
+#include <media/stagefright/foundation/avc_utils.h>
 #include <media/stagefright/foundation/ABuffer.h>
 #include <media/stagefright/foundation/ADebug.h>
 #include <media/stagefright/foundation/AMessage.h>
@@ -471,7 +471,7 @@
     const sp<Track> &track = mTracks.itemAt(trackIndex);
 
     if (track->isH264() && (flags & PREPEND_SPS_PPS_TO_IDR_FRAMES)
-            && IsIDR(accessUnit)) {
+            && IsIDR(accessUnit->data(), accessUnit->size())) {
         // prepend codec specific data, i.e. SPS and PPS.
         accessUnit = track->prependCSD(accessUnit);
     } else if (track->isAAC() && track->lacksADTSHeader()) {
@@ -1039,7 +1039,7 @@
     CHECK_LT(trackIndex, mTracks.size());
 
     const sp<Track> &track = mTracks.itemAt(trackIndex);
-    CHECK(track->isH264() && IsIDR(accessUnit));
+    CHECK(track->isH264() && IsIDR(accessUnit->data(), accessUnit->size()));
 
     int64_t timeUs;
     CHECK(accessUnit->meta()->findInt64("timeUs", &timeUs));
diff --git a/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp b/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp
index 4695e5d..159b113 100644
--- a/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp
+++ b/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp
@@ -22,6 +22,7 @@
 #include "PlaybackSession.h"
 #include "Parameters.h"
 #include "rtp/RTPSender.h"
+#include <media/stagefright/FoundationUtils.h>
 
 #include <binder/IServiceManager.h>
 #include <gui/IGraphicBufferProducer.h>