exynos_omx: multi_thread: Modified the scheme of reference count inc/dec.
authorSeungBeom Kim <sbcrux.kim@samsung.com>
Fri, 13 Dec 2013 02:11:19 +0000 (11:11 +0900)
committerLajos Molnar <lajos@google.com>
Wed, 4 Jun 2014 01:05:50 +0000 (18:05 -0700)
<Old>
    - Call the hw_get_module for reference count processing when receives a buffer of each.
    - Call the hw_get_module every frame, an increase in power consumption.
<New>
    - Call the hw_get_module once on init time.
    - It is a small amount, but the reduction of power consumption.

Change-Id: I8489144ef57a46637c32c869c23032d353830c70
Signed-off-by: SeungBeom Kim <sbcrux.kim@samsung.com>
exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.cpp
exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.h

index 5c99e9c144c1ca0ffbeb0d5ee33efc7ff5face69..294a1c15a28ed8c9199c4b077797ac4e2bf5db02 100644 (file)
@@ -261,6 +261,8 @@ OMX_HANDLETYPE Exynos_OSAL_RefANB_Create()
 {
     int i = 0;
     EXYNOS_OMX_REF_HANDLE *phREF = NULL;
+    gralloc_module_t      *module = NULL;
+
     OMX_ERRORTYPE err = OMX_ErrorNone;
 
     FunctionIn();
@@ -276,6 +278,9 @@ OMX_HANDLETYPE Exynos_OSAL_RefANB_Create()
         phREF->SharedBuffer[i].BufferFd2 = -1;
     }
 
+    hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (const hw_module_t **)&module);
+    phREF->pGrallocModule = (OMX_PTR)module;
+
     err = Exynos_OSAL_MutexCreate(&phREF->hMutex);
     if (err != OMX_ErrorNone) {
         Exynos_OSAL_Free(phREF);
@@ -302,7 +307,7 @@ OMX_ERRORTYPE Exynos_OSAL_RefANB_Reset(OMX_HANDLETYPE hREF)
         goto EXIT;
     }
 
-    hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (const hw_module_t **)&module);
+    module = (gralloc_module_t *)phREF->pGrallocModule;
 
     Exynos_OSAL_MutexLock(phREF->hMutex);
     for (i = 0; i < MAX_BUFFER_REF; i++) {
@@ -345,6 +350,8 @@ OMX_ERRORTYPE Exynos_OSAL_RefANB_Terminate(OMX_HANDLETYPE hREF)
 
     Exynos_OSAL_RefANB_Reset(phREF);
 
+    phREF->pGrallocModule = NULL;
+
     ret = Exynos_OSAL_MutexTerminate(phREF->hMutex);
     if (ret != OMX_ErrorNone)
         goto EXIT;
@@ -378,7 +385,7 @@ OMX_ERRORTYPE Exynos_OSAL_RefANB_Increase(OMX_HANDLETYPE hREF, OMX_PTR pBuffer)
         goto EXIT;
     }
 
-    hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (const hw_module_t **)&module);
+    module = (gralloc_module_t *)phREF->pGrallocModule;
 
     Exynos_OSAL_MutexLock(phREF->hMutex);
 
@@ -442,8 +449,10 @@ OMX_ERRORTYPE Exynos_OSAL_RefANB_Decrease(OMX_HANDLETYPE hREF, OMX_U32 BufferFd)
         goto EXIT;
     }
 
+    module = (gralloc_module_t *)phREF->pGrallocModule;
+
     Exynos_OSAL_MutexLock(phREF->hMutex);
-    hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (const hw_module_t **)&module);
+
     for (i = 0; i < MAX_BUFFER_REF; i++) {
         if (phREF->SharedBuffer[i].BufferFd == BufferFd) {
             ion_decRef(getIonFd(module), phREF->SharedBuffer[i].pIonHandle);
index 2996976860eeacafe6bb90de48b2ed7a3376ca1b..18e0b4179d03a88161a691156b1a62c3b368ac42 100644 (file)
@@ -45,6 +45,7 @@ typedef struct _EXYNOS_OMX_SHARED_BUFFER {
 
 typedef struct _EXYNOS_OMX_REF_HANDLE {
     OMX_HANDLETYPE hMutex;
+    OMX_PTR pGrallocModule;
     EXYNOS_OMX_SHARED_BUFFER SharedBuffer[MAX_BUFFER_REF];
 } EXYNOS_OMX_REF_HANDLE;