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

Commit ed0412ed authored by Chien-Yu Chen's avatar Chien-Yu Chen
Browse files

Camera2: allow mixing regular/reprocess requests

Allow mixing regular and reprocess requests in a capture burst. Also
call abandon() when deleting an input stream.

Bug: 20537735
Change-Id: If8c7781038173ab21c73f5ddc32f53793cf86fd9
parent 466dc8ed
Loading
Loading
Loading
Loading
+7 −11
Original line number Diff line number Diff line
@@ -128,7 +128,6 @@ status_t CameraDeviceClient::submitRequestList(List<sp<CaptureRequest> > request
    List<const CameraMetadata> metadataRequestList;
    int32_t requestId = mRequestIdCounter;
    uint32_t loopCounter = 0;
    bool isReprocess = false;

    for (List<sp<CaptureRequest> >::iterator it = requests.begin(); it != requests.end(); ++it) {
        sp<CaptureRequest> request = *it;
@@ -136,18 +135,15 @@ status_t CameraDeviceClient::submitRequestList(List<sp<CaptureRequest> > request
            ALOGE("%s: Camera %d: Sent null request.",
                    __FUNCTION__, mCameraId);
            return BAD_VALUE;
        } else if (it == requests.begin()) {
            isReprocess = request->mIsReprocess;
            if (isReprocess && !mInputStream.configured) {
                ALOGE("%s: Camera %d: no input stream is configured.");
        } else if (request->mIsReprocess) {
            if (!mInputStream.configured) {
                ALOGE("%s: Camera %d: no input stream is configured.", __FUNCTION__, mCameraId);
                return BAD_VALUE;
            } else if (isReprocess && streaming) {
                ALOGE("%s: Camera %d: streaming reprocess requests not supported.");
            } else if (streaming) {
                ALOGE("%s: Camera %d: streaming reprocess requests not supported.", __FUNCTION__,
                        mCameraId);
                return BAD_VALUE;
            }
        } else if (isReprocess != request->mIsReprocess) {
            ALOGE("%s: Camera %d: Sent regular and reprocess requests.");
            return BAD_VALUE;
        }

        CameraMetadata metadata(request->mMetadata);
@@ -196,7 +192,7 @@ status_t CameraDeviceClient::submitRequestList(List<sp<CaptureRequest> > request
        metadata.update(ANDROID_REQUEST_OUTPUT_STREAMS, &outputStreamIds[0],
                        outputStreamIds.size());

        if (isReprocess) {
        if (request->mIsReprocess) {
            metadata.update(ANDROID_REQUEST_INPUT_STREAMS, &mInputStream.id, 1);
        }

+2 −0
Original line number Diff line number Diff line
@@ -187,6 +187,8 @@ status_t Camera3InputStream::disconnectLocked() {

    assert(mBuffersInFlight.size() == 0);

    mConsumer->abandon();

    /**
     *  no-op since we can't disconnect the producer from the consumer-side
     */