Resolve device selector on detach and add YuvStimProducer state tests.
Detach finds the shared producer via lcameraDev_resolveDeviceSelectorCReq then removes buffers by attach identity; unit tests cover quale guards. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -28,6 +28,7 @@ LcameraDevDllState::LcameraDevDllState()
|
||||
lcameraDev_main(nullptr),
|
||||
lcameraDev_exit(nullptr),
|
||||
lcameraDev_getOrCreateDeviceCReq(nullptr),
|
||||
lcameraDev_resolveDeviceSelectorCReq(nullptr),
|
||||
lcameraDev_releaseDeviceCReq(nullptr),
|
||||
lcameraDev_configureSessionModeCReq(nullptr)
|
||||
{}
|
||||
@@ -47,23 +48,6 @@ std::shared_ptr<YuvStimProducer> findStimProducerByCameraId(
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::shared_ptr<YuvStimProducer> findStimProducerWithAttachedBuffer(
|
||||
const std::shared_ptr<device::DeviceAttachmentSpec>& desc)
|
||||
{
|
||||
for (const std::shared_ptr<YuvStimProducer>& producer :
|
||||
attachedStimulusProducers)
|
||||
{
|
||||
assert(producer != nullptr);
|
||||
if (producer->getAttachedStimulusBufferByAttachIdentity(
|
||||
desc->deviceIdentifier, desc->qualeIfaceApi))
|
||||
{
|
||||
return producer;
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool validateAttachRequest(
|
||||
const std::shared_ptr<device::DeviceAttachmentSpec>& spec)
|
||||
{
|
||||
@@ -110,6 +94,11 @@ void loadLcameraDevSymbols()
|
||||
dlsym(
|
||||
lcameraDevDll.dlopenHandle.get(),
|
||||
"lcameraDev_getOrCreateDeviceCReq"));
|
||||
lcameraDevDll.lcameraDev_resolveDeviceSelectorCReq = reinterpret_cast<
|
||||
lcameraDev_resolveDeviceSelectorCReqFn *>(
|
||||
dlsym(
|
||||
lcameraDevDll.dlopenHandle.get(),
|
||||
"lcameraDev_resolveDeviceSelectorCReq"));
|
||||
lcameraDevDll.lcameraDev_releaseDeviceCReq = reinterpret_cast<
|
||||
lcameraDev_releaseDeviceCReqFn *>(
|
||||
dlsym(
|
||||
@@ -124,6 +113,7 @@ void loadLcameraDevSymbols()
|
||||
if (!lcameraDevDll.lcameraDev_main
|
||||
|| !lcameraDevDll.lcameraDev_exit
|
||||
|| !lcameraDevDll.lcameraDev_getOrCreateDeviceCReq
|
||||
|| !lcameraDevDll.lcameraDev_resolveDeviceSelectorCReq
|
||||
|| !lcameraDevDll.lcameraDev_releaseDeviceCReq
|
||||
|| !lcameraDevDll.lcameraDev_configureSessionModeCReq)
|
||||
{
|
||||
@@ -276,7 +266,11 @@ lcameraBuff_detachDeviceCReq(
|
||||
co_return StimBuffDeviceOpResult{false, desc};
|
||||
}
|
||||
|
||||
auto producer = findStimProducerWithAttachedBuffer(desc);
|
||||
const lcamera_dev::CameraIdentityRecord resolvedIdentity =
|
||||
co_await (*lcameraDevDll.lcameraDev_resolveDeviceSelectorCReq)(
|
||||
desc->deviceSelector);
|
||||
|
||||
auto producer = findStimProducerByCameraId(resolvedIdentity.id);
|
||||
if (!producer) {
|
||||
co_return StimBuffDeviceOpResult{true, desc};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user