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

Commit 824d1ff6 authored by Emilian Peev's avatar Emilian Peev Committed by android-build-merger
Browse files

Merge "Camera: Consider the currently acquired input buffers" am: fc0fa0c9 am: 55982d66

am: e71a799b

Change-Id: I6a0cd4d8cb3843237979bac419f4bf0c4a9c6f82
parents ce7ed8ba e71a799b
Loading
Loading
Loading
Loading
+20 −7
Original line number Diff line number Diff line
@@ -83,8 +83,8 @@ status_t Camera3StreamSplitter::connect(const std::unordered_map<size_t, sp<Surf
    // from input, and attached to the outputs. In this case, the input queue's
    // dequeueBuffer can still allocate 1 extra buffer before being blocked by
    // the output's attachBuffer().
    mBufferItemConsumer = new BufferItemConsumer(mConsumer, consumerUsage,
                                                 mMaxConsumerBuffers+1);
    mMaxConsumerBuffers++;
    mBufferItemConsumer = new BufferItemConsumer(mConsumer, consumerUsage, mMaxConsumerBuffers);
    if (mBufferItemConsumer == nullptr) {
        return NO_MEMORY;
    }
@@ -108,6 +108,7 @@ status_t Camera3StreamSplitter::connect(const std::unordered_map<size_t, sp<Surf
    mHeight = height;
    mFormat = format;
    mProducerUsage = producerUsage;
    mAcquiredInputBuffers = 0;

    SP_LOGV("%s: connected", __FUNCTION__);
    return res;
@@ -147,6 +148,7 @@ void Camera3StreamSplitter::disconnect() {

    mMaxHalBuffers = 0;
    mMaxConsumerBuffers = 0;
    mAcquiredInputBuffers = 0;
    SP_LOGV("%s: Disconnected", __FUNCTION__);
}

@@ -165,7 +167,9 @@ status_t Camera3StreamSplitter::addOutput(size_t surfaceId, const sp<Surface>& o
        return res;
    }

    res = mConsumer->setMaxAcquiredBufferCount(mMaxConsumerBuffers+1);
    if (mMaxConsumerBuffers > mAcquiredInputBuffers) {
        res = mConsumer->setMaxAcquiredBufferCount(mMaxConsumerBuffers);
    }

    return res;
}
@@ -266,11 +270,13 @@ status_t Camera3StreamSplitter::removeOutput(size_t surfaceId) {
        return res;
    }

    res = mConsumer->setMaxAcquiredBufferCount(mMaxConsumerBuffers+1);
    if (mAcquiredInputBuffers < mMaxConsumerBuffers) {
        res = mConsumer->setMaxAcquiredBufferCount(mMaxConsumerBuffers);
        if (res != OK) {
            SP_LOGE("%s: setMaxAcquiredBufferCount failed %d", __FUNCTION__, res);
            return res;
        }
    }

    return res;
}
@@ -497,6 +503,7 @@ void Camera3StreamSplitter::onFrameAvailable(const BufferItem& /*item*/) {
        return;
    }

    mAcquiredInputBuffers++;
    SP_LOGV("acquired buffer %" PRId64 " from input at slot %d",
            bufferItem.mGraphicBuffer->getId(), bufferItem.mSlot);

@@ -599,6 +606,12 @@ void Camera3StreamSplitter::decrementBufRefCountLocked(uint64_t id, size_t surfa
        } else {
            SP_LOGE("%s: releaseBuffer returns %d", __FUNCTION__, res);
        }
    } else {
        if (mAcquiredInputBuffers == 0) {
            ALOGW("%s: Acquired input buffer count already at zero!", __FUNCTION__);
        } else {
            mAcquiredInputBuffers--;
        }
    }
}

+3 −0
Original line number Diff line number Diff line
@@ -269,6 +269,9 @@ private:
    // Latest onFrameAvailable return value
    std::atomic<status_t> mOnFrameAvailableRes{0};

    // Currently acquired input buffers
    size_t mAcquiredInputBuffers;

    String8 mConsumerName;
};