#ifndef LCAMERA_BUFF_INTERNAL_H #define LCAMERA_BUFF_INTERNAL_H #include #include #include #include #include #include namespace smo::stim_buff::lcamera_buff { class YuvStimProducer; struct LcameraDevDllState { struct DlCloser { void operator()(void *handle); }; LcameraDevDllState(); std::unique_ptr dlopenHandle; lcameraDev_mainFn *lcameraDev_main; lcameraDev_exitFn *lcameraDev_exit; lcameraDev_getOrCreateDeviceCReqFn *lcameraDev_getOrCreateDeviceCReq; lcameraDev_resolveDeviceSelectorCReqFn *lcameraDev_resolveDeviceSelectorCReq; lcameraDev_releaseDeviceCReqFn *lcameraDev_releaseDeviceCReq; lcameraDev_configureSessionModeCReqFn *lcameraDev_configureSessionModeCReq; }; extern const SmoCallbacks *lcameraBuffSmoHooksPtr; extern SmoThreadingModelDesc lcameraBuffThreadingModelDesc; extern LcameraDevDllState lcameraDevDll; extern std::vector> managedStimulusProducers; void addManagedStimulusProducer( const std::shared_ptr& producer); sscl::co::ViralNonPostingInvoker removeManagedStimulusProducerIfUnused( const std::shared_ptr& producer); std::shared_ptr findStimProducerByCameraId( const std::string& resolvedCameraId); bool validateAttachRequest( const std::shared_ptr& spec); sscl::co::ViralNonPostingInvoker lcameraBuff_initializeCInd(); sscl::co::ViralNonPostingInvoker lcameraBuff_finalizeCInd(); sscl::co::DynamicViralPostingInvoker lcameraBuff_attachDeviceCReq( sscl::co::ExplicitPostTarget postTarget, const std::shared_ptr& desc, const std::shared_ptr& componentThread); sscl::co::DynamicViralPostingInvoker lcameraBuff_detachDeviceCReq( sscl::co::ExplicitPostTarget postTarget, const std::shared_ptr& desc); } // namespace smo::stim_buff::lcamera_buff #endif // LCAMERA_BUFF_INTERNAL_H