You are not logged in.

#1 2024-09-07 09:57:21

hejas
Member
Registered: 2024-09-03
Posts: 7

[Pipewire] Laptop Webcam not available as source/shows black feed

I have two webcams on my device (Surface book 2), a front- and backfacing one and want them to be recognized in firefox. Because of some surface-specific issues, they cannot be directly recognized as v4l2 devices. However, I was able to get both of them working with libcamera:

cam --list
[1:49:39.664900360] [1786] ERROR IPAModule ipa_module.cpp:172 Symbol ipaModuleInfo not found
[1:49:39.664941321] [1786] ERROR IPAModule ipa_module.cpp:292 v4l2-compat.so: IPA module has no valid info
[1:49:39.665035275] [1786]  INFO Camera camera_manager.cpp:313 libcamera v0.3.1
[1:49:39.704282500] [1787] ERROR IPAProxy ipa_proxy.cpp:149 Configuration file 'ov8865.yaml' not found for IPA module 'ipu3'
[1:49:39.704596320] [1787]  INFO IPU3 ipu3.cpp:1141 Registered Camera[0] "\_SB_.PCI0.I2C3.CAMR" connected to CSI-2 receiver 0
[1:49:39.706997188] [1787] ERROR IPAProxy ipa_proxy.cpp:149 Configuration file 'ov5693.yaml' not found for IPA module 'ipu3'
[1:49:39.707314716] [1787]  INFO IPU3 ipu3.cpp:1141 Registered Camera[1] "\_SB_.PCI0.I2C2.CAMF" connected to CSI-2 receiver 1
Available cameras:
1: Internal back camera (\_SB_.PCI0.I2C3.CAMR)
2: Internal front camera (\_SB_.PCI0.I2C2.CAMF)

They also have a working feed in qcam. For firefox support I wanted to use pipewire, however after installing pipewire-libcamera as well as enabling pipewire support in firefox, I only have one Source (Built-In Front Camera) in firefox, which has only a black feed. Here is the output of wpctl status:

PipeWire 'pipewire-0' [1.2.3, henrik@isar, cookie:1425734735]
 └─ Clients:
        32. WirePlumber                         [1.2.3, henrik@isar, pid:617]
        33. pipewire                            [1.2.3, henrik@isar, pid:619]
        46. WirePlumber [export]                [1.2.3, henrik@isar, pid:617]
        75. xdg-desktop-portal                  [1.2.3, henrik@isar, pid:717]
        76. xdg-desktop-portal-wlr              [1.2.3, henrik@isar, pid:743]
        77. waybar                              [1.2.3, henrik@isar, pid:1862]
        78. wpctl                               [1.2.3, henrik@isar, pid:1935]

Audio
 ├─ Devices:
 │      50. Built-in Audio                      [alsa]
 │
 ├─ Sinks:
 │  *   68. Built-in Audio Analog Stereo        [vol: 0.79]
 │
 ├─ Sources:
 │  *   69. Built-in Audio Analog Stereo        [vol: 0.40]
 │
 ├─ Filters:
 │
 └─ Streams:

Video
 ├─ Devices:
 │      34. ov8865                              [libcamera]
 │      45. ov5693                              [libcamera]
 │      54. ipu3-imgu                           [v4l2]
 │      55. ipu3-imgu                           [v4l2]
 │      56. ipu3-imgu                           [v4l2]
 │      57. ipu3-imgu                           [v4l2]
 │      58. ipu3-imgu                           [v4l2]
 │      59. ipu3-imgu                           [v4l2]
 │      60. ipu3-imgu                           [v4l2]
 │      61. ipu3-imgu                           [v4l2]
 │      62. ipu3-imgu                           [v4l2]
 │      63. ipu3-imgu                           [v4l2]
 │      64. Intel IPU3 CIO2                     [v4l2]
 │      65. Intel IPU3 CIO2                     [v4l2]
 │      66. Intel IPU3 CIO2                     [v4l2]
 │      67. Intel IPU3 CIO2                     [v4l2]
 │
 ├─ Sinks:
 │
 ├─ Sources:
 │  *   73. Built-in Front Camera
 │
 ├─ Filters:
 │
 └─ Streams:

Settings
 └─ Default Configured Devices:

And also info for the relevant nodes:

