diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-03-14 02:34:21 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-05-10 23:58:44 +0300 |
commit | bfd91857360b59bdba41abe911654e0a02c31086 (patch) | |
tree | 897a2f7a848f552eb2dfceccf9ae6c8a3b368fca /src/libcamera/pipeline/simple/converter.h | |
parent | a8964c28c80fb520ee3c7b10143371081d41405a (diff) |
libcamera: pipeline: simple: Add simple format converter
The simple format converter supports V4L2 M2M devices that convert pixel
formats.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'src/libcamera/pipeline/simple/converter.h')
-rw-r--r-- | src/libcamera/pipeline/simple/converter.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/libcamera/pipeline/simple/converter.h b/src/libcamera/pipeline/simple/converter.h new file mode 100644 index 00000000..a33071fa --- /dev/null +++ b/src/libcamera/pipeline/simple/converter.h @@ -0,0 +1,60 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2020, Laurent Pinchart + * + * converter.h - Format converter for simple pipeline handler + */ + +#ifndef __LIBCAMERA_PIPELINE_SIMPLE_CONVERTER_H__ +#define __LIBCAMERA_PIPELINE_SIMPLE_CONVERTER_H__ + +#include <memory> +#include <queue> +#include <vector> + +#include <libcamera/pixelformats.h> +#include <libcamera/signal.h> + +namespace libcamera { + +class FrameBuffer; +class MediaDevice; +struct Size; +class V4L2M2MDevice; + +class SimpleConverter +{ +public: + SimpleConverter(MediaDevice *media); + ~SimpleConverter(); + + int open(); + void close(); + + std::vector<PixelFormat> formats(PixelFormat input); + + int configure(PixelFormat inputFormat, PixelFormat outputFormat, + const Size &size); + int exportBuffers(unsigned int count, + std::vector<std::unique_ptr<FrameBuffer>> *buffers); + + int start(unsigned int count); + void stop(); + + int queueBuffers(FrameBuffer *input, FrameBuffer *output); + + Signal<FrameBuffer *, FrameBuffer *> bufferReady; + +private: + void captureBufferReady(FrameBuffer *buffer); + void outputBufferReady(FrameBuffer *buffer); + + V4L2M2MDevice *m2m_; + + std::queue<FrameBuffer *> captureDoneQueue_; + std::queue<FrameBuffer *> outputDoneQueue_; +}; + +} /* namespace libcamera */ + +#endif /* __LIBCAMERA_PIPELINE_SIMPLE_CONVERTER_H__ */ |