diff --git a/include/media/openmax/OMX_AsString.h b/include/media/openmax/OMX_AsString.h
index 6b21979..56d7cc8 100644
--- a/include/media/openmax/OMX_AsString.h
+++ b/include/media/openmax/OMX_AsString.h
@@ -557,6 +557,7 @@
         case OMX_IndexConfigPriority:                   return "ConfigPriority";
         case OMX_IndexConfigOperatingRate:              return "ConfigOperatingRate";
         case OMX_IndexParamConsumerUsageBits:           return "ParamConsumerUsageBits";
+        case OMX_IndexConfigLatency:                    return "ConfigLatency";
         default:                                        return asString((OMX_INDEXTYPE)i, def);
     }
 }
diff --git a/include/media/openmax/OMX_IndexExt.h b/include/media/openmax/OMX_IndexExt.h
index eccecaa..5a029d0 100644
--- a/include/media/openmax/OMX_IndexExt.h
+++ b/include/media/openmax/OMX_IndexExt.h
@@ -96,6 +96,7 @@
     OMX_IndexConfigPriority,                        /**< reference: OMX_PARAM_U32TYPE */
     OMX_IndexConfigOperatingRate,                   /**< reference: OMX_PARAM_U32TYPE in Q16 format for video and in Hz for audio */
     OMX_IndexParamConsumerUsageBits,                /**< reference: OMX_PARAM_U32TYPE */
+    OMX_IndexConfigLatency,                         /**< reference: OMX_PARAM_U32TYPE */
     OMX_IndexExtOtherEndUnused,
 
     /* Time configurations */
diff --git a/libs/nativewindow/include/vndk/window.h b/libs/nativewindow/include/vndk/window.h
index 89585f3..310e1e5 100644
--- a/libs/nativewindow/include/vndk/window.h
+++ b/libs/nativewindow/include/vndk/window.h
@@ -236,6 +236,8 @@
     ANATIVEWINDOW_QUERY_YDPI = 0x10003,
 };
 
