- media-video/ipu6
- virtual/gst-plugins-icamerasrc
- virtual/ipu6-camera-bins
- virtual/ipu6-camera-hal
- media-plugins/gst-plugins-icamerasrc-mtl-rpl
- media-video/pipewire
- sys-firmware/ipu6-camera-bins-mtl-rpl
- sys-libs/ipu6-camera-hal-mtl-rpl
- media-libs/libcamera
Now, if I run "qcam" which is part of libcamera I can grab a decent video from the OVTI08F4 camera sensor. QCam is a small test program which uses libcamera directly and by-passes Pipewire as well as GStreamer. Good!
So I know that libcamera and the kernel side works. However, no other user-space application (Kamose, Firefox, Chrome, instant messangers) can use the camera through Pipewire/Gstreamer. Those application simply do not see any camera. Before all the patches, those application had shown a bunch of unusable IPU6 cameras via V4L2 (I believe 128 times!). With the patches those cameras are gone, because GStreamer hides them. This is definitely a step into the right direction, but now those applications show no camera at all.
GStreamer itsself shows the following output
Code: Select all
$ gst-device-monitor-1.0
Probing devices...
[0:20:00.491185629] [5667] INFO Camera camera_manager.cpp:326 libcamera v0.5.0
[0:20:00.511750844] [5669] ERROR V4L2 v4l2_subdevice.cpp:1196 'ov08x40 4-0010': Unable to get rectangle 2 on pad 0/0: Inappropriate ioctl for device
[0:20:00.511779781] [5669] WARN CameraSensor camera_sensor_legacy.cpp:401 'ov08x40 4-0010': The PixelArraySize property has been defaulted to 3856x2416
[0:20:00.511793232] [5669] ERROR V4L2 v4l2_subdevice.cpp:1196 'ov08x40 4-0010': Unable to get rectangle 1 on pad 0/0: Inappropriate ioctl for device
[0:20:00.511802727] [5669] WARN CameraSensor camera_sensor_legacy.cpp:412 'ov08x40 4-0010': The PixelArrayActiveAreas property has been defaulted to (0, 0)/3856x2416
[0:20:00.511813631] [5669] ERROR V4L2 v4l2_subdevice.cpp:1196 'ov08x40 4-0010': Unable to get rectangle 0 on pad 0/0: Inappropriate ioctl for device
[0:20:00.511821823] [5669] WARN CameraSensor camera_sensor_legacy.cpp:420 'ov08x40 4-0010': Failed to retrieve the sensor crop rectangle
[0:20:00.511830041] [5669] WARN CameraSensor camera_sensor_legacy.cpp:426 'ov08x40 4-0010': The sensor kernel driver needs to be fixed
[0:20:00.511836688] [5669] WARN CameraSensor camera_sensor_legacy.cpp:428 'ov08x40 4-0010': See Documentation/sensor_driver_requirements.rst in the libcamera sources for more information
[0:20:00.512216657] [5669] WARN CameraSensorProperties camera_sensor_properties.cpp:463 No static properties available for 'ov08x40'
[0:20:00.512228592] [5669] WARN CameraSensorProperties camera_sensor_properties.cpp:465 Please consider updating the camera sensor properties database
[0:20:00.512241917] [5669] WARN CameraSensor camera_sensor_legacy.cpp:501 'ov08x40 4-0010': No sensor delays found in static properties. Assuming unverified defaults.
[0:20:00.515100062] [5669] WARN IPAProxy ipa_proxy.cpp:177 Configuration file 'ov08x40.yaml' not found for IPA module 'simple', falling back to 'uncalibrated.yaml'
[0:20:00.515153213] [5669] ERROR V4L2 v4l2_subdevice.cpp:1196 'ov08x40 4-0010': Unable to get rectangle 0 on pad 0/0: Inappropriate ioctl for device
[0:20:00.515165374] [5669] WARN CameraSensor camera_sensor_legacy.cpp:880 'ov08x40 4-0010': The analogue crop rectangle has been defaulted to the active area size
Device found:
name : \_SB_.PC00.LNK1
class : Source/Video
caps : video/x-raw, format=RGBA, width=160, height=120
...
video/x-raw, format=BGRx, width=[ 2, 3848, 2 ], height=[ 2, 2416, 2 ]
gst-launch-1.0 libcamerasrc camera-name="\\_SB_.PC00.LNK1" ! ...
Device found:
name : LENOVO-21KCCTO1WW-ThinkPadX1CarbonGen12
class : Audio/Sink
caps : audio/x-raw, format={ (string)S32LE, (string)S24_32LE, (string)S16LE }, layout=interleaved, rate=48000, channels=2, channel-mask=0x0000000000000003
properties:
device.api = alsa
...
alsa.mixername = Realtek ALC287
gst-launch-1.0 ... ! alsasink device="hw:0\,31"
Device found:
name : LENOVO-21KCCTO1WW-ThinkPadX1CarbonGen12
class : Audio/Sink
caps : audio/x-raw, format={ (string)S32LE, (string)S16LE }, layout=interleaved, rate=[ 32000, 192000 ], channels=2, channel-mask=0x0000000000000003
...
audio/x-raw, format={ (string)S32LE, (string)S16LE }, layout=interleaved, rate=[ 32000, 192000 ], channels=8, channel-mask=0x0000000000000c3f
properties:
device.api = alsa
...
alsa.mixername = Realtek ALC287
gst-launch-1.0 ... ! alsasink device="hw:0\,5"
Device found:
name : LENOVO-21KCCTO1WW-ThinkPadX1CarbonGen12
class : Audio/Sink
caps : audio/x-raw, format={ (string)S32LE, (string)S16LE }, layout=interleaved, rate=[ 32000, 192000 ], channels=2, channel-mask=0x0000000000000003
...
audio/x-raw, format={ (string)S32LE, (string)S16LE }, layout=interleaved, rate=[ 32000, 192000 ], channels=8, channel-mask=0x0000000000000c3f
properties:
device.api = alsa
...
alsa.mixername = Realtek ALC287
gst-launch-1.0 ... ! alsasink device="hw:0\,4"
Device found:
name : LENOVO-21KCCTO1WW-ThinkPadX1CarbonGen12
class : Audio/Sink
caps : audio/x-raw, format={ (string)S32LE, (string)S16LE }, layout=interleaved, rate=[ 32000, 192000 ], channels=2, channel-mask=0x0000000000000003
...
audio/x-raw, format={ (string)S32LE, (string)S16LE }, layout=interleaved, rate=[ 32000, 192000 ], channels=8, channel-mask=0x0000000000000c3f
properties:
device.api = alsa
...
alsa.mixername = Realtek ALC287
gst-launch-1.0 ... ! alsasink device="hw:0\,3"
Device found:
name : LENOVO-21KCCTO1WW-ThinkPadX1CarbonGen12
class : Audio/Sink
caps : audio/x-raw, format={ (string)S32LE, (string)S24_32LE, (string)S16LE }, layout=interleaved, rate=48000, channels=2, channel-mask=0x0000000000000003
properties:
device.api = alsa
...
alsa.mixername = Realtek ALC287
gst-launch-1.0 ... ! alsasink device="hw:0\,0"
Device found:
name : LENOVO-21KCCTO1WW-ThinkPadX1CarbonGen12
class : Audio/Source
caps : audio/x-raw, format=S32LE, layout=interleaved, rate=48000, channels=2, channel-mask=0x0000000000000003
properties:
device.api = alsa
...
alsa.mixername = Realtek ALC287
gst-launch-1.0 alsasrc device="hw:0\,6" ! ...
Device found:
name : LENOVO-21KCCTO1WW-ThinkPadX1CarbonGen12
class : Audio/Source
caps : audio/x-raw, format={ (string)S32LE, (string)S24_32LE, (string)S16LE }, layout=interleaved, rate=48000, channels=2, channel-mask=0x0000000000000003
properties:
device.api = alsa
...
alsa.mixername = Realtek ALC287
gst-launch-1.0 alsasrc device="hw:0\,0" ! ...Code: Select all
LC_ALL=C gst-launch-1.0 libcamerasrc camera-name="\\_SB_.PC00.LNK1" ! xvimagesink
Setting pipeline to PAUSED ...
ERROR: from element /GstPipeline:pipeline0/GstAutoVideoSrc:autovideosrc0/
GstPipeWireSrc:autovideosrc0-actual-src-pipewir: stream error: no more input formats
Additional debug info:
../pipewire-1.4.2/src/gst/gstpipewiresrc.c(748): on_state_changed (): /
GstPipeline:pipeline0/GstAutoVideoSrc:autovideosrc0/
GstPipeWireSrc:autovideosrc0-actual-src-pipewir
ERROR: pipeline doesn't want to preroll.
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
ERROR: from element /GstPipeline:pipeline0/GstAutoVideoSrc:autovideosrc0/
GstPipeWireSrc:autovideosrc0-actual-src-pipewir: Internal data stream error.
Additional debug info:
../gstreamer-1.24.11/libs/gst/base/gstbasesrc.c(3177): gst_base_src_loop (): /
GstPipeline:pipeline0/GstAutoVideoSrc:autovideosrc0/
GstPipeWireSrc:autovideosrc0-actual-src-pipewir:
streaming stopped, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Freeing pipeline ...If anybody also owns an Lenovo X1 Carbon 12gen and volunteered to help me to do some debugging that would be awesome and very much appreciated. Maybe there is already someone who got the IPu6 to work (even better). Previously, when QCam did not work at all, I missed to include a kernel patch which drives GPIO pin 12 of the Lattice USBIO expander to power up the camera sensor. I could have sworn that I included that patch into my kernel built, but I hadn't. Currently, I am drawing a blank again. As Libcamera finally works and GStreamer enumerates the camera, there is probably something very stupid which I missed.



