diff --git a/tools/emulator/opengl/system/OpenglSystemCommon/gralloc_cb.h b/tools/emulator/opengl/system/OpenglSystemCommon/gralloc_cb.h
index a3fb8dd..a207401 100644
--- a/tools/emulator/opengl/system/OpenglSystemCommon/gralloc_cb.h
+++ b/tools/emulator/opengl/system/OpenglSystemCommon/gralloc_cb.h
@@ -25,18 +25,6 @@
 #define CB_HANDLE_NUM_INTS(nfds) (int)((sizeof(cb_handle_t) - (nfds)*sizeof(int)) / sizeof(int))
 
 //
-// Emulator-specific gralloc formats
-//
-enum {
-    // Request that gralloc select the proper format given the usage
-    // flags. Pass this as the format to gralloc_alloc, and then the concrete
-    // format can be found in cb_handle_t.format. It is invalid for
-    // cb_handle_t.format to be AUTO; it must be a concrete format in either the
-    // standard HAL_PIXEL_FORMAT enum or other values in this enum.
-    GRALLOC_EMULATOR_PIXEL_FORMAT_AUTO = 0x100
-};
-
-//
 // Our buffer handle structure
 //
 struct cb_handle_t : public native_handle {
diff --git a/tools/emulator/opengl/system/gralloc/gralloc.cpp b/tools/emulator/opengl/system/gralloc/gralloc.cpp
index 0e43711..96e0594 100644
--- a/tools/emulator/opengl/system/gralloc/gralloc.cpp
+++ b/tools/emulator/opengl/system/gralloc/gralloc.cpp
@@ -156,7 +156,7 @@
 
     // Pick the right concrete pixel format given the endpoints as encoded in
     // the usage bits.  Every end-point pair needs explicit listing here.
-    if (format == GRALLOC_EMULATOR_PIXEL_FORMAT_AUTO) {
+    if (format == HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
         // Camera as producer
         if (usage & GRALLOC_USAGE_HW_CAMERA_WRITE) {
             if (usage & GRALLOC_USAGE_HW_TEXTURE) {
@@ -165,10 +165,13 @@
             } else if (usage & GRALLOC_USAGE_HW_VIDEO_ENCODER) {
                 // Camera-to-encoder is NV21
                 format = HAL_PIXEL_FORMAT_YCrCb_420_SP;
+            } else if (usage & GRALLOC_USAGE_HW_CAMERA_ZSL) {
+                // Camera-to-ZSL-queue is RGB_888
+                format = HAL_PIXEL_FORMAT_RGB_888;
             }
         }
 
-        if (format == GRALLOC_EMULATOR_PIXEL_FORMAT_AUTO) {
+        if (format == HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
             ALOGE("gralloc_alloc: Requested auto format selection, "
                     "but no known format for this usage: %d x %d, usage %x",
                     w, h, usage);
diff --git a/tools/emulator/system/camera/EmulatedFakeCamera2.cpp b/tools/emulator/system/camera/EmulatedFakeCamera2.cpp
index 5a5db25..08475b1 100644
--- a/tools/emulator/system/camera/EmulatedFakeCamera2.cpp
+++ b/tools/emulator/system/camera/EmulatedFakeCamera2.cpp
@@ -259,7 +259,7 @@
         uint32_t *max_buffers) {
     Mutex::Autolock l(mMutex);
 
-    if (format != CAMERA2_HAL_PIXEL_FORMAT_OPAQUE) {
+    if (format != HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
         unsigned int numFormats = sizeof(kAvailableFormats) / sizeof(uint32_t);
         unsigned int formatIdx = 0;
         unsigned int sizeOffsetIdx = 0;
@@ -270,10 +270,6 @@
             ALOGE("%s: Format 0x%x is not supported", __FUNCTION__, format);
             return BAD_VALUE;
         }
-    } else {
-        // Translate to emulator's magic format.
-        // Note: It is assumed that this is a processed format (not raw or JPEG).
-        format = GRALLOC_EMULATOR_PIXEL_FORMAT_AUTO;
     }
 
     const uint32_t *availableSizes;
@@ -290,7 +286,7 @@
                     sizeof(kAvailableJpegSizesBack)/sizeof(uint32_t) :
                     sizeof(kAvailableJpegSizesFront)/sizeof(uint32_t);
             break;
-        case GRALLOC_EMULATOR_PIXEL_FORMAT_AUTO:
+        case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED:
         case HAL_PIXEL_FORMAT_RGBA_8888:
         case HAL_PIXEL_FORMAT_YV12:
         case HAL_PIXEL_FORMAT_YCrCb_420_SP:
@@ -384,9 +380,9 @@
 
     int finalFormat = streamBuffer->format;
 
-    if (finalFormat == GRALLOC_EMULATOR_PIXEL_FORMAT_AUTO) {
+    if (finalFormat == HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
         ALOGE("%s: Stream %d: Bad final pixel format "
-                "GRALLOC_EMULATOR_PIXEL_FORMAT_AUTO; "
+                "HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED; "
                 "concrete pixel format required!", __FUNCTION__, stream_id);
         return BAD_VALUE;
     }
@@ -669,7 +665,7 @@
         for (size_t i = 0; i < streams.count; i++) {
             int streamId = streams.data.u8[i];
             const Stream &s = mParent->getStreamInfo(streamId);
-            if (s.format == GRALLOC_EMULATOR_PIXEL_FORMAT_AUTO) {
+            if (s.format == HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
                 ALOGE("%s: Stream %d does not have a concrete pixel format, but "
                         "is included in a request!", __FUNCTION__, streamId);
                 mParent->signalError();
