Revert "Revert "Remove use of deprecated gralloc APIs.""
This reverts commit 926fc9d715878b77d3d90bb81f9a28bff0e029c5.
Bug: 35427231
Test: netflix, youtube, play movies
Change-Id: I08375af6dbfbd22adbadb2cae75594e1ea5aae72
diff --git a/ISV/Android.mk b/ISV/Android.mk
index 07cf4c7..168b532 100644
--- a/ISV/Android.mk
+++ b/ISV/Android.mk
@@ -26,9 +26,11 @@
libva-android \
libmrm_omx_adaptor \
libmedia \
+ libsync \
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/include \
+ system/core/libsync/include \
$(call include-path-for, frameworks-openmax) \
$(TARGET_OUT_HEADERS)/libmedia_utils_vpp \
$(TARGET_OUT_HEADERS)/display \
diff --git a/ISV/base/isv_bufmanager.cpp b/ISV/base/isv_bufmanager.cpp
index 3b02ab4..8e5aa2d 100644
--- a/ISV/base/isv_bufmanager.cpp
+++ b/ISV/base/isv_bufmanager.cpp
@@ -22,6 +22,7 @@
#include "isv_bufmanager.h"
#ifndef TARGET_VPP_USE_GEN
#include "hal_public.h"
+#include <sync/sync.h>
#endif
//#define LOG_NDEBUG 0
@@ -69,12 +70,12 @@
}
int32_t err = 0;
+#ifdef TARGET_VPP_USE_GEN
if (!mpGralloc) {
err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (hw_module_t const**)&mpGralloc);
if (0 != err)
return UNKNOWN_ERROR;
}
-#ifdef TARGET_VPP_USE_GEN
ufo_buffer_details_t info;
memset(&info, 0, sizeof(ufo_buffer_details_t));
@@ -88,6 +89,11 @@
mStride = info.pitch;
mColorFormat = info.format;
#else
+ if (!mpGralloc) {
+ err = gralloc_open_img(&mpGralloc);
+ if (0 != err)
+ return UNKNOWN_ERROR;
+ }
IMG_native_handle_t* grallocHandle = (IMG_native_handle_t*)mGrallocHandle;
mStride = grallocHandle->aiStride[0];
mSurfaceHeight = grallocHandle->iHeight;
@@ -126,9 +132,13 @@
if ((mFlags & ISV_BUFFER_NEED_CLEAR) && mpGralloc) {
int32_t usage = GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN;
void *vaddr[GRALLOC_SUB_BUFFER_MAX];
+ const gralloc1_rect_t r = {
+ .width = (int32_t)mStride,
+ .height = (int32_t)mSurfaceHeight
+ };
+ int err, releaseFence = -1;
- int32_t err = mpGralloc->lock(mpGralloc, (buffer_handle_t)mGrallocHandle, usage, 0, 0, mStride, mSurfaceHeight, &vaddr[0]);
-
+ err = gralloc_lock_async_img(mpGralloc, (buffer_handle_t)mGrallocHandle, usage, &r, &vaddr[0], -1);
if (0 != err) {
ALOGE("%s: get graphic buffer ptr failed", __func__);
return UNKNOWN_ERROR;
@@ -140,7 +150,11 @@
memcpy(ptr, random_buf, sizeof(random_buf));
ptr += sizeof(random_buf);
}
- mpGralloc->unlock(mpGralloc, (buffer_handle_t)mGrallocHandle);
+ gralloc_unlock_async_img(mpGralloc, (buffer_handle_t)mGrallocHandle, &releaseFence);
+ if (releaseFence >= 0) {
+ sync_wait(releaseFence, -1);
+ close(releaseFence);
+ }
ALOGD_IF(ISV_BUFFER_MANAGER_DEBUG, "%s: clear isv buffer %p finished, buffer size %d", __func__, this, buffer_size);
mFlags &= ~ISV_BUFFER_NEED_CLEAR;
}
diff --git a/ISV/include/isv_bufmanager.h b/ISV/include/isv_bufmanager.h
index 18c3209..7b0bfb0 100644
--- a/ISV/include/isv_bufmanager.h
+++ b/ISV/include/isv_bufmanager.h
@@ -134,7 +134,11 @@
ISV_BUFFERTYPE mType;
int32_t mSurface;
uint32_t mFlags;
+#ifdef TARGET_VPP_USE_GEN
gralloc_module_t* mpGralloc;
+#else
+ const hw_device_t* mpGralloc;
+#endif
};
class ISVBufferManager: public RefBase