diff options
author | SeungBeom Kim <sbcrux.kim@samsung.com> | 2013-12-13 11:11:19 +0900 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2014-06-03 18:05:50 -0700 |
commit | e260e4e60e5eeea869b690224848fe4cbb6b2e8a (patch) | |
tree | 54ccd48cc580567de2d14597dca544ace7e38712 /exynos_omx | |
parent | c2eff709449b17a1bab5fc8c32f3f1408592c0b2 (diff) | |
download | exynos5-e260e4e60e5eeea869b690224848fe4cbb6b2e8a.tar.gz |
exynos_omx: multi_thread: Modified the scheme of reference count inc/dec.
<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>
Diffstat (limited to 'exynos_omx')
-rw-r--r-- | exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.cpp | 15 | ||||
-rw-r--r-- | exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.h | 1 |
2 files changed, 13 insertions, 3 deletions
diff --git a/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.cpp b/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.cpp index 5c99e9c..294a1c1 100644 --- a/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.cpp +++ b/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.cpp @@ -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); diff --git a/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.h b/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.h index 2996976..18e0b41 100644 --- a/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.h +++ b/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.h @@ -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; |