blob: 471f87cd6fb373f8957b2c5850e9c2583615fb9b [file] [log] [blame]
// Copyright 2020 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_LIB_FAKE_STREAM_FAKE_STREAM_IMPL_H_
#define SRC_CAMERA_LIB_FAKE_STREAM_FAKE_STREAM_IMPL_H_
#include <lib/async-loop/cpp/loop.h>
#include <lib/fidl/cpp/binding_set.h>
#include <queue>
#include "src/camera/lib/fake_stream/fake_stream.h"
namespace camera {
class FakeCameraImpl;
// Implements the FakeStream interface. Unless otherwise noted, all public methods are thread-safe,
// and all private methods must be called on the loop's thread.
class FakeStreamImpl : public FakeStream, public fuchsia::camera3::Stream {
public:
FakeStreamImpl();
~FakeStreamImpl() override;
static fit::result<std::unique_ptr<FakeStreamImpl>, zx_status_t> Create(
fuchsia::camera3::StreamProperties properties,
fit::function<void(fidl::InterfaceHandle<fuchsia::sysmem::BufferCollectionToken>)>
on_set_buffer_collection);
fidl::InterfaceRequestHandler<fuchsia::camera3::Stream> GetHandler() override;
void AddFrame(fuchsia::camera3::FrameInfo info) override;
private:
void OnNewRequest(fidl::InterfaceRequest<fuchsia::camera3::Stream> request);
void OnDestruction();
// |fuchsia::camera3::Stream|
void SetCropRegion(std::unique_ptr<fuchsia::math::RectF> region) override;
void WatchCropRegion(WatchCropRegionCallback callback) override;
void SetResolution(fuchsia::math::Size coded_size) override;
void WatchResolution(WatchResolutionCallback callback) override;
void SetBufferCollection(
fidl::InterfaceHandle<fuchsia::sysmem::BufferCollectionToken> token) override;
void WatchBufferCollection(WatchBufferCollectionCallback callback) override;
void WatchOrientation(WatchOrientationCallback callback) override;
void GetNextFrame(GetNextFrameCallback callback) override;
void Rebind(fidl::InterfaceRequest<Stream> request) override;
async::Loop loop_;
fidl::BindingSet<fuchsia::camera3::Stream> bindings_;
fuchsia::camera3::StreamProperties properties_;
fit::function<void(fidl::InterfaceHandle<fuchsia::sysmem::BufferCollectionToken>)>
on_set_buffer_collection_;
fidl::InterfaceHandle<fuchsia::sysmem::BufferCollectionToken> token_;
WatchBufferCollectionCallback token_request_;
std::queue<fuchsia::camera3::FrameInfo> frames_;
GetNextFrameCallback frame_request_;
friend class FakeCameraImpl;
};
} // namespace camera
#endif // SRC_CAMERA_LIB_FAKE_STREAM_FAKE_STREAM_IMPL_H_