[v1,0/4] Raspberry Pi: Add support for Pi 5 (PiSP)
mbox series

Message ID 20250113093532.4054142-1-naush@raspberrypi.com
Headers show
Series
  • Raspberry Pi: Add support for Pi 5 (PiSP)
Related show

Message

Naushir Patuck Jan. 13, 2025, 9:24 a.m. UTC
Hi,

A long time coming... this series add support for Raspberry Pi 5 (PiSP) to
upstream libcamera. The IPA and pipeline handler code have been taken mostly
unchanged from the Raspberry Pi downstream libcamera tree:
https://github.com/raspberrypi/libcamera. Support for IMX500 and CNNs are not
available in this series since we have yet to attempt to upstream the kernel
changes.

IMPORTANT NOTE
--------------
The Pi 5 pipeline handler in this commit is NOT COMPATIBLE with the Raspberry Pi
kernel drivers just yet! Instead, you must use the mainline kernel upstream
drivers with this pipeline handler. When futher upstreaming development for
embedded data is completed, RPi will backport the upstream kernel drives to our
tree and this pipeline handler will then begin to work with both upstream and
downstream kernel trees.

Thanks,
Naush

Naushir Patuck (4):
  meson: Add libpisp.wrap
  ipa: rpi: Add support for Raspberry Pi 5
  pipeline: rpi: Add new stream flags for PiSP
  pipeline: rpi: Add support for Raspberry Pi 5

 Documentation/guides/pipeline-handler.rst     |    2 +-
 include/libcamera/ipa/meson.build             |    1 +
 include/libcamera/meson.build                 |    1 +
 meson.build                                   |    1 +
 meson_options.txt                             |    4 +-
 src/ipa/rpi/pisp/data/imx219.json             | 1187 +++++++++
 src/ipa/rpi/pisp/data/imx219_noir.json        | 1112 ++++++++
 src/ipa/rpi/pisp/data/imx290.json             |  341 +++
 src/ipa/rpi/pisp/data/imx296.json             | 1194 +++++++++
 src/ipa/rpi/pisp/data/imx296_16mm.json        | 1247 +++++++++
 src/ipa/rpi/pisp/data/imx296_6mm.json         | 1247 +++++++++
 src/ipa/rpi/pisp/data/imx296_mono.json        |  960 +++++++
 src/ipa/rpi/pisp/data/imx378.json             |  634 +++++
 src/ipa/rpi/pisp/data/imx415.json             | 1159 ++++++++
 src/ipa/rpi/pisp/data/imx462.json             |  342 +++
 src/ipa/rpi/pisp/data/imx477.json             | 1186 +++++++++
 src/ipa/rpi/pisp/data/imx477_16mm.json        | 1240 +++++++++
 src/ipa/rpi/pisp/data/imx477_6mm.json         | 1240 +++++++++
 src/ipa/rpi/pisp/data/imx477_noir.json        | 1148 ++++++++
 src/ipa/rpi/pisp/data/imx477_scientific.json  |  546 ++++
 src/ipa/rpi/pisp/data/imx519.json             |  634 +++++
 src/ipa/rpi/pisp/data/imx708.json             | 1270 +++++++++
 src/ipa/rpi/pisp/data/imx708_noir.json        | 1233 +++++++++
 src/ipa/rpi/pisp/data/imx708_wide.json        | 1293 +++++++++
 src/ipa/rpi/pisp/data/imx708_wide_noir.json   | 1148 ++++++++
 src/ipa/rpi/pisp/data/meson.build             |   29 +
 src/ipa/rpi/pisp/data/ov5647.json             | 1186 +++++++++
 src/ipa/rpi/pisp/data/ov5647_noir.json        | 1121 ++++++++
 src/ipa/rpi/pisp/data/ov64a40.json            | 1133 ++++++++
 src/ipa/rpi/pisp/data/ov9281_mono.json        |  215 ++
 src/ipa/rpi/pisp/data/se327m12.json           |  639 +++++
 src/ipa/rpi/pisp/data/uncalibrated.json       |  135 +
 src/ipa/rpi/pisp/meson.build                  |   49 +
 src/ipa/rpi/pisp/pisp.cpp                     | 1068 ++++++++
 src/libcamera/control_ids_rpi.yaml            |   13 +
 .../pipeline/rpi/common/rpi_stream.h          |   10 +
 .../pipeline/rpi/pisp/data/example.yaml       |   45 +
 .../pipeline/rpi/pisp/data/meson.build        |    8 +
 src/libcamera/pipeline/rpi/pisp/meson.build   |   12 +
 src/libcamera/pipeline/rpi/pisp/pisp.cpp      | 2372 +++++++++++++++++
 subprojects/.gitignore                        |    1 +
 subprojects/libpisp.wrap                      |    6 +
 42 files changed, 28410 insertions(+), 2 deletions(-)
 create mode 100644 src/ipa/rpi/pisp/data/imx219.json
 create mode 100644 src/ipa/rpi/pisp/data/imx219_noir.json
 create mode 100644 src/ipa/rpi/pisp/data/imx290.json
 create mode 100644 src/ipa/rpi/pisp/data/imx296.json
 create mode 100644 src/ipa/rpi/pisp/data/imx296_16mm.json
 create mode 100644 src/ipa/rpi/pisp/data/imx296_6mm.json
 create mode 100644 src/ipa/rpi/pisp/data/imx296_mono.json
 create mode 100644 src/ipa/rpi/pisp/data/imx378.json
 create mode 100755 src/ipa/rpi/pisp/data/imx415.json
 create mode 100644 src/ipa/rpi/pisp/data/imx462.json
 create mode 100644 src/ipa/rpi/pisp/data/imx477.json
 create mode 100644 src/ipa/rpi/pisp/data/imx477_16mm.json
 create mode 100644 src/ipa/rpi/pisp/data/imx477_6mm.json
 create mode 100644 src/ipa/rpi/pisp/data/imx477_noir.json
 create mode 100644 src/ipa/rpi/pisp/data/imx477_scientific.json
 create mode 100644 src/ipa/rpi/pisp/data/imx519.json
 create mode 100644 src/ipa/rpi/pisp/data/imx708.json
 create mode 100644 src/ipa/rpi/pisp/data/imx708_noir.json
 create mode 100644 src/ipa/rpi/pisp/data/imx708_wide.json
 create mode 100644 src/ipa/rpi/pisp/data/imx708_wide_noir.json
 create mode 100644 src/ipa/rpi/pisp/data/meson.build
 create mode 100644 src/ipa/rpi/pisp/data/ov5647.json
 create mode 100644 src/ipa/rpi/pisp/data/ov5647_noir.json
 create mode 100755 src/ipa/rpi/pisp/data/ov64a40.json
 create mode 100644 src/ipa/rpi/pisp/data/ov9281_mono.json
 create mode 100644 src/ipa/rpi/pisp/data/se327m12.json
 create mode 100644 src/ipa/rpi/pisp/data/uncalibrated.json
 create mode 100644 src/ipa/rpi/pisp/meson.build
 create mode 100644 src/ipa/rpi/pisp/pisp.cpp
 create mode 100644 src/libcamera/pipeline/rpi/pisp/data/example.yaml
 create mode 100644 src/libcamera/pipeline/rpi/pisp/data/meson.build
 create mode 100644 src/libcamera/pipeline/rpi/pisp/meson.build
 create mode 100644 src/libcamera/pipeline/rpi/pisp/pisp.cpp
 create mode 100644 subprojects/libpisp.wrap

