[xiaomi-beryllium][google-sargo] OOTB support for camera through pipewire/libcamera
Doing some checks that are documented by Snapshot's developers. Tested on an up-to-date trixie system with 6.12.6 kernel
Linux mobian 6.12-qcom #6.12.6-2 SMP PREEMPT Sat Dec 21 12:32:49 UTC 2024 aarch64
Does pipewire recognize any camera device? Yes, it seems so
marco@mobian:~$ pw-dump | grep default.video.source
{ "subject": 0, "key": "default.video.source", "type": "Spa:String:JSON", "value": { "name": "libcamera_input._base_soc_0_cci_ac4a000_i2c-bus_0_camera_10" } }
Next, let's ask gstreamer about available cameras and related info
`gst-device-monitor-1.0 Video/Source`
marco@mobian:~$ gst-device-monitor-1.0 Video/Source
Probing devices...
[0:09:52.493997728] [1923] ERROR IPAModule ipa_module.cpp:171 Symbol ipaModuleInfo not found
[0:09:52.494081791] [1923] ERROR IPAModule ipa_module.cpp:291 v4l2-compat.so: IPA module has no valid info
[0:09:52.494115385] [1923] INFO Camera camera_manager.cpp:325 libcamera v0.3.2
[0:09:52.530495014] [1932] WARN CameraSensorProperties camera_sensor_properties.cpp:293 No static properties available for 'imx363'
[0:09:52.530528296] [1932] WARN CameraSensorProperties camera_sensor_properties.cpp:295 Please consider updating the camera sensor properties database
[0:09:52.532100177] [1932] WARN IPAProxy ipa_proxy.cpp:160 Configuration file 'imx363.yaml' not found for IPA module 'simple', falling back to 'uncalibrated.yaml'
[0:09:52.532134448] [1932] WARN IPASoft soft_simple.cpp:114 Failed to create camera sensor helper for imx363
[0:09:52.541890113] [1932] WARN DeviceEnumerator device_enumerator_udev.cpp:337 Ignoring notfication received without a device: Risorsa temporaneamente non disponibile
Device found:
name : Built-in Back Camera
class : Video/Source
caps : video/x-raw, format=RGBA, width=640, height=480
video/x-raw, format=RGBA, width=160, height=120
video/x-raw, format=RGBA, width=240, height=160
video/x-raw, format=RGBA, width=320, height=240
video/x-raw, format=RGBA, width=400, height=240
video/x-raw, format=RGBA, width=480, height=320
video/x-raw, format=RGBA, width=640, height=360
video/x-raw, format=RGBA, width=640, height=480
video/x-raw, format=RGBA, width=720, height=480
video/x-raw, format=RGBA, width=768, height=480
video/x-raw, format=RGBA, width=720, height=576
video/x-raw, format=RGBA, width=800, height=600
video/x-raw, format=RGBA, width=960, height=540
video/x-raw, format=RGBA, width=1024, height=576
video/x-raw, format=RGBA, width=960, height=640
video/x-raw, format=RGBA, width=1024, height=600
video/x-raw, format=RGBA, width=1024, height=768
video/x-raw, format=RGBA, width=1280, height=720
video/x-raw, format=RGBA, width=1152, height=864
video/x-raw, format=RGBA, width=1280, height=800
video/x-raw, format=RGBA, width=1360, height=768
video/x-raw, format=RGBA, width=1440, height=900
video/x-raw, format=RGBA, width=1280, height=1024
video/x-raw, format=RGBA, width=1536, height=864
video/x-raw, format=RGBA, width=1280, height=1080
video/x-raw, format=RGBA, width=1600, height=900
video/x-raw, format=RGBA, width=1400, height=1050
video/x-raw, format=RGBA, width=1680, height=1050
video/x-raw, format=RGBA, width=1600, height=1200
video/x-raw, format=RGBA, width=1920, height=1080
video/x-raw, format=RGBA, width=2048, height=1080
video/x-raw, format=RGBA, width=1920, height=1200
video/x-raw, format=RGBA, width=2160, height=1080
video/x-raw, format=RGBA, width=2048, height=1152
video/x-raw, format=RGBA, width=2560, height=1080
video/x-raw, format=RGBA, width=2048, height=1536
video/x-raw, format=RGBA, width=2560, height=1440
video/x-raw, format=RGBA, width=2560, height=1600
video/x-raw, format=RGBA, width=3840, height=1080
video/x-raw, format=RGBA, width=2960, height=1440
video/x-raw, format=RGBA, width=3440, height=1440
video/x-raw, format=RGBA, width=2560, height=2048
video/x-raw, format=RGBA, width=3200, height=1800
video/x-raw, format=RGBA, width=3840, height=1600
video/x-raw, format=RGBA, width=3200, height=2048
video/x-raw, format=RGBA, width=3200, height=2400
video/x-raw, format=RGBA, width=3840, height=2160
video/x-raw, format=RGBA, width=3840, height=2400
video/x-raw, format=RGBx, width=640, height=480
video/x-raw, format=RGBx, width=160, height=120
video/x-raw, format=RGBx, width=240, height=160
video/x-raw, format=RGBx, width=320, height=240
video/x-raw, format=RGBx, width=400, height=240
video/x-raw, format=RGBx, width=480, height=320
video/x-raw, format=RGBx, width=640, height=360
video/x-raw, format=RGBx, width=640, height=480
video/x-raw, format=RGBx, width=720, height=480
video/x-raw, format=RGBx, width=768, height=480
video/x-raw, format=RGBx, width=720, height=576
video/x-raw, format=RGBx, width=800, height=600
video/x-raw, format=RGBx, width=960, height=540
video/x-raw, format=RGBx, width=1024, height=576
video/x-raw, format=RGBx, width=960, height=640
video/x-raw, format=RGBx, width=1024, height=600
video/x-raw, format=RGBx, width=1024, height=768
video/x-raw, format=RGBx, width=1280, height=720
video/x-raw, format=RGBx, width=1152, height=864
video/x-raw, format=RGBx, width=1280, height=800
video/x-raw, format=RGBx, width=1360, height=768
video/x-raw, format=RGBx, width=1440, height=900
video/x-raw, format=RGBx, width=1280, height=1024
video/x-raw, format=RGBx, width=1536, height=864
video/x-raw, format=RGBx, width=1280, height=1080
video/x-raw, format=RGBx, width=1600, height=900
video/x-raw, format=RGBx, width=1400, height=1050
video/x-raw, format=RGBx, width=1680, height=1050
video/x-raw, format=RGBx, width=1600, height=1200
video/x-raw, format=RGBx, width=1920, height=1080
video/x-raw, format=RGBx, width=2048, height=1080
video/x-raw, format=RGBx, width=1920, height=1200
video/x-raw, format=RGBx, width=2160, height=1080
video/x-raw, format=RGBx, width=2048, height=1152
video/x-raw, format=RGBx, width=2560, height=1080
video/x-raw, format=RGBx, width=2048, height=1536
video/x-raw, format=RGBx, width=2560, height=1440
video/x-raw, format=RGBx, width=2560, height=1600
video/x-raw, format=RGBx, width=3840, height=1080
video/x-raw, format=RGBx, width=2960, height=1440
video/x-raw, format=RGBx, width=3440, height=1440
video/x-raw, format=RGBx, width=2560, height=2048
video/x-raw, format=RGBx, width=3200, height=1800
video/x-raw, format=RGBx, width=3840, height=1600
video/x-raw, format=RGBx, width=3200, height=2048
video/x-raw, format=RGBx, width=3200, height=2400
video/x-raw, format=RGBx, width=3840, height=2160
video/x-raw, format=RGBx, width=3840, height=2400
video/x-raw, format=RGB, width=640, height=480
video/x-raw, format=RGB, width=160, height=120
video/x-raw, format=RGB, width=240, height=160
video/x-raw, format=RGB, width=320, height=240
video/x-raw, format=RGB, width=400, height=240
video/x-raw, format=RGB, width=480, height=320
video/x-raw, format=RGB, width=640, height=360
video/x-raw, format=RGB, width=640, height=480
video/x-raw, format=RGB, width=720, height=480
video/x-raw, format=RGB, width=768, height=480
video/x-raw, format=RGB, width=720, height=576
video/x-raw, format=RGB, width=800, height=600
video/x-raw, format=RGB, width=960, height=540
video/x-raw, format=RGB, width=1024, height=576
video/x-raw, format=RGB, width=960, height=640
video/x-raw, format=RGB, width=1024, height=600
video/x-raw, format=RGB, width=1024, height=768
video/x-raw, format=RGB, width=1280, height=720
video/x-raw, format=RGB, width=1152, height=864
video/x-raw, format=RGB, width=1280, height=800
video/x-raw, format=RGB, width=1360, height=768
video/x-raw, format=RGB, width=1440, height=900
video/x-raw, format=RGB, width=1280, height=1024
video/x-raw, format=RGB, width=1536, height=864
video/x-raw, format=RGB, width=1280, height=1080
video/x-raw, format=RGB, width=1600, height=900
video/x-raw, format=RGB, width=1400, height=1050
video/x-raw, format=RGB, width=1680, height=1050
video/x-raw, format=RGB, width=1600, height=1200
video/x-raw, format=RGB, width=1920, height=1080
video/x-raw, format=RGB, width=2048, height=1080
video/x-raw, format=RGB, width=1920, height=1200
video/x-raw, format=RGB, width=2160, height=1080
video/x-raw, format=RGB, width=2048, height=1152
video/x-raw, format=RGB, width=2560, height=1080
video/x-raw, format=RGB, width=2048, height=1536
video/x-raw, format=RGB, width=2560, height=1440
video/x-raw, format=RGB, width=2560, height=1600
video/x-raw, format=RGB, width=3840, height=1080
video/x-raw, format=RGB, width=2960, height=1440
video/x-raw, format=RGB, width=3440, height=1440
video/x-raw, format=RGB, width=2560, height=2048
video/x-raw, format=RGB, width=3200, height=1800
video/x-raw, format=RGB, width=3840, height=1600
video/x-raw, format=RGB, width=3200, height=2048
video/x-raw, format=RGB, width=3200, height=2400
video/x-raw, format=RGB, width=3840, height=2160
video/x-raw, format=RGB, width=3840, height=2400
video/x-raw, format=BGR, width=640, height=480
video/x-raw, format=BGR, width=160, height=120
video/x-raw, format=BGR, width=240, height=160
video/x-raw, format=BGR, width=320, height=240
video/x-raw, format=BGR, width=400, height=240
video/x-raw, format=BGR, width=480, height=320
video/x-raw, format=BGR, width=640, height=360
video/x-raw, format=BGR, width=640, height=480
video/x-raw, format=BGR, width=720, height=480
video/x-raw, format=BGR, width=768, height=480
video/x-raw, format=BGR, width=720, height=576
video/x-raw, format=BGR, width=800, height=600
video/x-raw, format=BGR, width=960, height=540
video/x-raw, format=BGR, width=1024, height=576
video/x-raw, format=BGR, width=960, height=640
video/x-raw, format=BGR, width=1024, height=600
video/x-raw, format=BGR, width=1024, height=768
video/x-raw, format=BGR, width=1280, height=720
video/x-raw, format=BGR, width=1152, height=864
video/x-raw, format=BGR, width=1280, height=800
video/x-raw, format=BGR, width=1360, height=768
video/x-raw, format=BGR, width=1440, height=900
video/x-raw, format=BGR, width=1280, height=1024
video/x-raw, format=BGR, width=1536, height=864
video/x-raw, format=BGR, width=1280, height=1080
video/x-raw, format=BGR, width=1600, height=900
video/x-raw, format=BGR, width=1400, height=1050
video/x-raw, format=BGR, width=1680, height=1050
video/x-raw, format=BGR, width=1600, height=1200
video/x-raw, format=BGR, width=1920, height=1080
video/x-raw, format=BGR, width=2048, height=1080
video/x-raw, format=BGR, width=1920, height=1200
video/x-raw, format=BGR, width=2160, height=1080
video/x-raw, format=BGR, width=2048, height=1152
video/x-raw, format=BGR, width=2560, height=1080
video/x-raw, format=BGR, width=2048, height=1536
video/x-raw, format=BGR, width=2560, height=1440
video/x-raw, format=BGR, width=2560, height=1600
video/x-raw, format=BGR, width=3840, height=1080
video/x-raw, format=BGR, width=2960, height=1440
video/x-raw, format=BGR, width=3440, height=1440
video/x-raw, format=BGR, width=2560, height=2048
video/x-raw, format=BGR, width=3200, height=1800
video/x-raw, format=BGR, width=3840, height=1600
video/x-raw, format=BGR, width=3200, height=2048
video/x-raw, format=BGR, width=3200, height=2400
video/x-raw, format=BGR, width=3840, height=2160
video/x-raw, format=BGR, width=3840, height=2400
video/x-raw, format=BGRA, width=640, height=480
video/x-raw, format=BGRA, width=160, height=120
video/x-raw, format=BGRA, width=240, height=160
video/x-raw, format=BGRA, width=320, height=240
video/x-raw, format=BGRA, width=400, height=240
video/x-raw, format=BGRA, width=480, height=320
video/x-raw, format=BGRA, width=640, height=360
video/x-raw, format=BGRA, width=640, height=480
video/x-raw, format=BGRA, width=720, height=480
video/x-raw, format=BGRA, width=768, height=480
video/x-raw, format=BGRA, width=720, height=576
video/x-raw, format=BGRA, width=800, height=600
video/x-raw, format=BGRA, width=960, height=540
video/x-raw, format=BGRA, width=1024, height=576
video/x-raw, format=BGRA, width=960, height=640
video/x-raw, format=BGRA, width=1024, height=600
video/x-raw, format=BGRA, width=1024, height=768
video/x-raw, format=BGRA, width=1280, height=720
video/x-raw, format=BGRA, width=1152, height=864
video/x-raw, format=BGRA, width=1280, height=800
video/x-raw, format=BGRA, width=1360, height=768
video/x-raw, format=BGRA, width=1440, height=900
video/x-raw, format=BGRA, width=1280, height=1024
video/x-raw, format=BGRA, width=1536, height=864
video/x-raw, format=BGRA, width=1280, height=1080
video/x-raw, format=BGRA, width=1600, height=900
video/x-raw, format=BGRA, width=1400, height=1050
video/x-raw, format=BGRA, width=1680, height=1050
video/x-raw, format=BGRA, width=1600, height=1200
video/x-raw, format=BGRA, width=1920, height=1080
video/x-raw, format=BGRA, width=2048, height=1080
video/x-raw, format=BGRA, width=1920, height=1200
video/x-raw, format=BGRA, width=2160, height=1080
video/x-raw, format=BGRA, width=2048, height=1152
video/x-raw, format=BGRA, width=2560, height=1080
video/x-raw, format=BGRA, width=2048, height=1536
video/x-raw, format=BGRA, width=2560, height=1440
video/x-raw, format=BGRA, width=2560, height=1600
video/x-raw, format=BGRA, width=3840, height=1080
video/x-raw, format=BGRA, width=2960, height=1440
video/x-raw, format=BGRA, width=3440, height=1440
video/x-raw, format=BGRA, width=2560, height=2048
video/x-raw, format=BGRA, width=3200, height=1800
video/x-raw, format=BGRA, width=3840, height=1600
video/x-raw, format=BGRA, width=3200, height=2048
video/x-raw, format=BGRA, width=3200, height=2400
video/x-raw, format=BGRA, width=3840, height=2160
video/x-raw, format=BGRA, width=3840, height=2400
video/x-raw, format=BGRx, width=640, height=480
video/x-raw, format=BGRx, width=160, height=120
video/x-raw, format=BGRx, width=240, height=160
video/x-raw, format=BGRx, width=320, height=240
video/x-raw, format=BGRx, width=400, height=240
video/x-raw, format=BGRx, width=480, height=320
video/x-raw, format=BGRx, width=640, height=360
video/x-raw, format=BGRx, width=640, height=480
video/x-raw, format=BGRx, width=720, height=480
video/x-raw, format=BGRx, width=768, height=480
video/x-raw, format=BGRx, width=720, height=576
video/x-raw, format=BGRx, width=800, height=600
video/x-raw, format=BGRx, width=960, height=540
video/x-raw, format=BGRx, width=1024, height=576
video/x-raw, format=BGRx, width=960, height=640
video/x-raw, format=BGRx, width=1024, height=600
video/x-raw, format=BGRx, width=1024, height=768
video/x-raw, format=BGRx, width=1280, height=720
video/x-raw, format=BGRx, width=1152, height=864
video/x-raw, format=BGRx, width=1280, height=800
video/x-raw, format=BGRx, width=1360, height=768
video/x-raw, format=BGRx, width=1440, height=900
video/x-raw, format=BGRx, width=1280, height=1024
video/x-raw, format=BGRx, width=1536, height=864
video/x-raw, format=BGRx, width=1280, height=1080
video/x-raw, format=BGRx, width=1600, height=900
video/x-raw, format=BGRx, width=1400, height=1050
video/x-raw, format=BGRx, width=1680, height=1050
video/x-raw, format=BGRx, width=1600, height=1200
video/x-raw, format=BGRx, width=1920, height=1080
video/x-raw, format=BGRx, width=2048, height=1080
video/x-raw, format=BGRx, width=1920, height=1200
video/x-raw, format=BGRx, width=2160, height=1080
video/x-raw, format=BGRx, width=2048, height=1152
video/x-raw, format=BGRx, width=2560, height=1080
video/x-raw, format=BGRx, width=2048, height=1536
video/x-raw, format=BGRx, width=2560, height=1440
video/x-raw, format=BGRx, width=2560, height=1600
video/x-raw, format=BGRx, width=3840, height=1080
video/x-raw, format=BGRx, width=2960, height=1440
video/x-raw, format=BGRx, width=3440, height=1440
video/x-raw, format=BGRx, width=2560, height=2048
video/x-raw, format=BGRx, width=3200, height=1800
video/x-raw, format=BGRx, width=3840, height=1600
video/x-raw, format=BGRx, width=3200, height=2048
video/x-raw, format=BGRx, width=3200, height=2400
video/x-raw, format=BGRx, width=3840, height=2160
video/x-raw, format=BGRx, width=3840, height=2400
properties:
api.libcamera.location = back
api.libcamera.path = /base/soc@0/cci@ac4a000/i2c-bus@0/camera@10
api.libcamera.rotation = 270
device.api = libcamera
device.description = imx363
device.devids = [ 20736 20737 20738 20739 20740 20741 20742 20743 20744 20745 20746 20747 ]
device.id = 65
device.name = libcamera_device./base/soc@0/cci@ac4a000/i2c-bus@0/camera@10
device.product.name = imx363
factory.name = api.libcamera.source
media.class = Video/Source
node.description = Built-in Back Camera
node.name = libcamera_input._base_soc_0_cci_ac4a000_i2c-bus_0_camera_10
node.nick = imx363
node.pause-on-idle = false
object.path = libcamera:/base/soc@0/cci@ac4a000/i2c-bus@0/camera@10
priority.session = 750
factory.id = 11
client.id = 47
clock.quantum-limit = 8192
node.loop.name = data-loop.0
media.role = Camera
node.driver = true
object.id = 66
object.serial = 66
gst-launch-1.0 pipewiresrc target-object=66 ! ...
marco@mobian:~$
yet...
marco@mobian:~$ snapshot
2024-12-30T21:24:05.775142Z INFO snapshot::application::imp: Snapshot (org.gnome.Snapshot)
2024-12-30T21:24:05.776465Z INFO snapshot::application::imp: Version: 47.1
2024-12-30T21:24:05.776470Z INFO snapshot::application::imp: Datadir: /usr/share/snapshot
2024-12-30T21:24:06.529353Z INFO ashpd::desktop::request: Creating a org.freedesktop.portal.Request /org/freedesktop/portal/desktop/request/1_62/ashpd_5yVCuKuezx
2024-12-30T21:24:06.532356Z WARN ashpd::error: Hack! The parsing of the iface name has failed: iface Object does not exist at path “/org/freedesktop/portal/desktop/request/1_62/ashpd_5yVCuKuezx, error details Object does not exist at path “/org/freedesktop/portal/desktop/request/1_62/ashpd_5yVCuKuezx”
2024-12-30T21:24:06.552639Z INFO ashpd::desktop::request: Received signal 'Response' on 'org.freedesktop.portal.Request'
2024-12-30T21:24:06.552732Z INFO ashpd::proxy: Calling method org.freedesktop.portal.Camera:OpenPipeWireRemote
marco@mobian:~$
Please note, that strange artifact on the right side of the screen is not due to screen recording: that's what snapshot shows even when screen is not being recorded.
Could be worth checking with libcamera 0.4 now in experimental