/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2020, Google Inc. * * Image Processing Algorithm proxy for raspberrypi * * This file is auto-generated. Do not edit. */ #pragma once #include #include #include #include #include "libcamera/internal/control_serializer.h" #include "libcamera/internal/ipa_proxy.h" #include "libcamera/internal/ipc_pipe.h" #include "libcamera/internal/ipc_pipe_unixsocket.h" #include "libcamera/internal/ipc_unixsocket.h" namespace libcamera { namespace ipa { namespace RPi { class IPAProxyRPiThreaded; class IPAProxyRPiIsolated; class IPAProxyRPi : public IPAProxy, public IPARPiInterface, public Object { public: using Threaded = IPAProxyRPiThreaded; using Isolated = IPAProxyRPiIsolated; protected: using IPAProxy::IPAProxy; }; class IPAProxyRPiThreaded : public IPAProxyRPi { public: IPAProxyRPiThreaded(IPAModule *ipam, const CameraManager &cm); ~IPAProxyRPiThreaded(); int32_t init( const IPASettings &settings, const InitParams ¶ms, InitResult *result) override; void start( const ControlList &controls, StartResult *result) override; void stop() override; int32_t configure( const IPACameraSensorInfo &sensorInfo, const ConfigParams ¶ms, ConfigResult *result) override; void mapBuffers( const std::vector &buffers) override; void unmapBuffers( const std::vector &ids) override; void prepareIsp( const PrepareParams ¶ms) override; void processStats( const ProcessParams ¶ms) override; private: void prepareIspCompleteHandler( const BufferIds &buffers, const bool stitchSwapBuffers); void processStatsCompleteHandler( const BufferIds &buffers); void metadataReadyHandler( const ControlList &metadata); void setIspControlsHandler( const ControlList &controls); void setDelayedControlsHandler( const ControlList &controls, const uint32_t delayContext); void setLensControlsHandler( const ControlList &controls); void setCameraTimeoutHandler( const uint32_t maxFrameLengthMs); /* Helper class to invoke async functions in another thread. */ class ThreadProxy : public Object { public: ThreadProxy() : ipa_(nullptr) { } void setIPA(IPARPiInterface *ipa) { ipa_ = ipa; } void stop() { ipa_->stop(); } void start( const ControlList &controls, StartResult *result) { ipa_->start(controls, result); } void prepareIsp( const PrepareParams ¶ms) { ipa_->prepareIsp(params); } void processStats( const ProcessParams ¶ms) { ipa_->processStats(params); } private: IPARPiInterface *ipa_; }; Thread thread_; ThreadProxy proxy_; std::unique_ptr ipa_; }; class IPAProxyRPiIsolated : public IPAProxyRPi { public: IPAProxyRPiIsolated(IPAModule *ipam, const CameraManager &cm); ~IPAProxyRPiIsolated(); int32_t init( const IPASettings &settings, const InitParams ¶ms, InitResult *result) override; void start( const ControlList &controls, StartResult *result) override; void stop() override; int32_t configure( const IPACameraSensorInfo &sensorInfo, const ConfigParams ¶ms, ConfigResult *result) override; void mapBuffers( const std::vector &buffers) override; void unmapBuffers( const std::vector &ids) override; void prepareIsp( const PrepareParams ¶ms) override; void processStats( const ProcessParams ¶ms) override; private: void recvMessage(const IPCMessage &data); void prepareIspCompleteHandler( std::vector::const_iterator data, size_t dataSize, const std::vector &fds); void processStatsCompleteHandler( std::vector::const_iterator data, size_t dataSize, const std::vector &fds); void metadataReadyHandler( std::vector::const_iterator data, size_t dataSize, const std::vector &fds); void setIspControlsHandler( std::vector::const_iterator data, size_t dataSize, const std::vector &fds); void setDelayedControlsHandler( std::vector::const_iterator data, size_t dataSize, const std::vector &fds); void setLensControlsHandler( std::vector::const_iterator data, size_t dataSize, const std::vector &fds); void setCameraTimeoutHandler( std::vector::const_iterator data, size_t dataSize, const std::vector &fds); std::unique_ptr ipc_; ControlSerializer controlSerializer_; uint32_t seq_; }; } /* namespace RPi */ } /* namespace ipa */ } /* namespace libcamera */