summaryrefslogtreecommitdiff
path: root/exynos_omx
diff options
context:
space:
mode:
authorSeungBeom Kim <sbcrux.kim@samsung.com>2013-12-13 11:11:19 +0900
committerLajos Molnar <lajos@google.com>2014-06-03 18:05:50 -0700
commite260e4e60e5eeea869b690224848fe4cbb6b2e8a (patch)
tree54ccd48cc580567de2d14597dca544ace7e38712 /exynos_omx
parentc2eff709449b17a1bab5fc8c32f3f1408592c0b2 (diff)
downloadexynos5-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.cpp15
-rw-r--r--exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.h1
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;