summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShuzhen Wang <shuzhenwang@google.com>2020-05-21 15:08:53 -0700
committerShuzhen Wang <shuzhenwang@google.com>2020-05-21 15:21:12 -0700
commit8fad6bfe388a753e82c7cc3fcb7ecc5dd6e7f05e (patch)
tree42ffa97ae441b435d8447d4edb540fbc6a24139e
parent2fe79a38b53d2afa21f9eb6850e4583b621f86d9 (diff)
downloadcamera-8fad6bfe388a753e82c7cc3fcb7ecc5dd6e7f05e.tar.gz
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
-rw-r--r--devices/EmulatedCamera/hwl/Base.h4
-rw-r--r--devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp6
2 files changed, 9 insertions, 1 deletions
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<android::SensorBuffer> {
}
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<Buffers> 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,