summaryrefslogtreecommitdiff
path: root/devices
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2021-01-08 01:58:59 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-01-08 01:58:59 +0000
commit4ff170a13980f64007a5a82a01b0d8a027f4d22a (patch)
treede8bbb197c343e62712d5176fc55bdaa41b2389f /devices
parenta5233e8c6e2f9f2374065a77e50c9ded24621792 (diff)
parent28c85cabb0211ea1ae9b0a6562592a66aef3238b (diff)
downloadcamera-4ff170a13980f64007a5a82a01b0d8a027f4d22a.tar.gz
Merge "EmulatedCamera: Use only one HandleImporter for sensor buffers"
Diffstat (limited to 'devices')
-rw-r--r--devices/EmulatedCamera/hwl/Base.h11
-rw-r--r--devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp23
-rw-r--r--devices/EmulatedCamera/hwl/EmulatedRequestProcessor.h2
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;