Loading services/camera/libcameraservice/api1/client2/ZslProcessor3.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ ZslProcessor3::ZslProcessor3( sp<Camera2Client> client, wp<CaptureSequencer> sequencer): Thread(false), mLatestClearedBufferTimestamp(0), mState(RUNNING), mClient(client), mSequencer(sequencer), Loading Loading @@ -107,7 +108,6 @@ void ZslProcessor3::onResultAvailable(const CaptureResult &result) { ALOGE("%s: metadata doesn't have timestamp, skip this result", __FUNCTION__); return; } (void)timestamp; entry = result.mMetadata.find(ANDROID_REQUEST_FRAME_COUNT); if (entry.count == 0) { Loading @@ -120,6 +120,9 @@ void ZslProcessor3::onResultAvailable(const CaptureResult &result) { if (mState != RUNNING) return; // Corresponding buffer has been cleared. No need to push into mFrameList if (timestamp <= mLatestClearedBufferTimestamp) return; mFrameList.editItemAt(mFrameListHead) = result.mMetadata; mFrameListHead = (mFrameListHead + 1) % mFrameListDepth; } Loading Loading @@ -392,7 +395,7 @@ status_t ZslProcessor3::clearZslQueueLocked() { if (mZslStream != 0) { // clear result metadata list first. clearZslResultQueueLocked(); return mZslStream->clearInputRingBuffer(); return mZslStream->clearInputRingBuffer(&mLatestClearedBufferTimestamp); } return OK; } Loading services/camera/libcameraservice/api1/client2/ZslProcessor3.h +1 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ class ZslProcessor3 : private: static const nsecs_t kWaitDuration = 10000000; // 10 ms nsecs_t mLatestClearedBufferTimestamp; enum { RUNNING, Loading services/camera/libcameraservice/device3/Camera3ZslStream.cpp +8 −4 Original line number Diff line number Diff line Loading @@ -315,20 +315,24 @@ status_t Camera3ZslStream::enqueueInputBufferByTimestamp( return OK; } status_t Camera3ZslStream::clearInputRingBuffer() { status_t Camera3ZslStream::clearInputRingBuffer(nsecs_t* latestTimestamp) { Mutex::Autolock l(mLock); return clearInputRingBufferLocked(); return clearInputRingBufferLocked(latestTimestamp); } status_t Camera3ZslStream::clearInputRingBufferLocked() { status_t Camera3ZslStream::clearInputRingBufferLocked(nsecs_t* latestTimestamp) { if (latestTimestamp) { *latestTimestamp = mProducer->getLatestTimestamp(); } mInputBufferQueue.clear(); return mProducer->clear(); } status_t Camera3ZslStream::disconnectLocked() { clearInputRingBufferLocked(); clearInputRingBufferLocked(NULL); return Camera3OutputStream::disconnectLocked(); } Loading services/camera/libcameraservice/device3/Camera3ZslStream.h +4 −2 Original line number Diff line number Diff line Loading @@ -59,8 +59,10 @@ class Camera3ZslStream : /** * Clears the buffers that can be used by enqueueInputBufferByTimestamp * latestTimestamp will be filled with the largest timestamp of buffers * being cleared, 0 if there is no buffer being clear. */ status_t clearInputRingBuffer(); status_t clearInputRingBuffer(nsecs_t* latestTimestamp); protected: Loading Loading @@ -100,7 +102,7 @@ class Camera3ZslStream : // Disconnet the Camera3ZslStream specific bufferQueues. virtual status_t disconnectLocked(); status_t clearInputRingBufferLocked(); status_t clearInputRingBufferLocked(nsecs_t* latestTimestamp); }; // class Camera3ZslStream Loading services/camera/libcameraservice/gui/RingBufferConsumer.cpp +17 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,8 @@ RingBufferConsumer::RingBufferConsumer(const sp<IGraphicBufferConsumer>& consume uint32_t consumerUsage, int bufferCount) : ConsumerBase(consumer), mBufferCount(bufferCount) mBufferCount(bufferCount), mLatestTimestamp(0) { mConsumer->setConsumerUsageBits(consumerUsage); mConsumer->setMaxAcquiredBufferCount(bufferCount); Loading Loading @@ -152,6 +153,14 @@ status_t RingBufferConsumer::clear() { return OK; } nsecs_t RingBufferConsumer::getLatestTimestamp() { Mutex::Autolock _l(mMutex); if (mBufferItemList.size() == 0) { return 0; } return mLatestTimestamp; } void RingBufferConsumer::pinBufferLocked(const BufferItem& item) { List<RingBufferItem>::iterator it, end; Loading Loading @@ -302,6 +311,13 @@ void RingBufferConsumer::onFrameAvailable() { item.mTimestamp, mBufferItemList.size(), mBufferCount); if (item.mTimestamp < mLatestTimestamp) { BI_LOGE("Timestamp decreases from %" PRId64 " to %" PRId64, mLatestTimestamp, item.mTimestamp); } mLatestTimestamp = item.mTimestamp; item.mGraphicBuffer = mSlots[item.mBuf].mGraphicBuffer; } // end of mMutex lock Loading Loading
services/camera/libcameraservice/api1/client2/ZslProcessor3.cpp +5 −2 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ ZslProcessor3::ZslProcessor3( sp<Camera2Client> client, wp<CaptureSequencer> sequencer): Thread(false), mLatestClearedBufferTimestamp(0), mState(RUNNING), mClient(client), mSequencer(sequencer), Loading Loading @@ -107,7 +108,6 @@ void ZslProcessor3::onResultAvailable(const CaptureResult &result) { ALOGE("%s: metadata doesn't have timestamp, skip this result", __FUNCTION__); return; } (void)timestamp; entry = result.mMetadata.find(ANDROID_REQUEST_FRAME_COUNT); if (entry.count == 0) { Loading @@ -120,6 +120,9 @@ void ZslProcessor3::onResultAvailable(const CaptureResult &result) { if (mState != RUNNING) return; // Corresponding buffer has been cleared. No need to push into mFrameList if (timestamp <= mLatestClearedBufferTimestamp) return; mFrameList.editItemAt(mFrameListHead) = result.mMetadata; mFrameListHead = (mFrameListHead + 1) % mFrameListDepth; } Loading Loading @@ -392,7 +395,7 @@ status_t ZslProcessor3::clearZslQueueLocked() { if (mZslStream != 0) { // clear result metadata list first. clearZslResultQueueLocked(); return mZslStream->clearInputRingBuffer(); return mZslStream->clearInputRingBuffer(&mLatestClearedBufferTimestamp); } return OK; } Loading
services/camera/libcameraservice/api1/client2/ZslProcessor3.h +1 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ class ZslProcessor3 : private: static const nsecs_t kWaitDuration = 10000000; // 10 ms nsecs_t mLatestClearedBufferTimestamp; enum { RUNNING, Loading
services/camera/libcameraservice/device3/Camera3ZslStream.cpp +8 −4 Original line number Diff line number Diff line Loading @@ -315,20 +315,24 @@ status_t Camera3ZslStream::enqueueInputBufferByTimestamp( return OK; } status_t Camera3ZslStream::clearInputRingBuffer() { status_t Camera3ZslStream::clearInputRingBuffer(nsecs_t* latestTimestamp) { Mutex::Autolock l(mLock); return clearInputRingBufferLocked(); return clearInputRingBufferLocked(latestTimestamp); } status_t Camera3ZslStream::clearInputRingBufferLocked() { status_t Camera3ZslStream::clearInputRingBufferLocked(nsecs_t* latestTimestamp) { if (latestTimestamp) { *latestTimestamp = mProducer->getLatestTimestamp(); } mInputBufferQueue.clear(); return mProducer->clear(); } status_t Camera3ZslStream::disconnectLocked() { clearInputRingBufferLocked(); clearInputRingBufferLocked(NULL); return Camera3OutputStream::disconnectLocked(); } Loading
services/camera/libcameraservice/device3/Camera3ZslStream.h +4 −2 Original line number Diff line number Diff line Loading @@ -59,8 +59,10 @@ class Camera3ZslStream : /** * Clears the buffers that can be used by enqueueInputBufferByTimestamp * latestTimestamp will be filled with the largest timestamp of buffers * being cleared, 0 if there is no buffer being clear. */ status_t clearInputRingBuffer(); status_t clearInputRingBuffer(nsecs_t* latestTimestamp); protected: Loading Loading @@ -100,7 +102,7 @@ class Camera3ZslStream : // Disconnet the Camera3ZslStream specific bufferQueues. virtual status_t disconnectLocked(); status_t clearInputRingBufferLocked(); status_t clearInputRingBufferLocked(nsecs_t* latestTimestamp); }; // class Camera3ZslStream Loading
services/camera/libcameraservice/gui/RingBufferConsumer.cpp +17 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,8 @@ RingBufferConsumer::RingBufferConsumer(const sp<IGraphicBufferConsumer>& consume uint32_t consumerUsage, int bufferCount) : ConsumerBase(consumer), mBufferCount(bufferCount) mBufferCount(bufferCount), mLatestTimestamp(0) { mConsumer->setConsumerUsageBits(consumerUsage); mConsumer->setMaxAcquiredBufferCount(bufferCount); Loading Loading @@ -152,6 +153,14 @@ status_t RingBufferConsumer::clear() { return OK; } nsecs_t RingBufferConsumer::getLatestTimestamp() { Mutex::Autolock _l(mMutex); if (mBufferItemList.size() == 0) { return 0; } return mLatestTimestamp; } void RingBufferConsumer::pinBufferLocked(const BufferItem& item) { List<RingBufferItem>::iterator it, end; Loading Loading @@ -302,6 +311,13 @@ void RingBufferConsumer::onFrameAvailable() { item.mTimestamp, mBufferItemList.size(), mBufferCount); if (item.mTimestamp < mLatestTimestamp) { BI_LOGE("Timestamp decreases from %" PRId64 " to %" PRId64, mLatestTimestamp, item.mTimestamp); } mLatestTimestamp = item.mTimestamp; item.mGraphicBuffer = mSlots[item.mBuf].mGraphicBuffer; } // end of mMutex lock Loading