diff options
author | Shuzhen Wang <shuzhenwang@google.com> | 2020-05-21 15:08:53 -0700 |
---|---|---|
committer | Shuzhen Wang <shuzhenwang@google.com> | 2020-05-21 15:21:12 -0700 |
commit | 8fad6bfe388a753e82c7cc3fcb7ecc5dd6e7f05e (patch) | |
tree | 42ffa97ae441b435d8447d4edb540fbc6a24139e | |
parent | 2fe79a38b53d2afa21f9eb6850e4583b621f86d9 (diff) | |
download | camera-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.h | 4 | ||||
-rw-r--r-- | devices/EmulatedCamera/hwl/EmulatedRequestProcessor.cpp | 6 |
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, |