Comments

Kieran Bingham Jan. 13, 2025, 12:12 p.m. UTC | #1
Hi Naush,

Quoting Naushir Patuck (2025-01-13 09:24:42)
> Hi,
> 
> A long time coming... this series add support for Raspberry Pi 5 (PiSP) to
> upstream libcamera. The IPA and pipeline handler code have been taken mostly
> unchanged from the Raspberry Pi downstream libcamera tree:
> https://github.com/raspberrypi/libcamera. Support for IMX500 and CNNs are not
> available in this series since we have yet to attempt to upstream the kernel
> changes.
> 
> IMPORTANT NOTE
> --------------
> The Pi 5 pipeline handler in this commit is NOT COMPATIBLE with the Raspberry Pi
> kernel drivers just yet! Instead, you must use the mainline kernel upstream
> drivers with this pipeline handler. When futher upstreaming development for
> embedded data is completed, RPi will backport the upstream kernel drives to our
> tree and this pipeline handler will then begin to work with both upstream and
> downstream kernel trees.

Thanks for posting this!

The first issue we face is the dependency in libpisp in the CI loops it
seems:

https://gitlab.freedesktop.org/camera/libcamera/-/pipelines/1344547

has many failed jobs, which I believe are all going to be more or less
instances of:

https://gitlab.freedesktop.org/camera/libcamera/-/jobs/69247972

 src/libcamera/pipeline/rpi/pisp/meson.build:8:14: ERROR: Dependency 'libpisp' is required but not found.

I think we disable subprojects in the CI build maybe ?

Any thoughts anyone?

Do we need to build in libpisp into the CI as a dependency directly? Do
we need to manage keeping libcamera in sync with specific versions/API
compatibility of libpisp ?

--
Kieran

> 
> Thanks,
> Naush
> 
> Naushir Patuck (4):
>   meson: Add libpisp.wrap
>   ipa: rpi: Add support for Raspberry Pi 5
>   pipeline: rpi: Add new stream flags for PiSP
>   pipeline: rpi: Add support for Raspberry Pi 5
> 
>  Documentation/guides/pipeline-handler.rst     |    2 +-
>  include/libcamera/ipa/meson.build             |    1 +
>  include/libcamera/meson.build                 |    1 +
>  meson.build                                   |    1 +
>  meson_options.txt                             |    4 +-
>  src/ipa/rpi/pisp/data/imx219.json             | 1187 +++++++++
>  src/ipa/rpi/pisp/data/imx219_noir.json        | 1112 ++++++++
>  src/ipa/rpi/pisp/data/imx290.json             |  341 +++
>  src/ipa/rpi/pisp/data/imx296.json             | 1194 +++++++++
>  src/ipa/rpi/pisp/data/imx296_16mm.json        | 1247 +++++++++
>  src/ipa/rpi/pisp/data/imx296_6mm.json         | 1247 +++++++++
>  src/ipa/rpi/pisp/data/imx296_mono.json        |  960 +++++++
>  src/ipa/rpi/pisp/data/imx378.json             |  634 +++++
>  src/ipa/rpi/pisp/data/imx415.json             | 1159 ++++++++
>  src/ipa/rpi/pisp/data/imx462.json             |  342 +++
>  src/ipa/rpi/pisp/data/imx477.json             | 1186 +++++++++
>  src/ipa/rpi/pisp/data/imx477_16mm.json        | 1240 +++++++++
>  src/ipa/rpi/pisp/data/imx477_6mm.json         | 1240 +++++++++
>  src/ipa/rpi/pisp/data/imx477_noir.json        | 1148 ++++++++
>  src/ipa/rpi/pisp/data/imx477_scientific.json  |  546 ++++
>  src/ipa/rpi/pisp/data/imx519.json             |  634 +++++
>  src/ipa/rpi/pisp/data/imx708.json             | 1270 +++++++++
>  src/ipa/rpi/pisp/data/imx708_noir.json        | 1233 +++++++++
>  src/ipa/rpi/pisp/data/imx708_wide.json        | 1293 +++++++++
>  src/ipa/rpi/pisp/data/imx708_wide_noir.json   | 1148 ++++++++
>  src/ipa/rpi/pisp/data/meson.build             |   29 +
>  src/ipa/rpi/pisp/data/ov5647.json             | 1186 +++++++++
>  src/ipa/rpi/pisp/data/ov5647_noir.json        | 1121 ++++++++
>  src/ipa/rpi/pisp/data/ov64a40.json            | 1133 ++++++++
>  src/ipa/rpi/pisp/data/ov9281_mono.json        |  215 ++
>  src/ipa/rpi/pisp/data/se327m12.json           |  639 +++++
>  src/ipa/rpi/pisp/data/uncalibrated.json       |  135 +
>  src/ipa/rpi/pisp/meson.build                  |   49 +
>  src/ipa/rpi/pisp/pisp.cpp                     | 1068 ++++++++
>  src/libcamera/control_ids_rpi.yaml            |   13 +
>  .../pipeline/rpi/common/rpi_stream.h          |   10 +
>  .../pipeline/rpi/pisp/data/example.yaml       |   45 +
>  .../pipeline/rpi/pisp/data/meson.build        |    8 +
>  src/libcamera/pipeline/rpi/pisp/meson.build   |   12 +
>  src/libcamera/pipeline/rpi/pisp/pisp.cpp      | 2372 +++++++++++++++++
>  subprojects/.gitignore                        |    1 +
>  subprojects/libpisp.wrap                      |    6 +
>  42 files changed, 28410 insertions(+), 2 deletions(-)
>  create mode 100644 src/ipa/rpi/pisp/data/imx219.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx219_noir.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx290.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx296.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx296_16mm.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx296_6mm.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx296_mono.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx378.json
>  create mode 100755 src/ipa/rpi/pisp/data/imx415.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx462.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx477.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx477_16mm.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx477_6mm.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx477_noir.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx477_scientific.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx519.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx708.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx708_noir.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx708_wide.json
>  create mode 100644 src/ipa/rpi/pisp/data/imx708_wide_noir.json
>  create mode 100644 src/ipa/rpi/pisp/data/meson.build
>  create mode 100644 src/ipa/rpi/pisp/data/ov5647.json
>  create mode 100644 src/ipa/rpi/pisp/data/ov5647_noir.json
>  create mode 100755 src/ipa/rpi/pisp/data/ov64a40.json
>  create mode 100644 src/ipa/rpi/pisp/data/ov9281_mono.json
>  create mode 100644 src/ipa/rpi/pisp/data/se327m12.json
>  create mode 100644 src/ipa/rpi/pisp/data/uncalibrated.json
>  create mode 100644 src/ipa/rpi/pisp/meson.build
>  create mode 100644 src/ipa/rpi/pisp/pisp.cpp
>  create mode 100644 src/libcamera/pipeline/rpi/pisp/data/example.yaml
>  create mode 100644 src/libcamera/pipeline/rpi/pisp/data/meson.build
>  create mode 100644 src/libcamera/pipeline/rpi/pisp/meson.build
>  create mode 100644 src/libcamera/pipeline/rpi/pisp/pisp.cpp
>  create mode 100644 subprojects/libpisp.wrap
> 
> -- 
> 2.43.0
>
Barnabás Pőcze Jan. 13, 2025, 12:29 p.m. UTC | #2
Hi


