Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b971006 authored by Christopher N. Hesse's avatar Christopher N. Hesse Committed by Ethan Chen
Browse files

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
parent 61955937
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -170,6 +170,28 @@ endif

endif

ifeq ($(BOARD_USE_S3D_SUPPORT), true)
ifeq ($(BOARD_USES_HWC_SERVICES), true)
LOCAL_CFLAGS += -DUSE_S3D_SUPPORT -DHWC_SERVICES
LOCAL_C_INCLUDES += \
        $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include \
        $(TOP)/hardware/samsung_slsi/openmax/include/exynos \
        $(TOP)/hardware/samsung_slsi/$(TARGET_BOARD_PLATFORM)-insignal/libhwcService \
        $(TOP)/hardware/samsung_slsi/$(TARGET_BOARD_PLATFORM)-insignal/libhwc \
        $(TOP)/hardware/samsung_slsi/$(TARGET_BOARD_PLATFORM)-insignal/include \
        $(TOP)/hardware/samsung_slsi/$(TARGET_SOC)/libhwcmodule \
        $(TOP)/hardware/samsung_slsi/$(TARGET_SOC)/include \
        $(TOP)/hardware/samsung_slsi/exynos/libexynosutils \
        $(TOP)/hardware/samsung_slsi/exynos/include

LOCAL_ADDITIONAL_DEPENDENCIES := \
        $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr

LOCAL_SHARED_LIBRARIES += \
        libExynosHWCService
endif
endif

LOCAL_SHARED_LIBRARIES += \
        libstagefright_enc_common \
        libstagefright_avc_common \
+42 −0
Original line number Diff line number Diff line
@@ -74,6 +74,11 @@
#include <sec_format.h>
#endif

#ifdef USE_S3D_SUPPORT
#include "Exynos_OMX_Def.h"
#include "ExynosHWCService.h"
#endif

namespace android {

#ifdef USE_SAMSUNG_COLORFORMAT
@@ -2198,6 +2203,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
    }

    // Make sure to check whether either Stagefright or the video decoder
@@ -2976,7 +2985,40 @@ 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);