id 73, type PipeWire:Interface:Node
    api.libcamera.location = "front"
    api.libcamera.path = "\_SB_.PCI0.I2C2.CAMF"
    api.libcamera.rotation = "180"
  * client.id = "46"
    clock.quantum-limit = "8192"
    device.api = "libcamera"
    device.description = "ov5693"
    device.devids = "[ 20748 20749 20750 20751 20738 20739 20740 20743 20744 20745 ]"
  * device.id = "45"
    device.name = "libcamera_device.\_SB_.PCI0.I2C2.CAMF"
    device.product.name = "ov5693"
  * factory.id = "11"
    factory.name = "api.libcamera.source"
  * media.class = "Video/Source"
  * media.role = "Camera"
  * node.description = "Built-in Front Camera"
    node.driver = "true"
    node.loop.name = "data-loop.0"
  * node.name = "libcamera_input.__SB_.PCI0.I2C2.CAMF"
  * node.nick = "ov5693"
    node.pause-on-idle = "false"
  * object.path = "libcamera:\_SB_.PCI0.I2C2.CAMF"
  * object.serial = "78"
  * priority.session = "800"

id 45, type PipeWire:Interface:Device
    api.libcamera.location = "front"
    api.libcamera.path = "\_SB_.PCI0.I2C2.CAMF"
    api.libcamera.rotation = "180"
  * client.id = "46"
  * device.api = "libcamera"
  * device.description = "ov5693"
    device.devids = "[ 20748 20749 20750 20751 20738 20739 20740 20743 20744 20745 ]"
    device.enum.api = "libcamera.manager"
  * device.name = "libcamera_device.\_SB_.PCI0.I2C2.CAMF"
    device.product.name = "ov5693"
  * factory.id = "15"
  * media.class = "Video/Device"
    object.path = "libcamera:\_SB_.PCI0.I2C2.CAMF"
  * object.serial = "71"

id 34, type PipeWire:Interface:Device
    api.libcamera.location = "back"
    api.libcamera.path = "\_SB_.PCI0.I2C3.CAMR"
    api.libcamera.rotation = "180"
  * client.id = "46"
  * device.api = "libcamera"
  * device.description = "ov8865"
    device.devids = "[ 20748 20749 20750 20751 20738 20739 20740 20743 20744 20745 ]"
    device.enum.api = "libcamera.manager"
  * device.name = "libcamera_device.\_SB_.PCI0.I2C3.CAMR"
    device.product.name = "ov8865"
  * factory.id = "15"
  * media.class = "Video/Device"
    object.path = "libcamera:\_SB_.PCI0.I2C3.CAMR"
  * object.serial = "70"

So both of my cameras (ov8865 and ov5693) seem to be recognized as devices, but the Rear Camera doesn't produce a source, while the Front Camera produces a black output. In qcam both cameras work, except that the rear camera is upside down (but I think I could fix that later with pipewire). The journal output of pipewire is the same as the output of cam --list:

Sep 06 21:47:10 isar systemd[607]: Started PipeWire Multimedia Service.
Sep 06 21:47:12 isar pipewire[616]: [0:00:11.283686753] [616] ERROR IPAModule ipa_module.cpp:172 Symbol ipaModuleInfo not found
Sep 06 21:47:12 isar pipewire[616]: [0:00:11.283704372] [616] ERROR IPAModule ipa_module.cpp:292 v4l2-compat.so: IPA module has no valid info
Sep 06 21:47:12 isar pipewire[616]: [0:00:11.283743062] [616]  INFO Camera camera_manager.cpp:313 libcamera v0.3.1
Sep 06 21:47:12 isar pipewire[616]: [0:00:11.327726094] [684] ERROR IPAProxy ipa_proxy.cpp:149 Configuration file 'ov8865.yaml' not found for IPA module 'ipu3'
Sep 06 21:47:12 isar pipewire[616]: [0:00:11.328171136] [684]  INFO IPU3 ipu3.cpp:1141 Registered Camera[0] "\_SB_.PCI0.I2C3.CAMR" connected to CSI-2 receiver 0
Sep 06 21:47:12 isar pipewire[616]: [0:00:11.330667896] [684] ERROR IPAProxy ipa_proxy.cpp:149 Configuration file 'ov5693.yaml' not found for IPA module 'ipu3'
Sep 06 21:47:12 isar pipewire[616]: [0:00:11.330995252] [684]  INFO IPU3 ipu3.cpp:1141 Registered Camera[1] "\_SB_.PCI0.I2C2.CAMF" connected to CSI-2 receiver 1

Regarding these messages I found some information here:

Barnabás Pőcze wrote:

This specific error can be safely ignored. As far as I can see it happens because arch linux installs all IPA modules and the v4l2 compatibility library into /usr/lib/libcamera. At startup libcamera scans all shared objects in that directory, and tries to load them as IPA modules. Of course, the v4l2 compatibility library is not an IPA module, hence the error message.
On the arch side, this could be solved by setting libexecdir and libdir meson options to different locations when configuring the build. On the libcamera side, this can be solved by guaranteeing a separate directory for IPA modules, e.g. $libdir/libcamera/ipa or something.
In any case, this is not something that can be solved in pipewire. You will have to open an issue elsewhere.

so I think they are note relevant, because libcamera is working fine.

Offline

Board footer

Powered by FluxBB