[libcamera-devel] [PATCH v1] pipeline: raspberrypi: Return the sensor formats from generateConfiguration()
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Dec 6 18:48:47 CET 2021
Hello,
On Mon, Dec 06, 2021 at 05:19:56PM +0000, Kieran Bingham wrote:
> Quoting Naushir Patuck (2021-12-03 11:32:05)
> > Return the available sensor PixelFormats and sizes from generateConfiguration()
> > if the StreamRole is set to StreamRole::Raw. The existing code returns the
> > PixelFormats and sizes for all other StreamRole types.
> >
> > Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> > ---
> > .../pipeline/raspberrypi/raspberrypi.cpp | 21 ++++++++++++++-----
> > 1 file changed, 16 insertions(+), 5 deletions(-)
> >
> > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > index 5b76916e9e98..cbfb58562626 100644
> > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > @@ -595,12 +595,23 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,
> > return nullptr;
> > }
> >
> > - /* Translate the V4L2PixelFormat to PixelFormat. */
> > std::map<PixelFormat, std::vector<SizeRange>> deviceFormats;
> > - for (const auto &format : fmts) {
> > - PixelFormat pf = format.first.toPixelFormat();
> > - if (pf.isValid())
> > - deviceFormats[pf] = format.second;
> > + if (role == StreamRole::Raw) {
> > + /* Translate the MBUS codes to a PixelFormat. */
> > + for (const auto &format : data->sensorFormats_) {
> > + PixelFormat pf = mbusCodeToPixelFormat(format.first,
> > + BayerFormat::Packing::CSI2);
> > + if (pf.isValid())
> > + deviceFormats.emplace(std::piecewise_construct, std::forward_as_tuple(pf),
> > + std::forward_as_tuple(format.second.begin(), format.second.end()));
>
> I can't tell right now if this could be simpler, but I think it's fine
> as it is if it works for you and produces the right result.
That's likely the shortest piece of code possible, even if not the most
explicit one (declaring an explicit intermediate std::vector<SizeRange>
would be more readable I think).
> I think this functionality could or rather /should/ be done in the
> CameraSensor class to return these formats to simplify this for each
> pipeline handler, as they should all do this in the same way if they use
> a CameraSensor.
Except that how a media bus code is translated to a pixel format is
specific to the video device, it's not an intrinsic property of the
camera sensor.
> However, I think that move to CameraSensor and adapting of the other
> handlers can be done on top.
>
> So,
>
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > + }
> > + } else {
> > + /* Translate the V4L2PixelFormat to PixelFormat. */
> > + for (const auto &format : fmts) {
> > + PixelFormat pf = format.first.toPixelFormat();
> > + if (pf.isValid())
> > + deviceFormats[pf] = format.second;
> > + }
> > }
> >
> > /* Add the stream format based on the device node used for the use case. */
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list