[libcamera-devel] [PATCH 02/10] libcamera: pipeline: simple: Add sink and source pads to entity data
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Aug 17 02:02:36 CEST 2021
Hi Kieran,
On Mon, Aug 16, 2021 at 03:41:21PM +0100, Kieran Bingham wrote:
> On 05/08/2021 23:24, Laurent Pinchart wrote:
> > Record the sink and source pads through which an entity is traversed in
> > the list of entities stored in the camera data. This prepares for
> > implementing mutually exclusive access to entities between cameras.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> > src/libcamera/pipeline/simple/simple.cpp | 38 ++++++++++++++++++++----
> > 1 file changed, 32 insertions(+), 6 deletions(-)
> >
> > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
> > index b29fff9820e5..e0695d052629 100644
> > --- a/src/libcamera/pipeline/simple/simple.cpp
> > +++ b/src/libcamera/pipeline/simple/simple.cpp
> > @@ -166,7 +166,22 @@ public:
> > }
> >
> > struct Entity {
> > + /* The media entity, always valid. */
> > MediaEntity *entity;
> > + /*
> > + * The local sink pad connected to the upstream entity, null for
> > + * the camera sensor at the beginning of the pipeline.
> > + */
> > + const MediaPad *sink;
> > + /*
> > + * The local source pad connected to the downstream entity, null
> > + * for the video node at the end of the pipeline.
> > + */
> > + const MediaPad *source;
> > + /*
> > + * The link to the downstream entity, null for the video node at
> > + * the end of the pipeline.
> > + */
> > MediaLink *link;
> > };
> >
> > @@ -288,16 +303,18 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,
> > * encoders and image converters, and will end in a CSI capture device.
> > */
> > std::unordered_set<MediaEntity *> visited;
> > - std::queue<MediaEntity *> queue;
> > + std::queue<std::tuple<MediaEntity *, MediaPad *>> queue;
> >
> > /* Remember at each entity where we came from. */
> > std::unordered_map<MediaEntity *, Entity> parents;
> > MediaEntity *entity = nullptr;
> >
> > - queue.push(sensor);
> > + queue.push({ sensor, nullptr });
> >
> > while (!queue.empty()) {
> > - entity = queue.front();
> > + MediaPad *sinkPad;
> > +
> > + std::tie(entity, sinkPad) = queue.front();
> > queue.pop();
> >
> > /* Found the capture device. */
> > @@ -317,8 +334,8 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,
> > for (MediaLink *link : pad->links()) {
> > MediaEntity *next = link->sink()->entity();
> > if (visited.find(next) == visited.end()) {
> > - queue.push(next);
> > - parents.insert({ next, { entity, link } });
> > + queue.push({ next, link->sink() });
> > + parents.insert({ next, { entity, sinkPad, pad, link } });
> > }
> > }
> > }
> > @@ -349,7 +366,16 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,
> > LOG(SimplePipeline, Debug)
> > << "Found pipeline: "
> > << utils::join(entities_, " -> ",
> > - [](const Entity &e) { return e.entity->name(); });
> > + [](const Entity &e) {
> > + std::string s = "[";
> > + if (e.sink)
> > + s += std::to_string(e.sink->index()) + "|";
> > + s += e.entity->name();
> > + if (e.source)
> > + s += "|" + std::to_string(e.source->index());
> > + s += "]";
> > + return s;
> > + });
>
> An example of the changes to string formatting would be nice in the
> commit message, but not essential.
Note that this is just a debug message, not the main point of the patch
:-) I'll add
The debug message that displays detected pipelines now prints pads to
describe the pipeline more precisely:
[0:00:35.901275750] [260] DEBUG SimplePipeline simple.cpp:404 Found pipeline: [imx290 2-001a|0] -> [0|csis-32e40000.csi|1] -> [0|mxc_isi.0|1] -> [0|mxc_isi.0.capture]
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> > }
> >
> > int SimpleCameraData::init()
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list