Camera2: Improve ANativeWindow handling

- Properly set up scaling mode and transform on stream create
- More error checking/verbose logs on enqueue/dequeue

Bug: 6243944
Change-Id: Ic814e7f84a2016ed46ee2eb6832474f741f7cfd1
diff --git a/services/camera/libcameraservice/Camera2Device.cpp b/services/camera/libcameraservice/Camera2Device.cpp
index bd62fa1..6a1e9ea 100644
--- a/services/camera/libcameraservice/Camera2Device.cpp
+++ b/services/camera/libcameraservice/Camera2Device.cpp
@@ -502,10 +502,25 @@
         return res;
     }
 
+    res = native_window_set_scaling_mode(mConsumerInterface.get(),
+            NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW);
+    if (res != OK) {
+        ALOGE("%s: Unable to configure stream scaling: %s (%d)",
+                __FUNCTION__, strerror(-res), res);
+        return res;
+    }
+
+    res = native_window_set_buffers_transform(mConsumerInterface.get(), 0);
+    if (res != OK) {
+        ALOGE("%s: Unable to configure stream transform: %s (%d)",
+                __FUNCTION__, strerror(-res), res);
+        return res;
+    }
+
     res = native_window_set_buffers_geometry(mConsumerInterface.get(),
             mWidth, mHeight, mFormat);
     if (res != OK) {
-        ALOGE("%s: Unable to configure buffer geometry"
+        ALOGE("%s: Unable to configure stream buffer geometry"
                 " %d x %d, format 0x%x for stream %d",
                 __FUNCTION__, mWidth, mHeight, mFormat, mId);
         return res;
@@ -646,8 +661,10 @@
 int Camera2Device::StreamAdapter::enqueue_buffer(const camera2_stream_ops_t* w,
         int64_t timestamp,
         buffer_handle_t* buffer) {
-    ALOGV("%s: Buffer %p captured at %lld ns", __FUNCTION__, buffer, timestamp);
-    int state = static_cast<const StreamAdapter*>(w)->mState;
+    const StreamAdapter *stream = static_cast<const StreamAdapter*>(w);
+    ALOGV("%s: Stream %d: Buffer %p captured at %lld ns",
+            __FUNCTION__, stream->mId, buffer, timestamp);
+    int state = stream->mState;
     if (state != ACTIVE) {
         ALOGE("%s: Called when in bad state: %d", __FUNCTION__, state);
         return INVALID_OPERATION;
@@ -655,9 +672,18 @@
     ANativeWindow *a = toANW(w);
     status_t err;
     err = native_window_set_buffers_timestamp(a, timestamp);
-    if (err != OK) return err;
-    return a->queueBuffer(a,
+    if (err != OK) {
+        ALOGE("%s: Error setting timestamp on native window: %s (%d)",
+                __FUNCTION__, strerror(-err), err);
+        return err;
+    }
+    err = a->queueBuffer(a,
             container_of(buffer, ANativeWindowBuffer, handle));
+    if (err != OK) {
+        ALOGE("%s: Error queueing buffer to native window: %s (%d)",
+                __FUNCTION__, strerror(-err), err);
+    }
+    return err;
 }
 
 int Camera2Device::StreamAdapter::cancel_buffer(const camera2_stream_ops_t* w,