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

Commit 60ef1e16 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Camera: Invalidate buffer cache for partial buffer request failure"...

Merge "Camera: Invalidate buffer cache for partial buffer request failure" into sc-qpr1-dev am: 1c16bc6a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/15779277

Change-Id: I81b0dbcd878efee583a8765dcc2e760aaa74d284
parents 0758d34c 1c16bc6a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ namespace camera3 {

        // Return the removed buffer ID if input cache is found.
        // Otherwise return BUFFER_ID_NO_BUFFER
        uint64_t removeOneBufferCache(int streamId, const native_handle_t* handle);
        uint64_t removeOneBufferCache(int streamId, const native_handle_t* handle) override;

        // Clear all caches for input stream, but do not remove the stream
        // Removed buffers' ID are returned
+5 −0
Original line number Diff line number Diff line
@@ -4132,6 +4132,11 @@ std::pair<bool, uint64_t> Camera3Device::HalInterface::getBufferId(
    return mBufferRecords.getBufferId(buf, streamId);
}

uint64_t Camera3Device::HalInterface::removeOneBufferCache(int streamId,
        const native_handle_t* handle) {
    return mBufferRecords.removeOneBufferCache(streamId, handle);
}

void Camera3Device::HalInterface::onBufferFreed(
        int streamId, const native_handle_t* handle) {
    uint32_t bufferId = mBufferRecords.removeOneBufferCache(streamId, handle);
+2 −0
Original line number Diff line number Diff line
@@ -412,6 +412,8 @@ class Camera3Device :
        std::pair<bool, uint64_t> getBufferId(
                const buffer_handle_t& buf, int streamId) override;

        uint64_t removeOneBufferCache(int streamId, const native_handle_t* handle) override;

        status_t popInflightBuffer(int32_t frameNumber, int32_t streamId,
                /*out*/ buffer_handle_t **buffer) override;

+4 −0
Original line number Diff line number Diff line
@@ -50,6 +50,10 @@ namespace camera3 {
        // return pair of (newlySeenBuffer?, bufferId)
        virtual std::pair<bool, uint64_t> getBufferId(const buffer_handle_t& buf, int streamId) = 0;

        // Return the removed buffer ID if input cache is found.
        // Otherwise return BUFFER_ID_NO_BUFFER
        virtual uint64_t removeOneBufferCache(int streamId, const native_handle_t* handle) = 0;

        // Find a buffer_handle_t based on frame number and stream ID
        virtual status_t popInflightBuffer(int32_t frameNumber, int32_t streamId,
                /*out*/ buffer_handle_t **buffer) = 0;
+7 −0
Original line number Diff line number Diff line
@@ -1305,6 +1305,7 @@ void requestStreamBuffers(RequestBufferStates& states,
        hardware::hidl_vec<StreamBuffer> tmpRetBuffers(numBuffersRequested);
        bool currentReqSucceeds = true;
        std::vector<camera_stream_buffer_t> streamBuffers(numBuffersRequested);
        std::vector<buffer_handle_t> newBuffers;
        size_t numAllocatedBuffers = 0;
        size_t numPushedInflightBuffers = 0;
        for (size_t b = 0; b < numBuffersRequested; b++) {
@@ -1344,6 +1345,9 @@ void requestStreamBuffers(RequestBufferStates& states,
            hBuf.buffer = (isNewBuffer) ? *buffer : nullptr;
            hBuf.status = BufferStatus::OK;
            hBuf.releaseFence = nullptr;
            if (isNewBuffer) {
                newBuffers.push_back(*buffer);
            }

            native_handle_t *acquireFence = nullptr;
            if (sb.acquire_fence != -1) {
@@ -1386,6 +1390,9 @@ void requestStreamBuffers(RequestBufferStates& states,
            returnOutputBuffers(states.useHalBufManager, /*listener*/nullptr,
                    streamBuffers.data(), numAllocatedBuffers, 0, /*requested*/false,
                    /*requestTimeNs*/0, states.sessionStatsBuilder);
            for (auto buf : newBuffers) {
                states.bufferRecordsIntf.removeOneBufferCache(streamId, buf);
            }
        }
    }