summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-11-04 14:04:08 -0700
committerAndreas Huber <andih@google.com>2010-11-04 14:04:08 -0700
commit7d308b99544a6e8c5387ccee7095a780dcd9f957 (patch)
tree28f4b34e5d161d125591cbb46768a82064823996
parent637d2d047afc8033f91357725474b32b74173c65 (diff)
downloadmsm7k-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.cpp16
-rw-r--r--libstagefrighthw/QComHardwareRenderer.h4
-rw-r--r--libstagefrighthw/stagefright_surface_output_msm72xx.cpp8
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;