| // 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_ISP_STREAM_PROTOCOL_H_ |
| #define SRC_CAMERA_DRIVERS_CONTROLLER_ISP_STREAM_PROTOCOL_H_ |
| |
| #include <fuchsia/hardware/isp/cpp/banjo.h> |
| #include <zircon/assert.h> |
| |
| namespace camera { |
| |
| // ISP Stream Protocol Implementation |
| class IspStreamProtocol { |
| public: |
| IspStreamProtocol() : protocol_{&protocol_ops_, nullptr} {} |
| |
| // Returns a pointer to this instance's protocol parameter, to be populated via the Stream banjo |
| // interface. |
| output_stream_protocol_t* protocol() { return &protocol_; } |
| |
| void Start() { |
| ZX_ASSERT(ZX_OK == protocol_.ops->start(protocol_.ctx)); |
| started_ = true; |
| } |
| |
| void Stop() { |
| ZX_ASSERT(ZX_OK == protocol_.ops->stop(protocol_.ctx)); |
| started_ = false; |
| } |
| |
| void ReleaseFrame(uint32_t buffer_id) const { |
| ZX_ASSERT(ZX_OK == protocol_.ops->release_frame(protocol_.ctx, buffer_id)); |
| } |
| |
| zx_status_t Shutdown(const isp_stream_shutdown_callback_t* shutdown_callback) const { |
| auto status = protocol_.ops->shutdown(protocol_.ctx, shutdown_callback); |
| return status; |
| } |
| |
| private: |
| bool started_ = false; |
| output_stream_protocol_t protocol_; |
| output_stream_protocol_ops_t protocol_ops_; |
| }; |
| |
| } // namespace camera |
| |
| #endif // SRC_CAMERA_DRIVERS_CONTROLLER_ISP_STREAM_PROTOCOL_H_ |