AHardwareBuffer now reports its stride

Test: compile / manual
Bug: 37686713
Change-Id: I1d75c67816717dc5d8ef4c71c1ca45d1d86aefb3
diff --git a/libs/nativewindow/AHardwareBuffer.cpp b/libs/nativewindow/AHardwareBuffer.cpp
index 4a8d3b6..80c5ec2 100644
--- a/libs/nativewindow/AHardwareBuffer.cpp
+++ b/libs/nativewindow/AHardwareBuffer.cpp
@@ -50,8 +50,8 @@
         return BAD_VALUE;
     }
 
-    if (desc->reserved != 0) {
-        ALOGE("AHardwareBuffer_Desc::reserved field must be 0");
+    if (desc->rfu0 != 0 || desc->rfu1 != 0) {
+        ALOGE("AHardwareBuffer_Desc::rfu fields must be 0");
         return BAD_VALUE;
     }
 
@@ -101,10 +101,11 @@
     outDesc->width = gbuffer->getWidth();
     outDesc->height = gbuffer->getHeight();
     outDesc->layers = gbuffer->getLayerCount();
-    outDesc->format = AHardwareBuffer_convertFromPixelFormat(
-            static_cast<uint32_t>(gbuffer->getPixelFormat()));
+    outDesc->format = AHardwareBuffer_convertFromPixelFormat(uint32_t(gbuffer->getPixelFormat()));
     outDesc->usage = AHardwareBuffer_convertFromGrallocUsageBits(gbuffer->getUsage());
-    outDesc->reserved = 0;
+    outDesc->stride = gbuffer->getStride();
+    outDesc->rfu0 = 0;
+    outDesc->rfu1 = 0;
 }
 
 int AHardwareBuffer_lock(AHardwareBuffer* buffer, uint64_t usage,
diff --git a/libs/nativewindow/include/android/hardware_buffer.h b/libs/nativewindow/include/android/hardware_buffer.h
index e1d54e6..52440a5 100644
--- a/libs/nativewindow/include/android/hardware_buffer.h
+++ b/libs/nativewindow/include/android/hardware_buffer.h
@@ -137,12 +137,14 @@
 };
 
 typedef struct AHardwareBuffer_Desc {
-    uint32_t    width;
-    uint32_t    height;
-    uint32_t    layers;
+    uint32_t    width;      // width in pixels
+    uint32_t    height;     // height in pixels
+    uint32_t    layers;     // number of images
     uint32_t    format;     // One of AHARDWAREBUFFER_FORMAT_*
     uint64_t    usage;      // Combination of AHARDWAREBUFFER_USAGE_*
-    uint64_t    reserved;   // Initialize to zero, reserved for future use
+    uint32_t    stride;     // Stride in pixels, ignored for AHardwareBuffer_allocate()
+    uint32_t    rfu0;       // Initialize to zero, reserved for future use
+    uint64_t    rfu1;       // Initialize to zero, reserved for future use
 } AHardwareBuffer_Desc;
 
 typedef struct AHardwareBuffer AHardwareBuffer;