2025. január 13., hétfő 13:12 keltezéssel, Kieran Bingham <kieran.bingham@ideasonboard.com> írta:

> Hi Naush,
> 
> Quoting Naushir Patuck (2025-01-13 09:24:42)
> > Hi,
> >
> > A long time coming... this series add support for Raspberry Pi 5 (PiSP) to
> > upstream libcamera. The IPA and pipeline handler code have been taken mostly
> > unchanged from the Raspberry Pi downstream libcamera tree:
> > https://github.com/raspberrypi/libcamera. Support for IMX500 and CNNs are not
> > available in this series since we have yet to attempt to upstream the kernel
> > changes.
> >
> > IMPORTANT NOTE
> > --------------
> > The Pi 5 pipeline handler in this commit is NOT COMPATIBLE with the Raspberry Pi
> > kernel drivers just yet! Instead, you must use the mainline kernel upstream
> > drivers with this pipeline handler. When futher upstreaming development for
> > embedded data is completed, RPi will backport the upstream kernel drives to our
> > tree and this pipeline handler will then begin to work with both upstream and
> > downstream kernel trees.
> 
> Thanks for posting this!
> 
> The first issue we face is the dependency in libpisp in the CI loops it
> seems:
> 
> https://gitlab.freedesktop.org/camera/libcamera/-/pipelines/1344547
> 
> has many failed jobs, which I believe are all going to be more or less
> instances of:
> 
> https://gitlab.freedesktop.org/camera/libcamera/-/jobs/69247972
> 
>  src/libcamera/pipeline/rpi/pisp/meson.build:8:14: ERROR: Dependency 'libpisp' is required but not found.
> 
> I think we disable subprojects in the CI build maybe ?
> 
> Any thoughts anyone?

The `wrap_mode=nofallback` option causes the error. But `libpisp` should
also probably call

  meson.override_dependency('libpisp', libpisp_dep)

in its `src/meson.build`. And then there is no need for the explicit
`fallback: ['libpisp', 'libpisp_dep']` when calling `dependency()`.


Regards,
Barnabás Pőcze


> 
> Do we need to build in libpisp into the CI as a dependency directly? Do
> we need to manage keeping libcamera in sync with specific versions/API
> compatibility of libpisp ?
> 
> --
> Kieran
> 
> >
> > Thanks,
> > Naush
> >
> > Naushir Patuck (4):
> >   meson: Add libpisp.wrap
> >   ipa: rpi: Add support for Raspberry Pi 5
> >   pipeline: rpi: Add new stream flags for PiSP
> >   pipeline: rpi: Add support for Raspberry Pi 5
> >
> >  Documentation/guides/pipeline-handler.rst     |    2 +-
> >  include/libcamera/ipa/meson.build             |    1 +
> >  include/libcamera/meson.build                 |    1 +
> >  meson.build                                   |    1 +
> >  meson_options.txt                             |    4 +-
> >  src/ipa/rpi/pisp/data/imx219.json             | 1187 +++++++++
> >  src/ipa/rpi/pisp/data/imx219_noir.json        | 1112 ++++++++
> >  src/ipa/rpi/pisp/data/imx290.json             |  341 +++
> >  src/ipa/rpi/pisp/data/imx296.json             | 1194 +++++++++
> >  src/ipa/rpi/pisp/data/imx296_16mm.json        | 1247 +++++++++
> >  src/ipa/rpi/pisp/data/imx296_6mm.json         | 1247 +++++++++
> >  src/ipa/rpi/pisp/data/imx296_mono.json        |  960 +++++++
> >  src/ipa/rpi/pisp/data/imx378.json             |  634 +++++
> >  src/ipa/rpi/pisp/data/imx415.json             | 1159 ++++++++
> >  src/ipa/rpi/pisp/data/imx462.json             |  342 +++
> >  src/ipa/rpi/pisp/data/imx477.json             | 1186 +++++++++
> >  src/ipa/rpi/pisp/data/imx477_16mm.json        | 1240 +++++++++
> >  src/ipa/rpi/pisp/data/imx477_6mm.json         | 1240 +++++++++
> >  src/ipa/rpi/pisp/data/imx477_noir.json        | 1148 ++++++++
> >  src/ipa/rpi/pisp/data/imx477_scientific.json  |  546 ++++
> >  src/ipa/rpi/pisp/data/imx519.json             |  634 +++++
> >  src/ipa/rpi/pisp/data/imx708.json             | 1270 +++++++++
> >  src/ipa/rpi/pisp/data/imx708_noir.json        | 1233 +++++++++
> >  src/ipa/rpi/pisp/data/imx708_wide.json        | 1293 +++++++++
> >  src/ipa/rpi/pisp/data/imx708_wide_noir.json   | 1148 ++++++++
> >  src/ipa/rpi/pisp/data/meson.build             |   29 +
> >  src/ipa/rpi/pisp/data/ov5647.json             | 1186 +++++++++
> >  src/ipa/rpi/pisp/data/ov5647_noir.json        | 1121 ++++++++
> >  src/ipa/rpi/pisp/data/ov64a40.json            | 1133 ++++++++
> >  src/ipa/rpi/pisp/data/ov9281_mono.json        |  215 ++
> >  src/ipa/rpi/pisp/data/se327m12.json           |  639 +++++
> >  src/ipa/rpi/pisp/data/uncalibrated.json       |  135 +
> >  src/ipa/rpi/pisp/meson.build                  |   49 +
> >  src/ipa/rpi/pisp/pisp.cpp                     | 1068 ++++++++
> >  src/libcamera/control_ids_rpi.yaml            |   13 +
> >  .../pipeline/rpi/common/rpi_stream.h          |   10 +
> >  .../pipeline/rpi/pisp/data/example.yaml       |   45 +
> >  .../pipeline/rpi/pisp/data/meson.build        |    8 +
> >  src/libcamera/pipeline/rpi/pisp/meson.build   |   12 +
> >  src/libcamera/pipeline/rpi/pisp/pisp.cpp      | 2372 +++++++++++++++++
> >  subprojects/.gitignore                        |    1 +
> >  subprojects/libpisp.wrap                      |    6 +
> >  42 files changed, 28410 insertions(+), 2 deletions(-)
> >  create mode 100644 src/ipa/rpi/pisp/data/imx219.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx219_noir.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx290.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx296.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx296_16mm.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx296_6mm.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx296_mono.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx378.json
> >  create mode 100755 src/ipa/rpi/pisp/data/imx415.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx462.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx477.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx477_16mm.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx477_6mm.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx477_noir.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx477_scientific.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx519.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx708.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx708_noir.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx708_wide.json
> >  create mode 100644 src/ipa/rpi/pisp/data/imx708_wide_noir.json
> >  create mode 100644 src/ipa/rpi/pisp/data/meson.build
> >  create mode 100644 src/ipa/rpi/pisp/data/ov5647.json
> >  create mode 100644 src/ipa/rpi/pisp/data/ov5647_noir.json
> >  create mode 100755 src/ipa/rpi/pisp/data/ov64a40.json
> >  create mode 100644 src/ipa/rpi/pisp/data/ov9281_mono.json
> >  create mode 100644 src/ipa/rpi/pisp/data/se327m12.json
> >  create mode 100644 src/ipa/rpi/pisp/data/uncalibrated.json
> >  create mode 100644 src/ipa/rpi/pisp/meson.build
> >  create mode 100644 src/ipa/rpi/pisp/pisp.cpp
> >  create mode 100644 src/libcamera/pipeline/rpi/pisp/data/example.yaml
> >  create mode 100644 src/libcamera/pipeline/rpi/pisp/data/meson.build
> >  create mode 100644 src/libcamera/pipeline/rpi/pisp/meson.build
> >  create mode 100644 src/libcamera/pipeline/rpi/pisp/pisp.cpp
> >  create mode 100644 subprojects/libpisp.wrap
> >
> > --
> > 2.43.0
> >
>
Naushir Patuck Jan. 14, 2025, 9:54 a.m. UTC | #3
Hi,

