Mac OS X视频捕获设备热插拔驱动程序支持

时间:2018-04-18 08:48:32

标签: macos usb driver video-capture

我正在为USB视频捕获设备开发驱动程序。首先,我开始使用CoreMediaIO样本:

https://developer.apple.com/library/content/samplecode/CoreMediaIO/Introduction/Intro.html

内核扩展基于IOVideoSample。它从USB设备获取数据并发送给助手。 Kext具有基于USB设备的IOKitPersonalities。所以设备是真实的,应该支持HotPlug。 Kext主类在插入设备时加载,在设备插入时卸载。

SampleAssistant仅更改为检测我的kext类。 PlugIn具有NoCMIOHardwarePluginLazyLoadingInfo属性。

当所有视频捕获应用程序都关闭时 - hotplug运行良好。正在从kext调用终止函数,并且正在卸载kext对象而没有任何问题。

即使您使用设备中的流启动视频捕获应用,然后关闭它并插入设备 - hotplug也可以。

适用于QuickTime播放器。它可以找到一个流并显示一个图像,但是有一个问题。

当QuickTime(或任何其他视频捕获应用)工作并显示来自设备的流时 - hotplug无法正常工作。如果您尝试插拔设备,它将保留在系统中,USB端口将无法正常工作,直到您重新启动Mac。根据日志 - 终止功能根本没有被调用。似乎某些东西保留了与设备的链接。

我已经开始深入研究这个问题了。

首先,我发现SampleAssistant默认不支持hotplug。它仅通知设备到达(DeviceArrived)。我已添加"兴趣"仅通知和处理" kIOMessageSeviceIsTerminated"消息 - 执行DeviceRemoved函数并强制删除设备对象,但它没有帮助。

还有一个文件CMIO_DPA_Sample_Server_Stream.cpp。如果你去Stream :: Start功能并删除" mIOSAStream.Open;"和" mIOSAStream.Start();" line - hotplug works。

您能告诉我们可以采取哪些措施来解决这个问题吗?

0 个答案:

没有答案