LCamDev: implement configureSessionModeCReq
We can, theoretically, now change the v4l camera's mode.
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user