On Mon, 13 Jan 2025 at 12:30, Barnabás Pőcze <pobrn@protonmail.com> wrote:
>
> Hi
>
>
> 2025. január 13., hétfő 13:12 keltezéssel, Kieran Bingham <kieran.bingham@ideasonboard.com> írta:
>
> > Hi Naush,
> >
> > Quoting Naushir Patuck (2025-01-13 09:24:42)
> > > Hi,
> > >
> > > A long time coming... this series add support for Raspberry Pi 5 (PiSP) to
> > > upstream libcamera. The IPA and pipeline handler code have been taken mostly
> > > unchanged from the Raspberry Pi downstream libcamera tree:
> > > https://github.com/raspberrypi/libcamera. Support for IMX500 and CNNs are not
> > > available in this series since we have yet to attempt to upstream the kernel
> > > changes.
> > >
> > > IMPORTANT NOTE
> > > --------------
> > > The Pi 5 pipeline handler in this commit is NOT COMPATIBLE with the Raspberry Pi
> > > kernel drivers just yet! Instead, you must use the mainline kernel upstream
> > > drivers with this pipeline handler. When futher upstreaming development for
> > > embedded data is completed, RPi will backport the upstream kernel drives to our
> > > tree and this pipeline handler will then begin to work with both upstream and
> > > downstream kernel trees.
> >
> > Thanks for posting this!
> >
> > The first issue we face is the dependency in libpisp in the CI loops it
> > seems:
> >
> > https://gitlab.freedesktop.org/camera/libcamera/-/pipelines/1344547
> >
> > has many failed jobs, which I believe are all going to be more or less
> > instances of:
> >
> > https://gitlab.freedesktop.org/camera/libcamera/-/jobs/69247972
> >
> >  src/libcamera/pipeline/rpi/pisp/meson.build:8:14: ERROR: Dependency 'libpisp' is required but not found.
> >
> > I think we disable subprojects in the CI build maybe ?
> >
> > Any thoughts anyone?
>
> The `wrap_mode=nofallback` option causes the error. But `libpisp` should
> also probably call
>
>   meson.override_dependency('libpisp', libpisp_dep)
>
> in its `src/meson.build`. And then there is no need for the explicit
> `fallback: ['libpisp', 'libpisp_dep']` when calling `dependency()`.

I presume this is just a syntactic change and will not fix the CI
issue?  I can remove the libpisp wrap file and have a hard dependency
on libpisp for the pipeline handler/ipa, but that will mean it won't
be tested under CI...

Naush

>
>
> Regards,
> Barnabás Pőcze
>
>
> >
> > Do we need to build in libpisp into the CI as a dependency directly? Do
> > we need to manage keeping libcamera in sync with specific versions/API
> > compatibility of libpisp ?
> >
> > --
> > Kieran
> >
> > >
> > > Thanks,
> > > Naush
> > >
> > > Naushir Patuck (4):
> > >   meson: Add libpisp.wrap
> > >   ipa: rpi: Add support for Raspberry Pi 5
> > >   pipeline: rpi: Add new stream flags for PiSP
> > >   pipeline: rpi: Add support for Raspberry Pi 5
> > >
> > >  Documentation/guides/pipeline-handler.rst     |    2 +-
> > >  include/libcamera/ipa/meson.build             |    1 +
> > >  include/libcamera/meson.build                 |    1 +
> > >  meson.build                                   |    1 +
> > >  meson_options.txt                             |    4 +-
> > >  src/ipa/rpi/pisp/data/imx219.json             | 1187 +++++++++
> > >  src/ipa/rpi/pisp/data/imx219_noir.json        | 1112 ++++++++
> > >  src/ipa/rpi/pisp/data/imx290.json             |  341 +++
> > >  src/ipa/rpi/pisp/data/imx296.json             | 1194 +++++++++
> > >  src/ipa/rpi/pisp/data/imx296_16mm.json        | 1247 +++++++++
> > >  src/ipa/rpi/pisp/data/imx296_6mm.json         | 1247 +++++++++
> > >  src/ipa/rpi/pisp/data/imx296_mono.json        |  960 +++++++
> > >  src/ipa/rpi/pisp/data/imx378.json             |  634 +++++
> > >  src/ipa/rpi/pisp/data/imx415.json             | 1159 ++++++++
> > >  src/ipa/rpi/pisp/data/imx462.json             |  342 +++
> > >  src/ipa/rpi/pisp/data/imx477.json             | 1186 +++++++++
> > >  src/ipa/rpi/pisp/data/imx477_16mm.json        | 1240 +++++++++
> > >  src/ipa/rpi/pisp/data/imx477_6mm.json         | 1240 +++++++++
> > >  src/ipa/rpi/pisp/data/imx477_noir.json        | 1148 ++++++++
> > >  src/ipa/rpi/pisp/data/imx477_scientific.json  |  546 ++++
> > >  src/ipa/rpi/pisp/data/imx519.json             |  634 +++++
> > >  src/ipa/rpi/pisp/data/imx708.json             | 1270 +++++++++
> > >  src/ipa/rpi/pisp/data/imx708_noir.json        | 1233 +++++++++
> > >  src/ipa/rpi/pisp/data/imx708_wide.json        | 1293 +++++++++
> > >  src/ipa/rpi/pisp/data/imx708_wide_noir.json   | 1148 ++++++++
> > >  src/ipa/rpi/pisp/data/meson.build             |   29 +
> > >  src/ipa/rpi/pisp/data/ov5647.json             | 1186 +++++++++
> > >  src/ipa/rpi/pisp/data/ov5647_noir.json        | 1121 ++++++++
> > >  src/ipa/rpi/pisp/data/ov64a40.json            | 1133 ++++++++
> > >  src/ipa/rpi/pisp/data/ov9281_mono.json        |  215 ++
> > >  src/ipa/rpi/pisp/data/se327m12.json           |  639 +++++
> > >  src/ipa/rpi/pisp/data/uncalibrated.json       |  135 +
> > >  src/ipa/rpi/pisp/meson.build                  |   49 +
> > >  src/ipa/rpi/pisp/pisp.cpp                     | 1068 ++++++++
> > >  src/libcamera/control_ids_rpi.yaml            |   13 +
> > >  .../pipeline/rpi/common/rpi_stream.h          |   10 +
> > >  .../pipeline/rpi/pisp/data/example.yaml       |   45 +
> > >  .../pipeline/rpi/pisp/data/meson.build        |    8 +
> > >  src/libcamera/pipeline/rpi/pisp/meson.build   |   12 +
> > >  src/libcamera/pipeline/rpi/pisp/pisp.cpp      | 2372 +++++++++++++++++
> > >  subprojects/.gitignore                        |    1 +
> > >  subprojects/libpisp.wrap                      |    6 +
> > >  42 files changed, 28410 insertions(+), 2 deletions(-)
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx219.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx219_noir.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx290.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx296.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx296_16mm.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx296_6mm.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx296_mono.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx378.json
> > >  create mode 100755 src/ipa/rpi/pisp/data/imx415.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx462.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx477.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_16mm.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_6mm.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_noir.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_scientific.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx519.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx708.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx708_noir.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx708_wide.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/imx708_wide_noir.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/meson.build
> > >  create mode 100644 src/ipa/rpi/pisp/data/ov5647.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/ov5647_noir.json
> > >  create mode 100755 src/ipa/rpi/pisp/data/ov64a40.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/ov9281_mono.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/se327m12.json
> > >  create mode 100644 src/ipa/rpi/pisp/data/uncalibrated.json
> > >  create mode 100644 src/ipa/rpi/pisp/meson.build
> > >  create mode 100644 src/ipa/rpi/pisp/pisp.cpp
> > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/data/example.yaml
> > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/data/meson.build
> > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/meson.build
> > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/pisp.cpp
> > >  create mode 100644 subprojects/libpisp.wrap
> > >
> > > --
> > > 2.43.0
> > >
> >
Barnabás Pőcze Jan. 14, 2025, 4:29 p.m. UTC | #4
2025. január 14., kedd 10:54 keltezéssel, Naushir Patuck <naush@raspberrypi.com> írta:

