diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2021-01-08 01:58:59 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-01-08 01:58:59 +0000 |
commit | 4ff170a13980f64007a5a82a01b0d8a027f4d22a (patch) | |
tree | de8bbb197c343e62712d5176fc55bdaa41b2389f /devices | |
parent | a5233e8c6e2f9f2374065a77e50c9ded24621792 (diff) | |
parent | 28c85cabb0211ea1ae9b0a6562592a66aef3238b (diff) | |
download | camera-4ff170a13980f64007a5a82a01b0d8a027f4d22a.tar.gz |
Merge "EmulatedCamera: Use only one HandleImporter for sensor buffers"
Diffstat (limited to 'devices')
-rw-r--r-- | devices/EmulatedCamera/hwl/Base.h | 11 | ||||
-rw-r--r-- | devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp | 23 | ||||
-rw-r--r-- | devices/EmulatedCamera/hwl/EmulatedRequestProcessor.h | 2 |
3 files changed, 19 insertions, 17 deletions
diff --git a/devices/EmulatedCamera/hwl/Base.h b/devices/EmulatedCamera/hwl/Base.h index 543f73f..0ccff29 100644 --- a/devices/EmulatedCamera/hwl/Base.h +++ b/devices/EmulatedCamera/hwl/Base.h @@ -53,7 +53,7 @@ struct SensorBuffer { android_pixel_format_t format; android_dataspace_t dataSpace; StreamBuffer stream_buffer; - HandleImporter importer; + std::shared_ptr<HandleImporter> importer; HwlPipelineCallback callback; int acquire_fence_fd; bool is_input; @@ -64,7 +64,7 @@ struct SensorBuffer { YCbCrPlanes img_y_crcb; } plane; - SensorBuffer() + SensorBuffer(std::shared_ptr<HandleImporter> handle_importer) : width(0), height(0), frame_number(0), @@ -72,6 +72,7 @@ struct SensorBuffer { camera_id(0), format(HAL_PIXEL_FORMAT_RGBA_8888), dataSpace(HAL_DATASPACE_UNKNOWN), + importer(handle_importer), acquire_fence_fd(-1), is_input(false), is_failed_request(false), @@ -97,12 +98,12 @@ struct std::default_delete<android::SensorBuffer> { inline void operator()(android::SensorBuffer* buffer) const { if (buffer != nullptr) { if (buffer->stream_buffer.buffer != nullptr) { - buffer->importer.unlock(buffer->stream_buffer.buffer); - buffer->importer.freeBuffer(buffer->stream_buffer.buffer); + buffer->importer->unlock(buffer->stream_buffer.buffer); + buffer->importer->freeBuffer(buffer->stream_buffer.buffer); } if (buffer->acquire_fence_fd >= 0) { - buffer->importer.closeFence(buffer->acquire_fence_fd); + buffer->importer->closeFence(buffer->acquire_fence_fd); } if ((buffer->stream_buffer.status != BufferStatus::kOk) && diff --git a/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp b/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp index 3fe9009..dcd3e7e 100644 --- a/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp +++ b/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp @@ -41,6 +41,7 @@ EmulatedRequestProcessor::EmulatedRequestProcessor(uint32_t camera_id, request_state_(std::make_unique<EmulatedLogicalRequestState>(camera_id)) { ATRACE_CALL(); request_thread_ = std::thread([this] { this->RequestProcessorLoop(); }); + importer_ = std::make_shared<HandleImporter>(); } EmulatedRequestProcessor::~EmulatedRequestProcessor() { @@ -196,8 +197,8 @@ status_t EmulatedRequestProcessor::GetBufferSizeAndStride( } status_t EmulatedRequestProcessor::LockSensorBuffer( - const EmulatedStream& stream, HandleImporter& importer /*in*/, - buffer_handle_t buffer, SensorBuffer* sensor_buffer /*out*/) { + const EmulatedStream& stream, buffer_handle_t buffer, + SensorBuffer* sensor_buffer /*out*/) { if (sensor_buffer == nullptr) { return BAD_VALUE; } @@ -207,7 +208,7 @@ status_t EmulatedRequestProcessor::LockSensorBuffer( auto usage = GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN; if (stream.override_format == HAL_PIXEL_FORMAT_YCBCR_420_888) { IMapper::Rect map_rect = {0, 0, width, height}; - auto yuv_layout = importer.lockYCbCr(buffer, usage, map_rect); + auto yuv_layout = importer_->lockYCbCr(buffer, usage, map_rect); if ((yuv_layout.y != nullptr) && (yuv_layout.cb != nullptr) && (yuv_layout.cr != nullptr)) { sensor_buffer->plane.img_y_crcb.img_y = @@ -243,11 +244,11 @@ status_t EmulatedRequestProcessor::LockSensorBuffer( } if (stream.override_format == HAL_PIXEL_FORMAT_BLOB) { sensor_buffer->plane.img.img = - static_cast<uint8_t*>(importer.lock(buffer, usage, buffer_size)); + static_cast<uint8_t*>(importer_->lock(buffer, usage, buffer_size)); } else { IMapper::Rect region{0, 0, width, height}; sensor_buffer->plane.img.img = - static_cast<uint8_t*>(importer.lock(buffer, usage, region)); + static_cast<uint8_t*>(importer_->lock(buffer, usage, region)); } if (sensor_buffer->plane.img.img == nullptr) { ALOGE("%s: Failed to lock output buffer!", __FUNCTION__); @@ -264,7 +265,7 @@ std::unique_ptr<SensorBuffer> EmulatedRequestProcessor::CreateSensorBuffer( uint32_t frame_number, const EmulatedStream& emulated_stream, uint32_t pipeline_id, HwlPipelineCallback callback, StreamBuffer stream_buffer) { - auto buffer = std::make_unique<SensorBuffer>(); + auto buffer = std::make_unique<SensorBuffer>(importer_); auto stream = emulated_stream; // Make sure input stream formats are correctly mapped here @@ -287,15 +288,15 @@ std::unique_ptr<SensorBuffer> EmulatedRequestProcessor::CreateSensorBuffer( // In case buffer processing is successful, flip this flag accordingly buffer->stream_buffer.status = BufferStatus::kError; - if (!buffer->importer.importBuffer(buffer->stream_buffer.buffer)) { + if (!buffer->importer->importBuffer(buffer->stream_buffer.buffer)) { ALOGE("%s: Failed importing stream buffer!", __FUNCTION__); buffer.release(); buffer = nullptr; } if (buffer.get() != nullptr) { - auto ret = LockSensorBuffer(stream, buffer->importer, - buffer->stream_buffer.buffer, buffer.get()); + auto ret = + LockSensorBuffer(stream, buffer->stream_buffer.buffer, buffer.get()); if (ret != OK) { buffer.release(); buffer = nullptr; @@ -303,8 +304,8 @@ std::unique_ptr<SensorBuffer> EmulatedRequestProcessor::CreateSensorBuffer( } if ((buffer.get() != nullptr) && (stream_buffer.acquire_fence != nullptr)) { - auto fence_status = buffer->importer.importFence( - stream_buffer.acquire_fence, buffer->acquire_fence_fd); + auto fence_status = importer_->importFence(stream_buffer.acquire_fence, + buffer->acquire_fence_fd); if (!fence_status) { ALOGE("%s: Failed importing acquire fence!", __FUNCTION__); buffer.release(); diff --git a/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.h b/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.h index 1eb609f..87a8828 100644 --- a/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.h +++ b/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.h @@ -90,7 +90,6 @@ class EmulatedRequestProcessor { uint32_t* size /*out*/, uint32_t* stride /*out*/); status_t LockSensorBuffer(const EmulatedStream& stream, - HandleImporter& importer /*in*/, buffer_handle_t buffer, SensorBuffer* sensor_buffer /*out*/); std::unique_ptr<Buffers> CreateSensorBuffers( @@ -113,6 +112,7 @@ class EmulatedRequestProcessor { std::unique_ptr<EmulatedLogicalRequestState> request_state_; // Stores and handles 3A and related camera states. std::unique_ptr<HalCameraMetadata> last_settings_; + std::shared_ptr<HandleImporter> importer_; EmulatedRequestProcessor(const EmulatedRequestProcessor&) = delete; EmulatedRequestProcessor& operator=(const EmulatedRequestProcessor&) = delete; |