QML Camera error
-
Hi,
System information:
NVIDIA Jetson Xavier NX (aarch64)
Qt 5.15 (qmake)
Cross compilaton using Qt Creator on Ubuntu 22.04Problem Description:
I am using the Camera & VideoOutput QML components (https://doc.qt.io/qt-5/qml-qtmultimedia-camera.html & https://doc.qt.io/qt-5/qml-qtmultimedia-videooutput.html) together with a v4l2loopback device. I use this device as a sink in my GStreamer pipeline (v4l2sink) and as a source for the Camera QML component. Every few seconds I get this message:CameraBin error: "Failed to allocate a buffer"
This is a block diagram of my GStreamer pipeline:
The video that is streamed into the v4l2sink is captured using the Camera QML component.
This is the code for the Camera QML component (the QML component Loader - named liveViewLoader - is not included in this code snippet as this is not relevant for the issue in my opinion):import QtQuick 2.0 import QtMultimedia 5.15 Item { /* * If the video stream does not exist on creation, the camera will never work. * The Component + Loader circumvents this by reloading the camera components after a timeout has occured. * The video device itself has to exist before the start, though. */ id: wrappingItem anchors.fill: parent property string videoDeviceFile: "/dev/video2" Timer { id: cameraTimeoutTimer interval: 1000 /* in ms */ running: false repeat: false onTriggered: { liveViewLoader.restart(); } } Component { id: liveViewComponent Item { height: wrappingItem.height width: wrappingItem.width id: liveViewComponentItem Camera { id: camera captureMode: Camera.CaptureStillImage deviceId: wrappingItem.videoDeviceFile onCameraStatusChanged: { console.log("Live view camera state changed to", camera.cameraStatus) var liveViewRunning = (camera.cameraStatus == Camera.ActiveStatus); // If the camera changed state, but it's not running, set a timeout to restart the camera via the Loader. cameraTimeoutTimer.start(); if ( liveViewRunning ) { cameraTimeoutTimer.stop(); } } Component.onCompleted: { checkAndHandleCameraAvailability(); } } VideoOutput { id: videoOutputArea source: camera anchors.fill: parent flushMode: VideoOutput.EmptyFrame focus: visible } function checkAndHandleCameraAvailability() { // If the selected camera is not available, the camera will automatically select a different camera that's available on the system. This is a workaround to disable that behavior. camera.deviceId = wrappingItem.videoDeviceFile let videoDeviceIsAvailable = (camera.deviceId === wrappingItem.videoDeviceFile); if (videoDeviceIsAvailable) return; console.log("Camera is currently using video device", camera.deviceId) console.log("AvlStreamHandler.videoDeviceFile: ", AvlStreamHandler.videoDeviceFile) console.log("Video device", wrappingItem.videoDeviceFile, "is not available.") liveViewLoader.stop(); } } }
Question:
Can anyone give me a hint why I get the "CameraBin error: "Failed to allocate a buffer"" error message and how this error could possibly be resolved?Best regards
B0bbyR4y