summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline/ipu3/imgu.h
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-06-27 00:51:03 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-06-28 14:25:46 +0200
commitdd391df851a80b70a8a392954bbec0e10db76718 (patch)
tree1e7e8e4dae03e6549a6df6446ad4736f2f7435cd /src/libcamera/pipeline/ipu3/imgu.h
parent942f6c5ceb352f8c54d4a1a3d15489ce9b8b8484 (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.h84
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__ */