[libcamera-devel] [PATCH v4 03/31] libcamera: ipu3: Make sure sensor provides a compatible format
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sat Mar 23 13:58:18 CET 2019
Hi Jacopo,
On Thu, Mar 21, 2019 at 03:50:16PM +0100, Jacopo Mondi wrote:
> On Thu, Mar 21, 2019 at 10:50:05AM +0200, Laurent Pinchart wrote:
> > On Wed, Mar 20, 2019 at 05:30:27PM +0100, Jacopo Mondi wrote:
> >> When creating a camera, make sure a the image sensor provides images in
> >> a format compatible with IPU3 CIO2 unit requirements.
> >>
> >> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> >> ---
> >> src/libcamera/pipeline/ipu3/ipu3.cpp | 43 ++++++++++++++++++++++++++--
> >> 1 file changed, 41 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> >> index 55489c31df2d..2602f89617a3 100644
> >> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> >> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> >> @@ -8,6 +8,8 @@
> >> #include <memory>
> >> #include <vector>
> >>
> >> +#include <linux/media-bus-format.h>
> >> +
> >> #include <libcamera/camera.h>
> >> #include <libcamera/request.h>
> >> #include <libcamera/stream.h>
> >> @@ -78,6 +80,8 @@ private:
> >> PipelineHandler::cameraData(camera));
> >> }
> >>
> >> + int mediaBusToCIO2Format(unsigned int code);
> >> +
> >> void registerCameras();
> >>
> >> std::shared_ptr<MediaDevice> cio2_;
> >> @@ -327,6 +331,22 @@ bool PipelineHandlerIPU3::match(DeviceEnumerator *enumerator)
> >> return true;
> >> }
> >>
> >> +int PipelineHandlerIPU3::mediaBusToCIO2Format(unsigned int code)
> >> +{
> >> + switch (code) {
> >> + case MEDIA_BUS_FMT_SBGGR10_1X10:
> >> + return V4L2_PIX_FMT_IPU3_SBGGR10;
> >> + case MEDIA_BUS_FMT_SGBRG10_1X10:
> >> + return V4L2_PIX_FMT_IPU3_SGBRG10;
> >> + case MEDIA_BUS_FMT_SGRBG10_1X10:
> >> + return V4L2_PIX_FMT_IPU3_SGRBG10;
> >> + case MEDIA_BUS_FMT_SRGGB10_1X10:
> >> + return V4L2_PIX_FMT_IPU3_SRGGB10;
> >> + default:
> >> + return -EINVAL;
> >> + }
> >> +}
> >> +
> >> /*
> >> * Cameras are created associating an image sensor (represented by a
> >> * media entity with function MEDIA_ENT_F_CAM_SENSOR) to one of the four
> >> @@ -404,18 +424,37 @@ void PipelineHandlerIPU3::registerCameras()
> >> if (ret)
> >> continue;
> >>
> >> - data->cio2_->bufferReady.connect(data.get(), &IPU3CameraData::bufferReady);
> >> -
> >> + /*
> >> + * Make sure the sensor produces at least one image format
> >> + * compatible with IPU3 CIO2 requirements.
> >> + */
> >> data->sensor_ = new V4L2Subdevice(sensor);
> >> ret = data->sensor_->open();
> >> if (ret)
> >> continue;
> >>
> >> + const FormatEnum formats = data->sensor_->formats(0);
> >> + auto it = formats.begin();
> >> + for (; it != formats.end(); ++it) {
> >
> > How about
> >
> > for (auto it : formats)
> >
>
> Here and in other patches in the series I need to check the value of
> it after the for loop, so I cannot use a variable with a scope local
> to the loop only.
>
> You suggested alternatives offline, but this cose seems quite parsable
> to me.
>
> >> + if (mediaBusToCIO2Format(it->first) != -EINVAL)
> >> + break;
> >> + }
> >> + if (it == formats.end()) {
> >> + LOG(IPU3, Info)
> >> + << "Sensor '" << data->sensor_->deviceName()
> >
> > How about printing the entity name instead ?
>
> For V4L2Subdevice deviceName() prints the entity name.
> Confusing?
I suppose so, given that I got confused :-)
> >
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>
> Thanks, I'll also consider caching the camera mix and min sizes when
> registering it, as you suggested in a comment to the next patch.
>
> >> + << "' detected, but no supported image format "
> >> + << " found: skip camera creation";
> >> + continue;
> >> + }
> >> +
> >> data->csi2_ = new V4L2Subdevice(csi2);
> >> ret = data->csi2_->open();
> >> if (ret)
> >> continue;
> >>
> >> + data->cio2_->bufferReady.connect(data.get(),
> >> + &IPU3CameraData::bufferReady);
> >> +
> >> registerCamera(std::move(camera), std::move(data));
> >>
> >> LOG(IPU3, Info)
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list