From 8fad6bfe388a753e82c7cc3fcb7ecc5dd6e7f05e Mon Sep 17 00:00:00 2001 From: Shuzhen Wang Date: Thu, 21 May 2020 15:08:53 -0700 Subject: EmulatedCamera: Do not send ERROR_BUFFER in case of ERROR_REQUEST Per HAL spec, in case the request is marked as ERROR_REQUEST, do not send ERROR_BUFFER. Test: Camera CTS Bug: 155353799 Change-Id: I9b6bdca4ada611f3d41fec654849409de78f1f73 --- devices/EmulatedCamera/hwl/Base.h | 4 +++- devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'devices') diff --git a/devices/EmulatedCamera/hwl/Base.h b/devices/EmulatedCamera/hwl/Base.h index f0701de..543f73f 100644 --- a/devices/EmulatedCamera/hwl/Base.h +++ b/devices/EmulatedCamera/hwl/Base.h @@ -57,6 +57,7 @@ struct SensorBuffer { HwlPipelineCallback callback; int acquire_fence_fd; bool is_input; + bool is_failed_request; union Plane { SinglePlane img; @@ -73,6 +74,7 @@ struct SensorBuffer { dataSpace(HAL_DATASPACE_UNKNOWN), acquire_fence_fd(-1), is_input(false), + is_failed_request(false), plane{} { } @@ -104,7 +106,7 @@ struct std::default_delete { } if ((buffer->stream_buffer.status != BufferStatus::kOk) && - (buffer->callback.notify != nullptr)) { + (buffer->callback.notify != nullptr) && (!buffer->is_failed_request)) { NotifyMessage msg = { .type = MessageType::kError, .message.error = {.frame_number = buffer->frame_number, diff --git a/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp b/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp index 09bf94d..3fe9009 100644 --- a/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp +++ b/devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp @@ -120,6 +120,12 @@ std::unique_ptr EmulatedRequestProcessor::CreateSensorBuffers( void EmulatedRequestProcessor::NotifyFailedRequest(const PendingRequest& request) { if (request.output_buffers->at(0)->callback.notify != nullptr) { + // Mark all output buffers for this request in order not to send + // ERROR_BUFFER for them. + for (auto& output_buffer : *(request.output_buffers)) { + output_buffer->is_failed_request = true; + } + auto output_buffer = std::move(request.output_buffers->at(0)); NotifyMessage msg = { .type = MessageType::kError, -- cgit v1.2.3