Loading services/camera/libcameraservice/device3/Camera3StreamSplitter.cpp +20 −7 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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; Loading Loading @@ -147,6 +148,7 @@ void Camera3StreamSplitter::disconnect() { mMaxHalBuffers = 0; mMaxConsumerBuffers = 0; mAcquiredInputBuffers = 0; SP_LOGV("%s: Disconnected", __FUNCTION__); } Loading @@ -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; } Loading Loading @@ -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; } Loading Loading @@ -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); Loading Loading @@ -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--; } } } Loading services/camera/libcameraservice/device3/Camera3StreamSplitter.h +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
services/camera/libcameraservice/device3/Camera3StreamSplitter.cpp +20 −7 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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; Loading Loading @@ -147,6 +148,7 @@ void Camera3StreamSplitter::disconnect() { mMaxHalBuffers = 0; mMaxConsumerBuffers = 0; mAcquiredInputBuffers = 0; SP_LOGV("%s: Disconnected", __FUNCTION__); } Loading @@ -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; } Loading Loading @@ -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; } Loading Loading @@ -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); Loading Loading @@ -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--; } } } Loading
services/camera/libcameraservice/device3/Camera3StreamSplitter.h +3 −0 Original line number Diff line number Diff line Loading @@ -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