Merge "Use async CpuConsumer for IO_RECEIVE, and rework buffer acquire." into jb-mr2-dev
diff --git a/driver/rsdAllocation.cpp b/driver/rsdAllocation.cpp
index 620c47c..246e67c 100644
--- a/driver/rsdAllocation.cpp
+++ b/driver/rsdAllocation.cpp
@@ -610,7 +610,8 @@
 #ifndef RS_COMPATIBILITY_LIB
     DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
 
-    drv->cpuConsumer = new CpuConsumer(2);
+    // Configure CpuConsumer to be in asynchronous mode
+    drv->cpuConsumer = new CpuConsumer(2, false);
     sp<IGraphicBufferProducer> bp = drv->cpuConsumer->getProducerInterface();
     bp->incStrong(NULL);
     return bp.get();
@@ -775,16 +776,24 @@
     DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
 
     if (alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_SCRIPT) {
-        if (drv->lb.data != NULL) {
-            drv->cpuConsumer->unlockBuffer(drv->lb);
-        }
+        CpuConsumer::LockedBuffer lb;
+        status_t ret = drv->cpuConsumer->lockNextBuffer(&lb);
+        if (ret == OK) {
+            if (drv->lb.data != NULL) {
+                drv->cpuConsumer->unlockBuffer(drv->lb);
+            }
+            drv->lb = lb;
+            alloc->mHal.drvState.lod[0].mallocPtr = drv->lb.data;
+            alloc->mHal.drvState.lod[0].stride = drv->lb.stride *
+                    alloc->mHal.state.elementSizeBytes;
 
-        status_t ret = drv->cpuConsumer->lockNextBuffer(&drv->lb);
-        alloc->mHal.drvState.lod[0].mallocPtr = drv->lb.data;
-        alloc->mHal.drvState.lod[0].stride = drv->lb.stride * alloc->mHal.state.elementSizeBytes;
-
-        if (alloc->mHal.state.yuv) {
-            DeriveYUVLayout(alloc->mHal.state.yuv, &alloc->mHal.drvState);
+            if (alloc->mHal.state.yuv) {
+                DeriveYUVLayout(alloc->mHal.state.yuv, &alloc->mHal.drvState);
+            }
+        } else if (ret == BAD_VALUE) {
+            // No new frame, don't do anything
+        } else {
+            rsc->setError(RS_ERROR_DRIVER, "Error receiving IO input buffer.");
         }
 
     } else {
@@ -1101,5 +1110,3 @@
         }
     }
 }
-
-