From 4f6eed0d1c7972a983c075bdcf03089569e13fe1 Mon Sep 17 00:00:00 2001 From: James Dong Date: Mon, 30 Apr 2012 14:38:12 -0700 Subject: 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 --- include/media/mediaplayer.h | 1 + media/libstagefright/AwesomePlayer.cpp | 26 ++++++++++++++++++++++++++ media/libstagefright/OMXCodec.cpp | 15 --------------- media/libstagefright/include/AwesomePlayer.h | 3 +++ 4 files changed, 30 insertions(+), 15 deletions(-) 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 @@ enum media_player_invoke_ids { 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 @@ AwesomePlayer::AwesomePlayer() mAudioPlayer(NULL), mDisplayWidth(0), mDisplayHeight(0), + mVideoScalingMode(NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW), mFlags(0), mExtractorFlags(0), mVideoBuffer(NULL), @@ -1081,6 +1082,8 @@ void AwesomePlayer::initRenderer_l() { // 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 @@ size_t AwesomePlayer::countTracks() const { 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 @@ status_t AwesomePlayer::invoke(const Parcel &request, Parcel *reply) { 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 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() { 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 @@ status_t OMXCodec::pushBlankBuffersToNativeWindow() { 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 @@ private: int32_t mDisplayWidth; int32_t mDisplayHeight; + int32_t mVideoScalingMode; uint32_t mFlags; uint32_t mExtractorFlags; @@ -318,6 +319,8 @@ private: Vector 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. -- cgit v1.1