Merge "Camera: Consider the currently acquired input buffers"

am: fc0fa0c91b

Change-Id: Id0d742d6742426f55b6463ec8b110f17fc8b0875
gugelfrei
Emilian Peev 6 years ago committed by android-build-merger
commit 55982d66b6

@ -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,10 +270,12 @@ status_t Camera3StreamSplitter::removeOutput(size_t surfaceId) {
return res;
}
res = mConsumer->setMaxAcquiredBufferCount(mMaxConsumerBuffers+1);
if (res != OK) {
SP_LOGE("%s: setMaxAcquiredBufferCount failed %d", __FUNCTION__, res);
return res;
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--;
}
}
}

@ -269,6 +269,9 @@ private:
// Latest onFrameAvailable return value
std::atomic<status_t> mOnFrameAvailableRes{0};
// Currently acquired input buffers
size_t mAcquiredInputBuffers;
String8 mConsumerName;
};

Loading…
Cancel
Save