Loading camera/tests/CameraBinderTests.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ #include <camera/CameraUtils.h> #include <camera/StringUtils.h> #include <com_android_graphics_libgui_flags.h> #include <gui/BufferItemConsumer.h> #include <gui/IGraphicBufferProducer.h> #include <gui/Surface.h> Loading Loading @@ -518,6 +519,23 @@ TEST_F(CameraClientBinderTest, CheckBinderCameraDeviceUser) { // Setup a buffer queue; I'm just using the vendor opaque format here as that is // guaranteed to be present #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) sp<BufferItemConsumer> opaqueConsumer = new BufferItemConsumer( GRALLOC_USAGE_SW_READ_NEVER, /*maxImages*/ 2, /*controlledByApp*/ true); EXPECT_TRUE(opaqueConsumer.get() != nullptr); opaqueConsumer->setName(String8("nom nom nom")); // Set to VGA dimens for default, as that is guaranteed to be present EXPECT_EQ(OK, opaqueConsumer->setDefaultBufferSize(640, 480)); EXPECT_EQ(OK, opaqueConsumer->setDefaultBufferFormat(HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED)); sp<Surface> surface = opaqueConsumer->getSurface(); sp<IGraphicBufferProducer> producer = surface->getIGraphicBufferProducer(); std::string noPhysicalId; OutputConfiguration output(producer, /*rotation*/ 0, noPhysicalId); #else sp<IGraphicBufferProducer> gbProducer; sp<IGraphicBufferConsumer> gbConsumer; BufferQueue::createBufferQueue(&gbProducer, &gbConsumer); Loading @@ -534,6 +552,7 @@ TEST_F(CameraClientBinderTest, CheckBinderCameraDeviceUser) { std::string noPhysicalId; OutputConfiguration output(gbProducer, /*rotation*/0, noPhysicalId); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) // Can we configure? res = device->beginConfigure(); Loading services/camera/libcameraservice/api1/client2/CallbackProcessor.cpp +9 −1 Original line number Diff line number Diff line Loading @@ -18,9 +18,10 @@ #define ATRACE_TAG ATRACE_TAG_CAMERA //#define LOG_NDEBUG 0 #include <com_android_graphics_libgui_flags.h> #include <gui/Surface.h> #include <utils/Log.h> #include <utils/Trace.h> #include <gui/Surface.h> #include "common/CameraDeviceBase.h" #include "api1/Camera2Client.h" Loading Loading @@ -113,6 +114,12 @@ status_t CallbackProcessor::updateStream(const Parameters ¶ms) { if (!mCallbackToApp && mCallbackConsumer == 0) { // Create CPU buffer queue endpoint, since app hasn't given us one // Make it async to avoid disconnect deadlocks #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mCallbackConsumer = new CpuConsumer(kCallbackHeapCount); mCallbackConsumer->setFrameAvailableListener(this); mCallbackConsumer->setName(String8("Camera2-CallbackConsumer")); mCallbackWindow = mCallbackConsumer->getSurface(); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -120,6 +127,7 @@ status_t CallbackProcessor::updateStream(const Parameters ¶ms) { mCallbackConsumer->setFrameAvailableListener(this); mCallbackConsumer->setName(String8("Camera2-CallbackConsumer")); mCallbackWindow = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) } if (mCallbackStreamId != NO_STREAM) { Loading services/camera/libcameraservice/api1/client2/JpegProcessor.cpp +9 −1 Original line number Diff line number Diff line Loading @@ -25,9 +25,10 @@ #include <binder/MemoryBase.h> #include <binder/MemoryHeapBase.h> #include <com_android_graphics_libgui_flags.h> #include <gui/Surface.h> #include <utils/Log.h> #include <utils/Trace.h> #include <gui/Surface.h> #include "common/CameraDeviceBase.h" #include "api1/Camera2Client.h" Loading Loading @@ -93,6 +94,12 @@ status_t JpegProcessor::updateStream(const Parameters ¶ms) { if (mCaptureConsumer == 0) { // Create CPU buffer queue endpoint #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mCaptureConsumer = new CpuConsumer(1); mCaptureConsumer->setFrameAvailableListener(this); mCaptureConsumer->setName(String8("Camera2-JpegConsumer")); mCaptureWindow = mCaptureConsumer->getSurface(); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -100,6 +107,7 @@ status_t JpegProcessor::updateStream(const Parameters ¶ms) { mCaptureConsumer->setFrameAvailableListener(this); mCaptureConsumer->setName(String8("Camera2-JpegConsumer")); mCaptureWindow = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) } // Since ashmem heaps are rounded up to page size, don't reallocate if Loading services/camera/libcameraservice/api1/client2/ZslProcessor.cpp +9 −3 Original line number Diff line number Diff line Loading @@ -27,10 +27,11 @@ #include <inttypes.h> #include <camera/StringUtils.h> #include <com_android_graphics_libgui_flags.h> #include <gui/Surface.h> #include <utils/Log.h> #include <utils/Trace.h> #include <gui/Surface.h> #include <camera/StringUtils.h> #include "common/CameraDeviceBase.h" #include "api1/Camera2Client.h" Loading Loading @@ -250,7 +251,11 @@ status_t ZslProcessor::updateStream(const Parameters ¶ms) { if (mZslStreamId == NO_STREAM) { // Create stream for HAL production // TODO: Sort out better way to select resolution for ZSL #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mProducer = new RingBufferConsumer(GRALLOC_USAGE_HW_CAMERA_ZSL, mBufferQueueDepth); mProducer->setName("Camera2-ZslRingBufferConsumer"); sp<Surface> outSurface = mProducer->getSurface(); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -258,6 +263,7 @@ status_t ZslProcessor::updateStream(const Parameters ¶ms) { mBufferQueueDepth); mProducer->setName("Camera2-ZslRingBufferConsumer"); sp<Surface> outSurface = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) res = device->createStream(outSurface, params.fastInfo.usedZslSize.width, params.fastInfo.usedZslSize.height, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, Loading services/camera/libcameraservice/api2/DepthCompositeStream.cpp +19 −3 Original line number Diff line number Diff line Loading @@ -22,13 +22,15 @@ #include <aidl/android/hardware/camera/device/CameraBlobId.h> #include <camera/StringUtils.h> #include "api1/client2/JpegProcessor.h" #include "common/CameraProviderManager.h" #include "utils/SessionConfigurationUtils.h" #include <com_android_graphics_libgui_flags.h> #include <gui/Surface.h> #include <utils/Log.h> #include <utils/Trace.h> #include "api1/client2/JpegProcessor.h" #include "common/CameraProviderManager.h" #include "utils/SessionConfigurationUtils.h" #include "DepthCompositeStream.h" namespace android { Loading Loading @@ -614,6 +616,12 @@ status_t DepthCompositeStream::createInternalStreams(const std::vector<sp<Surfac return NO_INIT; } #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mBlobConsumer = new CpuConsumer(/*maxLockedBuffers*/ 1, /*controlledByApp*/ true); mBlobConsumer->setFrameAvailableListener(this); mBlobConsumer->setName(String8("Camera3-JpegCompositeStream")); mBlobSurface = mBlobConsumer->getSurface(); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -621,6 +629,7 @@ status_t DepthCompositeStream::createInternalStreams(const std::vector<sp<Surfac mBlobConsumer->setFrameAvailableListener(this); mBlobConsumer->setName(String8("Camera3-JpegCompositeStream")); mBlobSurface = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) ret = device->createStream(mBlobSurface, width, height, format, kJpegDataSpace, rotation, id, physicalCameraId, sensorPixelModesUsed, surfaceIds, Loading @@ -639,11 +648,18 @@ status_t DepthCompositeStream::createInternalStreams(const std::vector<sp<Surfac return ret; } #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mDepthConsumer = new CpuConsumer(/*maxLockedBuffers*/ 1, /*controlledByApp*/ true); mDepthConsumer->setFrameAvailableListener(this); mDepthConsumer->setName(String8("Camera3-DepthCompositeStream")); mDepthSurface = mDepthConsumer->getSurface(); #else BufferQueue::createBufferQueue(&producer, &consumer); mDepthConsumer = new CpuConsumer(consumer, /*maxLockedBuffers*/ 1, /*controlledByApp*/ true); mDepthConsumer->setFrameAvailableListener(this); mDepthConsumer->setName(String8("Camera3-DepthCompositeStream")); mDepthSurface = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) std::vector<int> depthSurfaceId; ret = device->createStream(mDepthSurface, depthWidth, depthHeight, kDepthMapPixelFormat, kDepthMapDataSpace, rotation, &mDepthStreamId, physicalCameraId, sensorPixelModesUsed, Loading Loading
camera/tests/CameraBinderTests.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ #include <camera/CameraUtils.h> #include <camera/StringUtils.h> #include <com_android_graphics_libgui_flags.h> #include <gui/BufferItemConsumer.h> #include <gui/IGraphicBufferProducer.h> #include <gui/Surface.h> Loading Loading @@ -518,6 +519,23 @@ TEST_F(CameraClientBinderTest, CheckBinderCameraDeviceUser) { // Setup a buffer queue; I'm just using the vendor opaque format here as that is // guaranteed to be present #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) sp<BufferItemConsumer> opaqueConsumer = new BufferItemConsumer( GRALLOC_USAGE_SW_READ_NEVER, /*maxImages*/ 2, /*controlledByApp*/ true); EXPECT_TRUE(opaqueConsumer.get() != nullptr); opaqueConsumer->setName(String8("nom nom nom")); // Set to VGA dimens for default, as that is guaranteed to be present EXPECT_EQ(OK, opaqueConsumer->setDefaultBufferSize(640, 480)); EXPECT_EQ(OK, opaqueConsumer->setDefaultBufferFormat(HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED)); sp<Surface> surface = opaqueConsumer->getSurface(); sp<IGraphicBufferProducer> producer = surface->getIGraphicBufferProducer(); std::string noPhysicalId; OutputConfiguration output(producer, /*rotation*/ 0, noPhysicalId); #else sp<IGraphicBufferProducer> gbProducer; sp<IGraphicBufferConsumer> gbConsumer; BufferQueue::createBufferQueue(&gbProducer, &gbConsumer); Loading @@ -534,6 +552,7 @@ TEST_F(CameraClientBinderTest, CheckBinderCameraDeviceUser) { std::string noPhysicalId; OutputConfiguration output(gbProducer, /*rotation*/0, noPhysicalId); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) // Can we configure? res = device->beginConfigure(); Loading
services/camera/libcameraservice/api1/client2/CallbackProcessor.cpp +9 −1 Original line number Diff line number Diff line Loading @@ -18,9 +18,10 @@ #define ATRACE_TAG ATRACE_TAG_CAMERA //#define LOG_NDEBUG 0 #include <com_android_graphics_libgui_flags.h> #include <gui/Surface.h> #include <utils/Log.h> #include <utils/Trace.h> #include <gui/Surface.h> #include "common/CameraDeviceBase.h" #include "api1/Camera2Client.h" Loading Loading @@ -113,6 +114,12 @@ status_t CallbackProcessor::updateStream(const Parameters ¶ms) { if (!mCallbackToApp && mCallbackConsumer == 0) { // Create CPU buffer queue endpoint, since app hasn't given us one // Make it async to avoid disconnect deadlocks #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mCallbackConsumer = new CpuConsumer(kCallbackHeapCount); mCallbackConsumer->setFrameAvailableListener(this); mCallbackConsumer->setName(String8("Camera2-CallbackConsumer")); mCallbackWindow = mCallbackConsumer->getSurface(); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -120,6 +127,7 @@ status_t CallbackProcessor::updateStream(const Parameters ¶ms) { mCallbackConsumer->setFrameAvailableListener(this); mCallbackConsumer->setName(String8("Camera2-CallbackConsumer")); mCallbackWindow = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) } if (mCallbackStreamId != NO_STREAM) { Loading
services/camera/libcameraservice/api1/client2/JpegProcessor.cpp +9 −1 Original line number Diff line number Diff line Loading @@ -25,9 +25,10 @@ #include <binder/MemoryBase.h> #include <binder/MemoryHeapBase.h> #include <com_android_graphics_libgui_flags.h> #include <gui/Surface.h> #include <utils/Log.h> #include <utils/Trace.h> #include <gui/Surface.h> #include "common/CameraDeviceBase.h" #include "api1/Camera2Client.h" Loading Loading @@ -93,6 +94,12 @@ status_t JpegProcessor::updateStream(const Parameters ¶ms) { if (mCaptureConsumer == 0) { // Create CPU buffer queue endpoint #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mCaptureConsumer = new CpuConsumer(1); mCaptureConsumer->setFrameAvailableListener(this); mCaptureConsumer->setName(String8("Camera2-JpegConsumer")); mCaptureWindow = mCaptureConsumer->getSurface(); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -100,6 +107,7 @@ status_t JpegProcessor::updateStream(const Parameters ¶ms) { mCaptureConsumer->setFrameAvailableListener(this); mCaptureConsumer->setName(String8("Camera2-JpegConsumer")); mCaptureWindow = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) } // Since ashmem heaps are rounded up to page size, don't reallocate if Loading
services/camera/libcameraservice/api1/client2/ZslProcessor.cpp +9 −3 Original line number Diff line number Diff line Loading @@ -27,10 +27,11 @@ #include <inttypes.h> #include <camera/StringUtils.h> #include <com_android_graphics_libgui_flags.h> #include <gui/Surface.h> #include <utils/Log.h> #include <utils/Trace.h> #include <gui/Surface.h> #include <camera/StringUtils.h> #include "common/CameraDeviceBase.h" #include "api1/Camera2Client.h" Loading Loading @@ -250,7 +251,11 @@ status_t ZslProcessor::updateStream(const Parameters ¶ms) { if (mZslStreamId == NO_STREAM) { // Create stream for HAL production // TODO: Sort out better way to select resolution for ZSL #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mProducer = new RingBufferConsumer(GRALLOC_USAGE_HW_CAMERA_ZSL, mBufferQueueDepth); mProducer->setName("Camera2-ZslRingBufferConsumer"); sp<Surface> outSurface = mProducer->getSurface(); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -258,6 +263,7 @@ status_t ZslProcessor::updateStream(const Parameters ¶ms) { mBufferQueueDepth); mProducer->setName("Camera2-ZslRingBufferConsumer"); sp<Surface> outSurface = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) res = device->createStream(outSurface, params.fastInfo.usedZslSize.width, params.fastInfo.usedZslSize.height, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, Loading
services/camera/libcameraservice/api2/DepthCompositeStream.cpp +19 −3 Original line number Diff line number Diff line Loading @@ -22,13 +22,15 @@ #include <aidl/android/hardware/camera/device/CameraBlobId.h> #include <camera/StringUtils.h> #include "api1/client2/JpegProcessor.h" #include "common/CameraProviderManager.h" #include "utils/SessionConfigurationUtils.h" #include <com_android_graphics_libgui_flags.h> #include <gui/Surface.h> #include <utils/Log.h> #include <utils/Trace.h> #include "api1/client2/JpegProcessor.h" #include "common/CameraProviderManager.h" #include "utils/SessionConfigurationUtils.h" #include "DepthCompositeStream.h" namespace android { Loading Loading @@ -614,6 +616,12 @@ status_t DepthCompositeStream::createInternalStreams(const std::vector<sp<Surfac return NO_INIT; } #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mBlobConsumer = new CpuConsumer(/*maxLockedBuffers*/ 1, /*controlledByApp*/ true); mBlobConsumer->setFrameAvailableListener(this); mBlobConsumer->setName(String8("Camera3-JpegCompositeStream")); mBlobSurface = mBlobConsumer->getSurface(); #else sp<IGraphicBufferProducer> producer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer); Loading @@ -621,6 +629,7 @@ status_t DepthCompositeStream::createInternalStreams(const std::vector<sp<Surfac mBlobConsumer->setFrameAvailableListener(this); mBlobConsumer->setName(String8("Camera3-JpegCompositeStream")); mBlobSurface = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) ret = device->createStream(mBlobSurface, width, height, format, kJpegDataSpace, rotation, id, physicalCameraId, sensorPixelModesUsed, surfaceIds, Loading @@ -639,11 +648,18 @@ status_t DepthCompositeStream::createInternalStreams(const std::vector<sp<Surfac return ret; } #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) mDepthConsumer = new CpuConsumer(/*maxLockedBuffers*/ 1, /*controlledByApp*/ true); mDepthConsumer->setFrameAvailableListener(this); mDepthConsumer->setName(String8("Camera3-DepthCompositeStream")); mDepthSurface = mDepthConsumer->getSurface(); #else BufferQueue::createBufferQueue(&producer, &consumer); mDepthConsumer = new CpuConsumer(consumer, /*maxLockedBuffers*/ 1, /*controlledByApp*/ true); mDepthConsumer->setFrameAvailableListener(this); mDepthConsumer->setName(String8("Camera3-DepthCompositeStream")); mDepthSurface = new Surface(producer); #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) std::vector<int> depthSurfaceId; ret = device->createStream(mDepthSurface, depthWidth, depthHeight, kDepthMapPixelFormat, kDepthMapDataSpace, rotation, &mDepthStreamId, physicalCameraId, sensorPixelModesUsed, Loading