Loading services/camera/libcameraservice/device3/Camera3OutputStream.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -689,7 +689,7 @@ status_t Camera3OutputStream::configureConsumerQueueLocked(bool allowPreviewResp mSyncToDisplay = true; mTotalBufferCount += kDisplaySyncExtraBuffer; } else if (defaultToSpacer) { mPreviewFrameSpacer = new PreviewFrameSpacer(*this, mConsumer); mPreviewFrameSpacer = new PreviewFrameSpacer(this, mConsumer); mTotalBufferCount ++; res = mPreviewFrameSpacer->run(String8::format("PreviewSpacer-%d", mId).string()); if (res != OK) { Loading Loading @@ -970,6 +970,10 @@ status_t Camera3OutputStream::disconnectLocked() { returnPrefetchedBuffersLocked(); if (mPreviewFrameSpacer != nullptr) { mPreviewFrameSpacer->requestExit(); } ALOGV("%s: disconnecting stream %d from native window", __FUNCTION__, getId()); res = native_window_api_disconnect(mConsumer.get(), Loading services/camera/libcameraservice/device3/PreviewFrameSpacer.cpp +16 −7 Original line number Diff line number Diff line Loading @@ -27,13 +27,12 @@ namespace android { namespace camera3 { PreviewFrameSpacer::PreviewFrameSpacer(Camera3OutputStream& parent, sp<Surface> consumer) : PreviewFrameSpacer::PreviewFrameSpacer(wp<Camera3OutputStream> parent, sp<Surface> consumer) : mParent(parent), mConsumer(consumer) { } PreviewFrameSpacer::~PreviewFrameSpacer() { Thread::requestExitAndWait(); } status_t PreviewFrameSpacer::queuePreviewBuffer(nsecs_t timestamp, nsecs_t readoutTimestamp, Loading @@ -51,8 +50,12 @@ bool PreviewFrameSpacer::threadLoop() { Mutex::Autolock l(mLock); if (mPendingBuffers.size() == 0) { mBufferCond.waitRelative(mLock, kWaitDuration); if (exitPending()) { return false; } else { return true; } } nsecs_t currentTime = systemTime(); auto buffer = mPendingBuffers.front(); Loading @@ -71,7 +74,7 @@ bool PreviewFrameSpacer::threadLoop() { if (frameWaitTime > 0 && mPendingBuffers.size() < 2) { mBufferCond.waitRelative(mLock, frameWaitTime); if (exitPending()) { return true; return false; } currentTime = systemTime(); } Loading @@ -92,7 +95,13 @@ void PreviewFrameSpacer::requestExit() { void PreviewFrameSpacer::queueBufferToClientLocked( const BufferHolder& bufferHolder, nsecs_t currentTime) { mParent.setTransform(bufferHolder.transform, true/*mayChangeMirror*/); sp<Camera3OutputStream> parent = mParent.promote(); if (parent == nullptr) { ALOGV("%s: Parent camera3 output stream was destroyed", __FUNCTION__); return; } parent->setTransform(bufferHolder.transform, true/*mayChangeMirror*/); status_t res = native_window_set_buffers_timestamp(mConsumer.get(), bufferHolder.timestamp); if (res != OK) { Loading @@ -101,13 +110,13 @@ void PreviewFrameSpacer::queueBufferToClientLocked( } Camera3Stream::queueHDRMetadata(bufferHolder.anwBuffer.get()->handle, mConsumer, mParent.getDynamicRangeProfile()); parent->getDynamicRangeProfile()); res = mConsumer->queueBuffer(mConsumer.get(), bufferHolder.anwBuffer.get(), bufferHolder.releaseFence); if (res != OK) { close(bufferHolder.releaseFence); if (mParent.shouldLogError(res)) { if (parent->shouldLogError(res)) { ALOGE("%s: Failed to queue buffer to client: %s(%d)", __FUNCTION__, strerror(-res), res); } Loading services/camera/libcameraservice/device3/PreviewFrameSpacer.h +2 −3 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ class Camera3OutputStream; */ class PreviewFrameSpacer : public Thread { public: explicit PreviewFrameSpacer(Camera3OutputStream& parent, sp<Surface> consumer); explicit PreviewFrameSpacer(wp<Camera3OutputStream> parent, sp<Surface> consumer); virtual ~PreviewFrameSpacer(); // Queue preview buffer locally Loading @@ -75,8 +75,7 @@ class PreviewFrameSpacer : public Thread { void queueBufferToClientLocked(const BufferHolder& bufferHolder, nsecs_t currentTime); Camera3OutputStream& mParent; wp<Camera3OutputStream> mParent; sp<ANativeWindow> mConsumer; mutable Mutex mLock; Condition mBufferCond; Loading Loading
services/camera/libcameraservice/device3/Camera3OutputStream.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -689,7 +689,7 @@ status_t Camera3OutputStream::configureConsumerQueueLocked(bool allowPreviewResp mSyncToDisplay = true; mTotalBufferCount += kDisplaySyncExtraBuffer; } else if (defaultToSpacer) { mPreviewFrameSpacer = new PreviewFrameSpacer(*this, mConsumer); mPreviewFrameSpacer = new PreviewFrameSpacer(this, mConsumer); mTotalBufferCount ++; res = mPreviewFrameSpacer->run(String8::format("PreviewSpacer-%d", mId).string()); if (res != OK) { Loading Loading @@ -970,6 +970,10 @@ status_t Camera3OutputStream::disconnectLocked() { returnPrefetchedBuffersLocked(); if (mPreviewFrameSpacer != nullptr) { mPreviewFrameSpacer->requestExit(); } ALOGV("%s: disconnecting stream %d from native window", __FUNCTION__, getId()); res = native_window_api_disconnect(mConsumer.get(), Loading
services/camera/libcameraservice/device3/PreviewFrameSpacer.cpp +16 −7 Original line number Diff line number Diff line Loading @@ -27,13 +27,12 @@ namespace android { namespace camera3 { PreviewFrameSpacer::PreviewFrameSpacer(Camera3OutputStream& parent, sp<Surface> consumer) : PreviewFrameSpacer::PreviewFrameSpacer(wp<Camera3OutputStream> parent, sp<Surface> consumer) : mParent(parent), mConsumer(consumer) { } PreviewFrameSpacer::~PreviewFrameSpacer() { Thread::requestExitAndWait(); } status_t PreviewFrameSpacer::queuePreviewBuffer(nsecs_t timestamp, nsecs_t readoutTimestamp, Loading @@ -51,8 +50,12 @@ bool PreviewFrameSpacer::threadLoop() { Mutex::Autolock l(mLock); if (mPendingBuffers.size() == 0) { mBufferCond.waitRelative(mLock, kWaitDuration); if (exitPending()) { return false; } else { return true; } } nsecs_t currentTime = systemTime(); auto buffer = mPendingBuffers.front(); Loading @@ -71,7 +74,7 @@ bool PreviewFrameSpacer::threadLoop() { if (frameWaitTime > 0 && mPendingBuffers.size() < 2) { mBufferCond.waitRelative(mLock, frameWaitTime); if (exitPending()) { return true; return false; } currentTime = systemTime(); } Loading @@ -92,7 +95,13 @@ void PreviewFrameSpacer::requestExit() { void PreviewFrameSpacer::queueBufferToClientLocked( const BufferHolder& bufferHolder, nsecs_t currentTime) { mParent.setTransform(bufferHolder.transform, true/*mayChangeMirror*/); sp<Camera3OutputStream> parent = mParent.promote(); if (parent == nullptr) { ALOGV("%s: Parent camera3 output stream was destroyed", __FUNCTION__); return; } parent->setTransform(bufferHolder.transform, true/*mayChangeMirror*/); status_t res = native_window_set_buffers_timestamp(mConsumer.get(), bufferHolder.timestamp); if (res != OK) { Loading @@ -101,13 +110,13 @@ void PreviewFrameSpacer::queueBufferToClientLocked( } Camera3Stream::queueHDRMetadata(bufferHolder.anwBuffer.get()->handle, mConsumer, mParent.getDynamicRangeProfile()); parent->getDynamicRangeProfile()); res = mConsumer->queueBuffer(mConsumer.get(), bufferHolder.anwBuffer.get(), bufferHolder.releaseFence); if (res != OK) { close(bufferHolder.releaseFence); if (mParent.shouldLogError(res)) { if (parent->shouldLogError(res)) { ALOGE("%s: Failed to queue buffer to client: %s(%d)", __FUNCTION__, strerror(-res), res); } Loading
services/camera/libcameraservice/device3/PreviewFrameSpacer.h +2 −3 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ class Camera3OutputStream; */ class PreviewFrameSpacer : public Thread { public: explicit PreviewFrameSpacer(Camera3OutputStream& parent, sp<Surface> consumer); explicit PreviewFrameSpacer(wp<Camera3OutputStream> parent, sp<Surface> consumer); virtual ~PreviewFrameSpacer(); // Queue preview buffer locally Loading @@ -75,8 +75,7 @@ class PreviewFrameSpacer : public Thread { void queueBufferToClientLocked(const BufferHolder& bufferHolder, nsecs_t currentTime); Camera3OutputStream& mParent; wp<Camera3OutputStream> mParent; sp<ANativeWindow> mConsumer; mutable Mutex mLock; Condition mBufferCond; Loading