> Hi,
> 
> On Mon, 13 Jan 2025 at 12:30, Barnabás Pőcze <pobrn@protonmail.com> wrote:
> >
> > Hi
> >
> >
> > 2025. január 13., hétfő 13:12 keltezéssel, Kieran Bingham <kieran.bingham@ideasonboard.com> írta:
> >
> > > Hi Naush,
> > >
> > > Quoting Naushir Patuck (2025-01-13 09:24:42)
> > > > Hi,
> > > >
> > > > A long time coming... this series add support for Raspberry Pi 5 (PiSP) to
> > > > upstream libcamera. The IPA and pipeline handler code have been taken mostly
> > > > unchanged from the Raspberry Pi downstream libcamera tree:
> > > > https://github.com/raspberrypi/libcamera. Support for IMX500 and CNNs are not
> > > > available in this series since we have yet to attempt to upstream the kernel
> > > > changes.
> > > >
> > > > IMPORTANT NOTE
> > > > --------------
> > > > The Pi 5 pipeline handler in this commit is NOT COMPATIBLE with the Raspberry Pi
> > > > kernel drivers just yet! Instead, you must use the mainline kernel upstream
> > > > drivers with this pipeline handler. When futher upstreaming development for
> > > > embedded data is completed, RPi will backport the upstream kernel drives to our
> > > > tree and this pipeline handler will then begin to work with both upstream and
> > > > downstream kernel trees.
> > >
> > > Thanks for posting this!
> > >
> > > The first issue we face is the dependency in libpisp in the CI loops it
> > > seems:
> > >
> > > https://gitlab.freedesktop.org/camera/libcamera/-/pipelines/1344547
> > >
> > > has many failed jobs, which I believe are all going to be more or less
> > > instances of:
> > >
> > > https://gitlab.freedesktop.org/camera/libcamera/-/jobs/69247972
> > >
> > >  src/libcamera/pipeline/rpi/pisp/meson.build:8:14: ERROR: Dependency 'libpisp' is required but not found.
> > >
> > > I think we disable subprojects in the CI build maybe ?
> > >
> > > Any thoughts anyone?
> >
> > The `wrap_mode=nofallback` option causes the error. But `libpisp` should
> > also probably call
> >
> >   meson.override_dependency('libpisp', libpisp_dep)
> >
> > in its `src/meson.build`. And then there is no need for the explicit
> > `fallback: ['libpisp', 'libpisp_dep']` when calling `dependency()`.
> 
> I presume this is just a syntactic change and will not fix the CI
> issue?  I can remove the libpisp wrap file and have a hard dependency
> on libpisp for the pipeline handler/ipa, but that will mean it won't
> be tested under CI...

Yes, this will not solve the issue, but useful nonetheless. It would appear that
`-D force_fallback_for=libpisp` is enough to make it work, but there are other
jobs that want to use that option, and multiple occurrences overwrite each other.
I am not sure what the best approach is. `--wrap-mode=nofallback` could be removed
altogether, or replaced with `--wrap-mode=nodownload` + some magic to bring in the
necessary dependencies, or something else.


Regards,
Barnabás Pőcze


