exynos_omx: multi_thread: Modified AllocateBuffer & FreeBuffer.
authorSeungBeom Kim <sbcrux.kim@samsung.com>
Wed, 4 Jul 2012 06:32:04 +0000 (15:32 +0900)
committerDima Zavin <dima@android.com>
Tue, 24 Jul 2012 22:12:42 +0000 (15:12 -0700)
- Modified Exynos_OMX_AllocateBuffer in video decode.
- Modified Exynos_OMX_FreeBuffer in video decode.

Change-Id: Ic1c8577ac7befd59c3a6b5d1e96b6e01828027d0
Signed-off-by: SeungBeom Kim <sbcrux.kim@samsung.com>
exynos_omx/openmax/exynos_omx/component/video/dec/Exynos_OMX_VdecControl.c
exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_VencControl.c

index 75331dd7212fa998c3e322caacc2fdef36dde8ec..432a4a76d978d6e8695e41b5d7b8d1738cd5d298 100644 (file)
@@ -155,7 +155,7 @@ OMX_ERRORTYPE Exynos_OMX_AllocateBuffer(
     EXYNOS_OMX_BASEPORT      *pExynosPort = NULL;
     OMX_BUFFERHEADERTYPE  *temp_bufferHeader = NULL;
     OMX_U8                *temp_buffer = NULL;
-    int                    temp_buffer_fd;
+    int                    temp_buffer_fd = -1;
     OMX_U32                i = 0;
     MEMORY_TYPE            mem_type;
 
@@ -200,10 +200,7 @@ OMX_ERRORTYPE Exynos_OMX_AllocateBuffer(
         mem_type = NORMAL_MEMORY;
     } else {
         mem_type = SYSTEM_MEMORY;
-        Exynos_OSAL_Log(EXYNOS_LOG_WARNING, "%s: using system memory to alloc %d bytes\n", __func__,
-                        nSizeBytes);
     }
-
     temp_buffer = Exynos_OSAL_SharedMemory_Alloc(pVideoDec->hSharedMemory, nSizeBytes, mem_type);
     if (temp_buffer == NULL) {
         ret = OMX_ErrorInsufficientResources;
@@ -225,13 +222,12 @@ OMX_ERRORTYPE Exynos_OMX_AllocateBuffer(
             pExynosPort->extendBufferHeader[i].buf_fd[0] = temp_buffer_fd;
             pExynosPort->bufferStateAllocate[i] = (BUFFER_STATE_ALLOCATED | HEADER_STATE_ALLOCATED);
             INIT_SET_SIZE_VERSION(temp_bufferHeader, OMX_BUFFERHEADERTYPE);
-            temp_bufferHeader->pBuffer        = temp_buffer;
+            if (mem_type == SECURE_MEMORY)
+                temp_bufferHeader->pBuffer = temp_buffer_fd;
+            else
+                temp_bufferHeader->pBuffer = temp_buffer;
             temp_bufferHeader->nAllocLen      = nSizeBytes;
             temp_bufferHeader->pAppPrivate    = pAppPrivate;
-            Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s: allocated buf %d (hdr=%p) addr=%p sz=%ld fd=%d\n",
-                            __func__, i, &pExynosPort->extendBufferHeader[i], temp_buffer, nSizeBytes,
-                            temp_buffer_fd);
-
             if (nPortIndex == INPUT_PORT_INDEX)
                 temp_bufferHeader->nInputPortIndex = INPUT_PORT_INDEX;
             else
@@ -311,7 +307,12 @@ OMX_ERRORTYPE Exynos_OMX_FreeBuffer(
         if (((pExynosPort->bufferStateAllocate[i] | BUFFER_STATE_FREE) != 0) && (pExynosPort->extendBufferHeader[i].OMXBufferHeader != NULL)) {
             if (pExynosPort->extendBufferHeader[i].OMXBufferHeader->pBuffer == pBufferHdr->pBuffer) {
                 if (pExynosPort->bufferStateAllocate[i] & BUFFER_STATE_ALLOCATED) {
-                    Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, pExynosPort->extendBufferHeader[i].OMXBufferHeader->pBuffer);
+                    if ((pVideoDec->bDRMPlayerMode == OMX_TRUE) && (nPortIndex == INPUT_PORT_INDEX)) {
+                        OMX_PTR mapBuffer = Exynos_OSAL_SharedMemory_IONToVirt(pVideoDec->hSharedMemory, (int)pExynosPort->extendBufferHeader[i].OMXBufferHeader->pBuffer);
+                        Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, mapBuffer);
+                    } else {
+                        Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, pExynosPort->extendBufferHeader[i].OMXBufferHeader->pBuffer);
+                    }
                     pExynosPort->extendBufferHeader[i].OMXBufferHeader->pBuffer = NULL;
                     pBufferHdr->pBuffer = NULL;
                 } else if (pExynosPort->bufferStateAllocate[i] & BUFFER_STATE_ASSIGNED) {
index a5937bdb8d3887539c73af604ab030eade1d12b2..7a24c00944bc681ae99c58204fcd2664a2fde286 100644 (file)
@@ -155,6 +155,7 @@ OMX_ERRORTYPE Exynos_OMX_AllocateBuffer(
     OMX_U8                *temp_buffer = NULL;
     int                    temp_buffer_fd = -1;
     OMX_U32                i = 0;
+    MEMORY_TYPE            mem_type;
 
     FunctionIn();
 
@@ -192,29 +193,20 @@ OMX_ERRORTYPE Exynos_OMX_AllocateBuffer(
     }
 
     if (pExynosPort->bufferProcessType == BUFFER_SHARE) {
-        temp_buffer = Exynos_OSAL_SharedMemory_Alloc(pVideoDec->hSharedMemory, nSizeBytes, NORMAL_MEMORY);
-        if (temp_buffer == NULL) {
-            ret = OMX_ErrorInsufficientResources;
-            goto EXIT;
-        }
-        temp_buffer_fd = Exynos_OSAL_SharedMemory_VirtToION(pVideoDec->hSharedMemory, temp_buffer);
+        mem_type = NORMAL_MEMORY;
     } else {
-        temp_buffer = Exynos_OSAL_Malloc(sizeof(OMX_U8) * nSizeBytes);
-        if (temp_buffer == NULL) {
-            ret = OMX_ErrorInsufficientResources;
-            goto EXIT;
-        }
+        mem_type = SYSTEM_MEMORY;
     }
+    temp_buffer = Exynos_OSAL_SharedMemory_Alloc(pVideoDec->hSharedMemory, nSizeBytes, mem_type);
+    if (temp_buffer == NULL) {
+        ret = OMX_ErrorInsufficientResources;
+        goto EXIT;
+    }
+    temp_buffer_fd = Exynos_OSAL_SharedMemory_VirtToION(pVideoDec->hSharedMemory, temp_buffer);
 
     temp_bufferHeader = (OMX_BUFFERHEADERTYPE *)Exynos_OSAL_Malloc(sizeof(OMX_BUFFERHEADERTYPE));
     if (temp_bufferHeader == NULL) {
-        if (pExynosPort->bufferProcessType == BUFFER_SHARE) {
-            Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, temp_buffer);
-        } else {
-            Exynos_OSAL_Free(temp_buffer);
-        }
-
-        temp_buffer = NULL;
+        Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, temp_buffer);
         ret = OMX_ErrorInsufficientResources;
         goto EXIT;
     }
@@ -247,11 +239,7 @@ OMX_ERRORTYPE Exynos_OMX_AllocateBuffer(
     }
 
     Exynos_OSAL_Free(temp_bufferHeader);
-    if (pExynosPort->bufferProcessType == BUFFER_SHARE) {
-        Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, temp_buffer);
-    } else {
-        Exynos_OSAL_Free(temp_buffer);
-    }
+    Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, temp_buffer);
 
     ret = OMX_ErrorInsufficientResources;
 
@@ -312,11 +300,7 @@ OMX_ERRORTYPE Exynos_OMX_FreeBuffer(
         if (((pExynosPort->bufferStateAllocate[i] | BUFFER_STATE_FREE) != 0) && (pExynosPort->extendBufferHeader[i].OMXBufferHeader != NULL)) {
             if (pExynosPort->extendBufferHeader[i].OMXBufferHeader->pBuffer == pBufferHdr->pBuffer) {
                 if (pExynosPort->bufferStateAllocate[i] & BUFFER_STATE_ALLOCATED) {
-                    if (pExynosPort->bufferProcessType == BUFFER_SHARE) {
-                        Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, pExynosPort->extendBufferHeader[i].OMXBufferHeader->pBuffer);
-                    } else {
-                        Exynos_OSAL_Free(pExynosPort->extendBufferHeader[i].OMXBufferHeader->pBuffer);
-                    }
+                    Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, pExynosPort->extendBufferHeader[i].OMXBufferHeader->pBuffer);
                     pExynosPort->extendBufferHeader[i].OMXBufferHeader->pBuffer = NULL;
                     pBufferHdr->pBuffer = NULL;
                 } else if (pExynosPort->bufferStateAllocate[i] & BUFFER_STATE_ASSIGNED) {