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

Commit b3ded702 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Camera: Add support for session parameters"

parents 04a86634 5fbe0ba2
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -79,8 +79,9 @@ interface ICameraDeviceUser
     * <p>
     * @param operatingMode The kind of session to create; either NORMAL_MODE or
     *     CONSTRAINED_HIGH_SPEED_MODE. Must be a non-negative value.
     * @param sessionParams Session wide camera parameters
     */
    void endConfigure(int operatingMode);
    void endConfigure(int operatingMode, in CameraMetadataNative sessionParams);

    void deleteStream(int streamId);

+17 −1
Original line number Diff line number Diff line
@@ -220,5 +220,21 @@ camera_status_t ACameraDevice_createCaptureSession(
                __FUNCTION__, device, outputs, callbacks, session);
        return ACAMERA_ERROR_INVALID_PARAMETER;
    }
    return device->createCaptureSession(outputs, callbacks, session);
    return device->createCaptureSession(outputs, nullptr, callbacks, session);
}

EXPORT
camera_status_t ACameraDevice_createCaptureSessionWithSessionParameters(
        ACameraDevice* device,
        const ACaptureSessionOutputContainer*       outputs,
        const ACaptureRequest* sessionParameters,
        const ACameraCaptureSession_stateCallbacks* callbacks,
        /*out*/ACameraCaptureSession** session) {
    ATRACE_CALL();
    if (device == nullptr || outputs == nullptr || callbacks == nullptr || session == nullptr) {
        ALOGE("%s: Error: invalid input: device %p, outputs %p, callbacks %p, session %p",
                __FUNCTION__, device, outputs, callbacks, session);
        return ACAMERA_ERROR_INVALID_PARAMETER;
    }
    return device->createCaptureSession(outputs, sessionParameters, callbacks, session);
}
+10 −4
Original line number Diff line number Diff line
@@ -157,6 +157,7 @@ CameraDevice::createCaptureRequest(
camera_status_t
CameraDevice::createCaptureSession(
        const ACaptureSessionOutputContainer*       outputs,
        const ACaptureRequest* sessionParameters,
        const ACameraCaptureSession_stateCallbacks* callbacks,
        /*out*/ACameraCaptureSession** session) {
    sp<ACameraCaptureSession> currentSession = mCurrentSession.promote();
@@ -172,7 +173,7 @@ CameraDevice::createCaptureSession(
    }

    // Create new session
    ret = configureStreamsLocked(outputs);
    ret = configureStreamsLocked(outputs, sessionParameters);
    if (ret != ACAMERA_OK) {
        ALOGE("Fail to create new session. cannot configure streams");
        return ret;
@@ -460,7 +461,7 @@ CameraDevice::notifySessionEndOfLifeLocked(ACameraCaptureSession* session) {
    }

    // No new session, unconfigure now
    camera_status_t ret = configureStreamsLocked(nullptr);
    camera_status_t ret = configureStreamsLocked(nullptr, nullptr);
    if (ret != ACAMERA_OK) {
        ALOGE("Unconfigure stream failed. Device might still be configured! ret %d", ret);
    }
@@ -618,7 +619,8 @@ CameraDevice::getSurfaceFromANativeWindow(
}

camera_status_t
CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outputs) {
CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outputs,
        const ACaptureRequest* sessionParameters) {
    ACaptureSessionOutputContainer emptyOutput;
    if (outputs == nullptr) {
        outputs = &emptyOutput;
@@ -714,7 +716,11 @@ CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outpu
        mConfiguredOutputs.insert(std::make_pair(streamId, outputPair));
    }

    remoteRet = mRemote->endConfigure(/*isConstrainedHighSpeed*/ false);
    CameraMetadata params;
    if ((sessionParameters != nullptr) && (sessionParameters->settings != nullptr)) {
        params.append(sessionParameters->settings->getInternalData());
    }
    remoteRet = mRemote->endConfigure(/*isConstrainedHighSpeed*/ false, params);
    if (remoteRet.serviceSpecificErrorCode() == hardware::ICameraService::ERROR_ILLEGAL_ARGUMENT) {
        ALOGE("Camera device %s cannnot support app output configuration: %s", getId(),
                remoteRet.toString8().string());
+5 −2
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ class CameraDevice final : public RefBase {

    camera_status_t createCaptureSession(
            const ACaptureSessionOutputContainer*       outputs,
            const ACaptureRequest* sessionParameters,
            const ACameraCaptureSession_stateCallbacks* callbacks,
            /*out*/ACameraCaptureSession** session);

@@ -139,7 +140,8 @@ class CameraDevice final : public RefBase {
    // For capture session to notify its end of life
    void notifySessionEndOfLifeLocked(ACameraCaptureSession* session);

    camera_status_t configureStreamsLocked(const ACaptureSessionOutputContainer* outputs);
    camera_status_t configureStreamsLocked(const ACaptureSessionOutputContainer* outputs,
           const ACaptureRequest* sessionParameters);

    // Input message will be posted and cleared after this returns
    void postSessionMsgAndCleanup(sp<AMessage>& msg);
@@ -309,9 +311,10 @@ struct ACameraDevice {

    camera_status_t createCaptureSession(
            const ACaptureSessionOutputContainer*       outputs,
            const ACaptureRequest* sessionParameters,
            const ACameraCaptureSession_stateCallbacks* callbacks,
            /*out*/ACameraCaptureSession** session) {
        return mDevice->createCaptureSession(outputs, callbacks, session);
        return mDevice->createCaptureSession(outputs, sessionParameters, callbacks, session);
    }

    /***********************
+1 −1
Original line number Diff line number Diff line
@@ -235,7 +235,7 @@ ACameraMetadata::getTags(/*out*/int32_t* numTags,
}

const CameraMetadata&
ACameraMetadata::getInternalData() {
ACameraMetadata::getInternalData() const {
    return mData;
}

Loading