> 
> Naush
> 
> >
> >
> > Regards,
> > Barnabás Pőcze
> >
> >
> > >
> > > Do we need to build in libpisp into the CI as a dependency directly? Do
> > > we need to manage keeping libcamera in sync with specific versions/API
> > > compatibility of libpisp ?
> > >
> > > --
> > > Kieran
> > >
> > > >
> > > > Thanks,
> > > > Naush
> > > >
> > > > Naushir Patuck (4):
> > > >   meson: Add libpisp.wrap
> > > >   ipa: rpi: Add support for Raspberry Pi 5
> > > >   pipeline: rpi: Add new stream flags for PiSP
> > > >   pipeline: rpi: Add support for Raspberry Pi 5
> > > >
> > > >  Documentation/guides/pipeline-handler.rst     |    2 +-
> > > >  include/libcamera/ipa/meson.build             |    1 +
> > > >  include/libcamera/meson.build                 |    1 +
> > > >  meson.build                                   |    1 +
> > > >  meson_options.txt                             |    4 +-
> > > >  src/ipa/rpi/pisp/data/imx219.json             | 1187 +++++++++
> > > >  src/ipa/rpi/pisp/data/imx219_noir.json        | 1112 ++++++++
> > > >  src/ipa/rpi/pisp/data/imx290.json             |  341 +++
> > > >  src/ipa/rpi/pisp/data/imx296.json             | 1194 +++++++++
> > > >  src/ipa/rpi/pisp/data/imx296_16mm.json        | 1247 +++++++++
> > > >  src/ipa/rpi/pisp/data/imx296_6mm.json         | 1247 +++++++++
> > > >  src/ipa/rpi/pisp/data/imx296_mono.json        |  960 +++++++
> > > >  src/ipa/rpi/pisp/data/imx378.json             |  634 +++++
> > > >  src/ipa/rpi/pisp/data/imx415.json             | 1159 ++++++++
> > > >  src/ipa/rpi/pisp/data/imx462.json             |  342 +++
> > > >  src/ipa/rpi/pisp/data/imx477.json             | 1186 +++++++++
> > > >  src/ipa/rpi/pisp/data/imx477_16mm.json        | 1240 +++++++++
> > > >  src/ipa/rpi/pisp/data/imx477_6mm.json         | 1240 +++++++++
> > > >  src/ipa/rpi/pisp/data/imx477_noir.json        | 1148 ++++++++
> > > >  src/ipa/rpi/pisp/data/imx477_scientific.json  |  546 ++++
> > > >  src/ipa/rpi/pisp/data/imx519.json             |  634 +++++
> > > >  src/ipa/rpi/pisp/data/imx708.json             | 1270 +++++++++
> > > >  src/ipa/rpi/pisp/data/imx708_noir.json        | 1233 +++++++++
> > > >  src/ipa/rpi/pisp/data/imx708_wide.json        | 1293 +++++++++
> > > >  src/ipa/rpi/pisp/data/imx708_wide_noir.json   | 1148 ++++++++
> > > >  src/ipa/rpi/pisp/data/meson.build             |   29 +
> > > >  src/ipa/rpi/pisp/data/ov5647.json             | 1186 +++++++++
> > > >  src/ipa/rpi/pisp/data/ov5647_noir.json        | 1121 ++++++++
> > > >  src/ipa/rpi/pisp/data/ov64a40.json            | 1133 ++++++++
> > > >  src/ipa/rpi/pisp/data/ov9281_mono.json        |  215 ++
> > > >  src/ipa/rpi/pisp/data/se327m12.json           |  639 +++++
> > > >  src/ipa/rpi/pisp/data/uncalibrated.json       |  135 +
> > > >  src/ipa/rpi/pisp/meson.build                  |   49 +
> > > >  src/ipa/rpi/pisp/pisp.cpp                     | 1068 ++++++++
> > > >  src/libcamera/control_ids_rpi.yaml            |   13 +
> > > >  .../pipeline/rpi/common/rpi_stream.h          |   10 +
> > > >  .../pipeline/rpi/pisp/data/example.yaml       |   45 +
> > > >  .../pipeline/rpi/pisp/data/meson.build        |    8 +
> > > >  src/libcamera/pipeline/rpi/pisp/meson.build   |   12 +
> > > >  src/libcamera/pipeline/rpi/pisp/pisp.cpp      | 2372 +++++++++++++++++
> > > >  subprojects/.gitignore                        |    1 +
> > > >  subprojects/libpisp.wrap                      |    6 +
> > > >  42 files changed, 28410 insertions(+), 2 deletions(-)
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx219.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx219_noir.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx290.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx296.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx296_16mm.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx296_6mm.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx296_mono.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx378.json
> > > >  create mode 100755 src/ipa/rpi/pisp/data/imx415.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx462.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_16mm.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_6mm.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_noir.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_scientific.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx519.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx708.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx708_noir.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx708_wide.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/imx708_wide_noir.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/meson.build
> > > >  create mode 100644 src/ipa/rpi/pisp/data/ov5647.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/ov5647_noir.json
> > > >  create mode 100755 src/ipa/rpi/pisp/data/ov64a40.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/ov9281_mono.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/se327m12.json
> > > >  create mode 100644 src/ipa/rpi/pisp/data/uncalibrated.json
> > > >  create mode 100644 src/ipa/rpi/pisp/meson.build
> > > >  create mode 100644 src/ipa/rpi/pisp/pisp.cpp
> > > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/data/example.yaml
> > > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/data/meson.build
> > > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/meson.build
> > > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/pisp.cpp
> > > >  create mode 100644 subprojects/libpisp.wrap
> > > >
> > > > --
> > > > 2.43.0
> > > >
> > >
>
Laurent Pinchart Jan. 14, 2025, 8:46 p.m. UTC | #5
On Tue, Jan 14, 2025 at 04:29:14PM +0000, Barnabás Pőcze wrote:
> 2025. január 14., kedd 10:54 keltezéssel, Naushir Patuck írta:
> > On Mon, 13 Jan 2025 at 12:30, Barnabás Pőcze wrote:
> > > 2025. január 13., hétfő 13:12 keltezéssel, Kieran Bingham írta:
> > > > Quoting Naushir Patuck (2025-01-13 09:24:42)
> > > > > Hi,
> > > > >
> > > > > A long time coming... this series add support for Raspberry Pi 5 (PiSP) to
> > > > > upstream libcamera. The IPA and pipeline handler code have been taken mostly
> > > > > unchanged from the Raspberry Pi downstream libcamera tree:
> > > > > https://github.com/raspberrypi/libcamera. Support for IMX500 and CNNs are not
> > > > > available in this series since we have yet to attempt to upstream the kernel
> > > > > changes.
> > > > >
> > > > > IMPORTANT NOTE
> > > > > --------------
> > > > > The Pi 5 pipeline handler in this commit is NOT COMPATIBLE with the Raspberry Pi
> > > > > kernel drivers just yet! Instead, you must use the mainline kernel upstream
> > > > > drivers with this pipeline handler. When futher upstreaming development for
> > > > > embedded data is completed, RPi will backport the upstream kernel drives to our
> > > > > tree and this pipeline handler will then begin to work with both upstream and
> > > > > downstream kernel trees.
> > > >
> > > > Thanks for posting this!
> > > >
> > > > The first issue we face is the dependency in libpisp in the CI loops it
> > > > seems:
> > > >
> > > > https://gitlab.freedesktop.org/camera/libcamera/-/pipelines/1344547
> > > >
> > > > has many failed jobs, which I believe are all going to be more or less
> > > > instances of:
> > > >
> > > > https://gitlab.freedesktop.org/camera/libcamera/-/jobs/69247972
> > > >
> > > >  src/libcamera/pipeline/rpi/pisp/meson.build:8:14: ERROR: Dependency 'libpisp' is required but not found.
> > > >
> > > > I think we disable subprojects in the CI build maybe ?
> > > >
> > > > Any thoughts anyone?
> > >
> > > The `wrap_mode=nofallback` option causes the error. But `libpisp` should
> > > also probably call
> > >
> > >   meson.override_dependency('libpisp', libpisp_dep)
> > >
> > > in its `src/meson.build`. And then there is no need for the explicit
> > > `fallback: ['libpisp', 'libpisp_dep']` when calling `dependency()`.
> > 
> > I presume this is just a syntactic change and will not fix the CI
> > issue?  I can remove the libpisp wrap file and have a hard dependency
> > on libpisp for the pipeline handler/ipa, but that will mean it won't
> > be tested under CI...
> 
> Yes, this will not solve the issue, but useful nonetheless. It would appear that
> `-D force_fallback_for=libpisp` is enough to make it work, but there are other
> jobs that want to use that option, and multiple occurrences overwrite each other.
> I am not sure what the best approach is. `--wrap-mode=nofallback` could be removed
> altogether, or replaced with `--wrap-mode=nodownload` + some magic to bring in the
> necessary dependencies, or something else.

If we have to compile the dependencies from source, I would rather do
this at container build time to avoid CI failures unrelated to libcamera
itself.

