Loading services/camera/libcameraservice/camera3/Camera3OutputStream.cpp +12 −3 Original line number Diff line number Diff line Loading @@ -165,12 +165,21 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( int anwReleaseFence = releaseFence->dup(); /** * Release the lock briefly to avoid deadlock with * StreamingProcessor::startStream -> Camera3Stream::isConfiguring (this * thread will go into StreamingProcessor::onFrameAvailable) during * queueBuffer */ sp<ANativeWindow> currentConsumer = mConsumer; mLock.unlock(); /** * Return buffer back to ANativeWindow */ if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR) { // Cancel buffer res = mConsumer->cancelBuffer(mConsumer.get(), res = currentConsumer->cancelBuffer(currentConsumer.get(), container_of(buffer.buffer, ANativeWindowBuffer, handle), anwReleaseFence); if (res != OK) { Loading @@ -178,7 +187,7 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( " %s (%d)", __FUNCTION__, mId, strerror(-res), res); } } else { res = mConsumer->queueBuffer(mConsumer.get(), res = currentConsumer->queueBuffer(currentConsumer.get(), container_of(buffer.buffer, ANativeWindowBuffer, handle), anwReleaseFence); if (res != OK) { Loading @@ -186,7 +195,7 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( "%s (%d)", __FUNCTION__, mId, strerror(-res), res); } } mLock.lock(); if (res != OK) { close(anwReleaseFence); return res; Loading services/camera/libcameraservice/camera3/Camera3OutputStream.h +3 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,9 @@ class Camera3OutputStream : Camera3OutputStream(int id, camera3_stream_type_t type, uint32_t width, uint32_t height, int format); /** * Note that we release the lock briefly in this function */ virtual status_t returnBufferCheckedLocked( const camera3_stream_buffer &buffer, nsecs_t timestamp, Loading Loading
services/camera/libcameraservice/camera3/Camera3OutputStream.cpp +12 −3 Original line number Diff line number Diff line Loading @@ -165,12 +165,21 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( int anwReleaseFence = releaseFence->dup(); /** * Release the lock briefly to avoid deadlock with * StreamingProcessor::startStream -> Camera3Stream::isConfiguring (this * thread will go into StreamingProcessor::onFrameAvailable) during * queueBuffer */ sp<ANativeWindow> currentConsumer = mConsumer; mLock.unlock(); /** * Return buffer back to ANativeWindow */ if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR) { // Cancel buffer res = mConsumer->cancelBuffer(mConsumer.get(), res = currentConsumer->cancelBuffer(currentConsumer.get(), container_of(buffer.buffer, ANativeWindowBuffer, handle), anwReleaseFence); if (res != OK) { Loading @@ -178,7 +187,7 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( " %s (%d)", __FUNCTION__, mId, strerror(-res), res); } } else { res = mConsumer->queueBuffer(mConsumer.get(), res = currentConsumer->queueBuffer(currentConsumer.get(), container_of(buffer.buffer, ANativeWindowBuffer, handle), anwReleaseFence); if (res != OK) { Loading @@ -186,7 +195,7 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( "%s (%d)", __FUNCTION__, mId, strerror(-res), res); } } mLock.lock(); if (res != OK) { close(anwReleaseFence); return res; Loading
services/camera/libcameraservice/camera3/Camera3OutputStream.h +3 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,9 @@ class Camera3OutputStream : Camera3OutputStream(int id, camera3_stream_type_t type, uint32_t width, uint32_t height, int format); /** * Note that we release the lock briefly in this function */ virtual status_t returnBufferCheckedLocked( const camera3_stream_buffer &buffer, nsecs_t timestamp, Loading