summaryrefslogtreecommitdiff
path: root/common/hal/google_camera_hal/realtime_zsl_result_processor.h
diff options
context:
space:
mode:
authorMinghui Tan <mhtan@google.com>2022-03-01 19:34:47 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2022-03-01 19:34:47 +0000
commit18e5d7e67c5a6a1446ca1f6c1cdd3a45e650cb1d (patch)
treee748579ecd9de44a53fcfaa0be1a9f252deb0139 /common/hal/google_camera_hal/realtime_zsl_result_processor.h
parent1ab64a9877a484af72a17130ec2fc8840661adc6 (diff)
parentbb4dd49d059e067ac17c3fbbdd6f99ecf0eed1c5 (diff)
downloadcamera-18e5d7e67c5a6a1446ca1f6c1cdd3a45e650cb1d.tar.gz
Merge "Separate RealtimeZslResultProcessor and RealtimeZslResultRequestProcessor." into tm-dev
Diffstat (limited to 'common/hal/google_camera_hal/realtime_zsl_result_processor.h')
-rw-r--r--common/hal/google_camera_hal/realtime_zsl_result_processor.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/common/hal/google_camera_hal/realtime_zsl_result_processor.h b/common/hal/google_camera_hal/realtime_zsl_result_processor.h
new file mode 100644
index 0000000..736a7f8
--- /dev/null
+++ b/common/hal/google_camera_hal/realtime_zsl_result_processor.h
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef HARDWARE_GOOGLE_CAMERA_HAL_GOOGLE_CAMERA_HAL_REALTIME_ZSL_RESULT_PROCESSOR_H_
+#define HARDWARE_GOOGLE_CAMERA_HAL_GOOGLE_CAMERA_HAL_REALTIME_ZSL_RESULT_PROCESSOR_H_
+
+#include <shared_mutex>
+
+#include "internal_stream_manager.h"
+#include "result_processor.h"
+
+namespace android {
+namespace google_camera_hal {
+
+// RealtimeZslResultProcessor implements a ResultProcessor that return
+// filled raw buffer and metadata to internal stream manager.
+class RealtimeZslResultProcessor : public ResultProcessor {
+ public:
+ static std::unique_ptr<RealtimeZslResultProcessor> Create(
+ InternalStreamManager* internal_stream_manager, int32_t stream_id,
+ android_pixel_format_t pixel_format, uint32_t partial_result_count = 1);
+
+ virtual ~RealtimeZslResultProcessor() = default;
+
+ // Override functions of ResultProcessor start.
+ void SetResultCallback(ProcessCaptureResultFunc process_capture_result,
+ NotifyFunc notify) override;
+
+ status_t AddPendingRequests(
+ const std::vector<ProcessBlockRequest>& process_block_requests,
+ const CaptureRequest& remaining_session_request) override;
+
+ // Return filled raw buffer and metadata to internal stream manager
+ // and forwards the results without raw buffer to its callback functions.
+ void ProcessResult(ProcessBlockResult block_result) override;
+
+ void Notify(const ProcessBlockNotifyMessage& block_message) override;
+
+ status_t FlushPendingRequests() override;
+ // Override functions of ResultProcessor end.
+
+ protected:
+ RealtimeZslResultProcessor(InternalStreamManager* internal_stream_manager,
+ int32_t stream_id,
+ android_pixel_format_t pixel_format,
+ uint32_t partial_result_count);
+
+ InternalStreamManager* internal_stream_manager_;
+ int32_t stream_id_ = -1;
+ // Partial result count reported by HAL
+ uint32_t partial_result_count_;
+
+ std::mutex callback_lock_;
+
+ private:
+ // Save face detect mode for HDR+
+ void SaveFdForHdrplus(const CaptureRequest& request);
+ // Handle face detect metadata from result for HDR+
+ status_t HandleFdResultForHdrplus(uint32_t frameNumber,
+ HalCameraMetadata* metadata);
+ // Save lens shading map mode for HDR+
+ void SaveLsForHdrplus(const CaptureRequest& request);
+ // Handle Lens shading metadata from result for HDR+
+ status_t HandleLsResultForHdrplus(uint32_t frameNumber,
+ HalCameraMetadata* metadata);
+
+ // The following callbacks must be protected by callback_lock_.
+ ProcessCaptureResultFunc process_capture_result_;
+ NotifyFunc notify_;
+
+ android_pixel_format_t pixel_format_;
+
+ // Current face detect mode set by framework.
+ uint8_t current_face_detect_mode_ = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;
+
+ std::mutex face_detect_lock_;
+ // Map from frame number to face detect mode requested for that frame by
+ // framework. And requested_face_detect_modes_ is protected by
+ // face_detect_lock_
+ std::unordered_map<uint32_t, uint8_t> requested_face_detect_modes_;
+
+ // Current lens shading map mode set by framework.
+ uint8_t current_lens_shading_map_mode_ =
+ ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF;
+
+ std::mutex lens_shading_lock_;
+ // Map from frame number to lens shading map mode requested for that frame
+ // by framework. And requested_lens_shading_map_modes_ is protected by
+ // lens_shading_lock_
+ std::unordered_map<uint32_t, uint8_t> requested_lens_shading_map_modes_;
+
+ std::shared_mutex process_block_shared_lock_;
+};
+
+} // namespace google_camera_hal
+} // namespace android
+
+#endif // HARDWARE_GOOGLE_CAMERA_HAL_GOOGLE_CAMERA_HAL_REALTIME_ZSL_RESULT_REQUEST_PROCESSOR_H_