> > > > Do we need to build in libpisp into the CI as a dependency directly? Do
> > > > we need to manage keeping libcamera in sync with specific versions/API
> > > > compatibility of libpisp ?
> > > >
> > > > > Naushir Patuck (4):
> > > > >   meson: Add libpisp.wrap
> > > > >   ipa: rpi: Add support for Raspberry Pi 5
> > > > >   pipeline: rpi: Add new stream flags for PiSP
> > > > >   pipeline: rpi: Add support for Raspberry Pi 5
> > > > >
> > > > >  Documentation/guides/pipeline-handler.rst     |    2 +-
> > > > >  include/libcamera/ipa/meson.build             |    1 +
> > > > >  include/libcamera/meson.build                 |    1 +
> > > > >  meson.build                                   |    1 +
> > > > >  meson_options.txt                             |    4 +-
> > > > >  src/ipa/rpi/pisp/data/imx219.json             | 1187 +++++++++
> > > > >  src/ipa/rpi/pisp/data/imx219_noir.json        | 1112 ++++++++
> > > > >  src/ipa/rpi/pisp/data/imx290.json             |  341 +++
> > > > >  src/ipa/rpi/pisp/data/imx296.json             | 1194 +++++++++
> > > > >  src/ipa/rpi/pisp/data/imx296_16mm.json        | 1247 +++++++++
> > > > >  src/ipa/rpi/pisp/data/imx296_6mm.json         | 1247 +++++++++
> > > > >  src/ipa/rpi/pisp/data/imx296_mono.json        |  960 +++++++
> > > > >  src/ipa/rpi/pisp/data/imx378.json             |  634 +++++
> > > > >  src/ipa/rpi/pisp/data/imx415.json             | 1159 ++++++++
> > > > >  src/ipa/rpi/pisp/data/imx462.json             |  342 +++
> > > > >  src/ipa/rpi/pisp/data/imx477.json             | 1186 +++++++++
> > > > >  src/ipa/rpi/pisp/data/imx477_16mm.json        | 1240 +++++++++
> > > > >  src/ipa/rpi/pisp/data/imx477_6mm.json         | 1240 +++++++++
> > > > >  src/ipa/rpi/pisp/data/imx477_noir.json        | 1148 ++++++++
> > > > >  src/ipa/rpi/pisp/data/imx477_scientific.json  |  546 ++++
> > > > >  src/ipa/rpi/pisp/data/imx519.json             |  634 +++++
> > > > >  src/ipa/rpi/pisp/data/imx708.json             | 1270 +++++++++
> > > > >  src/ipa/rpi/pisp/data/imx708_noir.json        | 1233 +++++++++
> > > > >  src/ipa/rpi/pisp/data/imx708_wide.json        | 1293 +++++++++
> > > > >  src/ipa/rpi/pisp/data/imx708_wide_noir.json   | 1148 ++++++++
> > > > >  src/ipa/rpi/pisp/data/meson.build             |   29 +
> > > > >  src/ipa/rpi/pisp/data/ov5647.json             | 1186 +++++++++
> > > > >  src/ipa/rpi/pisp/data/ov5647_noir.json        | 1121 ++++++++
> > > > >  src/ipa/rpi/pisp/data/ov64a40.json            | 1133 ++++++++
> > > > >  src/ipa/rpi/pisp/data/ov9281_mono.json        |  215 ++
> > > > >  src/ipa/rpi/pisp/data/se327m12.json           |  639 +++++
> > > > >  src/ipa/rpi/pisp/data/uncalibrated.json       |  135 +
> > > > >  src/ipa/rpi/pisp/meson.build                  |   49 +
> > > > >  src/ipa/rpi/pisp/pisp.cpp                     | 1068 ++++++++
> > > > >  src/libcamera/control_ids_rpi.yaml            |   13 +
> > > > >  .../pipeline/rpi/common/rpi_stream.h          |   10 +
> > > > >  .../pipeline/rpi/pisp/data/example.yaml       |   45 +
> > > > >  .../pipeline/rpi/pisp/data/meson.build        |    8 +
> > > > >  src/libcamera/pipeline/rpi/pisp/meson.build   |   12 +
> > > > >  src/libcamera/pipeline/rpi/pisp/pisp.cpp      | 2372 +++++++++++++++++
> > > > >  subprojects/.gitignore                        |    1 +
> > > > >  subprojects/libpisp.wrap                      |    6 +
> > > > >  42 files changed, 28410 insertions(+), 2 deletions(-)
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx219.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx219_noir.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx290.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx296.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx296_16mm.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx296_6mm.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx296_mono.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx378.json
> > > > >  create mode 100755 src/ipa/rpi/pisp/data/imx415.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx462.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_16mm.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_6mm.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_noir.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_scientific.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx519.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx708.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx708_noir.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx708_wide.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx708_wide_noir.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/meson.build
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/ov5647.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/ov5647_noir.json
> > > > >  create mode 100755 src/ipa/rpi/pisp/data/ov64a40.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/ov9281_mono.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/se327m12.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/data/uncalibrated.json
> > > > >  create mode 100644 src/ipa/rpi/pisp/meson.build
> > > > >  create mode 100644 src/ipa/rpi/pisp/pisp.cpp
> > > > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/data/example.yaml
> > > > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/data/meson.build
> > > > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/meson.build
> > > > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/pisp.cpp
> > > > >  create mode 100644 subprojects/libpisp.wrap
Laurent Pinchart Jan. 14, 2025, 8:51 p.m. UTC | #6
On Tue, Jan 14, 2025 at 10:46:18PM +0200, Laurent Pinchart wrote:
> On Tue, Jan 14, 2025 at 04:29:14PM +0000, Barnabás Pőcze wrote:
> > 2025. január 14., kedd 10:54 keltezéssel, Naushir Patuck írta:
> > > On Mon, 13 Jan 2025 at 12:30, Barnabás Pőcze wrote:
> > > > 2025. január 13., hétfő 13:12 keltezéssel, Kieran Bingham írta:
> > > > > Quoting Naushir Patuck (2025-01-13 09:24:42)
> > > > > > Hi,
> > > > > >
> > > > > > A long time coming... this series add support for Raspberry Pi 5 (PiSP) to
> > > > > > upstream libcamera. The IPA and pipeline handler code have been taken mostly
> > > > > > unchanged from the Raspberry Pi downstream libcamera tree:
> > > > > > https://github.com/raspberrypi/libcamera. Support for IMX500 and CNNs are not
> > > > > > available in this series since we have yet to attempt to upstream the kernel
> > > > > > changes.
> > > > > >
> > > > > > IMPORTANT NOTE
> > > > > > --------------
> > > > > > The Pi 5 pipeline handler in this commit is NOT COMPATIBLE with the Raspberry Pi
> > > > > > kernel drivers just yet! Instead, you must use the mainline kernel upstream
> > > > > > drivers with this pipeline handler. When futher upstreaming development for
> > > > > > embedded data is completed, RPi will backport the upstream kernel drives to our
> > > > > > tree and this pipeline handler will then begin to work with both upstream and
> > > > > > downstream kernel trees.
> > > > >
> > > > > Thanks for posting this!
> > > > >
> > > > > The first issue we face is the dependency in libpisp in the CI loops it
> > > > > seems:
> > > > >
> > > > > https://gitlab.freedesktop.org/camera/libcamera/-/pipelines/1344547
> > > > >
> > > > > has many failed jobs, which I believe are all going to be more or less
> > > > > instances of:
> > > > >
> > > > > https://gitlab.freedesktop.org/camera/libcamera/-/jobs/69247972
> > > > >
> > > > >  src/libcamera/pipeline/rpi/pisp/meson.build:8:14: ERROR: Dependency 'libpisp' is required but not found.
> > > > >
> > > > > I think we disable subprojects in the CI build maybe ?
> > > > >
> > > > > Any thoughts anyone?
> > > >
> > > > The `wrap_mode=nofallback` option causes the error. But `libpisp` should
> > > > also probably call
> > > >
> > > >   meson.override_dependency('libpisp', libpisp_dep)
> > > >
> > > > in its `src/meson.build`. And then there is no need for the explicit
> > > > `fallback: ['libpisp', 'libpisp_dep']` when calling `dependency()`.
> > > 
> > > I presume this is just a syntactic change and will not fix the CI
> > > issue?  I can remove the libpisp wrap file and have a hard dependency
> > > on libpisp for the pipeline handler/ipa, but that will mean it won't
> > > be tested under CI...
> > 
> > Yes, this will not solve the issue, but useful nonetheless. It would appear that
> > `-D force_fallback_for=libpisp` is enough to make it work, but there are other
> > jobs that want to use that option, and multiple occurrences overwrite each other.
> > I am not sure what the best approach is. `--wrap-mode=nofallback` could be removed
> > altogether, or replaced with `--wrap-mode=nodownload` + some magic to bring in the
> > necessary dependencies, or something else.
> 
> If we have to compile the dependencies from source, I would rather do
> this at container build time to avoid CI failures unrelated to libcamera
> itself.

