[libcamera-devel] [PATCH v3 14/22] libcamera: pipeline: rkisp1: Expose self path stream
Niklas Söderlund
niklas.soderlund at ragnatech.se
Fri Sep 25 18:50:20 CEST 2020
Hi Jacopo,
On 2020-09-25 17:07:23 +0200, Jacopo Mondi wrote:
> Hi Niklas,
>
> On Fri, Sep 25, 2020 at 03:41:59AM +0200, Niklas Söderlund wrote:
> > Expose the self stream to applications and prefers it for the viewfinder
> > and video roles as it can be extended to produce RGB. Keep preferring
> > the main path for still capture as it could be extended to support RAW
> > formats which makes most sense for still capture.
> >
> > With this change the self path becomes available to applications and a
> > camera backed by this pipeline can produce two streams simultaneously.
> >
> > Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> > ---
> > * Changes since v2
> > - Rework generation logic to grantee a stream is not picked for both
> > roles.
> > ---
> > src/libcamera/pipeline/rkisp1/rkisp1.cpp | 55 +++++++++++++++++++-----
> > 1 file changed, 45 insertions(+), 10 deletions(-)
> >
> > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > index bd53183a034efaff..27a3c44da3805c5f 100644
> > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > @@ -718,17 +718,49 @@ CameraConfiguration *PipelineHandlerRkISP1::generateConfiguration(Camera *camera
> > if (roles.empty())
> > return config;
>
> Should roles be capped to 2 ?
This is handled in Camera::generateConfiguration().
>
> >
> > - std::map<PixelFormat, std::vector<SizeRange>> streamFormats;
> > - for (const PixelFormat &format : RKISP1_RSZ_MP_FORMATS)
> > - streamFormats[format] =
> > - { { RKISP1_RSZ_MP_SRC_MIN, data->sensor_->resolution() } };
> > + bool mainPathAvailable = true;
> > + bool selfPathAvailable = true;
> > + for (const StreamRole role : roles) {
> > + bool useMainPath;
> >
> > - StreamFormats formats(streamFormats);
> > - StreamConfiguration cfg(formats);
> > - cfg.pixelFormat = formats::NV12;
> > - cfg.size = data->sensor_->resolution();
> > + switch (role) {
> > + case StreamRole::StillCapture: {
> > + useMainPath = mainPathAvailable;
> > + break;
> > + }
> > + case StreamRole::Viewfinder:
> > + case StreamRole::VideoRecording: {
> > + useMainPath = !selfPathAvailable;
> > + break;
> > + }
>
> Do you need to restrict the scope ?
>
> > + default:
> > + LOG(RkISP1, Warning)
> > + << "Requested stream role not supported: " << role;
> > + delete config;
> > + return nullptr;
> > + }
> >
> > - config->addConfiguration(cfg);
> > + std::map<PixelFormat, std::vector<SizeRange>> streamFormats;
> > + if (useMainPath) {
> > + mainPathAvailable = false;
> > + for (const PixelFormat &format : RKISP1_RSZ_MP_FORMATS)
> > + streamFormats[format] =
> > + { { RKISP1_RSZ_MP_SRC_MIN, data->sensor_->resolution() } };
> > + } else {
> > + selfPathAvailable = false;
> > + for (const PixelFormat &format : RKISP1_RSZ_SP_FORMATS)
> > + streamFormats[format] =
> > + { { RKISP1_RSZ_SP_SRC_MIN, data->sensor_->resolution() } };
>
> Shouldn't this be
>
> { { RKISP1_RSZ_SP_SRC_MIN,
> std:min(data->sensor_->resolution(),
> RKISP1_RSZ_SP_SRC_MAX} };
You are correct, I do this when I refactor way this to RkISP1Path but
not here. Will fix.
>
> Same above
>
> This apart
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
>
> Thanks
> j
>
> > + }
> > +
> > + StreamFormats formats(streamFormats);
> > + StreamConfiguration cfg(formats);
> > + cfg.pixelFormat = formats::NV12;
> > + cfg.size = data->sensor_->resolution();
> > + cfg.bufferCount = 4;
> > +
> > + config->addConfiguration(cfg);
> > + }
> >
> > config->validate();
> >
> > @@ -1216,7 +1248,10 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)
> > if (ret)
> > return ret;
> >
> > - std::set<Stream *> streams{ &data->mainPathStream_ };
> > + std::set<Stream *> streams{
> > + &data->mainPathStream_,
> > + &data->selfPathStream_,
> > + };
> > std::shared_ptr<Camera> camera =
> > Camera::create(this, data->sensor_->id(), streams);
> > registerCamera(std::move(camera), std::move(data));
> > --
> > 2.28.0
> >
> > _______________________________________________
> > libcamera-devel mailing list
> > libcamera-devel at lists.libcamera.org
> > https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list