diff mbox series

[meta-oe,2/6] libcamera: add configs pipelines for testing

Message ID 20260506111552.2782-2-jose.quaresma@foundries.io
State Under Review
Headers show
Series [meta-oe,1/6] libyuv: add recipe | expand

Commit Message

Jose Quaresma May 6, 2026, 11:15 a.m. UTC
vimc:
Is a driver that emulates complex video hardware, and is
useful for testing libcamera without needing access to a physical
camera. We would like to add support to the libcamera vimc
pipeline handler for multiple simultaneous streams, to ease
testing of such mechanism. This also requires adding multistream
support to the vimc driver in the Linux kernel.

virtual:
Is a specialized handler designed to create software-based,
virtual camera devices. It allows for testing, debugging, and
simulating camera pipelines without needing physical hardware,
often producing test patterns (e.g., all green frames) via qcam.
This enables developers to emulate camera sensors and
Image Signal Processors (ISPs) within the libcamera

Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
---
 .../recipes-multimedia/libcamera/libcamera_0.6.0.bb       | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Kieran Bingham May 6, 2026, 12:10 p.m. UTC | #1
Hi Jose,

Quoting Jose Quaresma (2026-05-06 12:15:48)
> vimc:
> Is a driver that emulates complex video hardware, and is
> useful for testing libcamera without needing access to a physical
> camera. We would like to add support to the libcamera vimc
> pipeline handler for multiple simultaneous streams, to ease
> testing of such mechanism. This also requires adding multistream
> support to the vimc driver in the Linux kernel.
> 
> virtual:
> Is a specialized handler designed to create software-based,
> virtual camera devices. It allows for testing, debugging, and
> simulating camera pipelines without needing physical hardware,
> often producing test patterns (e.g., all green frames) via qcam.
> This enables developers to emulate camera sensors and
> Image Signal Processors (ISPs) within the libcamera
> 
> Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
> ---
>  .../recipes-multimedia/libcamera/libcamera_0.6.0.bb       | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.6.0.bb b/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.6.0.bb
> index 4dce26a5d0..1f9e21e45b 100644
> --- a/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.6.0.bb
> +++ b/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.6.0.bb
> @@ -28,12 +28,16 @@ PACKAGECONFIG[dng] = ",,tiff"
>  PACKAGECONFIG[gst] = "-Dgstreamer=enabled,-Dgstreamer=disabled,gstreamer1.0 gstreamer1.0-plugins-base"
>  PACKAGECONFIG[pycamera] = "-Dpycamera=enabled,-Dpycamera=disabled,python3 python3-pybind11"
>  PACKAGECONFIG[raspberrypi] = ",,libpisp"
> +PACKAGECONFIG[vimc] = ",,"
> +PACKAGECONFIG[virtual] = ",,libyuv libjpeg-turbo"
>  
> +ARM_PIPELINES = "imx8-isi,mali-c55,simple,uvcvideo"
>  # Raspberry Pi requires the meta-raspberrypi layer
>  # These values are coming from the project's meson.build file,
>  # which lists the supported values by arch.
> -ARM_PIPELINES = "${@bb.utils.contains('PACKAGECONFIG', 'raspberrypi', 'rpi/pisp,rpi/vc4,', '', d)}"
> -ARM_PIPELINES .= "imx8-isi,mali-c55,simple,uvcvideo"
> +ARM_PIPELINES .= "${@bb.utils.contains('PACKAGECONFIG', 'raspberrypi', ',rpi/pisp,rpi/vc4', '', d)}"


> +ARM_PIPELINES .= "${@bb.utils.contains('PACKAGECONFIG', 'vimc', ',vimc', '', d)}"
> +ARM_PIPELINES .= "${@bb.utils.contains('PACKAGECONFIG', 'virtual', ',virtual', '', d)}"

These are not 'ARM' pipelines. Maybe they should be categorised
separately as test platforms ?

--
Kieran



>  
>  LIBCAMERA_PIPELINES ??= "auto"
>  LIBCAMERA_PIPELINES:arm ??= "${ARM_PIPELINES}"
> -- 
> 2.54.0
> 
>
Jose Quaresma May 6, 2026, 2:47 p.m. UTC | #2
Hi Kieran,

Kieran Bingham <kieran.bingham@ideasonboard.com> escreveu (quarta,
6/05/2026 à(s) 13:10):

