summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/OMXCodec.cpp
diff options
context:
space:
mode:
authorChristopher N. Hesse <raymanfx@gmail.com>2015-01-20 18:34:43 +0100
committerEthan Chen <intervigil@gmail.com>2015-11-04 11:42:29 -0800
commit85062db21be4a93cddde5b2db0c538c943846862 (patch)
tree466cca3cf35add29b6a4ec176862c3f331ca44f4 /media/libstagefright/OMXCodec.cpp
parentadf0071e9baf66e19feaa14eefaa20111282f002 (diff)
downloadframeworks_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.cpp43
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);