From: SeungBeom Kim <sbcrux.kim@samsung.com> Date: Wed, 8 Aug 2012 17:54:12 +0000 (-0700) Subject: exynos_omx: multi_thread: Change shared memory allocator for DRM play. X-Git-Tag: cm-10.1-M1~249 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=2590f08f743402db357146c2feed73275440f388;p=GitHub%2FLineageOS%2Fandroid_hardware_samsung_slsi_exynos5.git exynos_omx: multi_thread: Change shared memory allocator for DRM play. 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> --- diff --git a/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_SharedMemory.c b/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_SharedMemory.c index 5ecc648..d9aaee1 100644 --- a/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_SharedMemory.c +++ b/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_SharedMemory.c @@ -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); diff --git a/include/ion.h b/include/ion.h index bb66189..8877464 100644 --- a/include/ion.h +++ b/include/ion.h @@ -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() *