diff options
author | Andreas Huber <andih@google.com> | 2010-11-04 14:04:08 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-11-04 14:04:08 -0700 |
commit | 7d308b99544a6e8c5387ccee7095a780dcd9f957 (patch) | |
tree | 28f4b34e5d161d125591cbb46768a82064823996 | |
parent | 637d2d047afc8033f91357725474b32b74173c65 (diff) | |
download | msm7k-7d308b99544a6e8c5387ccee7095a780dcd9f957.tar.gz |
Support for rotated display of video content.android-cts-2.3_r1android-2.3_r1android-2.3.2_r1android-2.3.1_r1
Change-Id: Ia16e096287fb7b2432f7a142647edf4f5f038ced
related-to-bug: 3166122
-rw-r--r-- | libstagefrighthw/QComHardwareRenderer.cpp | 16 | ||||
-rw-r--r-- | libstagefrighthw/QComHardwareRenderer.h | 4 | ||||
-rw-r--r-- | libstagefrighthw/stagefright_surface_output_msm72xx.cpp | 8 |
3 files changed, 22 insertions, 6 deletions
diff --git a/libstagefrighthw/QComHardwareRenderer.cpp b/libstagefrighthw/QComHardwareRenderer.cpp index 8dd505b..34ce1f1 100644 --- a/libstagefrighthw/QComHardwareRenderer.cpp +++ b/libstagefrighthw/QComHardwareRenderer.cpp @@ -60,13 +60,15 @@ typedef struct PLATFORM_PRIVATE_PMEM_INFO QComHardwareRenderer::QComHardwareRenderer( const sp<ISurface> &surface, size_t displayWidth, size_t displayHeight, - size_t decodedWidth, size_t decodedHeight) + size_t decodedWidth, size_t decodedHeight, + int32_t rotationDegrees) : mISurface(surface), mDisplayWidth(displayWidth), mDisplayHeight(displayHeight), mDecodedWidth(decodedWidth), mDecodedHeight(decodedHeight), - mFrameSize((mDecodedWidth * mDecodedHeight * 3) / 2) { + mFrameSize((mDecodedWidth * mDecodedHeight * 3) / 2), + mRotationDegrees(rotationDegrees) { CHECK(mISurface.get() != NULL); CHECK(mDecodedWidth > 0); CHECK(mDecodedHeight > 0); @@ -126,10 +128,20 @@ void QComHardwareRenderer::publishBuffers(uint32_t pmem_fd) { mMemoryHeap = new MemoryHeapPmem(master, heap_flags); mMemoryHeap->slap(); + uint32_t orientation; + switch (mRotationDegrees) { + case 0: orientation = ISurface::BufferHeap::ROT_0; break; + case 90: orientation = ISurface::BufferHeap::ROT_90; break; + case 180: orientation = ISurface::BufferHeap::ROT_180; break; + case 270: orientation = ISurface::BufferHeap::ROT_270; break; + default: orientation = ISurface::BufferHeap::ROT_0; break; + } + ISurface::BufferHeap bufferHeap( mDisplayWidth, mDisplayHeight, mDecodedWidth, mDecodedHeight, HAL_PIXEL_FORMAT_YCrCb_420_SP, + orientation, 0, mMemoryHeap); status_t err = mISurface->registerBuffers(bufferHeap); diff --git a/libstagefrighthw/QComHardwareRenderer.h b/libstagefrighthw/QComHardwareRenderer.h index 8292dd5..c43652f 100644 --- a/libstagefrighthw/QComHardwareRenderer.h +++ b/libstagefrighthw/QComHardwareRenderer.h @@ -31,7 +31,8 @@ public: QComHardwareRenderer( const sp<ISurface> &surface, size_t displayWidth, size_t displayHeight, - size_t decodedWidth, size_t decodedHeight); + size_t decodedWidth, size_t decodedHeight, + int32_t rotationDegrees); virtual ~QComHardwareRenderer(); @@ -43,6 +44,7 @@ private: size_t mDisplayWidth, mDisplayHeight; size_t mDecodedWidth, mDecodedHeight; size_t mFrameSize; + int32_t mRotationDegrees; sp<MemoryHeapPmem> mMemoryHeap; bool getOffset(void *platformPrivate, size_t *offset); diff --git a/libstagefrighthw/stagefright_surface_output_msm72xx.cpp b/libstagefrighthw/stagefright_surface_output_msm72xx.cpp index 3cfa7fc..6255083 100644 --- a/libstagefrighthw/stagefright_surface_output_msm72xx.cpp +++ b/libstagefrighthw/stagefright_surface_output_msm72xx.cpp @@ -22,12 +22,13 @@ using android::sp; using android::ISurface; using android::VideoRenderer; -VideoRenderer *createRenderer( +VideoRenderer *createRendererWithRotation( const sp<ISurface> &surface, const char *componentName, OMX_COLOR_FORMATTYPE colorFormat, size_t displayWidth, size_t displayHeight, - size_t decodedWidth, size_t decodedHeight) { + size_t decodedWidth, size_t decodedHeight, + int32_t rotationDegrees) { using android::QComHardwareRenderer; static const int OMX_QCOM_COLOR_FormatYVU420SemiPlanar = 0x7FA30C00; @@ -36,7 +37,8 @@ VideoRenderer *createRenderer( && !strncmp(componentName, "OMX.qcom.video.decoder.", 23)) { return new QComHardwareRenderer( surface, displayWidth, displayHeight, - decodedWidth, decodedHeight); + decodedWidth, decodedHeight, + rotationDegrees); } return NULL; |