OSDN Git Service

GraphicBufferMapper: handle devices that do not implement lock_ycbcr
authorLajos Molnar <lajos@google.com>
Thu, 29 Jan 2015 00:16:40 +0000 (16:16 -0800)
committerLajos Molnar <lajos@google.com>
Thu, 29 Jan 2015 00:26:36 +0000 (16:26 -0800)
Bug: 19179927
Change-Id: I09ffca954fed3cd2d3466c8396627dc7dbc0052d

libs/ui/GraphicBufferMapper.cpp

index 320b6c0..e949b0c 100644 (file)
@@ -92,6 +92,10 @@ status_t GraphicBufferMapper::lockYCbCr(buffer_handle_t handle,
     ATRACE_CALL();
     status_t err;
 
+    if (mAllocMod->lock_ycbcr == NULL) {
+        return -EINVAL; // do not log failure
+    }
+
     err = mAllocMod->lock_ycbcr(mAllocMod, handle, usage,
             bounds.left, bounds.top, bounds.width(), bounds.height(),
             ycbcr);
@@ -139,16 +143,19 @@ status_t GraphicBufferMapper::lockAsyncYCbCr(buffer_handle_t handle,
     ATRACE_CALL();
     status_t err;
 
-    if (mAllocMod->common.module_api_version >= GRALLOC_MODULE_API_VERSION_0_3) {
+    if (mAllocMod->common.module_api_version >= GRALLOC_MODULE_API_VERSION_0_3
+            && mAllocMod->lockAsync_ycbcr != NULL) {
         err = mAllocMod->lockAsync_ycbcr(mAllocMod, handle, usage,
                 bounds.left, bounds.top, bounds.width(), bounds.height(),
                 ycbcr, fenceFd);
-    } else {
+    } else if (mAllocMod->lock_ycbcr != NULL) {
         sync_wait(fenceFd, -1);
         close(fenceFd);
         err = mAllocMod->lock_ycbcr(mAllocMod, handle, usage,
                 bounds.left, bounds.top, bounds.width(), bounds.height(),
                 ycbcr);
+    } else {
+        return -EINVAL; // do not log failure
     }
 
     ALOGW_IF(err, "lock(...) failed %d (%s)", err, strerror(-err));