OSDN Git Service

Camera2: Include JPEG settings in ZSL requests.
authorEino-Ville Talvala <etalvala@google.com>
Thu, 4 Oct 2012 20:21:08 +0000 (13:21 -0700)
committerEino-Ville Talvala <etalvala@google.com>
Thu, 4 Oct 2012 21:06:41 +0000 (14:06 -0700)
Bug: 7287743
Change-Id: I1aba81b228451c3df712ce1f42b7aab79cac575f

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

index 98aa380..d56af64 100644 (file)
@@ -586,40 +586,12 @@ status_t CaptureSequencer::updateCaptureRequest(const Parameters &params,
         return res;
     }
 
-    res = mCaptureRequest.update(ANDROID_JPEG_THUMBNAIL_SIZE,
-            params.jpegThumbSize, 2);
-    if (res != OK) return res;
-    res = mCaptureRequest.update(ANDROID_JPEG_THUMBNAIL_QUALITY,
-            &params.jpegThumbQuality, 1);
-    if (res != OK) return res;
-    res = mCaptureRequest.update(ANDROID_JPEG_QUALITY,
-            &params.jpegQuality, 1);
-    if (res != OK) return res;
-    res = mCaptureRequest.update(
-            ANDROID_JPEG_ORIENTATION,
-            &params.jpegRotation, 1);
-    if (res != OK) return res;
-
-    if (params.gpsEnabled) {
-        res = mCaptureRequest.update(
-                ANDROID_JPEG_GPS_COORDINATES,
-                params.gpsCoordinates, 3);
-        if (res != OK) return res;
-        res = mCaptureRequest.update(
-                ANDROID_JPEG_GPS_TIMESTAMP,
-                &params.gpsTimestamp, 1);
-        if (res != OK) return res;
-        res = mCaptureRequest.update(
-                ANDROID_JPEG_GPS_PROCESSING_METHOD,
-                params.gpsProcessingMethod);
-        if (res != OK) return res;
-    } else {
-        res = mCaptureRequest.erase(ANDROID_JPEG_GPS_COORDINATES);
-        if (res != OK) return res;
-        res = mCaptureRequest.erase(ANDROID_JPEG_GPS_TIMESTAMP);
-        if (res != OK) return res;
-        res = mCaptureRequest.erase(ANDROID_JPEG_GPS_PROCESSING_METHOD);
-        if (res != OK) return res;
+    res = params.updateRequestJpeg(&mCaptureRequest);
+    if (res != OK) {
+        ALOGE("%s: Camera %d: Unable to update JPEG entries of capture "
+                "request: %s (%d)", __FUNCTION__, client->getCameraId(),
+                strerror(-res), res);
+        return res;
     }
 
     return OK;
index 74f4a7e..7740df2 100644 (file)
@@ -1668,6 +1668,48 @@ status_t Parameters::updateRequest(CameraMetadata *request) const {
     return OK;
 }
 
+status_t Parameters::updateRequestJpeg(CameraMetadata *request) const {
+    status_t res;
+
+    res = request->update(ANDROID_JPEG_THUMBNAIL_SIZE,
+            jpegThumbSize, 2);
+    if (res != OK) return res;
+    res = request->update(ANDROID_JPEG_THUMBNAIL_QUALITY,
+            &jpegThumbQuality, 1);
+    if (res != OK) return res;
+    res = request->update(ANDROID_JPEG_QUALITY,
+            &jpegQuality, 1);
+    if (res != OK) return res;
+    res = request->update(
+            ANDROID_JPEG_ORIENTATION,
+            &jpegRotation, 1);
+    if (res != OK) return res;
+
+    if (gpsEnabled) {
+        res = request->update(
+                ANDROID_JPEG_GPS_COORDINATES,
+                gpsCoordinates, 3);
+        if (res != OK) return res;
+        res = request->update(
+                ANDROID_JPEG_GPS_TIMESTAMP,
+                &gpsTimestamp, 1);
+        if (res != OK) return res;
+        res = request->update(
+                ANDROID_JPEG_GPS_PROCESSING_METHOD,
+                gpsProcessingMethod);
+        if (res != OK) return res;
+    } else {
+        res = request->erase(ANDROID_JPEG_GPS_COORDINATES);
+        if (res != OK) return res;
+        res = request->erase(ANDROID_JPEG_GPS_TIMESTAMP);
+        if (res != OK) return res;
+        res = request->erase(ANDROID_JPEG_GPS_PROCESSING_METHOD);
+        if (res != OK) return res;
+    }
+    return OK;
+}
+
+
 const char* Parameters::getStateName(State state) {
 #define CASE_ENUM_TO_CHAR(x) case x: return(#x); break;
     switch(state) {
index 47eb993..a85500f 100644 (file)
@@ -216,6 +216,9 @@ struct Parameters {
     // Update passed-in request for common parameters
     status_t updateRequest(CameraMetadata *request) const;
 
+    // Add/update JPEG entries in metadata
+    status_t updateRequestJpeg(CameraMetadata *request) const;
+
     // Calculate the crop region rectangle based on current stream sizes
     struct CropRegion {
         float left;
index 7977f9d..56e9743 100644 (file)
@@ -313,6 +313,20 @@ status_t ZslProcessor::pushToReprocess(int32_t requestId) {
             return res;
         }
 
+        // Update JPEG settings
+        {
+            SharedParameters::Lock l(client->getParameters());
+            res = l.mParameters.updateRequestJpeg(&request);
+            if (res != OK) {
+                ALOGE("%s: Camera %d: Unable to update JPEG entries of ZSL "
+                        "capture request: %s (%d)", __FUNCTION__,
+                        client->getCameraId(),
+                        strerror(-res), res);
+                return res;
+            }
+        }
+
+        mLatestCapturedRequest = request;
         res = client->getCameraDevice()->capture(request);
         if (res != OK ) {
             ALOGE("%s: Unable to send ZSL reprocess request to capture: %s (%d)",
@@ -350,6 +364,14 @@ status_t ZslProcessor::clearZslQueueLocked() {
 
 void ZslProcessor::dump(int fd, const Vector<String16>& args) const {
     Mutex::Autolock l(mInputMutex);
+    if (!mLatestCapturedRequest.isEmpty()) {
+        String8 result("    Latest ZSL capture request:\n");
+        write(fd, result.string(), result.size());
+        mLatestCapturedRequest.dump(fd, 2, 6);
+    } else {
+        String8 result("    Latest ZSL capture request: none yet\n");
+        write(fd, result.string(), result.size());
+    }
     dumpZslQueue(fd);
 }
 
index 96ad5fb..1f433ce 100644 (file)
@@ -105,6 +105,8 @@ class ZslProcessor:
     size_t mZslQueueHead;
     size_t mZslQueueTail;
 
+    CameraMetadata mLatestCapturedRequest;
+
     virtual bool threadLoop();
 
     status_t processNewZslBuffer(sp<Camera2Client> &client);