NuPlayer: set video surface directly when NuPlayer has not started yet.

Bug: 22119956
Change-Id: Ie174f4fc495ab8418993ff7887aaa6ae721c6008
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index 214315f..77b9799 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -632,10 +632,13 @@
 
             ALOGD("onSetVideoSurface(%p, %s video decoder)",
                     surface.get(),
-                    (mSource != NULL && mSource->getFormat(false /* audio */) != NULL
+                    (mSource != NULL && mStarted && mSource->getFormat(false /* audio */) != NULL
                             && mVideoDecoder != NULL) ? "have" : "no");
 
-            if (mSource == NULL || mSource->getFormat(false /* audio */) == NULL
+            // Need to check mStarted before calling mSource->getFormat because NuPlayer might
+            // 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);