exynos_omx: multi_thread: Fix the DRM play bug.
authorSeungBeom Kim <sbcrux.kim@samsung.com>
Tue, 7 Aug 2012 18:13:29 +0000 (11:13 -0700)
committerDima Zavin <dima@android.com>
Sat, 11 Aug 2012 00:00:22 +0000 (17:00 -0700)
In case of DRM play, Registered input buffer address is incorrect.

Error log
01-01 13:38:30.755: E/ExynosVideoDecoder(99): MFC_Decoder_Enqueue_Inbuf: Failed to get index
01-01 13:38:30.755: E/EXYNOS_H264_DEC(99): Failed to enqueue input buffer for header parsing

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

index e4443ccc34a586719352cffbe1fd008d48ee08cc..495fcae77e3f0b427802b6decd1d58e8c4340378 100644 (file)
@@ -672,7 +672,12 @@ OMX_ERRORTYPE H264CodecSrcSetup(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_DAT
         /* Register input buffer */
         for (i = 0; i < pExynosInputPort->portDefinition.nBufferCountActual; i++) {
             ExynosVideoPlane plane;
-            plane.addr = pExynosInputPort->extendBufferHeader[i].OMXBufferHeader->pBuffer;
+            if (pVideoDec->bDRMPlayerMode == OMX_FALSE) {
+                plane.addr = pExynosInputPort->extendBufferHeader[i].OMXBufferHeader->pBuffer;
+            } else {
+                plane.addr = Exynos_OSAL_SharedMemory_IONToVirt(pVideoDec->hSharedMemory,
+                                               pExynosInputPort->extendBufferHeader[i].OMXBufferHeader->pBuffer);
+            }
             plane.allocSize = pExynosInputPort->extendBufferHeader[i].OMXBufferHeader->nAllocLen;
             plane.fd = pExynosInputPort->extendBufferHeader[i].buf_fd[0];
             if (pInbufOps->Register(hMFCHandle, &plane, MFC_INPUT_BUFFER_PLANE) != VIDEO_ERROR_NONE) {