libcamera v0.7.2+1-7a25b42d-nvm
Supporting cameras in Linux since 2019
Loading...
Searching...
No Matches
converter_dw100.h
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2/*
3 * Copyright (C) 2025, Ideas on Board Oy
4 *
5 * DW100 Dewarp Engine integration
6 */
7
8#pragma once
9
10#include <memory>
11#include <optional>
12#include <queue>
13
15#include <libcamera/controls.h>
17
18#include "libcamera/internal/converter/converter_dw100_vertexmap.h"
21
22namespace libcamera {
23
24class MediaDevice;
25class Rectangle;
26class Stream;
27
29{
30public:
31 virtual ~ConverterDW100Module() = default;
32
33 static std::unique_ptr<ConverterDW100Module> createModule(DeviceEnumerator *enumerator);
34
35 int loadDewarpParams(const ValueNode &params, std::optional<Dw100VertexMap::DewarpParams> &dewarpParams);
36
37 int configure(const StreamConfiguration &inputCfg,
38 const std::vector<std::reference_wrapper<const StreamConfiguration>>
39 &outputCfg,
40 const std::optional<Dw100VertexMap::DewarpParams> &dewarpParams);
41 bool isConfigured(const Stream *stream) const;
42
43 Size adjustInputSize(const PixelFormat &pixFmt, const Size &size,
45 Size adjustOutputSize(const PixelFormat &pixFmt, const Size &size,
47
48 int exportBuffers(const Stream *stream, unsigned int count,
49 std::vector<std::unique_ptr<FrameBuffer>> *buffers);
50 int validateOutput(StreamConfiguration *cfg, bool *adjusted,
52 int queueBuffers(FrameBuffer *input,
53 const std::map<const Stream *, FrameBuffer *> &outputs);
54
55 int start();
56 void stop();
57
58 void updateControlInfos(const Stream *stream, ControlInfoMap::Map &infos);
59 void setControls(const Stream *stream, const ControlList &controls);
60 void populateMetadata(const Stream *stream, ControlList &meta);
61
62 void setSensorCrop(const Rectangle &rect);
63 void setTransform(const Stream *stream, const Transform &transform);
64
67
68private:
69 ConverterDW100Module(std::shared_ptr<MediaDevice> media);
70
71 int applyControls(const Stream *stream, const V4L2Request *request);
72 void reinitRequest(V4L2Request *request);
73
74 struct VertexMapInfo {
76 bool update;
77 };
78
79 std::map<const Stream *, VertexMapInfo> vertexMaps_;
80 bool hasDewarpParams_;
81 unsigned int inputBufferCount_;
82 V4L2M2MConverter converter_;
83 Rectangle sensorCrop_;
84 bool running_;
85
86 std::vector<std::unique_ptr<V4L2Request>> requests_;
87 std::queue<V4L2Request *> availableRequests_;
88};
89
90} /* namespace libcamera */
std::unordered_map< const ControlId *, ControlInfo > Map
The base std::unsorted_map<> container.
Definition controls.h:411
Associate a list of ControlId with their values for an object.
Definition controls.h:453
A converter module for the dw100 dewarper.
Definition converter_dw100.h:29
Signal< FrameBuffer * > inputBufferReady
A signal emitted when the input frame buffer completes.
Definition converter_dw100.h:65
int validateOutput(StreamConfiguration *cfg, bool *adjusted, Converter::Alignment align=Converter::Alignment::Down)
Validate and possibily adjust cfg to a valid converter output.
Definition converter_dw100.cpp:249
static std::unique_ptr< ConverterDW100Module > createModule(DeviceEnumerator *enumerator)
Create a ConverterDW100Module.
Definition converter_dw100.cpp:54
void setControls(const Stream *stream, const ControlList &controls)
Set libcamera controls.
Definition converter_dw100.cpp:400
int configure(const StreamConfiguration &inputCfg, const std::vector< std::reference_wrapper< const StreamConfiguration > > &outputCfg, const std::optional< Dw100VertexMap::DewarpParams > &dewarpParams)
Configure a the dw100 converter module.
Definition converter_dw100.cpp:178
Size adjustOutputSize(const PixelFormat &pixFmt, const Size &size, Converter::Alignment align=Converter::Alignment::Down)
Adjust the converter output size to a valid value.
Definition converter_dw100.cpp:230
int start()
Start the converter streaming operation.
Definition converter_dw100.cpp:314
void setTransform(const Stream *stream, const Transform &transform)
Set transform.
Definition converter_dw100.cpp:483
Signal< FrameBuffer * > outputBufferReady
A signal emitted on each frame buffer completion of the output queue.
Definition converter_dw100.h:66
void stop()
Stop the converter streaming operation.
Definition converter_dw100.cpp:353
void updateControlInfos(const Stream *stream, ControlInfoMap::Map &infos)
Update the controls.
Definition converter_dw100.cpp:369
int exportBuffers(const Stream *stream, unsigned int count, std::vector< std::unique_ptr< FrameBuffer > > *buffers)
Export buffers from the converter device.
Definition converter_dw100.cpp:240
bool isConfigured(const Stream *stream) const
Check if a given stream is configured.
Definition converter_dw100.cpp:212
Size adjustInputSize(const PixelFormat &pixFmt, const Size &size, Converter::Alignment align=Converter::Alignment::Down)
Adjust the converter input size to a valid value.
Definition converter_dw100.cpp:220
void populateMetadata(const Stream *stream, ControlList &meta)
Retrieve updated metadata.
Definition converter_dw100.cpp:434
void setSensorCrop(const Rectangle &rect)
Set sensor crop rectangle.
Definition converter_dw100.cpp:465
int loadDewarpParams(const ValueNode &params, std::optional< Dw100VertexMap::DewarpParams > &dewarpParams)
Load dewarp parameters from configuration file.
Definition converter_dw100.cpp:105
int queueBuffers(FrameBuffer *input, const std::map< const Stream *, FrameBuffer * > &outputs)
Queue buffers to converter device.
Definition converter_dw100.cpp:270
Alignment
The alignment mode specified when adjusting the converter input or output sizes.
Definition converter.h:45
@ Down
Adjust the Converter sizes to a smaller valid size.
Enumerate, store and search media devices.
Definition device_enumerator.h:38
Helper class to compute dw100 vertex maps.
Definition converter_dw100_vertexmap.h:26
Frame buffer data and its associated dynamic metadata.
Definition framebuffer.h:50
libcamera image pixel format
Definition pixel_format.h:17
Describe a rectangle's position and dimensions.
Definition geometry.h:247
Generic signal and slot communication mechanism.
Definition signal.h:39
Describe a two-dimensional size.
Definition geometry.h:51
Video stream for a camera.
Definition stream.h:76
The V4L2 M2M converter implements the converter interface based on V4L2 M2M device.
Definition converter_v4l2_m2m.h:38
V4L2Request object and API.
Definition v4l2_request.h:22
A class representing a tree structure of values.
Definition value_node.h:27
Camera controls identifiers.
Framework to manage controls related to an object.
V4L2 M2M based converter.
Enumeration and matching of media devices.
Frame buffer handling.
Top-level libcamera namespace.
Definition backtrace.h:17
Transform
Enum to represent a 2D plane transform.
Definition transform.h:16
Configuration parameters for a stream.
Definition stream.h:40