exynos_omx: multi_thread: support to DRM component.
authorSeungBeom Kim <sbcrux.kim@samsung.com>
Wed, 4 Jul 2012 05:31:23 +0000 (14:31 +0900)
committerDima Zavin <dima@android.com>
Tue, 24 Jul 2012 22:12:42 +0000 (15:12 -0700)
- support H.264 DRM playback

Change-Id: I8b8e70b0202e28c983fa4497a699b92459fd3fe0
Signed-off-by: SeungBeom Kim <sbcrux.kim@samsung.com>
exynos_omx/openmax/exynos_omx/component/video/dec/Exynos_OMX_Vdec.c
exynos_omx/openmax/exynos_omx/component/video/dec/h264/Exynos_OMX_H264dec.c

index 4f696aadda011a69e7df7c35796c2cb4db4f2ac6..0e0feb5ed74ccd55383867425a6c609f31a4abac 100644 (file)
@@ -227,6 +227,19 @@ OMX_BOOL Exynos_Preprocessor_InputData(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_
         if (exynosInputPort->bufferProcessType == BUFFER_SHARE) {
             Exynos_Shared_BufferToData(inputUseBuffer, srcInputData, ONE_PLANE);
 
+            if (pVideoDec->bDRMPlayerMode == OMX_TRUE) {
+                OMX_PTR dataBuffer = NULL;
+
+                dataBuffer = Exynos_OSAL_SharedMemory_IONToVirt(pVideoDec->hSharedMemory,
+                                                            srcInputData->buffer.singlePlaneBuffer.dataBuffer);
+                if (dataBuffer == NULL) {
+                    ret = OMX_FALSE;
+                    goto EXIT;
+                }
+
+                srcInputData->buffer.singlePlaneBuffer.dataBuffer = dataBuffer;
+            }
+
             /* reset dataBuffer */
             Exynos_ResetDataBuffer(inputUseBuffer);
 
index ec5e3768bc95cbc8b9061a6c6648976ef133fa12..50221297dd6b2aa23735675a0810f61418ed5ec1 100644 (file)
@@ -1535,7 +1535,14 @@ OMX_ERRORTYPE Exynos_H264Dec_Init(OMX_COMPONENTTYPE *pOMXComponent)
 #if 0//defined(USE_CSC_GSCALER)
     csc_method = CSC_METHOD_HW; //in case of Use ION buffer.
 #endif
-    pVideoDec->csc_handle = csc_init(csc_method);
+    if (pVideoDec->bDRMPlayerMode == OMX_TRUE) {
+        pVideoDec->csc_handle = csc_init(CSC_METHOD_HW);
+        csc_set_hw_property(pVideoDec->csc_handle, CSC_HW_PROPERTY_FIXED_NODE, 2);
+        csc_set_hw_property(pVideoDec->csc_handle, CSC_HW_PROPERTY_MODE_DRM, pVideoDec->bDRMPlayerMode);
+    } else {
+        pVideoDec->csc_handle = csc_init(csc_method);
+    }
+
     if (pVideoDec->csc_handle == NULL) {
         ret = OMX_ErrorInsufficientResources;
         goto EXIT;
@@ -1652,8 +1659,9 @@ OMX_ERRORTYPE Exynos_H264Dec_SrcIn(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_
         ret = H264CodecDstSetup(pOMXComponent);
     }
 
-    if ((Check_H264_StartCode(pSrcInputData->buffer.singlePlaneBuffer.dataBuffer, oneFrameSize) == OMX_TRUE) ||
-        ((pSrcInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)){
+    if (((pVideoDec->bDRMPlayerMode == OMX_TRUE) ||
+            (Check_H264_StartCode(pSrcInputData->buffer.singlePlaneBuffer.dataBuffer, oneFrameSize) == OMX_TRUE)) ||
+        ((pSrcInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)) {
         pExynosComponent->timeStamp[pH264Dec->hMFCH264Handle.indexTimestamp] = pSrcInputData->timeStamp;
         pExynosComponent->nFlags[pH264Dec->hMFCH264Handle.indexTimestamp] = pSrcInputData->nFlags;
         Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "input timestamp %lld us (%.2f secs), Tag: %d, nFlags: 0x%x", pSrcInputData->timeStamp, pSrcInputData->timeStamp / 1E6, pH264Dec->hMFCH264Handle.indexTimestamp, pSrcInputData->nFlags);