Merge "Encode header version in api versions" into jb-mr1-dev
diff --git a/include/hardware/camera2.h b/include/hardware/camera2.h
index 518130b..8209985 100644
--- a/include/hardware/camera2.h
+++ b/include/hardware/camera2.h
@@ -96,22 +96,11 @@
 
 } camera2_stream_ops_t;
 
+/**
+ * Temporary definition during transition. TODO: Remove once HALs no longer
+ * reference this */
 enum {
-    /**
-     * Special pixel format value used to indicate that the framework does not care
-     * what exact pixel format is to be used for an output stream. The device HAL is
-     * free to select any pixel format, platform-specific and otherwise, and this
-     * opaque value will be passed on to the platform gralloc module when buffers
-     * need to be allocated for the stream.
-     */
-    CAMERA2_HAL_PIXEL_FORMAT_OPAQUE     = -1,
-    /**
-     * Special pixel format value used to indicate that the framework will use
-     * the output buffers for zero-shutter-lag mode; these buffers should be
-     * efficient to produce at full sensor resolution, and efficient to send
-     * into a reprocess stream for final output processing.
-     */
-    CAMERA2_HAL_PIXEL_FORMAT_ZSL = -2
+    CAMERA2_HAL_PIXEL_FORMAT_OPAQUE = HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED
 };
 
 /**
@@ -564,11 +553,12 @@
      * Input parameters:
      *
      * - width, height, format: Specification for the buffers to be sent through
-     *   this stream. Format is a value from the HAL_PIXEL_FORMAT_* list, or
-     *   CAMERA2_HAL_PIXEL_FORMAT_OPAQUE. In the latter case, the camera device
-     *   must select an appropriate (possible platform-specific) HAL pixel
-     *   format to return in format_actual. In the former case, format_actual
-     *   must be set to match format.
+     *   this stream. Format is a value from the HAL_PIXEL_FORMAT_* list. If
+     *   HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED is used, then the platform
+     *   gralloc module will select a format based on the usage flags provided
+     *   by the camera HAL and the consumer of the stream. The camera HAL should
+     *   inspect the buffers handed to it in the register_stream_buffers call to
+     *   obtain the implementation-specific format if necessary.
      *
      * - stream_ops: A structure of function pointers for obtaining and queuing
      *   up buffers for this stream. The underlying stream will be configured
@@ -581,15 +571,6 @@
      *   used in incoming requests to identify the stream, and in releasing the
      *   stream.
      *
-     * - format_actual: If the input format is CAMERA2_HAL_PIXEL_FORMAT_OPAQUE,
-     *   then device must select the appropriate (possible platform-specific)
-     *   pixel format and return it in *format_actual. It will be treated as an
-     *   opaque value by the framework, and simply passed to the gralloc module
-     *   when new buffers need to be allocated. If the input format is one of
-     *   the values from HAL_PIXEL_FORMAT_* list, then *format_actual must be
-     *   set equal to format. In the latter case, format_actual may also be
-     *   NULL, in which case it can be ignored as an output.
-     *
      * - usage: The gralloc usage mask needed by the HAL device for producing
      *   the requested type of data. This is used in allocating new gralloc
      *   buffers for the stream buffer queue.
@@ -608,7 +589,7 @@
             const camera2_stream_ops_t *stream_ops,
             // outputs
             uint32_t *stream_id,
-            uint32_t *format_actual,
+            uint32_t *format_actual, // IGNORED, will be removed
             uint32_t *usage,
             uint32_t *max_buffers);
 
@@ -619,7 +600,10 @@
      * otherwise prepare the buffers for later use. num_buffers is guaranteed to
      * be at least max_buffers (from allocate_stream), but may be larger. The
      * buffers will already be locked for use. At the end of the call, all the
-     * buffers must be ready to be returned to the queue.
+     * buffers must be ready to be returned to the queue. If the stream format
+     * was set to HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, the camera HAL should
+     * inspect the passed-in buffers here to determine any platform-private
+     * pixel format information.
      */
     int (*register_stream_buffers)(
             const struct camera2_device *,
diff --git a/include/hardware/gralloc.h b/include/hardware/gralloc.h
index 86ed95c..4fdd2e6 100644
--- a/include/hardware/gralloc.h
+++ b/include/hardware/gralloc.h
@@ -80,6 +80,8 @@
     GRALLOC_USAGE_HW_CAMERA_WRITE       = 0x00020000,
     /* buffer will be read by the HW camera pipeline */
     GRALLOC_USAGE_HW_CAMERA_READ        = 0x00040000,
+    /* buffer will be used as part of zero-shutter-lag queue */
+    GRALLOC_USAGE_HW_CAMERA_ZSL         = 0x00080000,
     /* mask for the software usage bit-mask */
     GRALLOC_USAGE_HW_MASK               = 0x00071F00,
 
diff --git a/tests/camera2/camera2.cpp b/tests/camera2/camera2.cpp
index 29eef68..f43513e 100644
--- a/tests/camera2/camera2.cpp
+++ b/tests/camera2/camera2.cpp
@@ -240,7 +240,7 @@
             size_t *count) {
         ALOGV("Getting resolutions for format %x", format);
         status_t res;
-        if (format != CAMERA2_HAL_PIXEL_FORMAT_OPAQUE) {
+        if (format != HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
             camera_metadata_ro_entry_t availableFormats;
             res = find_camera_metadata_ro_entry(mStaticInfo,
                     ANDROID_SCALER_AVAILABLE_FORMATS,
diff --git a/tests/camera2/camera2_utils.cpp b/tests/camera2/camera2_utils.cpp
index ba938d9..cefe29a 100644
--- a/tests/camera2/camera2_utils.cpp
+++ b/tests/camera2/camera2_utils.cpp
@@ -317,7 +317,7 @@
 StreamAdapter::StreamAdapter(sp<ISurfaceTexture> consumer):
         mState(UNINITIALIZED), mDevice(NULL),
         mId(-1),
-        mWidth(0), mHeight(0), mFormatRequested(0)
+        mWidth(0), mHeight(0), mFormat(0)
 {
     mConsumerInterface = new SurfaceTextureClient(consumer);
     camera2_stream_ops::dequeue_buffer = dequeue_buffer;
@@ -342,16 +342,16 @@
 
     mWidth = width;
     mHeight = height;
-    mFormatRequested = format;
+    mFormat = format;
 
     // Allocate device-side stream interface
 
     uint32_t id;
-    uint32_t formatActual;
+    uint32_t formatActual; // ignored
     uint32_t usage;
     uint32_t maxBuffers = 2;
     res = d->ops->allocate_stream(d,
-            mWidth, mHeight, mFormatRequested, getStreamOps(),
+            mWidth, mHeight, mFormat, getStreamOps(),
             &id, &formatActual, &usage, &maxBuffers);
     if (res != OK) {
         ALOGE("%s: Device stream allocation failed: %s (%d)",
@@ -362,7 +362,6 @@
     mDevice = d;
 
     mId = id;
-    mFormat = formatActual;
     mUsage = usage;
     mMaxProducerBuffers = maxBuffers;
 
diff --git a/tests/camera2/camera2_utils.h b/tests/camera2/camera2_utils.h
index 2c9f801..7822f5b 100644
--- a/tests/camera2/camera2_utils.h
+++ b/tests/camera2/camera2_utils.h
@@ -194,8 +194,6 @@
     uint32_t mMaxProducerBuffers;
     uint32_t mMaxConsumerBuffers;
 
-    int mFormatRequested;
-
     const camera2_stream_ops *getStreamOps();
 
     static ANativeWindow* toANW(const camera2_stream_ops_t *w);