[libcamera-devel] [PATCH/RFC 06/12] libcamera: pipeline: Move camera data classes to the top level scope
Niklas Söderlund
niklas.soderlund at ragnatech.se
Sat May 18 18:46:42 CEST 2019
Hi Laurent,
Thanks for your work.
On 2019-05-18 02:06:15 +0300, Laurent Pinchart wrote:
> Move the pipeline handler camera data classes, defined in the scope of
> the respective pipeline handler class, to the top level of the libcamera
> namespace. This prepares for the introduction of other classes that will
> make use of them in the IPU3 and RkISP1 pipeline handlers. The UVC and
> VIMC pipeline handlers are updated as well for consistency.
Nit-pick/future work:
What do we think about not splitting class definition and function
implementations for the CameraData implementations? The classes are
defined in a cpp file so are there any compelling reason to split the
two for small to mid size classes?
If we think a pipeline will grow to span multiple files I can see the
point of keeping them split, but for uvc and vimc that will be a single
file pipeline I think we could do without the split.
With or without this addressed,
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/libcamera/pipeline/ipu3/ipu3.cpp | 44 ++++++++++++------------
> src/libcamera/pipeline/rkisp1/rkisp1.cpp | 34 +++++++++---------
> src/libcamera/pipeline/uvcvideo.cpp | 40 ++++++++++-----------
> src/libcamera/pipeline/vimc.cpp | 40 ++++++++++-----------
> 4 files changed, 79 insertions(+), 79 deletions(-)
>
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 7c6f2d4a23be..8430e0591a41 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -145,6 +145,25 @@ public:
> ImgUDevice::ImgUOutput *device_;
> };
>
> +class IPU3CameraData : public CameraData
> +{
> +public:
> + IPU3CameraData(PipelineHandler *pipe)
> + : CameraData(pipe)
> + {
> + }
> +
> + void imguOutputBufferReady(Buffer *buffer);
> + void imguInputBufferReady(Buffer *buffer);
> + void cio2BufferReady(Buffer *buffer);
> +
> + CIO2Device cio2_;
> + ImgUDevice *imgu_;
> +
> + IPU3Stream outStream_;
> + IPU3Stream vfStream_;
> +};
> +
> class PipelineHandlerIPU3 : public PipelineHandler
> {
> public:
> @@ -167,25 +186,6 @@ public:
> bool match(DeviceEnumerator *enumerator) override;
>
> private:
> - class IPU3CameraData : public CameraData
> - {
> - public:
> - IPU3CameraData(PipelineHandler *pipe)
> - : CameraData(pipe)
> - {
> - }
> -
> - void imguOutputBufferReady(Buffer *buffer);
> - void imguInputBufferReady(Buffer *buffer);
> - void cio2BufferReady(Buffer *buffer);
> -
> - CIO2Device cio2_;
> - ImgUDevice *imgu_;
> -
> - IPU3Stream outStream_;
> - IPU3Stream vfStream_;
> - };
> -
> static constexpr unsigned int IPU3_BUFFER_COUNT = 4;
>
> IPU3CameraData *cameraData(const Camera *camera)
> @@ -749,7 +749,7 @@ int PipelineHandlerIPU3::registerCameras()
> * Buffers completed from the ImgU input are immediately queued back to the
> * CIO2 unit to continue frame capture.
> */
> -void PipelineHandlerIPU3::IPU3CameraData::imguInputBufferReady(Buffer *buffer)
> +void IPU3CameraData::imguInputBufferReady(Buffer *buffer)
> {
> cio2_.output_->queueBuffer(buffer);
> }
> @@ -760,7 +760,7 @@ void PipelineHandlerIPU3::IPU3CameraData::imguInputBufferReady(Buffer *buffer)
> *
> * Buffers completed from the ImgU output are directed to the application.
> */
> -void PipelineHandlerIPU3::IPU3CameraData::imguOutputBufferReady(Buffer *buffer)
> +void IPU3CameraData::imguOutputBufferReady(Buffer *buffer)
> {
> Request *request = buffer->request();
>
> @@ -785,7 +785,7 @@ void PipelineHandlerIPU3::IPU3CameraData::imguOutputBufferReady(Buffer *buffer)
> * Buffers completed from the CIO2 are immediately queued to the ImgU unit
> * for further processing.
> */
> -void PipelineHandlerIPU3::IPU3CameraData::cio2BufferReady(Buffer *buffer)
> +void IPU3CameraData::cio2BufferReady(Buffer *buffer)
> {
> imgu_->input_->queueBuffer(buffer);
> }
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> index c3b3912c96f3..ec590a382751 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -28,6 +28,23 @@ namespace libcamera {
>
> LOG_DEFINE_CATEGORY(RkISP1)
>
> +class RkISP1CameraData : public CameraData
> +{
> +public:
> + RkISP1CameraData(PipelineHandler *pipe)
> + : CameraData(pipe), sensor_(nullptr)
> + {
> + }
> +
> + ~RkISP1CameraData()
> + {
> + delete sensor_;
> + }
> +
> + Stream stream_;
> + CameraSensor *sensor_;
> +};
> +
> class PipelineHandlerRkISP1 : public PipelineHandler
> {
> public:
> @@ -51,23 +68,6 @@ public:
> bool match(DeviceEnumerator *enumerator) override;
>
> private:
> - class RkISP1CameraData : public CameraData
> - {
> - public:
> - RkISP1CameraData(PipelineHandler *pipe)
> - : CameraData(pipe), sensor_(nullptr)
> - {
> - }
> -
> - ~RkISP1CameraData()
> - {
> - delete sensor_;
> - }
> -
> - Stream stream_;
> - CameraSensor *sensor_;
> - };
> -
> static constexpr unsigned int RKISP1_BUFFER_COUNT = 4;
>
> RkISP1CameraData *cameraData(const Camera *camera)
> diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
> index 5c061ca61016..c20467766ed0 100644
> --- a/src/libcamera/pipeline/uvcvideo.cpp
> +++ b/src/libcamera/pipeline/uvcvideo.cpp
> @@ -20,6 +20,25 @@ namespace libcamera {
>
> LOG_DEFINE_CATEGORY(UVC)
>
> +class UVCCameraData : public CameraData
> +{
> +public:
> + UVCCameraData(PipelineHandler *pipe)
> + : CameraData(pipe), video_(nullptr)
> + {
> + }
> +
> + ~UVCCameraData()
> + {
> + delete video_;
> + }
> +
> + void bufferReady(Buffer *buffer);
> +
> + V4L2Device *video_;
> + Stream stream_;
> +};
> +
> class PipelineHandlerUVC : public PipelineHandler
> {
> public:
> @@ -42,25 +61,6 @@ public:
> bool match(DeviceEnumerator *enumerator) override;
>
> private:
> - class UVCCameraData : public CameraData
> - {
> - public:
> - UVCCameraData(PipelineHandler *pipe)
> - : CameraData(pipe), video_(nullptr)
> - {
> - }
> -
> - ~UVCCameraData()
> - {
> - delete video_;
> - }
> -
> - void bufferReady(Buffer *buffer);
> -
> - V4L2Device *video_;
> - Stream stream_;
> - };
> -
> UVCCameraData *cameraData(const Camera *camera)
> {
> return static_cast<UVCCameraData *>(
> @@ -206,7 +206,7 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
> return true;
> }
>
> -void PipelineHandlerUVC::UVCCameraData::bufferReady(Buffer *buffer)
> +void UVCCameraData::bufferReady(Buffer *buffer)
> {
> Request *request = queuedRequests_.front();
>
> diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
> index 0ece97f09e7e..5575880cdbdf 100644
> --- a/src/libcamera/pipeline/vimc.cpp
> +++ b/src/libcamera/pipeline/vimc.cpp
> @@ -20,6 +20,25 @@ namespace libcamera {
>
> LOG_DEFINE_CATEGORY(VIMC)
>
> +class VimcCameraData : public CameraData
> +{
> +public:
> + VimcCameraData(PipelineHandler *pipe)
> + : CameraData(pipe)
> + {
> + }
> +
> + ~VimcCameraData()
> + {
> + delete video_;
> + }
> +
> + void bufferReady(Buffer *buffer);
> +
> + V4L2Device *video_;
> + Stream stream_;
> +};
> +
> class PipelineHandlerVimc : public PipelineHandler
> {
> public:
> @@ -42,25 +61,6 @@ public:
> bool match(DeviceEnumerator *enumerator) override;
>
> private:
> - class VimcCameraData : public CameraData
> - {
> - public:
> - VimcCameraData(PipelineHandler *pipe)
> - : CameraData(pipe)
> - {
> - }
> -
> - ~VimcCameraData()
> - {
> - delete video_;
> - }
> -
> - void bufferReady(Buffer *buffer);
> -
> - V4L2Device *video_;
> - Stream stream_;
> - };
> -
> VimcCameraData *cameraData(const Camera *camera)
> {
> return static_cast<VimcCameraData *>(
> @@ -202,7 +202,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
> return true;
> }
>
> -void PipelineHandlerVimc::VimcCameraData::bufferReady(Buffer *buffer)
> +void VimcCameraData::bufferReady(Buffer *buffer)
> {
> Request *request = queuedRequests_.front();
>
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> 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