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

Commit 0a21051b authored by Zhijun He's avatar Zhijun He
Browse files

Camera3: tear down Camera3 streams when they are deleted.

Also override the disconnectLocked method in Camera3ZslStream to make sure the
Camera3ZslStream specific buffer queue is cleaned up properly.

Also revert 0be123df, as it was not the right
fix.
Change-Id: I89bdcb2e206379ae1f2602421e7fdbcde9a31399
parent 81e50d0c
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -825,7 +825,6 @@ status_t Camera2Client::startPreviewL(Parameters &params, bool restart) {
        }
        outputStreams.push(getZslStreamId());
    } else {
        mZslProcessor->clearZslQueue();
        mZslProcessor->deleteStream();
    }

+3 −0
Original line number Diff line number Diff line
@@ -1497,6 +1497,9 @@ status_t Camera3Device::configureStreamsLocked() {

    ALOGV("%s: Camera %d: Stream configuration complete", __FUNCTION__, mId);

    // tear down the deleted streams after configure streams.
    mDeletedStreams.clear();

    return OK;
}

+2 −1
Original line number Diff line number Diff line
@@ -76,6 +76,8 @@ class Camera3OutputStream :
            /*out*/
            sp<Fence> *releaseFenceOut);

    virtual status_t disconnectLocked();

    sp<ANativeWindow> mConsumer;
  private:
    int               mTransform;
@@ -91,7 +93,6 @@ class Camera3OutputStream :
            nsecs_t timestamp);

    virtual status_t configureQueueLocked();
    virtual status_t disconnectLocked();

    virtual status_t getEndpointUsage(uint32_t *usage);

+10 −0
Original line number Diff line number Diff line
@@ -318,11 +318,21 @@ status_t Camera3ZslStream::enqueueInputBufferByTimestamp(
status_t Camera3ZslStream::clearInputRingBuffer() {
    Mutex::Autolock l(mLock);

    return clearInputRingBufferLocked();
}

status_t Camera3ZslStream::clearInputRingBufferLocked() {
    mInputBufferQueue.clear();

    return mProducer->clear();
}

status_t Camera3ZslStream::disconnectLocked() {
    clearInputRingBufferLocked();

    return Camera3OutputStream::disconnectLocked();
}

status_t Camera3ZslStream::setTransform(int /*transform*/) {
    ALOGV("%s: Not implemented", __FUNCTION__);
    return INVALID_OPERATION;
+6 −0
Original line number Diff line number Diff line
@@ -96,6 +96,12 @@ class Camera3ZslStream :
            bool output,
            /*out*/
            sp<Fence> *releaseFenceOut);

    // Disconnet the Camera3ZslStream specific bufferQueues.
    virtual status_t disconnectLocked();

    status_t clearInputRingBufferLocked();

}; // class Camera3ZslStream

}; // namespace camera3