diff options
author | Andreas Huber <andih@google.com> | 2011-01-21 14:32:31 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2011-01-21 14:32:31 -0800 |
commit | 5e9dc94a3c7a42d77ab454b77e1350b6fa5d2c26 (patch) | |
tree | 03559f1b3eab1a5068cecefcae558a7d4c11d8cd /media | |
parent | 05aa082770d812c5921d6b2f9b3559f1fd1536a8 (diff) | |
download | frameworks_base-5e9dc94a3c7a42d77ab454b77e1350b6fa5d2c26.zip frameworks_base-5e9dc94a3c7a42d77ab454b77e1350b6fa5d2c26.tar.gz frameworks_base-5e9dc94a3c7a42d77ab454b77e1350b6fa5d2c26.tar.bz2 |
Properly rotate video that's marked as such and decoded to a surface.
Change-Id: I1e9144db3447e58c99aac3f47702ad471678789c
related-to-bug: 3378148
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/OMXCodec.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index d842f65..94694a3 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -1680,6 +1680,33 @@ status_t OMXCodec::allocateBuffersOnPort(OMX_U32 portIndex) { return OK; } +status_t OMXCodec::applyRotation() { + sp<MetaData> meta = mSource->getFormat(); + + int32_t rotationDegrees; + if (!meta->findInt32(kKeyRotation, &rotationDegrees)) { + rotationDegrees = 0; + } + + uint32_t transform; + switch (rotationDegrees) { + case 0: transform = 0; break; + case 90: transform = HAL_TRANSFORM_ROT_90; break; + case 180: transform = HAL_TRANSFORM_ROT_180; break; + case 270: transform = HAL_TRANSFORM_ROT_270; break; + default: transform = 0; break; + } + + status_t err = OK; + + if (transform) { + err = native_window_set_buffers_transform( + mNativeWindow.get(), transform); + } + + return err; +} + status_t OMXCodec::allocateOutputBuffersFromNativeWindow() { // Get the number of buffers needed. OMX_PARAM_PORTDEFINITIONTYPE def; @@ -1713,6 +1740,11 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() { return err; } + err = applyRotation(); + if (err != OK) { + return err; + } + // Set up the native window. // XXX TODO: Get the gralloc usage flags from the OMX plugin! err = native_window_set_usage( |