summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline/simple/converter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera/pipeline/simple/converter.h')
-rw-r--r--src/libcamera/pipeline/simple/converter.h50
1 files changed, 43 insertions, 7 deletions
diff --git a/src/libcamera/pipeline/simple/converter.h b/src/libcamera/pipeline/simple/converter.h
index be6844ca..480e528d 100644
--- a/src/libcamera/pipeline/simple/converter.h
+++ b/src/libcamera/pipeline/simple/converter.h
@@ -8,13 +8,18 @@
#ifndef __LIBCAMERA_PIPELINE_SIMPLE_CONVERTER_H__
#define __LIBCAMERA_PIPELINE_SIMPLE_CONVERTER_H__
+#include <functional>
+#include <map>
#include <memory>
+#include <string>
#include <tuple>
#include <vector>
#include <libcamera/pixel_format.h>
#include <libcamera/signal.h>
+#include "libcamera/internal/log.h"
+
namespace libcamera {
class FrameBuffer;
@@ -38,26 +43,57 @@ public:
strideAndFrameSize(const PixelFormat &pixelFormat, const Size &size);
int configure(const StreamConfiguration &inputCfg,
- const StreamConfiguration &outputCfg);
- int exportBuffers(unsigned int count,
+ const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfg);
+ int exportBuffers(unsigned int ouput, unsigned int count,
std::vector<std::unique_ptr<FrameBuffer>> *buffers);
int start();
void stop();
- int queueBuffers(FrameBuffer *input, FrameBuffer *output);
+ int queueBuffers(FrameBuffer *input,
+ const std::map<unsigned int, FrameBuffer *> &outputs);
Signal<FrameBuffer *> inputBufferReady;
Signal<FrameBuffer *> outputBufferReady;
private:
- void m2mInputBufferReady(FrameBuffer *buffer);
- void m2mOutputBufferReady(FrameBuffer *buffer);
+ class Stream : protected Loggable
+ {
+ public:
+ Stream(SimpleConverter *converter, unsigned int index);
+
+ bool isValid() const { return m2m_ != nullptr; }
+
+ int configure(const StreamConfiguration &inputCfg,
+ const StreamConfiguration &outputCfg);
+ int exportBuffers(unsigned int count,
+ std::vector<std::unique_ptr<FrameBuffer>> *buffers);
+
+ int start();
+ void stop();
+
+ int queueBuffers(FrameBuffer *input, FrameBuffer *output);
+
+ protected:
+ std::string logPrefix() const override;
+
+ private:
+ void captureBufferReady(FrameBuffer *buffer);
+ void outputBufferReady(FrameBuffer *buffer);
+
+ SimpleConverter *converter_;
+ unsigned int index_;
+ std::unique_ptr<V4L2M2MDevice> m2m_;
+
+ unsigned int inputBufferCount_;
+ unsigned int outputBufferCount_;
+ };
+ std::string deviceNode_;
std::unique_ptr<V4L2M2MDevice> m2m_;
- unsigned int inputBufferCount_;
- unsigned int outputBufferCount_;
+ std::vector<Stream> streams_;
+ std::map<FrameBuffer *, unsigned int> queue_;
};
} /* namespace libcamera */