@@ -22,6 +22,7 @@
#include <libcamera/base/signal.h>
#include <libcamera/geometry.h>
+#include "libcamera/internal/v4l2_request.h"
namespace libcamera {
@@ -79,7 +80,8 @@ public:
virtual void stop() = 0;
virtual int queueBuffers(FrameBuffer *input,
- const std::map<const Stream *, FrameBuffer *> &outputs) = 0;
+ const std::map<const Stream *, FrameBuffer *> &outputs,
+ const V4L2Request *request = nullptr) = 0;
virtual int setInputCrop(const Stream *stream, Rectangle *rect) = 0;
virtual std::pair<Rectangle, Rectangle> inputCropBounds() = 0;
@@ -66,7 +66,8 @@ public:
Alignment align = Alignment::Down) override;
int queueBuffers(FrameBuffer *input,
- const std::map<const Stream *, FrameBuffer *> &outputs) override;
+ const std::map<const Stream *, FrameBuffer *> &outputs,
+ const V4L2Request *request = nullptr) override;
int setInputCrop(const Stream *stream, Rectangle *rect) override;
std::pair<Rectangle, Rectangle> inputCropBounds() override { return inputCropBounds_; }
@@ -88,7 +89,8 @@ private:
int start();
void stop();
- int queueBuffers(FrameBuffer *input, FrameBuffer *output);
+ int queueBuffers(FrameBuffer *input, FrameBuffer *output,
+ const V4L2Request *request = nullptr);
int setInputSelection(unsigned int target, Rectangle *rect);
int getInputSelection(unsigned int target, Rectangle *rect);
@@ -205,11 +205,14 @@ Converter::~Converter()
* \param[in] input The frame buffer to apply the conversion
* \param[out] outputs The container holding the output stream pointers and
* their respective frame buffer outputs.
+ * \param[in] request An optional request
*
* This function queues the \a input frame buffer on the output streams of the
* \a outputs map key and retrieve the output frame buffer indicated by the
* buffer map value.
*
+ * If \a request is provided the buffers are tied to that request.
+ *
* \return 0 on success or a negative error code otherwise
*/
@@ -22,6 +22,7 @@
#include <libcamera/stream.h>
#include "libcamera/internal/media_device.h"
+#include "libcamera/internal/v4l2_request.h"
#include "libcamera/internal/v4l2_videodevice.h"
/**
@@ -197,9 +198,11 @@ void V4L2M2MConverter::V4L2M2MStream::stop()
m2m_->output()->releaseBuffers();
}
-int V4L2M2MConverter::V4L2M2MStream::queueBuffers(FrameBuffer *input, FrameBuffer *output)
+int V4L2M2MConverter::V4L2M2MStream::queueBuffers(FrameBuffer *input,
+ FrameBuffer *output,
+ const V4L2Request *request)
{
- int ret = m2m_->output()->queueBuffer(input);
+ int ret = m2m_->output()->queueBuffer(input, request);
if (ret < 0)
return ret;
@@ -696,7 +699,8 @@ int V4L2M2MConverter::validateOutput(StreamConfiguration *cfg, bool *adjusted,
* \copydoc libcamera::Converter::queueBuffers
*/
int V4L2M2MConverter::queueBuffers(FrameBuffer *input,
- const std::map<const Stream *, FrameBuffer *> &outputs)
+ const std::map<const Stream *, FrameBuffer *> &outputs,
+ const V4L2Request *request)
{
std::set<FrameBuffer *> outputBufs;
int ret;
@@ -721,7 +725,7 @@ int V4L2M2MConverter::queueBuffers(FrameBuffer *input,
/* Queue the input and output buffers to all the streams. */
for (auto [stream, buffer] : outputs) {
- ret = streams_.at(stream)->queueBuffers(input, buffer);
+ ret = streams_.at(stream)->queueBuffers(input, buffer, request);
if (ret < 0)
return ret;
}
Add V4L2 request support to the V4L2M2MConverter class. Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> --- include/libcamera/internal/converter.h | 4 +++- .../internal/converter/converter_v4l2_m2m.h | 6 ++++-- src/libcamera/converter.cpp | 3 +++ src/libcamera/converter/converter_v4l2_m2m.cpp | 12 ++++++++---- 4 files changed, 18 insertions(+), 7 deletions(-)