Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9942f62d authored by Eino-Ville Talvala's avatar Eino-Ville Talvala Committed by Android (Google) Code Review
Browse files

Merge "Camera2: Include JPEG settings in ZSL requests." into jb-mr1-dev

parents 1f915a85 ec771089
Loading
Loading
Loading
Loading
+6 −34
Original line number Original line Diff line number Diff line
@@ -586,40 +586,12 @@ status_t CaptureSequencer::updateCaptureRequest(const Parameters &params,
        return res;
        return res;
    }
    }


    res = mCaptureRequest.update(ANDROID_JPEG_THUMBNAIL_SIZE,
    res = params.updateRequestJpeg(&mCaptureRequest);
            params.jpegThumbSize, 2);
    if (res != OK) {
    if (res != OK) return res;
        ALOGE("%s: Camera %d: Unable to update JPEG entries of capture "
    res = mCaptureRequest.update(ANDROID_JPEG_THUMBNAIL_QUALITY,
                "request: %s (%d)", __FUNCTION__, client->getCameraId(),
            &params.jpegThumbQuality, 1);
                strerror(-res), res);
    if (res != OK) return res;
        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;
    }
    }


    return OK;
    return OK;
+42 −0
Original line number Original line Diff line number Diff line
@@ -1668,6 +1668,48 @@ status_t Parameters::updateRequest(CameraMetadata *request) const {
    return OK;
    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) {
const char* Parameters::getStateName(State state) {
#define CASE_ENUM_TO_CHAR(x) case x: return(#x); break;
#define CASE_ENUM_TO_CHAR(x) case x: return(#x); break;
    switch(state) {
    switch(state) {
+3 −0
Original line number Original line Diff line number Diff line
@@ -216,6 +216,9 @@ struct Parameters {
    // Update passed-in request for common parameters
    // Update passed-in request for common parameters
    status_t updateRequest(CameraMetadata *request) const;
    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
    // Calculate the crop region rectangle based on current stream sizes
    struct CropRegion {
    struct CropRegion {
        float left;
        float left;
+22 −0
Original line number Original line Diff line number Diff line
@@ -313,6 +313,20 @@ status_t ZslProcessor::pushToReprocess(int32_t requestId) {
            return res;
            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);
        res = client->getCameraDevice()->capture(request);
        if (res != OK ) {
        if (res != OK ) {
            ALOGE("%s: Unable to send ZSL reprocess request to capture: %s (%d)",
            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 {
void ZslProcessor::dump(int fd, const Vector<String16>& args) const {
    Mutex::Autolock l(mInputMutex);
    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);
    dumpZslQueue(fd);
}
}


+2 −0
Original line number Original line Diff line number Diff line
@@ -105,6 +105,8 @@ class ZslProcessor:
    size_t mZslQueueHead;
    size_t mZslQueueHead;
    size_t mZslQueueTail;
    size_t mZslQueueTail;


    CameraMetadata mLatestCapturedRequest;

    virtual bool threadLoop();
    virtual bool threadLoop();


    status_t processNewZslBuffer(sp<Camera2Client> &client);
    status_t processNewZslBuffer(sp<Camera2Client> &client);