Impl for supporting two video scaling modes

o allows the video scaling mode to change at any time
o also remove the scaling mode logic in OMXCodec.cpp

o related-to-bug: 5454345

Change-Id: I6f1714eb0c2774591ce650d56c1e779b8afd085f
diff --git a/include/media/mediaplayer.h b/include/media/mediaplayer.h
index a68ab4e..1fad383 100644
--- a/include/media/mediaplayer.h
+++ b/include/media/mediaplayer.h
@@ -162,6 +162,7 @@
     INVOKE_ID_ADD_EXTERNAL_SOURCE_FD = 3,
     INVOKE_ID_SELECT_TRACK = 4,
     INVOKE_ID_UNSELECT_TRACK = 5,
+    INVOKE_ID_SET_VIDEO_SCALING_MODE = 6,
 };
 
 // Keep MEDIA_TRACK_TYPE_* in sync with MediaPlayer.java.
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 1387e74..cc3fae6 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -184,6 +184,7 @@
       mAudioPlayer(NULL),
       mDisplayWidth(0),
       mDisplayHeight(0),
+      mVideoScalingMode(NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW),
       mFlags(0),
       mExtractorFlags(0),
       mVideoBuffer(NULL),
@@ -1081,6 +1082,8 @@
     // before creating a new one.
     IPCThreadState::self()->flushCommands();
 
+    // Even if set scaling mode fails, we will continue anyway
+    setVideoScalingMode_l(mVideoScalingMode);
     if (USE_SURFACE_ALLOC
             && !strncmp(component, "OMX.", 4)
             && strncmp(component, "OMX.google.", 11)
@@ -2362,6 +2365,23 @@
     return mExtractor->countTracks() + mTextDriver->countExternalTracks();
 }
 
+status_t AwesomePlayer::setVideoScalingMode(int32_t mode) {
+    Mutex::Autolock lock(mLock);
+    return setVideoScalingMode_l(mode);
+}
+
+status_t AwesomePlayer::setVideoScalingMode_l(int32_t mode) {
+    mVideoScalingMode = mode;
+    if (mNativeWindow != NULL) {
+        status_t err = native_window_set_scaling_mode(
+                mNativeWindow.get(), mVideoScalingMode);
+        if (err != OK) {
+            ALOGW("Failed to set scaling mode: %d", err);
+        }
+    }
+    return OK;
+}
+
 status_t AwesomePlayer::invoke(const Parcel &request, Parcel *reply) {
     if (NULL == reply) {
         return android::BAD_VALUE;
@@ -2372,6 +2392,12 @@
         return ret;
     }
     switch(methodId) {
+        case INVOKE_ID_SET_VIDEO_SCALING_MODE:
+        {
+            int mode = request.readInt32();
+            return setVideoScalingMode(mode);
+        }
+
         case INVOKE_ID_GET_TRACK_INFO:
         {
             return getTrackInfo(reply);
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index 791e044..56016a8 100755
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -1683,13 +1683,6 @@
         return err;
     }
 
-    err = native_window_set_scaling_mode(mNativeWindow.get(),
-            NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW);
-
-    if (err != OK) {
-        return err;
-    }
-
     err = native_window_set_buffers_geometry(
             mNativeWindow.get(),
             def.format.video.nFrameWidth,
@@ -1913,14 +1906,6 @@
         return err;
     }
 
-    err = native_window_set_scaling_mode(mNativeWindow.get(),
-            NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW);
-    if (err != NO_ERROR) {
-        ALOGE("error pushing blank frames: set_buffers_geometry failed: %s (%d)",
-                strerror(-err), -err);
-        goto error;
-    }
-
     err = native_window_set_buffers_geometry(mNativeWindow.get(), 1, 1,
             HAL_PIXEL_FORMAT_RGBX_8888);
     if (err != NO_ERROR) {
diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h
index a2e2e85..1409dc7 100644
--- a/media/libstagefright/include/AwesomePlayer.h
+++ b/media/libstagefright/include/AwesomePlayer.h
@@ -175,6 +175,7 @@
 
     int32_t mDisplayWidth;
     int32_t mDisplayHeight;
+    int32_t mVideoScalingMode;
 
     uint32_t mFlags;
     uint32_t mExtractorFlags;
@@ -318,6 +319,8 @@
         Vector<TrackStat> mTracks;
     } mStats;
 
+    status_t setVideoScalingMode(int32_t mode);
+    status_t setVideoScalingMode_l(int32_t mode);
     status_t getTrackInfo(Parcel* reply) const;
 
     // when select is true, the given track is selected.