diff options
author | Niklas Söderlund <niklas.soderlund@ragnatech.se> | 2020-06-27 00:51:03 +0200 |
---|---|---|
committer | Niklas Söderlund <niklas.soderlund@ragnatech.se> | 2020-06-28 14:25:46 +0200 |
commit | dd391df851a80b70a8a392954bbec0e10db76718 (patch) | |
tree | 1e7e8e4dae03e6549a6df6446ad4736f2f7435cd /src/libcamera/pipeline/ipu3/imgu.h | |
parent | 942f6c5ceb352f8c54d4a1a3d15489ce9b8b8484 (diff) |
libcamera: ipu3: imgu: Move the ImgUDevice class to separate files
In preparation of refactoring the IPU3 pipeline handler breakout the
ImgUDevice into its own .cpp and .h file, no functional change.
Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
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__ */ |