Using the standard libcamera-apps with Arducam cameras

  1. Where did you get the camera module(s)?
    PI Hut

  2. Model number of the product(s)?
    IMX462 , IMX519 & 64MP

  3. What hardware/platform were you working on?
    Pi 4 B. Latest build of Bullseye OS

  4. Instructions you have followed. (link/manual/etc.)

  5. Problems you were having?

  6. The dmesg log from your hardware?

  7. Troubleshooting attempts you’ve made?

  8. What help do you need?

I have a heavly modified verion of libcamera-vid based using the standard release. Not your version.

I would like to use this software against all three cameras listed above. All the camera work using the standard instructions but when I miss out the libcamer-dev and libcamer-app steps it seems the 64MP and IMX462 fail to work. IMX519 however seems to work fine with just the driver installed. I don’t need the autofocusing on any of them (IMX462 doesn;t have it anytway). The python code to focus the cameras is fine for my application.

So could you tell me if this is possible and explain how this can be done.

There is a thread I think were someone has done this for the IMX462 (See Libcamera error with pivariety camera IMX462 .
I’ve tried this but it failed.

The IMX462 is pivariety version camera, you should use specific libcmaera-dev and libcamera-apps arducam released. About the link you mentioned, it exist a lot of topic,
I am not sure which one is your said, Please tell me more detail.

Agreed the IMX462 is a pivariety camera. What are the 64MP and IMX519 cameras then?

The problem is I need to access the libcamera-apps source code so I can change it.

So I assume I need to follow:

  1. libcamera-dev and libcamera-apps Installation
    1.2 Build from the source code

The problem is I’ve tried this a number of times and its not working for me.
Do I simply do:

  1. Install driver
  2. Then follow 1.2.1 , 1.2.2 , 1.2.3 (??) , 1.2.4, 1.2.5 (??)

If I install the binaries (i.e. 1.1) the camera IMX462 works but if I follow 1.2 steps it doesn’t. Do I have to install the binaries first before I follow 1.2 (i.e. do 1.1 first?). I’ve tried both but neither work.

My Pi is a Model 3B+ V1.3 with the latest fresh build of bullseye

Currenly I get compile errors when compiling libcamera-apps

/home/pi/libcamera-apps/image/jpeg.cpp:477:32: error: invalid type argument of unary ‘*’ (have ‘int’)
477 | LOG(2, "Exposure time: " << *exposure_time);
| ^~~~~~~~~~~~~~
/home/pi/libcamera-apps/core/logging.hpp:7:17: note: in definition of macro ‘LOG’

Also there are other pre-requisits when using the OS lite not listed

sudo apt install git
sudo apt install python3-pip
sudo pip3 install jinja2

Is the libcamera versiion used by you the latest version. I’m sure when I tried your version from source code on my 4B with the 64MP a number of libcamera options were missing? Need to do it again to confirm which ones but my 4B model is now being used.

Hi bmike,

Sorry for my late reply. Let’s sort out some details.
Yes, you are right.

  1. About the imx462, which is a pivariety camera, and we should install pivariety driver and specific libcamera-apps and libcamera-dev. Sorry to tell you that, Due to we have done some private work and this part is closed source.
  2. About imx516, we have released our driver source code to rpi source kernel driver. You can get it here
    https://github.com/raspberrypi/linux/blob/aeaa2460db088fb2c97ae56dec6d7d0058c68294/drivers/media/i2c/imx519.c
    For the libcamera-apps and libcamera-dev source code, just git pull the offical rpi source code.
  3. About 64mp, we have released the driver here:
    https://github.com/raspberrypi/linux/blob/fce55817b72ca1debff26f1405e97be6cad3388e/drivers/media/i2c/arducam_64mp.c
    But such as the pivariety, you should install arducam specfic libcamera-apps and libcamera-dev package, due to the rpi has not accept our tuning json file.

Feel free to let me know if you need more help.

Ok, thanks for the update. That explains why I can’t get this to work.

Just to point out I’m not sure this is made clear when buying these cameras. If it is, let me know where. So I have two camera’s I can not use. This seems to be a significant limitation.

  1. Can I write C (C++) code to access these cameras?
  2. Is there a plan to allow pivariety camera to be accessed by the main libcamera apps? If so when? Is this difficult to do?

Ok, I’ve reread your docs and I’m sure this implies what I want to like to do is possible.

Under the main web page “Cameras for Raspberry Pi” under the section “Pivariety Camera” under sub-section Install and build Raspberry Pi Kernel Driver for Arducam Pivariety Camera

Explains how " Install and build Raspberry Pi Kernel Driver for Arducam Pivariety Camera".
This then says “what next”

This leads you to
“# Access and program the Pivariety Camera using Command Line, Python, OpenCV, and GStreamer”

The command line section “1.2. Build from the source code” then describes how to build the libcamera and libcamera-apps. These instructions are basically the same as the as the “Raspberry Pi Documentation” with the exception of copying in the “ipa_rpi.so”. I assume this was building you version of apps but it just uses the standard current build now I compare the two.

This all leads from the “Pivariety Camera” documentation. The ipa_rpi.so is not required for the IMX519 so what is this referring to if not for the Pivariety Camera.

Ok, I’ve re-read your last reply and you have given seperate reasons for the two cameras I have purchased not working. Oh well I’m learning slowly. Do you hope to progress these issues so at some point I can compile my own souce code?

Hi bmike,
Sorry for my late reply. Let’s move on the begin.Have your camera work normal following our user guide?
About the ipa_rpi.so you mentioned, we release binary flle instead of source code, due to we have done some specific modify in order to fit our focus motor. If not using focus function, just skip it.

I have both camera’s working using the supplied drivers + the supplied binaries. This is straight forward so I know they work. However, I need to add my own post processing functions which I have already developed so I need to re-compile libcamera-apps with my own versions of:
file_output.cpp
libcamera_vid.cpp
motion_detect_stage.cpp

So you are saying I only need the ipa_rpi.so if I need the autofocus which seems logical. As I don’t I can skip this step which is good.

So are you saying I should be able to build libcamera-apps from source (as described in section 1.2) and still use the IMX462 and 64mp cameras? I don’t need to amend the source code for libcamaera but am happy doing it if requried. It would be great if I can get this working. I can retry the process without the ipa-rpi.so but I’m sure I’ve tried this with no success.

@bmike

The source file you modified, our ipa.so file is not used, you can link our so dynamically into it.