+typedef enum ANativeWindowQuery ANativeWindowQuery;
+
 /*
  * hook used to retrieve information about the native window.
  *
diff --git a/libs/nativewindow/tests/Android.bp b/libs/nativewindow/tests/Android.bp
index 437ab75..6d78770 100644
--- a/libs/nativewindow/tests/Android.bp
+++ b/libs/nativewindow/tests/Android.bp
@@ -17,5 +17,7 @@
 cc_test {
     name: "AHardwareBufferTest",
     shared_libs: ["libnativewindow"],
-    srcs: ["AHardwareBufferTest.cpp"],
+    srcs: [
+        "AHardwareBufferTest.cpp",
+        "c_compatibility.c"],
 }
diff --git a/libs/nativewindow/tests/c_compatibility.c b/libs/nativewindow/tests/c_compatibility.c
new file mode 100644
index 0000000..a0dfdf9
--- /dev/null
+++ b/libs/nativewindow/tests/c_compatibility.c
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <android/hardware_buffer.h>
+#include <android/native_window.h>
+#include <vndk/window.h>
+
+// this checks that all these headers are C-compatible
diff --git a/libs/vr/libdvr/dvr_api.cpp b/libs/vr/libdvr/dvr_api.cpp
index 4dd49da..5aa9652 100644
--- a/libs/vr/libdvr/dvr_api.cpp
+++ b/libs/vr/libdvr/dvr_api.cpp
@@ -77,6 +77,8 @@
 
     // dvr_surface.h
     dvr_api->get_pose_buffer_ = dvrGetPoseBuffer;
+    dvr_api->surface_create_ = dvrSurfaceCreate;
+    dvr_api->surface_get_write_buffer_queue_ = dvrSurfaceGetWriteBufferQueue;
 
     // vsync_client_api.h
     dvr_api->vsync_client_create_ = dvr_vsync_client_create;
diff --git a/libs/vr/libdvr/dvr_buffer_queue.cpp b/libs/vr/libdvr/dvr_buffer_queue.cpp
index b0b5a2a..4ce0b22 100644
--- a/libs/vr/libdvr/dvr_buffer_queue.cpp
+++ b/libs/vr/libdvr/dvr_buffer_queue.cpp
@@ -23,8 +23,8 @@
   return write_queue->producer_queue_->capacity();
 }
 
-void* dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue,
-                                            JNIEnv* env) {
+jobject dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue,
+                                              JNIEnv* env) {
   CHECK_PARAM(env);
   CHECK_PARAM(write_queue);
 
diff --git a/libs/vr/libdvr/dvr_surface.cpp b/libs/vr/libdvr/dvr_surface.cpp
index 2abbe63..a3cbba5 100644
--- a/libs/vr/libdvr/dvr_surface.cpp
+++ b/libs/vr/libdvr/dvr_surface.cpp
@@ -4,8 +4,60 @@
 
 using namespace android;
 
+struct DvrSurface {
+  std::unique_ptr<dvr::DisplaySurfaceClient> display_surface_;
+};
+
 extern "C" {
 
+int dvrSurfaceCreate(int width, int height, int format, uint64_t usage0,
+                     uint64_t usage1, int flags, DvrSurface** out_surface) {
+  if (out_surface == nullptr) {
+    ALOGE("dvrSurfaceCreate: invalid inputs: out_surface=%p.", out_surface);
+    return -EINVAL;
+  }
+
+  int error;
+  auto client = dvr::DisplayClient::Create(&error);
+  if (!client) {
+    ALOGE("Failed to create display client!");
+    return error;
+  }
+
+  // TODO(hendrikw): When we move to gralloc1, pass both usage0 and usage1 down.
+  std::unique_ptr<dvr::DisplaySurfaceClient> surface =
+      client->CreateDisplaySurface(
+          width, height, static_cast<int>(usage0 | usage1), format, flags);
+
+  DvrSurface* dvr_surface = new DvrSurface;
+  dvr_surface->display_surface_ = std::move(surface);
+  *out_surface = dvr_surface;
+  return 0;
+}
+
+int dvrSurfaceGetWriteBufferQueue(DvrSurface* surface,
+                                  DvrWriteBufferQueue** out_writer) {
+  if (surface == nullptr || out_writer == nullptr) {
+    ALOGE(
+        "dvrSurfaceGetWriteBufferQueue: Invalid inputs: surface=%p, "
+        "out_writer=%p.",
+        surface, out_writer);
+    return -EINVAL;
+  }
+  DvrWriteBufferQueue* buffer_writer = new DvrWriteBufferQueue;
+  buffer_writer->producer_queue_ =
+      surface->display_surface_->GetProducerQueue();
+  if (buffer_writer->producer_queue_ == nullptr) {
+    ALOGE(
+        "dvrSurfaceGetWriteBufferQueue: Failed to get producer queue from "
+        "display surface.");
+    return -ENOMEM;
+  }
+
+  *out_writer = buffer_writer;
+  return 0;
+}
+
 int dvrGetPoseBuffer(DvrReadBuffer** pose_buffer) {
   auto client = android::dvr::DisplayClient::Create();
   if (!client) {
diff --git a/libs/vr/libdvr/include/dvr/dvr_api.h b/libs/vr/libdvr/include/dvr/dvr_api.h
index 6fd50ee..bee4d66 100644
--- a/libs/vr/libdvr/include/dvr/dvr_api.h
+++ b/libs/vr/libdvr/include/dvr/dvr_api.h
@@ -22,8 +22,9 @@
 typedef struct dvr_vsync_client dvr_vsync_client;
 typedef struct DvrVirtualTouchpad DvrVirtualTouchpad;
 
-typedef DvrDisplayManagerClient* (*DisplayManagerClientCreatePtr)(void);
-typedef void (*DisplayManagerClientDestroyPtr)(DvrDisplayManagerClient* client);
+typedef DvrDisplayManagerClient* (*DvrDisplayManagerClientCreatePtr)(void);
+typedef void (*DvrDisplayManagerClientDestroyPtr)(
+    DvrDisplayManagerClient* client);
 
 typedef struct DvrWriteBuffer DvrWriteBuffer;
 typedef struct DvrReadBuffer DvrReadBuffer;
@@ -32,27 +33,29 @@
 typedef struct DvrWriteBufferQueue DvrWriteBufferQueue;
 typedef struct DvrReadBufferQueue DvrReadBufferQueue;
 
+typedef struct DvrSurface DvrSurface;
+
 // display_manager_client.h
-typedef int (*DisplayManagerClientGetSurfaceListPtr)(
+typedef int (*DvrDisplayManagerClientGetSurfaceListPtr)(
     DvrDisplayManagerClient* client,
     DvrDisplayManagerClientSurfaceList** surface_list);
-typedef void (*DisplayManagerClientSurfaceListDestroyPtr)(
+typedef void (*DvrDisplayManagerClientSurfaceListDestroyPtr)(
     DvrDisplayManagerClientSurfaceList* surface_list);
-typedef DvrWriteBuffer* (*DisplayManagerSetupPoseBufferPtr)(
+typedef DvrWriteBuffer* (*DvrDisplayManagerSetupPoseBufferPtr)(
     DvrDisplayManagerClient* client, size_t extended_region_size,
     uint64_t usage0, uint64_t usage1);
-typedef size_t (*DisplayManagerClientSurfaceListGetSizePtr)(
+typedef size_t (*DvrDisplayManagerClientSurfaceListGetSizePtr)(
     DvrDisplayManagerClientSurfaceList* surface_list);
-typedef int (*DisplayManagerClientSurfaceListGetSurfaceIdPtr)(
+typedef int (*DvrDisplayManagerClientSurfaceListGetSurfaceIdPtr)(
     DvrDisplayManagerClientSurfaceList* surface_list, size_t index);
-typedef int (*DisplayManagerClientGetSurfaceBufferListPtr)(
+typedef int (*DvrDisplayManagerClientGetSurfaceBufferListPtr)(
     DvrDisplayManagerClient* client, int surface_id,
     DvrDisplayManagerClientSurfaceBuffers** surface_buffers);
-typedef void (*DisplayManagerClientSurfaceBufferListDestroyPtr)(
+typedef void (*DvrDisplayManagerClientSurfaceBufferListDestroyPtr)(
     DvrDisplayManagerClientSurfaceBuffers* surface_buffers);
-typedef size_t (*DisplayManagerClientSurfaceBufferListGetSizePtr)(
+typedef size_t (*DvrDisplayManagerClientSurfaceBufferListGetSizePtr)(
     DvrDisplayManagerClientSurfaceBuffers* surface_buffers);
-typedef int (*DisplayManagerClientSurfaceBufferListGetFdPtr)(
+typedef int (*DvrDisplayManagerClientSurfaceBufferListGetFdPtr)(
     DvrDisplayManagerClientSurfaceBuffers* surface_buffers, size_t index);
 
 // dvr_buffer.h
@@ -85,7 +88,7 @@
 typedef void (*DvrWriteBufferQueueDestroyPtr)(DvrWriteBufferQueue* write_queue);
 typedef size_t (*DvrWriteBufferQueueGetCapacityPtr)(
     DvrWriteBufferQueue* write_queue);
-typedef void* (*DvrWriteBufferQueueGetExternalSurfacePtr)(
+typedef jobject (*DvrWriteBufferQueueGetExternalSurfacePtr)(
     DvrWriteBufferQueue* write_queue, JNIEnv* env);
 typedef int (*DvrWriteBufferQueueCreateReadQueuePtr)(
     DvrWriteBufferQueue* write_queue, DvrReadBufferQueue** out_read_queue);
@@ -106,55 +109,61 @@
 
 // dvr_surface.h
 typedef int (*DvrGetPoseBufferPtr)(DvrReadBuffer** pose_buffer);
+typedef int (*DvrSurfaceCreatePtr)(int width, int height, int format,
+                                   uint64_t usage0, uint64_t usage1, int flags,
+                                   DvrSurface** out_surface);
+typedef int (*DvrSurfaceGetWriteBufferQueuePtr)(
+    DvrSurface* surface, DvrWriteBufferQueue** out_writer);
 
 // vsync_client_api.h
-typedef dvr_vsync_client* (*VSyncClientCreatePtr)();
-typedef void (*VSyncClientDestroyPtr)(dvr_vsync_client* client);
-typedef int (*VSyncClientGetSchedInfoPtr)(dvr_vsync_client* client,
-                                          int64_t* vsync_period_ns,
-                                          int64_t* next_timestamp_ns,
-                                          uint32_t* next_vsync_count);
+typedef dvr_vsync_client* (*DvrVSyncClientCreatePtr)();
+typedef void (*DvrVSyncClientDestroyPtr)(dvr_vsync_client* client);
+typedef int (*DvrVSyncClientGetSchedInfoPtr)(dvr_vsync_client* client,
+                                             int64_t* vsync_period_ns,
+                                             int64_t* next_timestamp_ns,
+                                             uint32_t* next_vsync_count);
 
 // pose_client.h
-typedef DvrPose* (*PoseClientCreatePtr)(void);
-typedef void (*PoseClientDestroyPtr)(DvrPose* client);
-typedef int (*PoseGetPtr)(DvrPose* client, uint32_t vsync_count,
-                          DvrPoseAsync* out_pose);
-typedef uint32_t (*PoseGetVsyncCountPtr)(DvrPose* client);
-typedef int (*PoseGetControllerPtr)(DvrPose* client, int32_t controller_id,
-                                    uint32_t vsync_count,
-                                    DvrPoseAsync* out_pose);
+typedef DvrPose* (*DvrPoseClientCreatePtr)(void);
+typedef void (*DvrPoseClientDestroyPtr)(DvrPose* client);
+typedef int (*DvrPoseGetPtr)(DvrPose* client, uint32_t vsync_count,
+                             DvrPoseAsync* out_pose);
+typedef uint32_t (*DvrPoseGetVsyncCountPtr)(DvrPose* client);
+typedef int (*DvrPoseGetControllerPtr)(DvrPose* client, int32_t controller_id,
+                                       uint32_t vsync_count,
+                                       DvrPoseAsync* out_pose);
 
 // virtual_touchpad_client.h
-typedef DvrVirtualTouchpad* (*VirtualTouchpadCreatePtr)(void);
-typedef void (*VirtualTouchpadDestroyPtr)(DvrVirtualTouchpad* client);
-typedef int (*VirtualTouchpadAttachPtr)(DvrVirtualTouchpad* client);
-typedef int (*VirtualTouchpadDetachPtr)(DvrVirtualTouchpad* client);
-typedef int (*VirtualTouchpadTouchPtr)(DvrVirtualTouchpad* client, int touchpad,
-                                       float x, float y, float pressure);
-typedef int (*VirtualTouchpadButtonStatePtr)(DvrVirtualTouchpad* client,
-                                             int touchpad, int buttons);
+typedef DvrVirtualTouchpad* (*DvrVirtualTouchpadCreatePtr)(void);
+typedef void (*DvrVirtualTouchpadDestroyPtr)(DvrVirtualTouchpad* client);
+typedef int (*DvrVirtualTouchpadAttachPtr)(DvrVirtualTouchpad* client);
+typedef int (*DvrVirtualTouchpadDetachPtr)(DvrVirtualTouchpad* client);
+typedef int (*DvrVirtualTouchpadTouchPtr)(DvrVirtualTouchpad* client,
+                                          int touchpad, float x, float y,
+                                          float pressure);
+typedef int (*DvrVirtualTouchpadButtonStatePtr)(DvrVirtualTouchpad* client,
+                                                int touchpad, int buttons);
 
 struct DvrApi_v1 {
   // Display manager client
-  DisplayManagerClientCreatePtr display_manager_client_create_;
-  DisplayManagerClientDestroyPtr display_manager_client_destroy_;
-  DisplayManagerClientGetSurfaceListPtr
+  DvrDisplayManagerClientCreatePtr display_manager_client_create_;
+  DvrDisplayManagerClientDestroyPtr display_manager_client_destroy_;
+  DvrDisplayManagerClientGetSurfaceListPtr
       display_manager_client_get_surface_list_;
-  DisplayManagerClientSurfaceListDestroyPtr
+  DvrDisplayManagerClientSurfaceListDestroyPtr
       display_manager_client_surface_list_destroy_;
-  DisplayManagerSetupPoseBufferPtr display_manager_setup_pose_buffer_;
-  DisplayManagerClientSurfaceListGetSizePtr
+  DvrDisplayManagerSetupPoseBufferPtr display_manager_setup_pose_buffer_;
+  DvrDisplayManagerClientSurfaceListGetSizePtr
       display_manager_client_surface_list_get_size_;
-  DisplayManagerClientSurfaceListGetSurfaceIdPtr
+  DvrDisplayManagerClientSurfaceListGetSurfaceIdPtr
       display_manager_client_surface_list_get_surface_id_;
-  DisplayManagerClientGetSurfaceBufferListPtr
+  DvrDisplayManagerClientGetSurfaceBufferListPtr
       display_manager_client_get_surface_buffer_list_;
-  DisplayManagerClientSurfaceBufferListDestroyPtr
+  DvrDisplayManagerClientSurfaceBufferListDestroyPtr
       display_manager_client_surface_buffer_list_destroy_;
-  DisplayManagerClientSurfaceBufferListGetSizePtr
+  DvrDisplayManagerClientSurfaceBufferListGetSizePtr
       display_manager_client_surface_buffer_list_get_size_;
-  DisplayManagerClientSurfaceBufferListGetFdPtr
+  DvrDisplayManagerClientSurfaceBufferListGetFdPtr
       display_manager_client_surface_buffer_list_get_fd_;
 
   // Write buffer
@@ -188,27 +197,29 @@
   DvrReadBufferQueueDequeuePtr read_buffer_queue_dequeue;
 
   // V-Sync client
-  VSyncClientCreatePtr vsync_client_create_;
-  VSyncClientDestroyPtr vsync_client_destroy_;
-  VSyncClientGetSchedInfoPtr vsync_client_get_sched_info_;
+  DvrVSyncClientCreatePtr vsync_client_create_;
+  DvrVSyncClientDestroyPtr vsync_client_destroy_;
+  DvrVSyncClientGetSchedInfoPtr vsync_client_get_sched_info_;
 
   // Display surface
   DvrGetPoseBufferPtr get_pose_buffer_;
+  DvrSurfaceCreatePtr surface_create_;
+  DvrSurfaceGetWriteBufferQueuePtr surface_get_write_buffer_queue_;
 
   // Pose client
-  PoseClientCreatePtr pose_client_create_;
-  PoseClientDestroyPtr pose_client_destroy_;
-  PoseGetPtr pose_get_;
-  PoseGetVsyncCountPtr pose_get_vsync_count_;
-  PoseGetControllerPtr pose_get_controller_;
+  DvrPoseClientCreatePtr pose_client_create_;
+  DvrPoseClientDestroyPtr pose_client_destroy_;
+  DvrPoseGetPtr pose_get_;
+  DvrPoseGetVsyncCountPtr pose_get_vsync_count_;
+  DvrPoseGetControllerPtr pose_get_controller_;
 
   // Virtual touchpad client
-  VirtualTouchpadCreatePtr virtual_touchpad_create_;
-  VirtualTouchpadDestroyPtr virtual_touchpad_destroy_;
-  VirtualTouchpadAttachPtr virtual_touchpad_attach_;
-  VirtualTouchpadDetachPtr virtual_touchpad_detach_;
-  VirtualTouchpadTouchPtr virtual_touchpad_touch_;
-  VirtualTouchpadButtonStatePtr virtual_touchpad_button_state_;
+  DvrVirtualTouchpadCreatePtr virtual_touchpad_create_;
+  DvrVirtualTouchpadDestroyPtr virtual_touchpad_destroy_;
+  DvrVirtualTouchpadAttachPtr virtual_touchpad_attach_;
+  DvrVirtualTouchpadDetachPtr virtual_touchpad_detach_;
+  DvrVirtualTouchpadTouchPtr virtual_touchpad_touch_;
+  DvrVirtualTouchpadButtonStatePtr virtual_touchpad_button_state_;
 };
 
 int dvrGetApi(void* api, size_t struct_size, int version);
diff --git a/libs/vr/libdvr/include/dvr/dvr_buffer_queue.h b/libs/vr/libdvr/include/dvr/dvr_buffer_queue.h
index 86b3ae2..80c9779 100644
--- a/libs/vr/libdvr/include/dvr/dvr_buffer_queue.h
+++ b/libs/vr/libdvr/include/dvr/dvr_buffer_queue.h
@@ -17,8 +17,8 @@
 
 // Returns ANativeWindow in the form of jobject. Can be casted to ANativeWindow
 // using ANativeWindow_fromSurface NDK API.
-void* dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue,
-                                            JNIEnv* env);
+jobject dvrWriteBufferQueueGetExternalSurface(DvrWriteBufferQueue* write_queue,
+                                              JNIEnv* env);
 
 int dvrWriteBufferQueueCreateReadQueue(DvrWriteBufferQueue* write_queue,
                                        DvrReadBufferQueue** out_read_queue);
diff --git a/libs/vr/libdvr/include/dvr/dvr_surface.h b/libs/vr/libdvr/include/dvr/dvr_surface.h
index fa8d228..2712f24 100644
--- a/libs/vr/libdvr/include/dvr/dvr_surface.h
+++ b/libs/vr/libdvr/include/dvr/dvr_surface.h
@@ -2,14 +2,25 @@
 #define ANDROID_DVR_SURFACE_H_
 
 #include <dvr/dvr_buffer.h>
+#include <dvr/dvr_buffer_queue.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+typedef struct DvrSurface DvrSurface;
+typedef struct DvrSurfaceParameter DvrSurfaceParameter;
+
 // Get a pointer to the global pose buffer.
 int dvrGetPoseBuffer(DvrReadBuffer** pose_buffer);
 
+int dvrSurfaceCreate(int width, int height, int format, uint64_t usage0,
+                     uint64_t usage1, int flags, DvrSurface** out_surface);
+
+// TODO(eieio, jwcai) Change this once we have multiple buffer queue support.
+int dvrSurfaceGetWriteBufferQueue(DvrSurface* surface,
+                                  DvrWriteBufferQueue** out_writer);
+
 #ifdef __cplusplus
 }  // extern "C"
 #endif
diff --git a/libs/vr/libdvrcommon/include/private/dvr/benchmark.h b/libs/vr/libdvrcommon/include/private/dvr/benchmark.h
index 2dbb5f2..7eeab16 100644
--- a/libs/vr/libdvrcommon/include/private/dvr/benchmark.h
+++ b/libs/vr/libdvrcommon/include/private/dvr/benchmark.h
@@ -19,7 +19,7 @@
 // ... code to benchmark ...
 // Btrace("End execution");
 //
-// Use compute_benchmarks.py (currently in dreamos/system/core/applications),
+// Use compute_benchmarks.py
 // with the trace path "Start execution,End execution",
 // to report the elapsed time between the two calls.
 //
diff --git a/libs/vr/libimageio/include/private/dvr/image_io_base.h b/libs/vr/libimageio/include/private/dvr/image_io_base.h
index 009cad4..5f29de7 100644
--- a/libs/vr/libimageio/include/private/dvr/image_io_base.h
+++ b/libs/vr/libimageio/include/private/dvr/image_io_base.h
@@ -1,5 +1,5 @@
-#ifndef LIB_LIBIMAGEIO_PRIVATE_DREAMOS_IMAGE_IO_BASE_H_
-#define LIB_LIBIMAGEIO_PRIVATE_DREAMOS_IMAGE_IO_BASE_H_
+#ifndef LIB_LIBIMAGEIO_PRIVATE_DVR_IMAGE_IO_BASE_H_
+#define LIB_LIBIMAGEIO_PRIVATE_DVR_IMAGE_IO_BASE_H_
 
 #include <memory>
 #include <string>
@@ -53,4 +53,4 @@
   ImageIoWriter() = delete;
 };
 
-#endif  // LIB_LIBIMAGEIO_PRIVATE_DREAMOS_IMAGE_IO_BASE_H_
+#endif  // LIB_LIBIMAGEIO_PRIVATE_DVR_IMAGE_IO_BASE_H_
diff --git a/libs/vr/libimageio/include/private/dvr/image_io_logging.h b/libs/vr/libimageio/include/private/dvr/image_io_logging.h
index ac78179..a2629f3 100644
--- a/libs/vr/libimageio/include/private/dvr/image_io_logging.h
+++ b/libs/vr/libimageio/include/private/dvr/image_io_logging.h
@@ -1,5 +1,5 @@
-#ifndef LIB_LIBIMAGEIO_PRIVATE_DREAMOS_IMAGE_IO_LOGGING_H_
-#define LIB_LIBIMAGEIO_PRIVATE_DREAMOS_IMAGE_IO_LOGGING_H_
+#ifndef LIB_LIBIMAGEIO_PRIVATE_DVR_IMAGE_IO_LOGGING_H_
+#define LIB_LIBIMAGEIO_PRIVATE_DVR_IMAGE_IO_LOGGING_H_
 
 // This header acts as log/log.h if LOG_TO_STDERR is not defined.
 // If LOG_TO_STDERR is defined, then android logging macros (such as ALOGE)
@@ -36,4 +36,4 @@
 #include <log/log.h>
 #endif  // LOG_TO_STDERR
 
-#endif  // LIB_LIBIMAGEIO_PRIVATE_DREAMOS_IMAGE_IO_LOGGING_H_
+#endif  // LIB_LIBIMAGEIO_PRIVATE_DVR_IMAGE_IO_LOGGING_H_
diff --git a/libs/vr/libimageio/include/private/dvr/image_io_png.h b/libs/vr/libimageio/include/private/dvr/image_io_png.h
index e3b19db..e06a17a 100644
--- a/libs/vr/libimageio/include/private/dvr/image_io_png.h
+++ b/libs/vr/libimageio/include/private/dvr/image_io_png.h
@@ -1,5 +1,5 @@
-#ifndef LIB_LIBIMAGEIO_PRIVATE_DREAMOS_IMAGE_IO_PNG_H_
-#define LIB_LIBIMAGEIO_PRIVATE_DREAMOS_IMAGE_IO_PNG_H_
+#ifndef LIB_LIBIMAGEIO_PRIVATE_DVR_IMAGE_IO_PNG_H_
+#define LIB_LIBIMAGEIO_PRIVATE_DVR_IMAGE_IO_PNG_H_
 
 #include <fstream>
 
@@ -21,4 +21,4 @@
   friend class ImageIoWriter;
 };
 
-#endif  // LIB_LIBIMAGEIO_PRIVATE_DREAMOS_IMAGE_IO_PNG_H_
+#endif  // LIB_LIBIMAGEIO_PRIVATE_DVR_IMAGE_IO_PNG_H_
diff --git a/libs/vr/libimageio/include/private/dvr/image_io_ppm.h b/libs/vr/libimageio/include/private/dvr/image_io_ppm.h
index 00264bd..8a1a96c 100644
--- a/libs/vr/libimageio/include/private/dvr/image_io_ppm.h
+++ b/libs/vr/libimageio/include/private/dvr/image_io_ppm.h
@@ -1,5 +1,5 @@
-#ifndef LIB_LIBIMAGEIO_PRIVATE_DREAMOS_IMAGE_IO_PPM_H_
-#define LIB_LIBIMAGEIO_PRIVATE_DREAMOS_IMAGE_IO_PPM_H_
+#ifndef LIB_LIBIMAGEIO_PRIVATE_DVR_IMAGE_IO_PPM_H_
+#define LIB_LIBIMAGEIO_PRIVATE_DVR_IMAGE_IO_PPM_H_
 
 #include <private/dvr/image_io_base.h>
 
@@ -25,4 +25,4 @@
   friend class ImageIoWriter;
 };
 
-#endif  // LIB_LIBIMAGEIO_PRIVATE_DREAMOS_IMAGE_IO_PPM_H_
+#endif  // LIB_LIBIMAGEIO_PRIVATE_DVR_IMAGE_IO_PPM_H_
diff --git a/libs/vr/libvrflinger/acquired_buffer.h b/libs/vr/libvrflinger/acquired_buffer.h
index 050cd5f..1d14a38 100644
--- a/libs/vr/libvrflinger/acquired_buffer.h
+++ b/libs/vr/libvrflinger/acquired_buffer.h
@@ -43,7 +43,7 @@
 
   // Accessors for the underlying BufferConsumer, the acquire fence, and the
   // use-case specific sequence value from the acquisition (see
-  // dreamos/buffer_hub_client.h).
+  // private/dvr/buffer_hub_client.h).
   std::shared_ptr<BufferConsumer> buffer() const { return buffer_; }
   int acquire_fence() const { return acquire_fence_.Get(); }
 
diff --git a/libs/vr/libvrflinger/compositor.cpp b/libs/vr/libvrflinger/compositor.cpp
index 5a111d4..699088e 100644
--- a/libs/vr/libvrflinger/compositor.cpp
+++ b/libs/vr/libvrflinger/compositor.cpp
@@ -48,10 +48,10 @@
     std::make_shared<int64_t>(0);
 
 static constexpr char kDisableLensDistortionProp[] =
-    "persist.dreamos.disable_distort";
+    "persist.dvr.disable_distort";
 
 static constexpr char kEnableEdsPoseSaveProp[] =
-    "persist.dreamos.save_eds_pose";
+    "persist.dvr.save_eds_pose";
 
 namespace android {
 namespace dvr {
diff --git a/libs/vr/libvrflinger/hardware_composer.cpp b/libs/vr/libvrflinger/hardware_composer.cpp
index 542bbd9..71591d4 100644
--- a/libs/vr/libvrflinger/hardware_composer.cpp
+++ b/libs/vr/libvrflinger/hardware_composer.cpp
@@ -64,7 +64,7 @@
 
 const char kDvrPerformanceProperty[] = "sys.dvr.performance";
 
-const char kRightEyeOffsetProperty[] = "dreamos.right_eye_offset_ns";
+const char kRightEyeOffsetProperty[] = "dvr.right_eye_offset_ns";
 
 // Returns our best guess for the time the compositor will spend rendering the
 // next frame.
diff --git a/services/vr/sensord/pose_service.cpp b/services/vr/sensord/pose_service.cpp
index f9c7462..c1aad19 100644
--- a/services/vr/sensord/pose_service.cpp
+++ b/services/vr/sensord/pose_service.cpp
@@ -48,7 +48,7 @@
 static constexpr float kDefaultNeckVerticalOffset = 0.075f;    // meters
 
 static constexpr char kDisablePosePredictionProp[] =
-    "persist.dreamos.disable_predict";
+    "persist.dvr.disable_predict";
 
 // Device type property for controlling classes of behavior that differ
 // between devices. If unset, defaults to kOrientationTypeSmartphone.
@@ -183,7 +183,7 @@
     KickSensorWatchDogThread();
   }
 
-  // Read the persistent dreamos flags before using them in SetPoseMode.
+  // Read the persistent dvr flags before using them in SetPoseMode.
   enable_pose_prediction_ =
       property_get_bool(kDisablePosePredictionProp, 0) == 0;
 
@@ -440,6 +440,15 @@
             kRotX90 * Rotationd(AngleAxisd(-k90DegInRad, kVecAxisY));
         start_from_head_rotation =
             (pose_state.sensor_from_start_rotation * kPostRotation).inverse();
+      } else if (device_orientation_type_ == kOrientationTypeLandscape180) {
+        const Rotationd kPreRotation =
+            Rotationd(AngleAxisd(k90DegInRad * 2.0, kVecAxisY)) *
+            Rotationd(AngleAxisd(k90DegInRad * 2.0, kVecAxisZ));
+        const Rotationd kPostRotation = kRotX90;
+        start_from_head_rotation =
+            (kPreRotation *
+             pose_state.sensor_from_start_rotation * kPostRotation)
+                .inverse();
       } else {
         const Rotationd kPreRotation =
             Rotationd(AngleAxisd(k90DegInRad, kVecAxisZ));
diff --git a/services/vr/sensord/pose_service.h b/services/vr/sensord/pose_service.h
index 517334a..dbf0345 100644
--- a/services/vr/sensord/pose_service.h
+++ b/services/vr/sensord/pose_service.h
@@ -43,6 +43,8 @@
     kOrientationTypePortrait = 1,
     // Landscape device.
     kOrientationTypeLandscape = 2,
+    // 180 Landscape device.
+    kOrientationTypeLandscape180 = 3,
   };
 
   // Initializes the service. Keeps a reference to sensor_thread, which must be
diff --git a/services/vr/vr_window_manager/aidl/android/service/vr/IVrWindowManager.aidl b/services/vr/vr_window_manager/aidl/android/service/vr/IVrWindowManager.aidl
index 67fd927..b16049f 100644
--- a/services/vr/vr_window_manager/aidl/android/service/vr/IVrWindowManager.aidl
+++ b/services/vr/vr_window_manager/aidl/android/service/vr/IVrWindowManager.aidl
@@ -25,5 +25,6 @@
     void exitVrMode() = 3;
     void setDebugMode(int mode) = 4;
     void set2DMode(int mode) = 5;
+    void setRotation(int angle) = 6;
 }
 
diff --git a/services/vr/vr_window_manager/display_view.cpp b/services/vr/vr_window_manager/display_view.cpp
index e88e7d0..311e27f 100644
--- a/services/vr/vr_window_manager/display_view.cpp
+++ b/services/vr/vr_window_manager/display_view.cpp
@@ -146,16 +146,18 @@
 
 DisplayView::DisplayView(uint32_t id, int touchpad_id)
     : id_(id), touchpad_id_(touchpad_id) {
-  translate_ = Eigen::Translation3f(0, 0, -2.5f);
+  translate_ = Eigen::Translation3f(0, 0, -5.0f);
   ime_translate_ = mat4(Eigen::Translation3f(0.0f, -0.5f, 0.25f));
   ime_top_left_ = vec2(0, 0);
   ime_size_ = vec2(0, 0);
+  rotation_ = mat4::Identity();
 }
 
 DisplayView::~DisplayView() {}
 
 void DisplayView::Recenter(const mat4& initial) {
-  initial_head_matrix_ = initial;
+  initial_head_matrix_ =
+      initial * Eigen::AngleAxisf(M_PI * 0.5f, vec3::UnitZ());
 }
 
 void DisplayView::SetPrograms(ShaderProgram* program,
@@ -248,7 +250,7 @@
 bool DisplayView::IsHit(const vec3& view_location, const vec3& view_direction,
                         vec3* hit_location, vec2* hit_location_in_window_coord,
                         bool test_ime) {
-  mat4 m = initial_head_matrix_ * translate_;
+  mat4 m = GetStandardTransform();
   if (test_ime)
     m = m * ime_translate_;
   mat4 inverse = (m * scale_).inverse();
@@ -314,8 +316,7 @@
     mat4 layer_transform =
         GetLayerTransform(texture_layer, size_.x(), size_.y());
 
-    mat4 transform =
-        initial_head_matrix_ * translate_ * scale_ * layer_transform;
+    mat4 transform = GetStandardTransform() * scale_ * layer_transform;
     DrawWithTransform(transform, *program_);
 
     glDisable(GL_BLEND);
@@ -351,14 +352,21 @@
   }
 }
 
+mat4 DisplayView::GetStandardTransform() {
+  mat4 m = initial_head_matrix_ * rotation_ * translate_;
+  if (current_frame_.visibility == ViewMode::App)
+    m *= Eigen::AngleAxisf(M_PI * -0.5f, vec3::UnitZ());
+  return m;
+}
+
 void DisplayView::DrawIme() {
   program_->Use();
   glBindTexture(GL_TEXTURE_2D, ime_texture_.texture->id());
 
   mat4 layer_transform = GetLayerTransform(ime_texture_, size_.x(), size_.y());
 
-  mat4 transform = initial_head_matrix_ * translate_ * ime_translate_ * scale_ *
-                   layer_transform;
+  mat4 transform =
+      GetStandardTransform() * ime_translate_ * scale_ * layer_transform;
 
   DrawWithTransform(transform, *program_);
 }
@@ -377,7 +385,7 @@
   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
   mat4 layer_transform = GetLayerTransform(layer, size_.x(), size_.y());
 
-  mat4 transform = initial_head_matrix_ * translate_ * scale_ * layer_transform;
+  mat4 transform = GetStandardTransform() * scale_ * layer_transform;
   DrawWithTransform(transform, *overlay_program_);
   glDisable(GL_BLEND);
 }
diff --git a/services/vr/vr_window_manager/display_view.h b/services/vr/vr_window_manager/display_view.h
index 0d1355e..aaf4677 100644
--- a/services/vr/vr_window_manager/display_view.h
+++ b/services/vr/vr_window_manager/display_view.h
@@ -47,6 +47,8 @@
   void set_2dmode(bool mode) { use_2dmode_ = mode; }
   void set_always_2d(bool mode) { always_2d_ = mode; }
 
+  void set_rotation(const mat4& rotation) { rotation_ = rotation; }
+
  private:
   bool IsHit(const vec3& view_location, const vec3& view_direction,
              vec3* hit_location, vec2* hit_location_in_window_coord,
@@ -60,6 +62,9 @@
                       const vec2& top_left, const vec2& bottom_right);
   void DrawWithTransform(const mat4& transform, const ShaderProgram& program);
 
+  // This is the rotated, translated but unscaled transform to apply everywhere.
+  mat4 GetStandardTransform();
+
   uint32_t id_;
   int touchpad_id_;
 
@@ -72,6 +77,7 @@
   mat4 scale_;
   mat4 translate_;
   mat4 ime_translate_;
+  mat4 rotation_;
   vec2 size_;
 
   std::vector<TextureLayer> textures_;
diff --git a/services/vr/vr_window_manager/shell_view.cpp b/services/vr/vr_window_manager/shell_view.cpp
index c270be2..3aae228 100644
--- a/services/vr/vr_window_manager/shell_view.cpp
+++ b/services/vr/vr_window_manager/shell_view.cpp
@@ -205,6 +205,12 @@
     displays_[0]->set_2dmode(mode);
 }
 
+void ShellView::SetRotation(int angle) {
+  mat4 m(Eigen::AngleAxisf(M_PI * -0.5f * angle, vec3::UnitZ()));
+  for (auto& d: displays_)
+    d->set_rotation(m);
+}
+
 void ShellView::OnDrawFrame() {
   bool visible = false;
 
@@ -323,10 +329,6 @@
 
   size_ = vec2(surface_flinger_view_->width(), surface_flinger_view_->height());
 
-  // TODO(alexst): Replicate controller rendering from VR Home.
-  // Current approach in the function below is a quick visualization.
-  DrawController(perspective, eye_matrix, head_matrix);
-
   for (auto& display : displays_) {
     if (display->visible()) {
       display->DrawEye(eye, perspective, eye_matrix, head_matrix, size_,
@@ -334,6 +336,10 @@
     }
   }
 
+  // TODO(alexst): Replicate controller rendering from VR Home.
+  // Current approach in the function below is a quick visualization.
+  DrawController(perspective, eye_matrix, head_matrix);
+
   DrawReticle(perspective, eye_matrix, head_matrix);
 }
 
@@ -378,6 +384,9 @@
           case 0x3:
             OnTouchpadButton(false, AMOTION_EVENT_BUTTON_BACK);
             break;
+          case 0x4:
+            should_recenter_ = true;
+            break;
           case 0x9:
             OnClick(true);
             break;
@@ -473,12 +482,14 @@
 
   const vec2& hit_location = active_display_->hit_location();
 
+  float x = hit_location.x() / size_.x();
+  float y = hit_location.y() / size_.y();
+
   // Device is portrait, but in landscape when in VR.
   // Rotate touch input appropriately.
   const android::status_t status = dvrVirtualTouchpadTouch(
       virtual_touchpad_.get(), active_display_->touchpad_id(),
-      1.0f - hit_location.y() / size_.y(), hit_location.x() / size_.x(),
-      is_touching_ ? 1.0f : 0.0f);
+      x, y, is_touching_ ? 1.0f : 0.0f);
   if (status != OK) {
     ALOGE("touch failed: %d", status);
   }
diff --git a/services/vr/vr_window_manager/shell_view.h b/services/vr/vr_window_manager/shell_view.h
index d265866..8548dc1 100644
--- a/services/vr/vr_window_manager/shell_view.h
+++ b/services/vr/vr_window_manager/shell_view.h
@@ -34,6 +34,7 @@
   void VrMode(bool mode) override;
   void dumpInternal(String8& result) override;
   void Set2DMode(bool mode) override;
+  void SetRotation(int angle) override;
 
 
  protected:
diff --git a/services/vr/vr_window_manager/shell_view_binder_interface.h b/services/vr/vr_window_manager/shell_view_binder_interface.h
index 9f77e5a..c66e4a1 100644
--- a/services/vr/vr_window_manager/shell_view_binder_interface.h
+++ b/services/vr/vr_window_manager/shell_view_binder_interface.h
@@ -13,6 +13,7 @@
   virtual void VrMode(bool mode) = 0;
   virtual void dumpInternal(String8& result) = 0;
   virtual void Set2DMode(bool mode) = 0;
+  virtual void SetRotation(int angle) = 0;
 };
 
 }  // namespace dvr
diff --git a/services/vr/vr_window_manager/surface_flinger_view.cpp b/services/vr/vr_window_manager/surface_flinger_view.cpp
index 427ad70..7ecc542 100644
--- a/services/vr/vr_window_manager/surface_flinger_view.cpp
+++ b/services/vr/vr_window_manager/surface_flinger_view.cpp
@@ -59,9 +59,8 @@
     ALOGI("Setting display metrics to default : width=%d height=%d", metrics.display_native_height, metrics.display_native_width);
   }
 
-  // TODO(alexst): Refactor ShellView to account for orientation and change this back.
-  width_ = metrics.display_native_height;
-  height_ = metrics.display_native_width;
+  width_ = metrics.display_native_width;
+  height_ = metrics.display_native_height;
   return true;
 }
 
diff --git a/services/vr/vr_window_manager/vr_window_manager_binder.cpp b/services/vr/vr_window_manager/vr_window_manager_binder.cpp
index 8868588..fdcb8b2 100644
--- a/services/vr/vr_window_manager/vr_window_manager_binder.cpp
+++ b/services/vr/vr_window_manager/vr_window_manager_binder.cpp
@@ -138,6 +138,11 @@
   return binder::Status::ok();
 }
 
+binder::Status VrWindowManagerBinder::setRotation(int32_t angle) {
+  app_.SetRotation(angle);
+  return binder::Status::ok();
+}
+
 status_t VrWindowManagerBinder::dump(
     int fd, const Vector<String16>& args [[gnu::unused]]) {
   String8 result;
diff --git a/services/vr/vr_window_manager/vr_window_manager_binder.h b/services/vr/vr_window_manager/vr_window_manager_binder.h
index 1915ffc..9d0f0b2 100644
--- a/services/vr/vr_window_manager/vr_window_manager_binder.h
+++ b/services/vr/vr_window_manager/vr_window_manager_binder.h
@@ -60,6 +60,7 @@
   ::android::binder::Status exitVrMode() override;
   ::android::binder::Status setDebugMode(int32_t mode) override;
   ::android::binder::Status set2DMode(int32_t mode) override;
+  ::android::binder::Status setRotation(int32_t angle) override;
 
   // Implements BBinder::dump().
   status_t dump(int fd, const Vector<String16>& args) override;
diff --git a/services/vr/vr_window_manager/vr_wm_ctl.cpp b/services/vr/vr_window_manager/vr_wm_ctl.cpp
index 2e5c488..758e02b 100644
--- a/services/vr/vr_window_manager/vr_wm_ctl.cpp
+++ b/services/vr/vr_window_manager/vr_wm_ctl.cpp
@@ -41,6 +41,8 @@
     exit(report(vrwm->setDebugMode(atoi(argv[2]))));
   } else if ((argc == 3) && (strcmp(argv[1], "2d") == 0)) {
     exit(report(vrwm->set2DMode(atoi(argv[2]))));
+  } else if ((argc == 3) && (strcmp(argv[1], "rotate") == 0)) {
+    exit(report(vrwm->setRotation(atoi(argv[2]))));
   } else {
     usage();
     exit(2);
