aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlistair Strachan <alistair.strachan@imgtec.com>2017-03-01 21:20:44 -0800
committerDaniel Cardenas <danielcar@google.com>2017-03-06 16:24:15 -0800
commit76f9c460fdad60c6b670774e55c8001944caabdc (patch)
treef6bd78dee3345c2d8d957a3301e1b1a1a9724ab0
parente12e7869a43c7c6d7361c0dbd77a1d252eebe6b4 (diff)
downloadpsb_video-76f9c460fdad60c6b670774e55c8001944caabdc.tar.gz
Revert "Revert "Remove use of deprecated gralloc APIs.""
This reverts commit 098d51ceb6eb2ef08c89224446163aa17aee7cbc. Bug: 35427231 Test: netflix, youtube, play movies Change-Id: Ia027c383d8e28ef3ff93819ecb60b60ddcc5fd12
-rw-r--r--src/Android.mk3
-rw-r--r--src/android/psb_gralloc.cpp100
2 files changed, 53 insertions, 50 deletions
diff --git a/src/Android.mk b/src/Android.mk
index 5cbe6b5..8ec21ab 100644
--- a/src/Android.mk
+++ b/src/Android.mk
@@ -44,6 +44,7 @@ LOCAL_CFLAGS := \
LOCAL_C_INCLUDES := \
$(call include-path-for, libhardware)/hardware \
+ system/core/libsync/include \
$(TARGET_OUT_HEADERS)/libva \
$(TARGET_OUT_HEADERS)/libttm \
$(TARGET_OUT_HEADERS)/libwsbm \
@@ -53,7 +54,7 @@ LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/hwdefs
LOCAL_SHARED_LIBRARIES += libdl libdrm libwsbm libcutils \
- libutils libbinder libhardware liblog
+ libutils libbinder libhardware liblog libsync
LOCAL_SRC_FILES := \
object_heap.c \
diff --git a/src/android/psb_gralloc.cpp b/src/android/psb_gralloc.cpp
index a920fd5..d304ac3 100644
--- a/src/android/psb_gralloc.cpp
+++ b/src/android/psb_gralloc.cpp
@@ -36,9 +36,9 @@
#include <hardware/hardware.h>
#ifdef BAYTRAIL
#include <ufo/gralloc.h>
-#endif
-#ifndef BAYTRAIL
+#else
#include <hal/hal_public.h>
+#include <sync/sync.h>
#endif
using namespace android;
@@ -49,16 +49,19 @@ using namespace android;
#define LOG_TAG "pvr_drv_video"
-static hw_module_t const *module;
-static gralloc_module_t *mAllocMod; /* get by force hw_module_t */
+#ifdef BAYTRAIL
+static const gralloc_module_t *mGralloc;
+#else
+static const hw_device_t *mGralloc;
+#endif
int gralloc_lock(buffer_handle_t handle,
- int usage, int left, int top, int width, int height,
- void** vaddr)
+ int usage, int left, int top, int width, int height,
+ void** vaddr)
{
int err, j;
- if (!mAllocMod) {
+ if (!mGralloc) {
ALOGW("%s: gralloc module has not been initialized. Should initialize it first", __func__);
if (gralloc_init()) {
ALOGE("%s: can't find the %s module", __func__, GRALLOC_HARDWARE_MODULE_ID);
@@ -66,36 +69,20 @@ int gralloc_lock(buffer_handle_t handle,
}
}
- err = mAllocMod->lock(mAllocMod, handle, usage,
- left, top, width, height,
- vaddr);
- ALOGV("gralloc_lock: handle is %p, usage is %x, vaddr is %p.\n", handle, usage, *vaddr);
-
-//#ifdef BAYTRAIL
-#if 0
- unsigned char *tmp_buffer = (unsigned char *)(*vaddr);
- int dst_stride;
- if (width <= 512)
- dst_stride = 512;
- else if (width <= 1024)
- dst_stride = 1024;
- else if (width <= 1280)
- dst_stride = 1280;
- else if (width <= 2048)
- dst_stride = 2048;
-
- int align_h = 32;
- int dsth = (height + align_h - 1) & ~(align_h - 1);
- LOGD("width is %d, dst_stride is %d, dsth is %d.\n",
- width, dst_stride, dsth);
-
- for (j = 0; j < dst_stride * dsth * 3 / 2; j = j + 4096) {
- *(tmp_buffer + j) = 0xa5;
- if (*(tmp_buffer + j) != 0xa5)
- LOGE("access page failed, width is %d, dst_stride is %d, dsth is %d.\n",
- width, dst_stride, dsth);
- }
+#ifdef BAYTRAIL
+ err = mGralloc->lock(mGralloc, handle, usage,
+ left, top, width, height,
+ vaddr);
+#else
+ const gralloc1_rect_t r = {
+ .left = left,
+ .top = top,
+ .width = width,
+ .height = height
+ };
+ err = gralloc_lock_async_img(mGralloc, handle, usage, &r, vaddr, -1);
#endif
+ ALOGV("gralloc_lock: handle is %p, usage is %x, vaddr is %p.\n", handle, usage, *vaddr);
if (err){
ALOGE("lock(...) failed %d (%s).\n", err, strerror(-err));
return -1;
@@ -110,7 +97,7 @@ int gralloc_unlock(buffer_handle_t handle)
{
int err;
- if (!mAllocMod) {
+ if (!mGralloc) {
ALOGW("%s: gralloc module has not been initialized. Should initialize it first", __func__);
if (gralloc_init()) {
ALOGE("%s: can't find the %s module", __func__, GRALLOC_HARDWARE_MODULE_ID);
@@ -118,7 +105,16 @@ int gralloc_unlock(buffer_handle_t handle)
}
}
- err = mAllocMod->unlock(mAllocMod, handle);
+#ifdef BAYTRAIL
+ err = mGralloc->unlock(mGralloc, handle);
+#else
+ int releaseFence = -1;
+ err = gralloc_unlock_async_img(mGralloc, handle, &releaseFence);
+ if (releaseFence >= 0) {
+ sync_wait(releaseFence, -1);
+ close(releaseFence);
+ }
+#endif
if (err) {
ALOGE("unlock(...) failed %d (%s)", err, strerror(-err));
return -1;
@@ -133,7 +129,7 @@ int gralloc_register(buffer_handle_t handle)
{
int err = 0;
- if (!mAllocMod) {
+ if (!mGralloc) {
ALOGW("%s: gralloc module has not been initialized.", __func__);
if (gralloc_init()) {
ALOGE("%s: can't find the %s module", __func__,
@@ -142,7 +138,7 @@ int gralloc_register(buffer_handle_t handle)
}
}
- err = mAllocMod->registerBuffer(mAllocMod, handle);
+ err = gralloc_register_img(mGralloc, handle);
if (err) {
ALOGE("%s failed with %d (%s).\n", __func__, err, strerror(-err));
return -1;
@@ -157,7 +153,7 @@ int gralloc_unregister(buffer_handle_t handle)
{
int err = 0;
- if (!mAllocMod) {
+ if (!mGralloc) {
ALOGW("%s: gralloc module has not been initialized.", __func__);
if (gralloc_init()) {
ALOGE("%s: can't find the %s module", __func__,
@@ -166,7 +162,7 @@ int gralloc_unregister(buffer_handle_t handle)
}
}
- err = mAllocMod->unregisterBuffer(mAllocMod, handle);
+ err = gralloc_unregister_img(mGralloc, handle);
if (err) {
ALOGE("%s failed with %d (%s).\n", __func__, err, strerror(-err));
return -1;
@@ -179,13 +175,18 @@ int gralloc_unregister(buffer_handle_t handle)
int gralloc_init(void)
{
- int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
+ int err;
+
+#ifdef BAYTRAIL
+ err = hw_get_module(GRALLOC_HW_MODULE_ID, (const hw_module_t **)&mGralloc);
+#else
+ err = gralloc_open_img(&mGralloc);
+#endif
if (err) {
ALOGE("FATAL: can't find the %s module", GRALLOC_HARDWARE_MODULE_ID);
return -1;
} else
ALOGD("hw_get_module returned\n");
- mAllocMod = (gralloc_module_t *)module;
return 0;
}
@@ -193,13 +194,14 @@ int gralloc_init(void)
int gralloc_getdisplaystatus(buffer_handle_t handle, int* status)
{
int err;
-#ifndef BAYTRAIL
+
+#ifdef BAYTRAIL
+ *status = mGralloc->perform(mGralloc, INTEL_UFO_GRALLOC_MODULE_PERFORM_GET_BO_STATUS, handle);
+ err = 0;
+#else
uint32_t _status = 0U;
- err = mAllocMod->perform(mAllocMod, GRALLOC_MODULE_GET_DISPLAY_STATUS_IMG, handle, &_status);
+ err = gralloc_get_display_status_img(mGralloc, handle, &_status);
*status = (int)_status;
-#else
- err = 0;
- *status = mAllocMod->perform(mAllocMod, INTEL_UFO_GRALLOC_MODULE_PERFORM_GET_BO_STATUS, handle);
#endif
if (err){
ALOGE("gralloc_getdisplaystatus(...) failed %d (%s).\n", err, strerror(-err));