blob: f7c80d35396d16a73324f351916e704e2dfa5838 [file] [log] [blame]
// 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_