summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2012-04-30 14:38:12 -0700
committerJames Dong <jdong@google.com>2012-05-01 10:30:58 -0700
commit4f6eed0d1c7972a983c075bdcf03089569e13fe1 (patch)
tree6eebbc397b99bf33e8c9991fada609d86d144caf
parent27431de020e535c31365884316f656bc60b4fe4f (diff)
downloadframeworks_av-4f6eed0d1c7972a983c075bdcf03089569e13fe1.zip
frameworks_av-4f6eed0d1c7972a983c075bdcf03089569e13fe1.tar.gz
frameworks_av-4f6eed0d1c7972a983c075bdcf03089569e13fe1.tar.bz2
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
-rw-r--r--include/media/mediaplayer.h1
-rw-r--r--media/libstagefright/AwesomePlayer.cpp26
-rwxr-xr-xmedia/libstagefright/OMXCodec.cpp15
-rw-r--r--media/libstagefright/include/AwesomePlayer.h3
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<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.