> Hi Jose,
>
> Quoting Jose Quaresma (2026-05-06 12:15:48)
> > vimc:
> > Is a driver that emulates complex video hardware, and is
> > useful for testing libcamera without needing access to a physical
> > camera. We would like to add support to the libcamera vimc
> > pipeline handler for multiple simultaneous streams, to ease
> > testing of such mechanism. This also requires adding multistream
> > support to the vimc driver in the Linux kernel.
> >
> > virtual:
> > Is a specialized handler designed to create software-based,
> > virtual camera devices. It allows for testing, debugging, and
> > simulating camera pipelines without needing physical hardware,
> > often producing test patterns (e.g., all green frames) via qcam.
> > This enables developers to emulate camera sensors and
> > Image Signal Processors (ISPs) within the libcamera
> >
> > Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
> > ---
> >  .../recipes-multimedia/libcamera/libcamera_0.6.0.bb       | 8 ++++++--
> >  1 file changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/meta-multimedia/recipes-multimedia/libcamera/
> libcamera_0.6.0.bb b/meta-multimedia/recipes-multimedia/libcamera/
> libcamera_0.6.0.bb
> > index 4dce26a5d0..1f9e21e45b 100644
> > --- a/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.6.0.bb
> > +++ b/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.6.0.bb
> > @@ -28,12 +28,16 @@ PACKAGECONFIG[dng] = ",,tiff"
> >  PACKAGECONFIG[gst] =
> "-Dgstreamer=enabled,-Dgstreamer=disabled,gstreamer1.0
> gstreamer1.0-plugins-base"
> >  PACKAGECONFIG[pycamera] =
> "-Dpycamera=enabled,-Dpycamera=disabled,python3 python3-pybind11"
> >  PACKAGECONFIG[raspberrypi] = ",,libpisp"
> > +PACKAGECONFIG[vimc] = ",,"
> > +PACKAGECONFIG[virtual] = ",,libyuv libjpeg-turbo"
> >
> > +ARM_PIPELINES = "imx8-isi,mali-c55,simple,uvcvideo"
> >  # Raspberry Pi requires the meta-raspberrypi layer
> >  # These values are coming from the project's meson.build file,
> >  # which lists the supported values by arch.
> > -ARM_PIPELINES = "${@bb.utils.contains('PACKAGECONFIG', 'raspberrypi',
> 'rpi/pisp,rpi/vc4,', '', d)}"
> > -ARM_PIPELINES .= "imx8-isi,mali-c55,simple,uvcvideo"
> > +ARM_PIPELINES .= "${@bb.utils.contains('PACKAGECONFIG', 'raspberrypi',
> ',rpi/pisp,rpi/vc4', '', d)}"
>
>
> > +ARM_PIPELINES .= "${@bb.utils.contains('PACKAGECONFIG', 'vimc',
> ',vimc', '', d)}"
> > +ARM_PIPELINES .= "${@bb.utils.contains('PACKAGECONFIG', 'virtual',
> ',virtual', '', d)}"
>
> These are not 'ARM' pipelines. Maybe they should be categorised
> separately as test platforms ?
>

I thought about that, but pipelines are only chosen in arm/aarch64, and for
all other architectures we have 'auto'
which is not deterministic and will enable everything possible.

LIBCAMERA_PIPELINES ??= "auto"
LIBCAMERA_PIPELINES:arm ??= "${ARM_PIPELINES}"
LIBCAMERA_PIPELINES:aarch64 ??= "${ARM_PIPELINES}"

Therefore, this change will work the same way in ARM and the others.
The 'vimc' is already part of 'auto' because it has no dependencies and
'virtual' will also be enabled in 'auto' when chosen in PACKAGECONFIG,
given that the dependencies will be in the sysroot.
That's if I understood correctly; correct me if I'm wrong.

I could add a TEST_PIPELINES but I think that would complicate things
too much because I don't see how I would use it together with the 'auto'.

Jose


>
> --
> Kieran
>
>
>
> >
> >  LIBCAMERA_PIPELINES ??= "auto"
> >  LIBCAMERA_PIPELINES:arm ??= "${ARM_PIPELINES}"
> > --
> > 2.54.0
> >
> >
>
diff mbox series

Patch

diff --git a/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.6.0.bb b/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.6.0.bb
index 4dce26a5d0..1f9e21e45b 100644
--- a/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.6.0.bb
+++ b/meta-multimedia/recipes-multimedia/libcamera/libcamera_0.6.0.bb
@@ -28,12 +28,16 @@  PACKAGECONFIG[dng] = ",,tiff"
 PACKAGECONFIG[gst] = "-Dgstreamer=enabled,-Dgstreamer=disabled,gstreamer1.0 gstreamer1.0-plugins-base"
 PACKAGECONFIG[pycamera] = "-Dpycamera=enabled,-Dpycamera=disabled,python3 python3-pybind11"
 PACKAGECONFIG[raspberrypi] = ",,libpisp"
+PACKAGECONFIG[vimc] = ",,"
+PACKAGECONFIG[virtual] = ",,libyuv libjpeg-turbo"
 
+ARM_PIPELINES = "imx8-isi,mali-c55,simple,uvcvideo"
 # Raspberry Pi requires the meta-raspberrypi layer
 # These values are coming from the project's meson.build file,
 # which lists the supported values by arch.
-ARM_PIPELINES = "${@bb.utils.contains('PACKAGECONFIG', 'raspberrypi', 'rpi/pisp,rpi/vc4,', '', d)}"
-ARM_PIPELINES .= "imx8-isi,mali-c55,simple,uvcvideo"
+ARM_PIPELINES .= "${@bb.utils.contains('PACKAGECONFIG', 'raspberrypi', ',rpi/pisp,rpi/vc4', '', d)}"
+ARM_PIPELINES .= "${@bb.utils.contains('PACKAGECONFIG', 'vimc', ',vimc', '', d)}"
+ARM_PIPELINES .= "${@bb.utils.contains('PACKAGECONFIG', 'virtual', ',virtual', '', d)}"
 
 LIBCAMERA_PIPELINES ??= "auto"
 LIBCAMERA_PIPELINES:arm ??= "${ARM_PIPELINES}"