exynos_omx: multi_thread: Change shared memory allocator for DRM play.
authorSeungBeom Kim <sbcrux.kim@samsung.com>
Wed, 8 Aug 2012 17:54:12 +0000 (10:54 -0700)
committerDima Zavin <dima@android.com>
Sat, 11 Aug 2012 00:01:43 +0000 (17:01 -0700)
The case of DRM play, OpenMAX need reserved memory.
Reserved memory means Exynos heap.

Change-Id: Ibc4e3b8e73b1a9e6e1dcfb48a52f1a551d428112
Signed-off-by: SeungBeom Kim <sbcrux.kim@samsung.com>
exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_SharedMemory.c
include/ion.h

index 5ecc6489927e52204dead758e3e9eda97aa3e45b..d9aaee13e76febea022d5f8e88a14b8a2a62227c 100644 (file)
@@ -141,7 +141,8 @@ OMX_PTR Exynos_OSAL_SharedMemory_Alloc(OMX_HANDLETYPE handle, OMX_U32 size, MEMO
     EXYNOS_SHAREDMEM_LIST *pCurrentElement = NULL;
     ion_buffer             IONBuffer       = 0;
     OMX_PTR                pBuffer         = NULL;
-    unsigned int heap;
+    unsigned int mask;
+    unsigned int flag;
 
     if (pHandle == NULL)
         goto EXIT;
@@ -149,16 +150,26 @@ OMX_PTR Exynos_OSAL_SharedMemory_Alloc(OMX_HANDLETYPE handle, OMX_U32 size, MEMO
     pElement = (EXYNOS_SHAREDMEM_LIST *)Exynos_OSAL_Malloc(sizeof(EXYNOS_SHAREDMEM_LIST));
     Exynos_OSAL_Memset(pElement, 0, sizeof(EXYNOS_SHAREDMEM_LIST));
 
-    if (memoryType == SECURE_MEMORY)
-        heap = ION_HEAP_EXYNOS_VIDEO_MASK;
-    else if (memoryType == NORMAL_MEMORY)
-        heap = ION_HEAP_EXYNOS_MASK;
-    else if (memoryType == SYSTEM_MEMORY)
-        heap = ION_HEAP_SYSTEM_MASK;
-    else
-        return NULL;
+    switch (memoryType) {
+    case SECURE_MEMORY:
+        mask = ION_HEAP_EXYNOS_CONTIG_MASK;
+        flag = ION_EXYNOS_VIDEO_MASK;
+        break;
+    case NORMAL_MEMORY:
+        mask = ION_HEAP_EXYNOS_MASK;
+        flag = 0;
+        break;
+    case SYSTEM_MEMORY:
+        mask = ION_HEAP_SYSTEM_MASK;
+        flag = ION_FLAG_CACHED;
+        break;
+    default:
+        pBuffer = NULL;
+        goto EXIT;
+        break;
+    }
 
-    IONBuffer = ion_alloc((ion_client)pHandle->hIONHandle, size, 0, heap, 0);
+    IONBuffer = ion_alloc((ion_client)pHandle->hIONHandle, size, 0, mask, flag);
 
     if (IONBuffer <= 0) {
         Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "ion_alloc Error: %d", IONBuffer);
index bb661894f3cd8010b505434bfb9b9c5773509b0a..88774643690cf7dfa3e53cbccb4e5c37c97ca039 100644 (file)
@@ -26,7 +26,7 @@
 #define ION_HEAP_EXYNOS_CONTIG_MASK     (1 << 4)
 #define ION_HEAP_EXYNOS_MASK            (1 << 5)
 #define ION_EXYNOS_VIDEO_MASK           (1 << 29)
-#define ION_HEAP_EXYNOS_VIDEO_MASK      (ION_EXYNOS_VIDEO_MASK|ION_HEAP_EXYNOS_CONTIG_MASK)
+
 /* ION_MSYNC_FLAGS
  * values of @flags parameter to ion_msync()
  *