/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2020, Google Inc. * * rkisp1path.h - Rockchip ISP1 path helper */ #pragma once #include #include #include #include #include #include #include #include "libcamera/internal/media_object.h" #include "libcamera/internal/v4l2_videodevice.h" namespace libcamera { class MediaDevice; class V4L2Subdevice; struct StreamConfiguration; struct V4L2SubdeviceFormat; class RkISP1Path { public: RkISP1Path(const char *name, const Span &formats, const Size &minResolution, const Size &maxResolution); bool init(MediaDevice *media); int setEnabled(bool enable) { return link_->setEnabled(enable); } bool isEnabled() const { return link_->flags() & MEDIA_LNK_FL_ENABLED; } StreamConfiguration generateConfiguration(const Size &resolution); CameraConfiguration::Status validate(StreamConfiguration *cfg); int configure(const StreamConfiguration &config, const V4L2SubdeviceFormat &inputFormat); int exportBuffers(unsigned int bufferCount, std::vector> *buffers) { return video_->exportBuffers(bufferCount, buffers); } int start(); void stop(); int queueBuffer(FrameBuffer *buffer) { return video_->queueBuffer(buffer); } Signal &bufferReady() { return video_->bufferReady; } private: static constexpr unsigned int RKISP1_BUFFER_COUNT = 4; const char *name_; bool running_; const Span formats_; const Size minResolution_; const Size maxResolution_; std::unique_ptr resizer_; std::unique_ptr video_; MediaLink *link_; }; class RkISP1MainPath : public RkISP1Path { public: RkISP1MainPath(); }; class RkISP1SelfPath : public RkISP1Path { public: RkISP1SelfPath(); }; } /* namespace libcamera */