Also, when compiling libcamera today with a gcc 13.3.0 cross-compiler
from buildroot 2024.11.1, I got the following error:

../../src/libcamera/pipeline/rpi/pisp/pisp.cpp: In member function ‘void libcamera::PiSPCameraData::cfeBufferDequeue(libcamera::FrameBuffer*)’:
../../src/libcamera/pipeline/rpi/pisp/pisp.cpp:1680:28: error: ‘index’ may be used uninitialized [-Werror=maybe-uninitialized]
 1680 |                         << ", timestamp: " << buffer->metadata().timestamp;
      |                            ^~~~~~~~~~~~~~~
../../src/libcamera/pipeline/rpi/pisp/pisp.cpp:1656:13: note: ‘index’ was declared here
 1656 |         int index;
      |             ^~~~~

I haven't tested with other compiler versions yet, CI will give us more
information once we handle the libpisp dependency.

> > > > > Do we need to build in libpisp into the CI as a dependency directly? Do
> > > > > we need to manage keeping libcamera in sync with specific versions/API
> > > > > compatibility of libpisp ?
> > > > >
> > > > > > Naushir Patuck (4):
> > > > > >   meson: Add libpisp.wrap
> > > > > >   ipa: rpi: Add support for Raspberry Pi 5
> > > > > >   pipeline: rpi: Add new stream flags for PiSP
> > > > > >   pipeline: rpi: Add support for Raspberry Pi 5
> > > > > >
> > > > > >  Documentation/guides/pipeline-handler.rst     |    2 +-
> > > > > >  include/libcamera/ipa/meson.build             |    1 +
> > > > > >  include/libcamera/meson.build                 |    1 +
> > > > > >  meson.build                                   |    1 +
> > > > > >  meson_options.txt                             |    4 +-
> > > > > >  src/ipa/rpi/pisp/data/imx219.json             | 1187 +++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx219_noir.json        | 1112 ++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx290.json             |  341 +++
> > > > > >  src/ipa/rpi/pisp/data/imx296.json             | 1194 +++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx296_16mm.json        | 1247 +++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx296_6mm.json         | 1247 +++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx296_mono.json        |  960 +++++++
> > > > > >  src/ipa/rpi/pisp/data/imx378.json             |  634 +++++
> > > > > >  src/ipa/rpi/pisp/data/imx415.json             | 1159 ++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx462.json             |  342 +++
> > > > > >  src/ipa/rpi/pisp/data/imx477.json             | 1186 +++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx477_16mm.json        | 1240 +++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx477_6mm.json         | 1240 +++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx477_noir.json        | 1148 ++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx477_scientific.json  |  546 ++++
> > > > > >  src/ipa/rpi/pisp/data/imx519.json             |  634 +++++
> > > > > >  src/ipa/rpi/pisp/data/imx708.json             | 1270 +++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx708_noir.json        | 1233 +++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx708_wide.json        | 1293 +++++++++
> > > > > >  src/ipa/rpi/pisp/data/imx708_wide_noir.json   | 1148 ++++++++
> > > > > >  src/ipa/rpi/pisp/data/meson.build             |   29 +
> > > > > >  src/ipa/rpi/pisp/data/ov5647.json             | 1186 +++++++++
> > > > > >  src/ipa/rpi/pisp/data/ov5647_noir.json        | 1121 ++++++++
> > > > > >  src/ipa/rpi/pisp/data/ov64a40.json            | 1133 ++++++++
> > > > > >  src/ipa/rpi/pisp/data/ov9281_mono.json        |  215 ++
> > > > > >  src/ipa/rpi/pisp/data/se327m12.json           |  639 +++++
> > > > > >  src/ipa/rpi/pisp/data/uncalibrated.json       |  135 +
> > > > > >  src/ipa/rpi/pisp/meson.build                  |   49 +
> > > > > >  src/ipa/rpi/pisp/pisp.cpp                     | 1068 ++++++++
> > > > > >  src/libcamera/control_ids_rpi.yaml            |   13 +
> > > > > >  .../pipeline/rpi/common/rpi_stream.h          |   10 +
> > > > > >  .../pipeline/rpi/pisp/data/example.yaml       |   45 +
> > > > > >  .../pipeline/rpi/pisp/data/meson.build        |    8 +
> > > > > >  src/libcamera/pipeline/rpi/pisp/meson.build   |   12 +
> > > > > >  src/libcamera/pipeline/rpi/pisp/pisp.cpp      | 2372 +++++++++++++++++
> > > > > >  subprojects/.gitignore                        |    1 +
> > > > > >  subprojects/libpisp.wrap                      |    6 +
> > > > > >  42 files changed, 28410 insertions(+), 2 deletions(-)
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx219.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx219_noir.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx290.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx296.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx296_16mm.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx296_6mm.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx296_mono.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx378.json
> > > > > >  create mode 100755 src/ipa/rpi/pisp/data/imx415.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx462.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_16mm.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_6mm.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_noir.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx477_scientific.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx519.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx708.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx708_noir.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx708_wide.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/imx708_wide_noir.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/meson.build
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/ov5647.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/ov5647_noir.json
> > > > > >  create mode 100755 src/ipa/rpi/pisp/data/ov64a40.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/ov9281_mono.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/se327m12.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/data/uncalibrated.json
> > > > > >  create mode 100644 src/ipa/rpi/pisp/meson.build
> > > > > >  create mode 100644 src/ipa/rpi/pisp/pisp.cpp
> > > > > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/data/example.yaml
> > > > > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/data/meson.build
> > > > > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/meson.build
> > > > > >  create mode 100644 src/libcamera/pipeline/rpi/pisp/pisp.cpp
> > > > > >  create mode 100644 subprojects/libpisp.wrap