Skip to content

[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:~$

snapshot_screen_record

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