| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_CAMERA_DRIVERS_CONTROLLER_STREAM_PROTOCOL_H_ |
| #define SRC_CAMERA_DRIVERS_CONTROLLER_STREAM_PROTOCOL_H_ |
| |
| #include <fuchsia/camera2/cpp/fidl.h> |
| #include <fuchsia/hardware/isp/cpp/banjo.h> |
| #include <lib/fidl/cpp/binding.h> |
| #include <lib/fit/thread_checker.h> |
| #include <zircon/compiler.h> |
| |
| namespace camera { |
| |
| class ProcessNode; |
| |
| // Server-side implementation of a stream. |
| class StreamImpl : public fuchsia::camera2::Stream { |
| public: |
| explicit StreamImpl(ProcessNode* output_node); |
| |
| // Binds a channel to the stream. |
| // Args: |
| // |channel|: the channel to bind |
| // |disconnect_handler|: called when the client on |channel| disconnects |
| zx_status_t Attach(zx::channel channel, fit::function<void(void)> disconnect_handler); |
| |
| void FrameReady(const frame_available_info_t* info); |
| |
| // | fuchsia::camera2::Stream | |
| void Start() override; |
| void Stop() override; |
| void ReleaseFrame(uint32_t buffer_id) override; |
| void AcknowledgeFrameError() override; |
| void SetRegionOfInterest(float x_min, float y_min, float x_max, float y_max, |
| SetRegionOfInterestCallback callback) override; |
| void SetImageFormat(uint32_t image_format_index, SetImageFormatCallback callback) override; |
| void GetImageFormats(GetImageFormatsCallback callback) override; |
| |
| private: |
| // Closes the Stream connection, sending the given |status| to the client, and cleans up |
| // outstanding state with the ISP. |
| void Shutdown(zx_status_t status); |
| |
| bool started_ = false; |
| fidl::Binding<fuchsia::camera2::Stream> binding_; |
| fit::function<void(void)> disconnect_handler_; |
| ProcessNode& output_node_; |
| fit::thread_checker thread_checker_; |
| }; |
| |
| } // namespace camera |
| |
| #endif // SRC_CAMERA_DRIVERS_CONTROLLER_STREAM_PROTOCOL_H_ |