diff --git a/media/libmedia/Android.bp b/media/libmedia/Android.bp
index d18f611..0b4fd25 100644
--- a/media/libmedia/Android.bp
+++ b/media/libmedia/Android.bp
@@ -246,6 +246,7 @@
         "IStreamSource.cpp",
         "MediaUtils.cpp",
         "Metadata.cpp",
+        "NdkWrapper.cpp",
     ],
 
     shared_libs: [
@@ -254,6 +255,8 @@
         "libgui",
         "liblog",
         "libmediaextractor",
+        "libmediandk",
+        "libnativewindow",
         "libstagefright_foundation",
         "libui",
         "libutils",
@@ -261,6 +264,7 @@
 
     export_shared_lib_headers: [
         "libbinder",
+        "libmediandk",
     ],
 
     header_libs: [
@@ -328,6 +332,7 @@
         "libmediandk",
         "libmediautils",
         "libmemunreachable",
+        "libnativewindow",
         "libpowermanager",
         "libstagefright_httplive",
         "libstagefright_player2",
diff --git a/media/libmedia/MediaPlayer2Manager.cpp b/media/libmedia/MediaPlayer2Manager.cpp
index 637214e..c6ad99e 100644
--- a/media/libmedia/MediaPlayer2Manager.cpp
+++ b/media/libmedia/MediaPlayer2Manager.cpp
@@ -38,7 +38,6 @@
 #include <binder/IServiceManager.h>
 #include <binder/MemoryHeapBase.h>
 #include <binder/MemoryBase.h>
-#include <gui/Surface.h>
 #include <utils/Errors.h>  // for status_t
 #include <utils/String8.h>
 #include <utils/SystemClock.h>
@@ -52,6 +51,8 @@
 #include <media/Metadata.h>
 #include <media/AudioTrack.h>
 #include <media/MemoryLeakTrackUtil.h>
+#include <media/NdkWrapper.h>
+
 #include <media/stagefright/InterfaceUtils.h>
 #include <media/stagefright/MediaCodecList.h>
 #include <media/stagefright/MediaErrors.h>
@@ -737,9 +738,9 @@
 }
 
 void MediaPlayer2Manager::Client::disconnectNativeWindow_l() {
-    if (mConnectedWindow != NULL) {
+    if (mConnectedWindow != NULL && mConnectedWindow->getANativeWindow() != NULL) {
         status_t err = nativeWindowDisconnect(
-                mConnectedWindow.get(), "disconnectNativeWindow");
+                mConnectedWindow->getANativeWindow(), "disconnectNativeWindow");
 
         if (err != OK) {
             ALOGW("nativeWindowDisconnect returned an error: %s (%d)",
@@ -750,21 +751,20 @@
 }
 
 status_t MediaPlayer2Manager::Client::setVideoSurfaceTexture(
-        const sp<IGraphicBufferProducer>& bufferProducer)
+        const sp<ANativeWindowWrapper>& nww)
 {
-    ALOGV("[%d] setVideoSurfaceTexture(%p)", mConnId, bufferProducer.get());
+    ALOGV("[%d] setVideoSurfaceTexture(%p)",
+          mConnId,
+          (nww == NULL ? NULL : nww->getANativeWindow()));
     sp<MediaPlayer2Base> p = getPlayer();
     if (p == 0) return UNKNOWN_ERROR;
 
-    sp<IBinder> binder(IInterface::asBinder(bufferProducer));
-    if (mConnectedWindowBinder == binder) {
-        return OK;
-    }
-
-    sp<ANativeWindow> anw;
-    if (bufferProducer != NULL) {
-        anw = new Surface(bufferProducer, true /* controlledByApp */);
-        status_t err = nativeWindowConnect(anw.get(), "setVideoSurfaceTexture");
+    if (nww != NULL && nww->getANativeWindow() != NULL) {
+        if (mConnectedWindow != NULL
+            && mConnectedWindow->getANativeWindow() == nww->getANativeWindow()) {
+            return OK;
+        }
+        status_t err = nativeWindowConnect(nww->getANativeWindow(), "setVideoSurfaceTexture");
 
         if (err != OK) {
             ALOGE("setVideoSurfaceTexture failed: %d", err);
@@ -783,19 +783,18 @@
     // Note that we must set the player's new GraphicBufferProducer before
     // disconnecting the old one.  Otherwise queue/dequeue calls could be made
     // on the disconnected ANW, which may result in errors.
-    status_t err = p->setVideoSurfaceTexture(bufferProducer);
+    status_t err = p->setVideoSurfaceTexture(nww);
 
     mLock.lock();
     disconnectNativeWindow_l();
 
     if (err == OK) {
-        mConnectedWindow = anw;
-        mConnectedWindowBinder = binder;
+        mConnectedWindow = nww;
         mLock.unlock();
-    } else {
+    } else if (nww != NULL) {
         mLock.unlock();
         status_t err = nativeWindowDisconnect(
-                anw.get(), "disconnectNativeWindow");
+                nww->getANativeWindow(), "disconnectNativeWindow");
 
         if (err != OK) {
             ALOGW("nativeWindowDisconnect returned an error: %s (%d)",
diff --git a/media/libmedia/MediaPlayer2Manager.h b/media/libmedia/MediaPlayer2Manager.h
index 8f0c491..d3ee044 100644
--- a/media/libmedia/MediaPlayer2Manager.h
+++ b/media/libmedia/MediaPlayer2Manager.h
@@ -35,6 +35,7 @@
 
 namespace android {
 
+struct ANativeWindowWrapper;
 struct AudioPlaybackRate;
 class AudioTrack;
 struct AVSyncSettings;
@@ -244,7 +245,7 @@
         // MediaPlayer2Engine interface
         virtual void            disconnect();
         virtual status_t        setVideoSurfaceTexture(
-                                        const sp<IGraphicBufferProducer>& bufferProducer);
+                const sp<ANativeWindowWrapper>& nww) override;
         virtual status_t        setBufferingSettings(const BufferingSettings& buffering) override;
         virtual status_t        getBufferingSettings(
                                         BufferingSettings* buffering /* nonnull */) override;
@@ -286,7 +287,7 @@
                                         const sp<media::VolumeShaper::Operation>& operation) override;
         virtual sp<media::VolumeShaper::State> getVolumeShaperState(int id) override;
 
-        sp<MediaPlayer2Base>     createPlayer(player2_type playerType);
+        sp<MediaPlayer2Base>    createPlayer(player2_type playerType);
 
         virtual status_t        setDataSource(
                         const sp<MediaHTTPService> &httpService,
@@ -299,7 +300,7 @@
         virtual status_t        setDataSource(const sp<IDataSource> &source);
 
 
-        sp<MediaPlayer2Base>     setDataSource_pre(player2_type playerType);
+        sp<MediaPlayer2Base>    setDataSource_pre(player2_type playerType);
         status_t                setDataSource_post(const sp<MediaPlayer2Base>& p,
                                                    status_t status);
 
@@ -375,8 +376,7 @@
                     audio_session_t              mAudioSessionId;
                     audio_attributes_t *         mAudioAttributes;
                     uid_t                        mUid;
-                    sp<ANativeWindow>            mConnectedWindow;
-                    sp<IBinder>                  mConnectedWindowBinder;
+                    sp<ANativeWindowWrapper>     mConnectedWindow;
                     struct sockaddr_in           mRetransmitEndpoint;
                     bool                         mRetransmitEndpointValid;
                     sp<Client>                   mNextClient;
diff --git a/media/libmedia/nuplayer2/NdkWrapper.cpp b/media/libmedia/NdkWrapper.cpp
similarity index 96%
rename from media/libmedia/nuplayer2/NdkWrapper.cpp
rename to media/libmedia/NdkWrapper.cpp
index 6698826..942393d 100644
--- a/media/libmedia/nuplayer2/NdkWrapper.cpp
+++ b/media/libmedia/NdkWrapper.cpp
@@ -17,9 +17,9 @@
 //#define LOG_NDEBUG 0
 #define LOG_TAG "NdkWrapper"
 
-#include "NdkWrapper.h"
+#include <media/NdkWrapper.h>
 
-#include <gui/Surface.h>
+#include <android/native_window.h>
 #include <log/log.h>
 #include <media/NdkMediaCodec.h>
 #include <media/NdkMediaCrypto.h>
@@ -473,6 +473,31 @@
 }
 
 
+//////////// ANativeWindowWrapper
+ANativeWindowWrapper::ANativeWindowWrapper(ANativeWindow *aNativeWindow)
+    : mANativeWindow(aNativeWindow) {
+    if (aNativeWindow != NULL) {
+        ANativeWindow_acquire(aNativeWindow);
+    }
+}
+
+ANativeWindowWrapper::~ANativeWindowWrapper() {
+    release();
+}
+
+status_t ANativeWindowWrapper::release() {
+    if (mANativeWindow != NULL) {
+        ANativeWindow_release(mANativeWindow);
+        mANativeWindow = NULL;
+    }
+    return OK;
+}
+
+ANativeWindow *ANativeWindowWrapper::getANativeWindow() const {
+    return mANativeWindow;
+}
+
+
 //////////// AMediaDrmWrapper
 AMediaDrmWrapper::AMediaDrmWrapper(const uint8_t uuid[16]) {
     mAMediaDrm = AMediaDrm_createByUUID(uuid);
@@ -838,7 +863,7 @@
 
 status_t AMediaCodecWrapper::configure(
     const sp<AMediaFormatWrapper> &format,
-    const sp<Surface> &surface,
+    const sp<ANativeWindowWrapper> &nww,
     const sp<AMediaCryptoWrapper> &crypto,
     uint32_t flags) {
     if (mAMediaCodec == NULL) {
@@ -848,7 +873,7 @@
     media_status_t err = AMediaCodec_configure(
             mAMediaCodec,
             format->getAMediaFormat(),
-            surface.get(),
+            (nww == NULL ? NULL : nww->getANativeWindow()),
             crypto == NULL ? NULL : crypto->getAMediaCrypto(),
             flags);
 
@@ -969,12 +994,13 @@
         AMediaCodec_releaseOutputBuffer(mAMediaCodec, idx, render));
 }
 
-status_t AMediaCodecWrapper::setOutputSurface(const sp<Surface> &surface) {
+status_t AMediaCodecWrapper::setOutputSurface(const sp<ANativeWindowWrapper> &nww) {
     if (mAMediaCodec == NULL) {
         return DEAD_OBJECT;
     }
     return translateErrorCode(
-        AMediaCodec_setOutputSurface(mAMediaCodec, surface.get()));
+        AMediaCodec_setOutputSurface(mAMediaCodec,
+                                     (nww == NULL ? NULL : nww->getANativeWindow())));
 }
 
 status_t AMediaCodecWrapper::releaseOutputBufferAtTime(size_t idx, int64_t timestampNs) {
diff --git a/media/libmedia/TestPlayerStub.h b/media/libmedia/TestPlayerStub.h
index 1530ae1..27c8bf4 100644
--- a/media/libmedia/TestPlayerStub.h
+++ b/media/libmedia/TestPlayerStub.h
@@ -78,7 +78,7 @@
 
     // All the methods below wrap the mPlayer instance.
     virtual status_t setVideoSurfaceTexture(
-            const android::sp<android::IGraphicBufferProducer>& st)  {
+            const android::sp<android::ANativeWindowWrapper>& st)  {
         return mPlayer->setVideoSurfaceTexture(st);
     }
     virtual status_t prepare() {return mPlayer->prepare();}
diff --git a/media/libmedia/include/media/MediaPlayer2Engine.h b/media/libmedia/include/media/MediaPlayer2Engine.h
index 11d087b..0b43923 100644
--- a/media/libmedia/include/media/MediaPlayer2Engine.h
+++ b/media/libmedia/include/media/MediaPlayer2Engine.h
@@ -31,11 +31,10 @@
 
 namespace android {
 
+struct ANativeWindowWrapper;
 class Parcel;
-class Surface;
 class IDataSource;
 struct IStreamSource;
-class IGraphicBufferProducer;
 struct MediaHTTPService;
 struct AudioPlaybackRate;
 struct AVSyncSettings;
@@ -56,8 +55,7 @@
     virtual status_t        setDataSource(int fd, int64_t offset, int64_t length) = 0;
     virtual status_t        setDataSource(const sp<IStreamSource>& source) = 0;
     virtual status_t        setDataSource(const sp<IDataSource>& source) = 0;
-    virtual status_t        setVideoSurfaceTexture(
-                                    const sp<IGraphicBufferProducer>& bufferProducer) = 0;
+    virtual status_t        setVideoSurfaceTexture(const sp<ANativeWindowWrapper>& nww) = 0;
     virtual status_t        getBufferingSettings(
                                     BufferingSettings* buffering /* nonnull */) = 0;
     virtual status_t        setBufferingSettings(const BufferingSettings& buffering) = 0;
diff --git a/media/libmedia/include/media/MediaPlayer2Interface.h b/media/libmedia/include/media/MediaPlayer2Interface.h
index 7c8e3e6..931a110 100644
--- a/media/libmedia/include/media/MediaPlayer2Interface.h
+++ b/media/libmedia/include/media/MediaPlayer2Interface.h
@@ -43,8 +43,7 @@
 class DataSource;
 struct MediaHTTPService;
 class Parcel;
-class Surface;
-class IGraphicBufferProducer;
+struct ANativeWindowWrapper;
 
 template<typename T> class SortedVector;
 
@@ -183,9 +182,8 @@
         return INVALID_OPERATION;
     }
 
-    // pass the buffered IGraphicBufferProducer to the media player service
-    virtual status_t    setVideoSurfaceTexture(
-                                const sp<IGraphicBufferProducer>& bufferProducer) = 0;
+    // pass the buffered native window to the media player service
+    virtual status_t    setVideoSurfaceTexture(const sp<ANativeWindowWrapper>& nww) = 0;
 
     virtual status_t    getBufferingSettings(
                                 BufferingSettings* buffering /* nonnull */) {
diff --git a/media/libmedia/nuplayer2/NdkWrapper.h b/media/libmedia/include/media/NdkWrapper.h
similarity index 93%
rename from media/libmedia/nuplayer2/NdkWrapper.h
rename to media/libmedia/include/media/NdkWrapper.h
index a097d5a..00e0fd4 100644
--- a/media/libmedia/nuplayer2/NdkWrapper.h
+++ b/media/libmedia/include/media/NdkWrapper.h
@@ -33,13 +33,13 @@
 struct AMediaDrm;
 struct AMediaFormat;
 struct AMediaExtractor;
+struct ANativeWindow;
 struct PsshInfo;
 
 namespace android {
 
 struct AMessage;
 class MetaData;
-class Surface;
 
 struct AMediaFormatWrapper : public RefBase {
     static sp<AMediaFormatWrapper> Create(const sp<AMessage> &message);
@@ -84,6 +84,23 @@
     DISALLOW_EVIL_CONSTRUCTORS(AMediaFormatWrapper);
 };
 
+struct ANativeWindowWrapper : public RefBase {
+    ANativeWindowWrapper(ANativeWindow *aNativeWindow);
+
+    // the returned ANativeWindow is still owned by this wrapper.
+    ANativeWindow *getANativeWindow() const;
+
+    status_t release();
+
+protected:
+    virtual ~ANativeWindowWrapper();
+
+private:
+    ANativeWindow *mANativeWindow;
+
+    DISALLOW_EVIL_CONSTRUCTORS(ANativeWindowWrapper);
+};
+
 struct AMediaDrmWrapper : public RefBase {
     AMediaDrmWrapper(const uint8_t uuid[16]);
     AMediaDrmWrapper(AMediaDrm *aMediaDrm);
@@ -205,7 +222,7 @@
 
     status_t configure(
             const sp<AMediaFormatWrapper> &format,
-            const sp<Surface> &surface,
+            const sp<ANativeWindowWrapper> &nww,
             const sp<AMediaCryptoWrapper> &crypto,
             uint32_t flags);
 
@@ -239,7 +256,7 @@
 
     status_t releaseOutputBuffer(size_t idx, bool render);
 
-    status_t setOutputSurface(const sp<Surface> &surface);
+    status_t setOutputSurface(const sp<ANativeWindowWrapper> &nww);
 
     status_t releaseOutputBufferAtTime(size_t idx, int64_t timestampNs);
 
diff --git a/media/libmedia/include/media/mediaplayer2.h b/media/libmedia/include/media/mediaplayer2.h
index 2358a48..8327043 100644
--- a/media/libmedia/include/media/mediaplayer2.h
+++ b/media/libmedia/include/media/mediaplayer2.h
@@ -31,13 +31,10 @@
 #include <utils/String8.h>
 #include <utils/ThreadDefs.h>
 
-struct ANativeWindow;
-
 namespace android {
 
 struct AVSyncSettings;
-class IGraphicBufferProducer;
-class Surface;
+struct ANativeWindowWrapper;
 
 enum media2_event_type {
     MEDIA2_NOP               = 0, // interface test message
@@ -212,8 +209,7 @@
 
             status_t        setDataSource(int fd, int64_t offset, int64_t length);
             status_t        setDataSource(const sp<IDataSource> &source);
-            status_t        setVideoSurfaceTexture(
-                                    const sp<IGraphicBufferProducer>& bufferProducer);
+            status_t        setVideoSurfaceTexture(const sp<ANativeWindowWrapper>& nww);
             status_t        setListener(const sp<MediaPlayer2Listener>& listener);
             status_t        getBufferingSettings(BufferingSettings* buffering /* nonnull */);
             status_t        setBufferingSettings(const BufferingSettings& buffering);
diff --git a/media/libmedia/mediaplayer2.cpp b/media/libmedia/mediaplayer2.cpp
index 40d38fa..5a52abf 100644
--- a/media/libmedia/mediaplayer2.cpp
+++ b/media/libmedia/mediaplayer2.cpp
@@ -29,14 +29,13 @@
 #include <binder/IServiceManager.h>
 #include <binder/IPCThreadState.h>
 
-#include <gui/Surface.h>
-
 #include <media/mediaplayer2.h>
 #include <media/AudioResamplerPublic.h>
 #include <media/AudioSystem.h>
 #include <media/AVSyncSettings.h>
 #include <media/IDataSource.h>
 #include <media/MediaAnalyticsItem.h>
+#include <media/NdkWrapper.h>
 
 #include <binder/MemoryBase.h>
 
@@ -231,13 +230,12 @@
     return mPlayer->getMetadata(update_only, apply_filter, metadata);
 }
 
-status_t MediaPlayer2::setVideoSurfaceTexture(
-        const sp<IGraphicBufferProducer>& bufferProducer)
+status_t MediaPlayer2::setVideoSurfaceTexture(const sp<ANativeWindowWrapper>& nww)
 {
     ALOGV("setVideoSurfaceTexture");
     Mutex::Autolock _l(mLock);
     if (mPlayer == 0) return NO_INIT;
-    return mPlayer->setVideoSurfaceTexture(bufferProducer);
+    return mPlayer->setVideoSurfaceTexture(nww);
 }
 
 status_t MediaPlayer2::getBufferingSettings(BufferingSettings* buffering /* nonnull */)
diff --git a/media/libmedia/nuplayer2/Android.bp b/media/libmedia/nuplayer2/Android.bp
index 2a1fc59..d609ba0 100644
--- a/media/libmedia/nuplayer2/Android.bp
+++ b/media/libmedia/nuplayer2/Android.bp
@@ -4,7 +4,6 @@
         "JWakeLock.cpp",
         "GenericSource.cpp",
         "HTTPLiveSource.cpp",
-        "NdkWrapper.cpp",
         "NuPlayer2.cpp",
         "NuPlayer2CCDecoder.cpp",
         "NuPlayer2Decoder.cpp",
@@ -23,6 +22,7 @@
     ],
 
     include_dirs: [
+        "frameworks/av/media/libmedia/include",
         "frameworks/av/media/libstagefright",
         "frameworks/av/media/libstagefright/httplive",
         "frameworks/av/media/libstagefright/include",
diff --git a/media/libmedia/nuplayer2/GenericSource.cpp b/media/libmedia/nuplayer2/GenericSource.cpp
index 8142767..f8bc4f1 100644
--- a/media/libmedia/nuplayer2/GenericSource.cpp
+++ b/media/libmedia/nuplayer2/GenericSource.cpp
@@ -18,7 +18,6 @@
 #define LOG_TAG "GenericSource"
 
 #include "GenericSource.h"
-#include "NdkWrapper.h"
 #include "NuPlayer2Drm.h"
 
 #include "AnotherPacketSource.h"
@@ -29,6 +28,7 @@
 #include <media/MediaHTTPService.h>
 #include <media/MediaExtractor.h>
 #include <media/MediaSource.h>
+#include <media/NdkWrapper.h>
 #include <media/stagefright/foundation/ABuffer.h>
 #include <media/stagefright/foundation/ADebug.h>
 #include <media/stagefright/foundation/AMessage.h>
diff --git a/media/libmedia/nuplayer2/NuPlayer2.cpp b/media/libmedia/nuplayer2/NuPlayer2.cpp
index aa0c8d1..2745219 100644
--- a/media/libmedia/nuplayer2/NuPlayer2.cpp
+++ b/media/libmedia/nuplayer2/NuPlayer2.cpp
@@ -24,7 +24,6 @@
 #include "NuPlayer2.h"
 
 #include "HTTPLiveSource.h"
-#include "NdkWrapper.h"
 #include "NuPlayer2CCDecoder.h"
 #include "NuPlayer2Decoder.h"
 #include "NuPlayer2DecoderBase.h"
@@ -45,6 +44,7 @@
 #include <media/AudioResamplerPublic.h>
 #include <media/AVSyncSettings.h>
 #include <media/MediaCodecBuffer.h>
+#include <media/NdkWrapper.h>
 
 #include <media/stagefright/foundation/hexdump.h>
 #include <media/stagefright/foundation/ABuffer.h>
@@ -57,13 +57,11 @@
 #include <media/stagefright/MediaErrors.h>
 #include <media/stagefright/MetaData.h>
 
-#include <gui/IGraphicBufferProducer.h>
-#include <gui/Surface.h>
-
-
 #include "ESDS.h"
 #include <media/stagefright/Utils.h>
 
+#include <system/window.h>
+
 namespace android {
 
 static status_t sendMetaDataToHal(sp<MediaPlayer2Base::AudioSink>& sink,
@@ -143,16 +141,16 @@
 };
 
 struct NuPlayer2::SetSurfaceAction : public Action {
-    explicit SetSurfaceAction(const sp<Surface> &surface)
-        : mSurface(surface) {
+    explicit SetSurfaceAction(const sp<ANativeWindowWrapper> &nww)
+        : mNativeWindow(nww) {
     }
 
     virtual void execute(NuPlayer2 *player) {
-        player->performSetSurface(mSurface);
+        player->performSetSurface(mNativeWindow);
     }
 
 private:
-    sp<Surface> mSurface;
+    sp<ANativeWindowWrapper> mNativeWindow;
 
     DISALLOW_EVIL_CONSTRUCTORS(SetSurfaceAction);
 };
@@ -407,14 +405,13 @@
     (new AMessage(kWhatPrepare, this))->post();
 }
 
-void NuPlayer2::setVideoSurfaceTextureAsync(
-        const sp<IGraphicBufferProducer> &bufferProducer) {
+void NuPlayer2::setVideoSurfaceTextureAsync(const sp<ANativeWindowWrapper> &nww) {
     sp<AMessage> msg = new AMessage(kWhatSetVideoSurface, this);
 
-    if (bufferProducer == NULL) {
+    if (nww == NULL || nww->getANativeWindow() == NULL) {
         msg->setObject("surface", NULL);
     } else {
-        msg->setObject("surface", new Surface(bufferProducer, true /* controlledByApp */));
+        msg->setObject("surface", nww);
     }
 
     msg->post();
@@ -792,10 +789,10 @@
 
             sp<RefBase> obj;
             CHECK(msg->findObject("surface", &obj));
-            sp<Surface> surface = static_cast<Surface *>(obj.get());
+            sp<ANativeWindowWrapper> nww = static_cast<ANativeWindowWrapper *>(obj.get());
 
             ALOGD("onSetVideoSurface(%p, %s video decoder)",
-                    surface.get(),
+                    (nww == NULL ? NULL : nww->getANativeWindow()),
                     (mSource != NULL && mStarted && mSource->getFormat(false /* audio */) != NULL
                             && mVideoDecoder != NULL) ? "have" : "no");
 
@@ -803,9 +800,9 @@
             // be in preparing state and it could take long time.
             // When mStarted is true, mSource must have been set.
             if (mSource == NULL || !mStarted || mSource->getFormat(false /* audio */) == NULL
-                    // NOTE: mVideoDecoder's mSurface is always non-null
-                    || (mVideoDecoder != NULL && mVideoDecoder->setVideoSurface(surface) == OK)) {
-                performSetSurface(surface);
+                    // NOTE: mVideoDecoder's mNativeWindow is always non-null
+                    || (mVideoDecoder != NULL && mVideoDecoder->setVideoSurface(nww) == OK)) {
+                performSetSurface(nww);
                 break;
             }
 
@@ -814,7 +811,7 @@
                             (obj != NULL ? FLUSH_CMD_FLUSH : FLUSH_CMD_NONE) /* audio */,
                                            FLUSH_CMD_SHUTDOWN /* video */));
 
-            mDeferredActions.push_back(new SetSurfaceAction(surface));
+            mDeferredActions.push_back(new SetSurfaceAction(nww));
 
             if (obj != NULL) {
                 if (mStarted) {
@@ -1033,7 +1030,7 @@
 
             // initialize video before audio because successful initialization of
             // video may change deep buffer mode of audio.
-            if (mSurface != NULL) {
+            if (mNativeWindow != NULL && mNativeWindow->getANativeWindow() != NULL) {
                 if (instantiateDecoder(false, &mVideoDecoder) == -EWOULDBLOCK) {
                     rescan = true;
                 }
@@ -1219,7 +1216,8 @@
                 if (mSource != nullptr) {
                     if (audio) {
                         if (mVideoDecoderError || mSource->getFormat(false /* audio */) == NULL
-                                || mSurface == NULL || mVideoDecoder == NULL) {
+                                || mNativeWindow == NULL || mNativeWindow->getANativeWindow() == NULL
+                                || mVideoDecoder == NULL) {
                             // When both audio and video have error, or this stream has only audio
                             // which has error, notify client of error.
                             notifyListener(MEDIA2_ERROR, MEDIA2_ERROR_UNKNOWN, err);
@@ -1505,7 +1503,7 @@
 
     // TRICKY: We rely on mRenderer being null, so that decoder does not start requesting
     // data on instantiation.
-    if (mSurface != NULL) {
+    if (mNativeWindow != NULL && mNativeWindow->getANativeWindow() != NULL) {
         err = instantiateDecoder(false, &mVideoDecoder);
         if (err != OK) {
             return err;
@@ -1934,7 +1932,7 @@
         notify->setInt32("generation", mVideoDecoderGeneration);
 
         *decoder = new Decoder(
-                notify, mSource, mPID, mUID, mRenderer, mSurface, mCCDecoder);
+                notify, mSource, mPID, mUID, mRenderer, mNativeWindow, mCCDecoder);
         mVideoDecoderError = false;
 
         // enable FRC if high-quality AV sync is requested, even if not
@@ -2141,8 +2139,9 @@
 
 status_t NuPlayer2::setVideoScalingMode(int32_t mode) {
     mVideoScalingMode = mode;
-    if (mSurface != NULL) {
-        status_t ret = native_window_set_scaling_mode(mSurface.get(), mVideoScalingMode);
+    if (mNativeWindow != NULL && mNativeWindow->getANativeWindow() != NULL) {
+        status_t ret = native_window_set_scaling_mode(
+                mNativeWindow->getANativeWindow(), mVideoScalingMode);
         if (ret != OK) {
             ALOGE("Failed to set scaling mode (%d): %s",
                 -ret, strerror(-ret));
@@ -2375,10 +2374,10 @@
     }
 }
 
-void NuPlayer2::performSetSurface(const sp<Surface> &surface) {
+void NuPlayer2::performSetSurface(const sp<ANativeWindowWrapper> &nww) {
     ALOGV("performSetSurface");
 
-    mSurface = surface;
+    mNativeWindow = nww;
 
     // XXX - ignore error from setVideoScalingMode for now
     setVideoScalingMode(mVideoScalingMode);
diff --git a/media/libmedia/nuplayer2/NuPlayer2.h b/media/libmedia/nuplayer2/NuPlayer2.h
index 6dc6442..638b259 100644
--- a/media/libmedia/nuplayer2/NuPlayer2.h
+++ b/media/libmedia/nuplayer2/NuPlayer2.h
@@ -27,6 +27,7 @@
 struct ABuffer;
 struct AMediaCryptoWrapper;
 struct AMessage;
+struct ANativeWindowWrapper;
 struct AudioPlaybackRate;
 struct AVSyncSettings;
 class IDataSource;
@@ -58,8 +59,7 @@
 
     void prepareAsync();
 
-    void setVideoSurfaceTextureAsync(
-            const sp<IGraphicBufferProducer> &bufferProducer);
+    void setVideoSurfaceTextureAsync(const sp<ANativeWindowWrapper> &nww);
 
     void setAudioSink(const sp<MediaPlayer2Base::AudioSink> &sink);
     status_t setPlaybackSettings(const AudioPlaybackRate &rate);
@@ -167,7 +167,7 @@
     Mutex mSourceLock;  // guard |mSource|.
     sp<Source> mSource;
     uint32_t mSourceFlags;
-    sp<Surface> mSurface;
+    sp<ANativeWindowWrapper> mNativeWindow;
     sp<MediaPlayer2Base::AudioSink> mAudioSink;
     sp<DecoderBase> mVideoDecoder;
     bool mOffloadAudio;
@@ -320,7 +320,7 @@
     void performDecoderFlush(FlushCommand audio, FlushCommand video);
     void performReset();
     void performScanSources();
-    void performSetSurface(const sp<Surface> &wrapper);
+    void performSetSurface(const sp<ANativeWindowWrapper> &nw);
     void performResumeDecoders(bool needNotify);
 
     void onSourceNotify(const sp<AMessage> &msg);
diff --git a/media/libmedia/nuplayer2/NuPlayer2Decoder.cpp b/media/libmedia/nuplayer2/NuPlayer2Decoder.cpp
index d78a8e8..25d41f3 100644
--- a/media/libmedia/nuplayer2/NuPlayer2Decoder.cpp
+++ b/media/libmedia/nuplayer2/NuPlayer2Decoder.cpp
@@ -21,7 +21,6 @@
 
 #include <algorithm>
 
-#include "NdkWrapper.h"
 #include "NuPlayer2CCDecoder.h"
 #include "NuPlayer2Decoder.h"
 #include "NuPlayer2Drm.h"
@@ -31,6 +30,7 @@
 #include <cutils/properties.h>
 #include <media/MediaCodecBuffer.h>
 #include <media/NdkMediaCodec.h>
+#include <media/NdkWrapper.h>
 #include <media/stagefright/foundation/ABuffer.h>
 #include <media/stagefright/foundation/ADebug.h>
 #include <media/stagefright/foundation/AMessage.h>
@@ -39,7 +39,6 @@
 #include <media/stagefright/MediaDefs.h>
 #include <media/stagefright/MediaErrors.h>
 #include <media/stagefright/SurfaceUtils.h>
-#include <gui/Surface.h>
 
 #include "ATSParser.h"
 
@@ -61,10 +60,10 @@
         pid_t pid,
         uid_t uid,
         const sp<Renderer> &renderer,
-        const sp<Surface> &surface,
+        const sp<ANativeWindowWrapper> &nww,
         const sp<CCDecoder> &ccDecoder)
     : DecoderBase(notify),
-      mSurface(surface),
+      mNativeWindow(nww),
       mSource(source),
       mRenderer(renderer),
       mCCDecoder(ccDecoder),
@@ -109,14 +108,15 @@
     return mStats;
 }
 
-status_t NuPlayer2::Decoder::setVideoSurface(const sp<Surface> &surface) {
-    if (surface == NULL || ADebug::isExperimentEnabled("legacy-setsurface")) {
+status_t NuPlayer2::Decoder::setVideoSurface(const sp<ANativeWindowWrapper> &nww) {
+    if (nww == NULL || nww->getANativeWindow() == NULL
+        || ADebug::isExperimentEnabled("legacy-setsurface")) {
         return BAD_VALUE;
     }
 
     sp<AMessage> msg = new AMessage(kWhatSetVideoSurface, this);
 
-    msg->setObject("surface", surface);
+    msg->setObject("surface", nww);
     sp<AMessage> response;
     status_t err = msg->postAndAwaitResponse(&response);
     if (err == OK && response != NULL) {
@@ -226,30 +226,37 @@
 
             sp<RefBase> obj;
             CHECK(msg->findObject("surface", &obj));
-            sp<Surface> surface = static_cast<Surface *>(obj.get()); // non-null
+            sp<ANativeWindowWrapper> nww =
+                static_cast<ANativeWindowWrapper *>(obj.get()); // non-null
+            if (nww == NULL || nww->getANativeWindow() == NULL) {
+                break;
+            }
             int32_t err = INVALID_OPERATION;
-            // NOTE: in practice mSurface is always non-null, but checking here for completeness
-            if (mCodec != NULL && mSurface != NULL) {
+            // NOTE: in practice mNativeWindow is always non-null,
+            // but checking here for completeness
+            if (mCodec != NULL
+                && mNativeWindow != NULL && mNativeWindow->getANativeWindow() != NULL) {
                 // TODO: once AwesomePlayer is removed, remove this automatic connecting
                 // to the surface by MediaPlayerService.
                 //
-                // at this point MediaPlayerService::client has already connected to the
+                // at this point MediaPlayer2Manager::client has already connected to the
                 // surface, which MediaCodec does not expect
-                err = nativeWindowDisconnect(surface.get(), "kWhatSetVideoSurface(surface)");
+                err = nativeWindowDisconnect(nww->getANativeWindow(), "kWhatSetVideoSurface(nww)");
                 if (err == OK) {
-                    err = mCodec->setOutputSurface(surface);
+                    err = mCodec->setOutputSurface(nww);
                     ALOGI_IF(err, "codec setOutputSurface returned: %d", err);
                     if (err == OK) {
                         // reconnect to the old surface as MPS::Client will expect to
                         // be able to disconnect from it.
-                        (void)nativeWindowConnect(mSurface.get(), "kWhatSetVideoSurface(mSurface)");
-                        mSurface = surface;
+                        (void)nativeWindowConnect(mNativeWindow->getANativeWindow(),
+                                                  "kWhatSetVideoSurface(mNativeWindow)");
+                        mNativeWindow = nww;
                     }
                 }
                 if (err != OK) {
                     // reconnect to the new surface on error as MPS::Client will expect to
                     // be able to disconnect from it.
-                    (void)nativeWindowConnect(surface.get(), "kWhatSetVideoSurface(err)");
+                    (void)nativeWindowConnect(nww->getANativeWindow(), "kWhatSetVideoSurface(err)");
                 }
             }
 
@@ -289,7 +296,8 @@
 
     mComponentName = mime;
     mComponentName.append(" decoder");
-    ALOGV("[%s] onConfigure (surface=%p)", mComponentName.c_str(), mSurface.get());
+    ALOGV("[%s] onConfigure (nww=%p)", mComponentName.c_str(),
+          (mNativeWindow == NULL ? NULL : mNativeWindow->getANativeWindow()));
 
     mCodec = AMediaCodecWrapper::CreateDecoderByType(mime);
     int32_t secure = 0;
@@ -316,9 +324,9 @@
     mCodec->getName(&mComponentName);
 
     status_t err;
-    if (mSurface != NULL) {
+    if (mNativeWindow != NULL && mNativeWindow->getANativeWindow() != NULL) {
         // disconnect from surface as MediaCodec will reconnect
-        err = nativeWindowDisconnect(mSurface.get(), "onConfigure");
+        err = nativeWindowDisconnect(mNativeWindow->getANativeWindow(), "onConfigure");
         // We treat this as a warning, as this is a preparatory step.
         // Codec will try to connect to the surface, which is where
         // any error signaling will occur.
@@ -337,7 +345,7 @@
 
     err = mCodec->configure(
             AMediaFormatWrapper::Create(format),
-            mSurface,
+            mNativeWindow,
             crypto,
             0 /* flags */);
 
@@ -530,9 +538,9 @@
         mCodec = NULL;
         ++mBufferGeneration;
 
-        if (mSurface != NULL) {
+        if (mNativeWindow != NULL && mNativeWindow->getANativeWindow() != NULL) {
             // reconnect to surface as MediaCodec disconnected from it
-            status_t error = nativeWindowConnect(mSurface.get(), "onShutdown");
+            status_t error = nativeWindowConnect(mNativeWindow->getANativeWindow(), "onShutdown");
             ALOGW_IF(error != NO_ERROR,
                     "[%s] failed to connect to native window, error=%d",
                     mComponentName.c_str(), error);
diff --git a/media/libmedia/nuplayer2/NuPlayer2Decoder.h b/media/libmedia/nuplayer2/NuPlayer2Decoder.h
index 58f70e7..fdfb10e 100644
--- a/media/libmedia/nuplayer2/NuPlayer2Decoder.h
+++ b/media/libmedia/nuplayer2/NuPlayer2Decoder.h
@@ -34,13 +34,13 @@
             pid_t pid,
             uid_t uid,
             const sp<Renderer> &renderer = NULL,
-            const sp<Surface> &surface = NULL,
+            const sp<ANativeWindowWrapper> &nww = NULL,
             const sp<CCDecoder> &ccDecoder = NULL);
 
     virtual sp<AMessage> getStats() const;
 
     // sets the output surface of video decoders.
-    virtual status_t setVideoSurface(const sp<Surface> &surface);
+    virtual status_t setVideoSurface(const sp<ANativeWindowWrapper> &nww);
 
     virtual status_t releaseCrypto();
 
@@ -70,7 +70,7 @@
         kMaxNumVideoTemporalLayers = 32,
     };
 
-    sp<Surface> mSurface;
+    sp<ANativeWindowWrapper> mNativeWindow;
 
     sp<Source> mSource;
     sp<Renderer> mRenderer;
diff --git a/media/libmedia/nuplayer2/NuPlayer2DecoderBase.h b/media/libmedia/nuplayer2/NuPlayer2DecoderBase.h
index 2819dae..1e57f0d 100644
--- a/media/libmedia/nuplayer2/NuPlayer2DecoderBase.h
+++ b/media/libmedia/nuplayer2/NuPlayer2DecoderBase.h
@@ -25,10 +25,10 @@
 namespace android {
 
 struct ABuffer;
+struct ANativeWindowWrapper;
 struct MediaCodec;
 class MediaBuffer;
 class MediaCodecBuffer;
-class Surface;
 
 struct NuPlayer2::DecoderBase : public AHandler {
     explicit DecoderBase(const sp<AMessage> &notify);
@@ -41,7 +41,7 @@
     void pause();
 
     void setRenderer(const sp<Renderer> &renderer);
-    virtual status_t setVideoSurface(const sp<Surface> &) { return INVALID_OPERATION; }
+    virtual status_t setVideoSurface(const sp<ANativeWindowWrapper> &) { return INVALID_OPERATION; }
 
     void signalFlush();
     void signalResume(bool notifyComplete);
diff --git a/media/libmedia/nuplayer2/NuPlayer2Driver.cpp b/media/libmedia/nuplayer2/NuPlayer2Driver.cpp
index dd0da8a..c4e42e7 100644
--- a/media/libmedia/nuplayer2/NuPlayer2Driver.cpp
+++ b/media/libmedia/nuplayer2/NuPlayer2Driver.cpp
@@ -219,8 +219,7 @@
     return mAsyncResult;
 }
 
-status_t NuPlayer2Driver::setVideoSurfaceTexture(
-        const sp<IGraphicBufferProducer> &bufferProducer) {
+status_t NuPlayer2Driver::setVideoSurfaceTexture(const sp<ANativeWindowWrapper> &nww) {
     ALOGV("setVideoSurfaceTexture(%p)", this);
     Mutex::Autolock autoLock(mLock);
 
@@ -239,7 +238,7 @@
 
     mSetSurfaceInProgress = true;
 
-    mPlayer->setVideoSurfaceTextureAsync(bufferProducer);
+    mPlayer->setVideoSurfaceTextureAsync(nww);
 
     while (mSetSurfaceInProgress) {
         mCondition.wait(mLock);
diff --git a/media/libmedia/nuplayer2/NuPlayer2Driver.h b/media/libmedia/nuplayer2/NuPlayer2Driver.h
index 0028d05..4451349 100644
--- a/media/libmedia/nuplayer2/NuPlayer2Driver.h
+++ b/media/libmedia/nuplayer2/NuPlayer2Driver.h
@@ -43,8 +43,7 @@
 
     virtual status_t setDataSource(const sp<DataSource>& dataSource);
 
-    virtual status_t setVideoSurfaceTexture(
-            const sp<IGraphicBufferProducer> &bufferProducer);
+    virtual status_t setVideoSurfaceTexture(const sp<ANativeWindowWrapper> &nww);
 
     virtual status_t getBufferingSettings(
             BufferingSettings* buffering /* nonnull */) override;
diff --git a/media/libmedia/nuplayer2/NuPlayer2Drm.cpp b/media/libmedia/nuplayer2/NuPlayer2Drm.cpp
index 5a4502a..4751849 100644
--- a/media/libmedia/nuplayer2/NuPlayer2Drm.cpp
+++ b/media/libmedia/nuplayer2/NuPlayer2Drm.cpp
@@ -19,7 +19,7 @@
 
 #include "NuPlayer2Drm.h"
 
-#include "NdkWrapper.h"
+#include <media/NdkWrapper.h>
 #include <utils/Log.h>
 
 
