diff options
Diffstat (limited to 'src/libcamera/pipeline/ipu3/imgu.h')
-rw-r--r-- | src/libcamera/pipeline/ipu3/imgu.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/libcamera/pipeline/ipu3/imgu.h b/src/libcamera/pipeline/ipu3/imgu.h new file mode 100644 index 00000000..1826baa9 --- /dev/null +++ b/src/libcamera/pipeline/ipu3/imgu.h @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * imgu.h - Intel IPU3 ImgU + */ +#ifndef __LIBCAMERA_PIPELINE_IPU3_IMGU_H__ +#define __LIBCAMERA_PIPELINE_IPU3_IMGU_H__ + +#include <string> + +#include "libcamera/internal/v4l2_subdevice.h" +#include "libcamera/internal/v4l2_videodevice.h" + +namespace libcamera { + +class FrameBuffer; +class MediaDevice; +struct Size; +struct StreamConfiguration; + +class ImgUDevice +{ +public: + static constexpr unsigned int PAD_INPUT = 0; + static constexpr unsigned int PAD_OUTPUT = 2; + static constexpr unsigned int PAD_VF = 3; + static constexpr unsigned int PAD_STAT = 4; + + /* ImgU output descriptor: group data specific to an ImgU output. */ + struct ImgUOutput { + V4L2VideoDevice *dev; + unsigned int pad; + std::string name; + }; + + ImgUDevice() + : imgu_(nullptr), input_(nullptr) + { + output_.dev = nullptr; + viewfinder_.dev = nullptr; + stat_.dev = nullptr; + } + + ~ImgUDevice() + { + delete imgu_; + delete input_; + delete output_.dev; + delete viewfinder_.dev; + delete stat_.dev; + } + + int init(MediaDevice *media, unsigned int index); + int configureInput(const Size &size, V4L2DeviceFormat *inputFormat); + int configureOutput(ImgUOutput *output, const StreamConfiguration &cfg, + V4L2DeviceFormat *outputFormat); + + int allocateBuffers(unsigned int bufferCount); + void freeBuffers(); + + int start(); + int stop(); + + int linkSetup(const std::string &source, unsigned int sourcePad, + const std::string &sink, unsigned int sinkPad, + bool enable); + int enableLinks(bool enable); + + unsigned int index_; + std::string name_; + MediaDevice *media_; + + V4L2Subdevice *imgu_; + V4L2VideoDevice *input_; + ImgUOutput output_; + ImgUOutput viewfinder_; + ImgUOutput stat_; + /* \todo Add param video device for 3A tuning */ +}; + +} /* namespace libcamera */ + +#endif /* __LIBCAMERA_PIPELINE_IPU3_IMGU_H__ */ |