[libcamera-devel] [PATCH 02/10] libcamera: pipeline: simple: Add sink and source pads to entity data
Kieran Bingham
kieran.bingham at ideasonboard.com
Tue Aug 17 10:01:21 CEST 2021
On 17/08/2021 01:02, Laurent Pinchart wrote:
> 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
Of course, that's why I said not essential
>
> 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]
>
Thanks, I just think it's a good idea to show what the expected change
is when something changes something that is user (or developer, in this
instance) visible, to show the intention of the update.
>> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>>
>>> }
>>>
>>> int SimpleCameraData::init()
>
More information about the libcamera-devel
mailing list