LCamDev: implement configureSessionModeCReq

We can, theoretically, now change the v4l camera's mode.
This commit is contained in:
2026-06-13 20:56:33 -04:00
parent 25d7b9c013
commit 3e85b920fb
20 changed files with 1926 additions and 11 deletions
+30
View File
@@ -2,9 +2,13 @@
#define LCAMERA_DEV_CAMERA_SESSION_H
#include <cameraIdentity.h>
#include <cameraModeRequest.h>
#include <libcamera/camera.h>
#include <memory>
#include <optional>
#include <stdexcept>
#include <spinscale/co/coQutex.h>
#include <spinscale/co/invokers.h>
#include <spinscale/sharedResourceGroup.h>
namespace lcamera_dev {
@@ -20,6 +24,12 @@ struct CameraSessionResources
int refcount = 0;
CameraIdentityRecord identity;
std::shared_ptr<libcamera::Camera> camera;
bool isStreaming = false;
LcameraDevCameraModeRequest configuredRequest;
std::optional<LcameraDevConfiguredCameraMode> configuredMode;
std::shared_ptr<libcamera::CameraConfiguration> heldConfiguration;
int libcameraConfigureCallCount = 0;
};
class CameraSession
@@ -35,9 +45,29 @@ public:
const std::shared_ptr<libcamera::Camera>& getCamera() const
{ return s.rsrc.camera; }
bool isModeConfigured() const
{ return s.rsrc.configuredMode.has_value(); }
const LcameraDevConfiguredCameraMode& getConfiguredMode() const
{
if (!s.rsrc.configuredMode.has_value())
{
throw std::logic_error(
"lcameraDev: session mode is not configured");
}
return *s.rsrc.configuredMode;
}
int getLibcameraConfigureCallCount() const
{ return s.rsrc.libcameraConfigureCallCount; }
void incrementRefcount();
bool decrementRefcount();
sscl::co::ViralNonPostingInvoker<LcameraDevConfiguredCameraMode>
configureSessionModeCReq(const LcameraDevCameraModeRequest& request);
sscl::SharedResourceGroup<sscl::co::CoQutex, CameraSessionResources> s;
};