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:
2026-06-14 11:04:22 -04:00
parent e7b7a311f7
commit 63532a6ee2
6 changed files with 374 additions and 18 deletions
+12 -18
View File
@@ -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};
}