OSDN Git Service

Camera2: Use ZSL format quirk.
authorEino-Ville Talvala <etalvala@google.com>
Wed, 3 Oct 2012 01:14:49 +0000 (18:14 -0700)
committerEino-Ville Talvala <etalvala@google.com>
Wed, 3 Oct 2012 01:47:07 +0000 (18:47 -0700)
Switch service to using HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
unless ZSL quirk is set.

This is important for compatibility across multiple implementations.

Bug: 6243944
Change-Id: Iea74671cbb44890a07e4f99cd757b0a5423d447a

services/camera/libcameraservice/Camera2Client.cpp
services/camera/libcameraservice/camera2/Parameters.cpp
services/camera/libcameraservice/camera2/Parameters.h
services/camera/libcameraservice/camera2/ZslProcessor.cpp

index 1c650f6..ffb2c58 100644 (file)
@@ -315,6 +315,21 @@ status_t Camera2Client::dump(int fd, const Vector<String16>& args) {
             getCaptureStreamId());
     result.appendFormat("    Recording stream ID: %d\n",
             getRecordingStreamId());
+
+    result.append("  Quirks for this camera:\n");
+    bool haveQuirk = false;
+    if (p.quirks.triggerAfWithAuto) {
+        result.appendFormat("    triggerAfWithAuto\n");
+        haveQuirk = true;
+    }
+    if (p.quirks.useZslFormat) {
+        result.appendFormat("    useZslFormat\n");
+        haveQuirk = true;
+    }
+    if (!haveQuirk) {
+        result.appendFormat("    none\n");
+    }
+
     write(fd, result.string(), result.size());
 
     mStreamingProcessor->dump(fd, args);
index fd44a3e..5248e97 100644 (file)
@@ -53,6 +53,9 @@ status_t Parameters::initialize(const CameraMetadata *info) {
     res = buildFastInfo();
     if (res != OK) return res;
 
+    res = buildQuirks();
+    if (res != OK) return res;
+
     camera_metadata_ro_entry_t availableProcessedSizes =
         staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 2);
     if (!availableProcessedSizes.count) return NO_INIT;
@@ -891,6 +894,21 @@ status_t Parameters::buildFastInfo() {
     return OK;
 }
 
+status_t Parameters::buildQuirks() {
+    camera_metadata_ro_entry_t entry;
+    entry = info->find(ANDROID_QUIRKS_TRIGGER_AF_WITH_AUTO);
+    quirks.triggerAfWithAuto = (entry.count != 0 && entry.data.u8[0] == 1);
+    ALOGV_IF(quirks.triggerAfWithAuto, "Camera %d: Quirk triggerAfWithAuto enabled",
+            cameraId);
+
+    entry = info->find(ANDROID_QUIRKS_USE_ZSL_FORMAT);
+    quirks.useZslFormat = (entry.count != 0 && entry.data.u8[0] == 1);
+    ALOGV_IF(quirks.useZslFormat, "Camera %d: Quirk useZslFormat enabled",
+            cameraId);
+
+    return OK;
+}
+
 camera_metadata_ro_entry_t Parameters::staticInfo(uint32_t tag,
         size_t minCount, size_t maxCount) const {
     status_t res;
index c587ca5..47eb993 100644 (file)
@@ -195,8 +195,10 @@ struct Parameters {
     // Sets up default parameters
     status_t initialize(const CameraMetadata *info);
 
-    // Build fast device info
+    // Build fast-access device static info from static info
     status_t buildFastInfo();
+    // Query for quirks from static info
+    status_t buildQuirks();
 
     // Get entry from camera static characteristics information. min/maxCount
     // are used for error checking the number of values in the entry. 0 for
index 9516f97..f462527 100644 (file)
@@ -161,9 +161,12 @@ status_t ZslProcessor::updateStream(const Parameters &params) {
     if (mZslStreamId == NO_STREAM) {
         // Create stream for HAL production
         // TODO: Sort out better way to select resolution for ZSL
+        int streamType = params.quirks.useZslFormat ?
+                (int)CAMERA2_HAL_PIXEL_FORMAT_ZSL :
+                (int)HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED;
         res = device->createStream(mZslWindow,
                 params.fastInfo.arrayWidth, params.fastInfo.arrayHeight,
-                CAMERA2_HAL_PIXEL_FORMAT_ZSL, 0,
+                streamType, 0,
                 &mZslStreamId);
         if (res != OK) {
             ALOGE("%s: Camera %d: Can't create output stream for ZSL: "