[libcamera-devel,07/13] libcamera: pipeline: rkisp1: Set the crop rectangle

Message ID 20200813005246.3265807-8-niklas.soderlund@ragnatech.se
State Accepted
Headers show
Series
  • libcamera: pipeline: rkisp1: Extend to support two streams
Related show

Commit Message

Niklas Söderlund Aug. 13, 2020, 12:52 a.m. UTC
Changing resolutions back and forth can provoke the crop rectangle to go
out of sync, set it as port of format configuration.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
---
 src/libcamera/pipeline/rkisp1/rkisp1.cpp | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Jacopo Mondi Aug. 20, 2020, 9 a.m. UTC | #1
Hi Niklas,

On Thu, Aug 13, 2020 at 02:52:40AM +0200, Niklas Söderlund wrote:
> Changing resolutions back and forth can provoke the crop rectangle to go
> out of sync, set it as port of format configuration.
>
> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>

Not knowing the driver, does the crop rectangle always follow the
desired output size ? How is that handled with two outputs ? I guess
I'll find it out later ?

> ---
>  src/libcamera/pipeline/rkisp1/rkisp1.cpp | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> index 8e0f6db5faa96928..59614a9f470b7802 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -632,6 +632,11 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
>  	if (ret < 0)
>  		return ret;
>
> +	Rectangle rect(0, 0, format.size);
> +	ret = isp_->setSelection(0, V4L2_SEL_TGT_CROP, &rect);
> +	if (ret < 0)
> +		return ret;
> +
>  	LOG(RkISP1, Debug) << "ISP input pad configured with " << format.toString();
>
>  	/* YUYV8_2X8 is required on the ISP source path pad for YUV output. */
> --
> 2.28.0
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
Laurent Pinchart Aug. 20, 2020, 3:12 p.m. UTC | #2
Hi Niklas,

Thank you for the patch.

On Thu, Aug 13, 2020 at 02:52:40AM +0200, Niklas Söderlund wrote:
> Changing resolutions back and forth can provoke the crop rectangle to go
> out of sync, set it as port of format configuration.
> 
> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
> ---
>  src/libcamera/pipeline/rkisp1/rkisp1.cpp | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> index 8e0f6db5faa96928..59614a9f470b7802 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -632,6 +632,11 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
>  	if (ret < 0)
>  		return ret;
>  
> +	Rectangle rect(0, 0, format.size);
> +	ret = isp_->setSelection(0, V4L2_SEL_TGT_CROP, &rect);
> +	if (ret < 0)
> +		return ret;
> +

I wonder why this is necessary, as we set the format on the ISP sink
pad, and that should reset the crop rectangle. Isn't it a driver bug ?

Still, this doesn't hurt, so

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

>  	LOG(RkISP1, Debug) << "ISP input pad configured with " << format.toString();
>  
>  	/* YUYV8_2X8 is required on the ISP source path pad for YUV output. */
Niklas Söderlund Sept. 14, 2020, 10:21 a.m. UTC | #3
Hi Jacopo,

On 2020-08-20 11:00:21 +0200, Jacopo Mondi wrote:
> Hi Niklas,
> 
> On Thu, Aug 13, 2020 at 02:52:40AM +0200, Niklas Söderlund wrote:
> > Changing resolutions back and forth can provoke the crop rectangle to go
> > out of sync, set it as port of format configuration.
> >
> > Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
> 
> Not knowing the driver, does the crop rectangle always follow the
> desired output size ? How is that handled with two outputs ? I guess
> I'll find it out later ?

For now it follows, I guess we might need to do something more clever 
when we start supporting digital zoom and such.

> 
> > ---
> >  src/libcamera/pipeline/rkisp1/rkisp1.cpp | 5 +++++
> >  1 file changed, 5 insertions(+)
> >
> > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > index 8e0f6db5faa96928..59614a9f470b7802 100644
> > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> > @@ -632,6 +632,11 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
> >  	if (ret < 0)
> >  		return ret;
> >
> > +	Rectangle rect(0, 0, format.size);
> > +	ret = isp_->setSelection(0, V4L2_SEL_TGT_CROP, &rect);
> > +	if (ret < 0)
> > +		return ret;
> > +
> >  	LOG(RkISP1, Debug) << "ISP input pad configured with " << format.toString();
> >
> >  	/* YUYV8_2X8 is required on the ISP source path pad for YUV output. */
> > --
> > 2.28.0
> >
> > _______________________________________________
> > libcamera-devel mailing list
> > libcamera-devel@lists.libcamera.org
> > https://lists.libcamera.org/listinfo/libcamera-devel

Patch

diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 8e0f6db5faa96928..59614a9f470b7802 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -632,6 +632,11 @@  int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
 	if (ret < 0)
 		return ret;
 
+	Rectangle rect(0, 0, format.size);
+	ret = isp_->setSelection(0, V4L2_SEL_TGT_CROP, &rect);
+	if (ret < 0)
+		return ret;
+
 	LOG(RkISP1, Debug) << "ISP input pad configured with " << format.toString();
 
 	/* YUYV8_2X8 is required on the ISP source path pad for YUV output. */