Use gralloc usage conversion library

Converting from ..graphics.allocator@2.0 usage to gralloc0 usage isn't
quite as simple as ORing and truncating, which is what the default
implementation was doing. Switch to using library functions that do it
correctly.

Test: boot bullhead
Change-Id: Ibe644b53655e191b9bca9d619825a8918e8fc365
diff --git a/libs/ui/Android.bp b/libs/ui/Android.bp
index d1bfa18..80fb064 100644
--- a/libs/ui/Android.bp
+++ b/libs/ui/Android.bp
@@ -78,6 +78,7 @@
 
     static_libs: [
         "libarect",
+        "libgrallocusage",
         "libmath",
     ],
 
diff --git a/libs/ui/Gralloc1On0Adapter.cpp b/libs/ui/Gralloc1On0Adapter.cpp
index b8bc6c4..bd7c6a1 100644
--- a/libs/ui/Gralloc1On0Adapter.cpp
+++ b/libs/ui/Gralloc1On0Adapter.cpp
@@ -20,6 +20,7 @@
 
 #include <ui/Gralloc1On0Adapter.h>
 
+#include <grallocusage/GrallocUsageConversion.h>
 
 #include <hardware/gralloc.h>
 
@@ -248,8 +249,8 @@
     // pointer, which only occurs when mDevice has been loaded successfully and
     // we are permitted to allocate
 
-    int usage = static_cast<int>(descriptor->producerUsage) |
-            static_cast<int>(descriptor->consumerUsage);
+    int usage = android_convertGralloc1To0Usage(descriptor->producerUsage,
+            descriptor->consumerUsage);
     buffer_handle_t handle = nullptr;
     int stride = 0;
     ALOGV("Calling alloc(%p, %u, %u, %i, %u)", mDevice, descriptor->width,
@@ -374,7 +375,7 @@
 {
     if (mMinorVersion >= 3) {
         int result = mModule->lockAsync(mModule, buffer->getHandle(),
-                static_cast<int32_t>(producerUsage | consumerUsage),
+                android_convertGralloc1To0Usage(producerUsage, consumerUsage),
                 accessRegion.left, accessRegion.top, accessRegion.width,
                 accessRegion.height, outData, acquireFence->dup());
         if (result != 0) {
@@ -383,7 +384,7 @@
     } else {
         acquireFence->waitForever("Gralloc1On0Adapter::lock");
         int result = mModule->lock(mModule, buffer->getHandle(),
-                static_cast<int32_t>(producerUsage | consumerUsage),
+                android_convertGralloc1To0Usage(producerUsage, consumerUsage),
                 accessRegion.left, accessRegion.top, accessRegion.width,
                 accessRegion.height, outData);
         ALOGV("gralloc0 lock returned %d", result);
@@ -415,7 +416,7 @@
 {
     if (mMinorVersion >= 3 && mModule->lockAsync_ycbcr) {
         int result = mModule->lockAsync_ycbcr(mModule, buffer->getHandle(),
-                static_cast<int>(producerUsage | consumerUsage),
+                android_convertGralloc1To0Usage(producerUsage, consumerUsage),
                 accessRegion.left, accessRegion.top, accessRegion.width,
                 accessRegion.height, outData, acquireFence->dup());
         if (result != 0) {
@@ -424,7 +425,7 @@
     } else if (mModule->lock_ycbcr) {
         acquireFence->waitForever("Gralloc1On0Adapter::lockYCbCr");
         int result = mModule->lock_ycbcr(mModule, buffer->getHandle(),
-                static_cast<int>(producerUsage | consumerUsage),
+                android_convertGralloc1To0Usage(producerUsage, consumerUsage),
                 accessRegion.left, accessRegion.top, accessRegion.width,
                 accessRegion.height, outData);
         ALOGV("gralloc0 lockYCbCr returned %d", result);
diff --git a/libs/ui/GraphicBuffer.cpp b/libs/ui/GraphicBuffer.cpp
index 9006178..6e84730 100644
--- a/libs/ui/GraphicBuffer.cpp
+++ b/libs/ui/GraphicBuffer.cpp
@@ -16,12 +16,12 @@
 
 #define LOG_TAG "GraphicBuffer"
 
-#include <cutils/atomic.h>
-
 #include <ui/GraphicBuffer.h>
 
 #include <cutils/atomic.h>
 
+#include <grallocusage/GrallocUsageConversion.h>
+
 #include <ui/GrallocMapper.h>
 #include <ui/GraphicBufferAllocator.h>
 #include <ui/GraphicBufferMapper.h>
@@ -114,7 +114,7 @@
     stride = static_cast<int>(inStride);
     format = inFormat;
     layerCount = inLayerCount;
-    usage  = static_cast<int>(inConsumerUsage | inProducerUsage);
+    usage = android_convertGralloc1To0Usage(inProducerUsage, inConsumerUsage);
     handle = inHandle;
 }
 
@@ -221,7 +221,7 @@
         height = static_cast<int>(inHeight);
         format = inFormat;
         layerCount = inLayerCount;
-        usage = static_cast<int>(inProducerUsage | inConsumerUsage);
+        usage = android_convertGralloc1To0Usage(inProducerUsage, inConsumerUsage);
         stride = static_cast<int>(outStride);
     }
     return err;