[libcamera-devel] [PATCH 1/2] libcamera: pipeline: simple: make sure the formats at the link's pads match
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sun Jun 28 11:45:56 CEST 2020
Hi Andrey,
Thank you for the patch.
On Tue, Apr 21, 2020 at 11:39:53PM +0300, Andrey Konovalov wrote:
> Change SimpleCameraData::setupFormats() to return -EINVAL if the sink
> pad of the link doesn't support the format set on the source pad of this
> link.
Note that there's at least one driver (omap3isp) that supports different
formats on the two ends of a link (it's used at the input of the CCDC
block to model bits being dropped on the bus, for instance when
connecting D[9:2] of a 10-bit sensor to D[7:0] of the CCDC input). This
is a bit of a hack and shouldn't be encouraged. The OMAP3 ISP would also
need its own pipeline handler anyway. I think your patch is thus fine.
> Signed-off-by: Andrey Konovalov <andrey.konovalov at linaro.org>
> ---
> src/libcamera/pipeline/simple/simple.cpp | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
> index b5f9177..8212bd9 100644
> --- a/src/libcamera/pipeline/simple/simple.cpp
> +++ b/src/libcamera/pipeline/simple/simple.cpp
> @@ -372,6 +372,7 @@ int SimpleCameraData::setupFormats(V4L2SubdeviceFormat *format,
> MediaLink *link = e.link;
> MediaPad *source = link->source();
> MediaPad *sink = link->sink();
> + V4L2SubdeviceFormat source_format;
s/source_format/sourceFormat/
>
> if (source->entity() != sensor_->entity()) {
> V4L2Subdevice *subdev = pipe->subdev(source->entity());
> @@ -380,11 +381,22 @@ int SimpleCameraData::setupFormats(V4L2SubdeviceFormat *format,
> return ret;
> }
>
> + source_format = *format;
You can move this and the variable declaration within the if () below.
> if (sink->entity()->function() != MEDIA_ENT_F_IO_V4L) {
> V4L2Subdevice *subdev = pipe->subdev(sink->entity());
> ret = subdev->setFormat(sink->index(), format, whence);
> if (ret < 0)
> return ret;
> +
> + if (format->mbus_code != source_format.mbus_code
> + || format->size != source_format.size) {
We usually put the || at the end of the line.
> + LOG(SimplePipeline, Debug)
> + << "Source pad format isn't supported "
> + << "by the sink pad of the link: "
> + << "Source: " << source_format.toString()
> + << "Sink: " << format->toString();
It could be useful to tell which link this is related to. How about
<< "Source '" << source->entity()->name()
<< "':" << source->index()
<< " produces " << sourceFormat.toString()
<< ", sink '" << sink->entity()->name()
<< "':" << sink->index()
<< " requires " << format->toString();
With those changes,
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
I can fix when applying if you're fine with this.
> + return -EINVAL;
> + }
> }
>
> LOG(SimplePipeline, Debug)
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list