[libcamera-devel] [PATCH 03/13] libcamera: ipu3: Always import buffers for ImgU sinks
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sat Jun 27 17:57:43 CEST 2020
Hi Niklas,
Thank you for the patch.
On Sat, Jun 27, 2020 at 05:00:33AM +0200, Niklas Söderlund wrote:
> When the IPU3 pipeline was first developed buffers of sinks from the
> ImgU that where not active still needed to have allocated buffers
> associated with them or streaming was not allowed to start. This is no
> longer true, it's enough that the sinks have imported buffers for
> streaming to start. As we already need to import buffers for streams
> that are active we can align the two cases and always import buffers.
>
> With this there is no longer a reason to store the allocated
> FrameBuffers to keep them alive and the vector tracking them can be
> removed.
>
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> src/libcamera/pipeline/ipu3/ipu3.cpp | 25 ++++---------------------
> 1 file changed, 4 insertions(+), 21 deletions(-)
>
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 405550b1302fb370..5a473e18c082cee8 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -49,7 +49,6 @@ public:
> V4L2VideoDevice *dev;
> unsigned int pad;
> std::string name;
> - std::vector<std::unique_ptr<FrameBuffer>> buffers;
> };
>
> ImgUDevice()
> @@ -1124,9 +1123,6 @@ int ImgUDevice::configureOutput(ImgUOutput *output,
> */
> int ImgUDevice::allocateBuffers(IPU3CameraData *data, unsigned int bufferCount)
> {
> - IPU3Stream *outStream = &data->outStream_;
> - IPU3Stream *vfStream = &data->vfStream_;
> -
> /* Share buffers between CIO2 output and ImgU input. */
> int ret = input_->importBuffers(bufferCount);
> if (ret) {
> @@ -1147,28 +1143,15 @@ int ImgUDevice::allocateBuffers(IPU3CameraData *data, unsigned int bufferCount)
> goto error;
> }
>
> - /*
> - * Allocate buffers for both outputs. If an output is active, prepare
> - * for buffer import, otherwise allocate internal buffers. Use the same
> - * number of buffers in either case.
> - */
I'd keep a small comment here, maybe
/* Import buffers for all outputs, regardless of whether the
* corresponding stream is active or inactive, as the driver needs
* buffers to be requested on the V4L2 devices in order to operate.
*/
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> - if (outStream->active_)
> - ret = output_.dev->importBuffers(bufferCount);
> - else
> - ret = output_.dev->allocateBuffers(bufferCount,
> - &output_.buffers);
> + ret = output_.dev->importBuffers(bufferCount);
> if (ret < 0) {
> - LOG(IPU3, Error) << "Failed to allocate ImgU output buffers";
> + LOG(IPU3, Error) << "Failed to import ImgU output buffers";
> goto error;
> }
>
> - if (vfStream->active_)
> - ret = viewfinder_.dev->importBuffers(bufferCount);
> - else
> - ret = viewfinder_.dev->allocateBuffers(bufferCount,
> - &viewfinder_.buffers);
> + ret = viewfinder_.dev->importBuffers(bufferCount);
> if (ret < 0) {
> - LOG(IPU3, Error) << "Failed to allocate ImgU viewfinder buffers";
> + LOG(IPU3, Error) << "Failed to import ImgU viewfinder buffers";
> goto error;
> }
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list