diff options
author | Christopher N. Hesse <raymanfx@gmail.com> | 2015-01-20 18:34:43 +0100 |
---|---|---|
committer | Ethan Chen <intervigil@gmail.com> | 2015-11-04 11:42:29 -0800 |
commit | 85062db21be4a93cddde5b2db0c538c943846862 (patch) | |
tree | 466cca3cf35add29b6a4ec176862c3f331ca44f4 /media/libstagefright/OMXCodec.cpp | |
parent | adf0071e9baf66e19feaa14eefaa20111282f002 (diff) | |
download | frameworks_av-85062db21be4a93cddde5b2db0c538c943846862.zip frameworks_av-85062db21be4a93cddde5b2db0c538c943846862.tar.gz frameworks_av-85062db21be4a93cddde5b2db0c538c943846862.tar.bz2 |
stagefright: add Samsung S3D support
Taken from insignal:
http://git.insignal.co.kr/insignal/arndale_octa-jb_mr1.1/android/platform/frameworks/av/commit/?h=arndale_octa-jb_mr1.1&id=f3667253827f206e455b54df47234a2d4db05826
Requires a device specific gralloc header with the following define:
GRALLOC_USAGE_PRIVATE_NONSECURE.
Change-Id: Ie1bb31b8b6fa38cfc263e2b327eb914e476c912c
Diffstat (limited to 'media/libstagefright/OMXCodec.cpp')
-rw-r--r-- | media/libstagefright/OMXCodec.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index b1dde80..8d0bccd 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -56,6 +56,11 @@ #include "include/avc_utils.h" +#ifdef USE_S3D_SUPPORT +#include "Exynos_OMX_Def.h" +#include "ExynosHWCService.h" +#endif + namespace android { // Treat time out as an error if we have not received any output @@ -1821,6 +1826,10 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() { if (mFlags & kEnableGrallocUsageProtected) { usage |= GRALLOC_USAGE_PROTECTED; +#ifdef GRALLOC_USAGE_PRIVATE_NONSECURE + if (!(mFlags & kUseSecureInputBuffers)) + usage |= GRALLOC_USAGE_PRIVATE_NONSECURE; +#endif } err = setNativeWindowSizeFormatAndUsage( @@ -2373,7 +2382,41 @@ void OMXCodec::onEvent(OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2) { break; } #endif +#ifdef USE_S3D_SUPPORT + case (OMX_EVENTTYPE)OMX_EventS3DInformation: + { + if (mFlags & kClientNeedsFramebuffer) + break; + sp<IServiceManager> sm = defaultServiceManager(); + sp<android::IExynosHWCService> hwc = interface_cast<android::IExynosHWCService>( + sm->getService(String16("Exynos.HWCService"))); + if (hwc != NULL) { + if (data1 == OMX_TRUE) { + int eS3DMode; + switch (data2) { + case OMX_SEC_FPARGMT_SIDE_BY_SIDE: + eS3DMode = S3D_SBS; + break; + case OMX_SEC_FPARGMT_TOP_BOTTOM: + eS3DMode = S3D_TB; + break; + case OMX_SEC_FPARGMT_CHECKERBRD_INTERL: // unsupport format at HDMI + case OMX_SEC_FPARGMT_COLUMN_INTERL: + case OMX_SEC_FPARGMT_ROW_INTERL: + case OMX_SEC_FPARGMT_TEMPORAL_INTERL: + default: + eS3DMode = S3D_NONE; + } + + hwc->setHdmiResolution(0, eS3DMode); + } + } else { + ALOGE("Exynos.HWCService is unavailable"); + } + break; + } +#endif default: { CODEC_LOGV("EVENT(%d, %u, %u)", event, data1, data2); |