h264dec/include: support S3D
authorTaehwan Kim <t_h.kim@samsung.com>
Wed, 5 Dec 2012 01:43:30 +0000 (01:43 +0000)
committerTaehwan Kim <t_h.kim@samsung.com>
Thu, 6 Dec 2012 09:24:25 +0000 (09:24 +0000)
added VIDEO_FRAME_STATUS_ENABLED_S3D handling
and the OMX_EventS3DInformation event,
in order to support S3D.

Change-Id: I189b10a1b760bb7c7db4e49836988d70122fbf10
Signed-off-by: Taehwan Kim <t_h.kim@samsung.com>
component/video/dec/h264/Exynos_OMX_H264dec.c
include/exynos/Exynos_OMX_Def.h

index d55a1da48bb1687f2a064f647ab32a519a1bc16a..9a2e724558c5e3eaab27f1fbbd67038c49f718a4 100644 (file)
@@ -742,12 +742,12 @@ OMX_BOOL H264CodecCheckFramePacking(OMX_COMPONENTTYPE *pOMXComponent)
 
         pH264Dec->hMFCH264Handle.S3DFPArgmtType = (EXYNOS_OMX_FPARGMT_TYPE) framePacking.arrangement_type;
         /** Send Port Settings changed call back - output color format change */
-       (*(pExynosComponent->pCallbacks->EventHandler))
+        (*(pExynosComponent->pCallbacks->EventHandler))
               (pOMXComponent,
                pExynosComponent->callbackData,
-               OMX_EventPortSettingsChanged, /* The command was completed */
-               OMX_DirOutput, /* This is the port index */
-               0,
+               OMX_EventS3DInformation,                             /* The command was completed */
+               OMX_TRUE,                                            /* S3D is enabled */
+               (OMX_S32)pH264Dec->hMFCH264Handle.S3DFPArgmtType,    /* S3D FPArgmtType */
                NULL);
 
         Exynos_OSAL_SleepMillisec(0);
@@ -1993,6 +1993,7 @@ OMX_ERRORTYPE Exynos_H264Dec_DstOut(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX
             (displayStatus == VIDEO_FRAME_STATUS_DISPLAY_ONLY) ||
             (displayStatus == VIDEO_FRAME_STATUS_CHANGE_RESOL) ||
             (displayStatus == VIDEO_FRAME_STATUS_DECODING_FINISHED) ||
+            (displayStatus == VIDEO_FRAME_STATUS_ENABLED_S3D) ||
             (CHECK_PORT_BEING_FLUSHED(pExynosOutputPort))) {
             ret = OMX_ErrorNone;
             break;
@@ -2000,9 +2001,20 @@ OMX_ERRORTYPE Exynos_H264Dec_DstOut(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX
     }
 
     if ((pVideoDec->bThumbnailMode == OMX_FALSE) &&
-        (displayStatus == VIDEO_FRAME_STATUS_CHANGE_RESOL)) {
+        ((displayStatus == VIDEO_FRAME_STATUS_CHANGE_RESOL) ||
+         (displayStatus == VIDEO_FRAME_STATUS_ENABLED_S3D))) {
         if (pVideoDec->bReconfigDPB != OMX_TRUE) {
             pVideoDec->bReconfigDPB = OMX_TRUE;
+#ifdef USE_S3D_SUPPORT
+            /* Check Whether frame packing information is available */
+            if ((displayStatus == VIDEO_FRAME_STATUS_ENABLED_S3D) &&
+                (pH264Dec->hMFCH264Handle.S3DFPArgmtType == OMX_SEC_FPARGMT_NONE)) {
+                if (H264CodecCheckFramePacking(pOMXComponent) != OMX_TRUE) {
+                    ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
+                    goto EXIT;
+                }
+            }
+#endif
             H264CodecCheckResolutionChange(pOMXComponent);
             pVideoDec->csc_set_format = OMX_FALSE;
         }
@@ -2057,15 +2069,6 @@ OMX_ERRORTYPE Exynos_H264Dec_DstOut(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX
         break;
     }
 
-#ifdef USE_S3D_SUPPORT
-    /* Check Whether frame packing information is available */
-    if (pExynosOutputPort->bufferProcessType & BUFFER_COPY &&
-        pVideoDec->bThumbnailMode == OMX_FALSE &&
-        pH264Dec->hMFCH264Handle.S3DFPArgmtType == OMX_SEC_FPARGMT_NONE) {
-        H264CodecCheckFramePacking(pOMXComponent);
-    }
-#endif
-
     indexTimestamp = pDecOps->Get_FrameTag(hMFCHandle);
     Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "out indexTimestamp: %d", indexTimestamp);
     if ((indexTimestamp < 0) || (indexTimestamp >= MAX_TIMESTAMP)) {
index 48b0ea3e7e0aa75fa0ab7f0e974371204b5bfa01..af3d36f3b467ad3f820868ef37f00acafee4639c 100644 (file)
@@ -178,6 +178,14 @@ typedef enum _EXYNOS_OMX_FPARGMT_TYPE
 } EXYNOS_OMX_FPARGMT_TYPE;
 #endif
 
+typedef enum _EXYNOS_OMX_EVENTTYPE
+{
+   OMX_EventVendorStart    = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+#ifdef USE_S3D_SUPPORT
+   OMX_EventS3DInformation,
+#endif
+} EXYNOS_OMX_EVENTTYPE;
+
 #ifdef USE_KHRONOS_OMX_HEADER
 #define OMX_VIDEO_CodingVPX     0x09    /**< Google VPX, formerly known as On2 VP8 */
 #endif