UVC 静态图片抓取
使用静态图片抓取功能时,视频控制接口中必须包括中断状态返回端点。
硬件触发的功能之一就是通知主机软件抓取静态图像。例如当一个按钮被按下时,视频流VS将产生一个中断,其包含按钮的按下和释放。
在相关视频流接口中的类特定描述符中指定了是否支持硬件触发以及主机软件如何响应这些硬件触发事件。
抓取图片有三种方法:
- 通过硬件触发来实现静态图片的抓取。通过硬件触发,直接在视频流的管道中获取一张可用的数据帧。当然这样获取的图像与视频的帧大小样。这种方式不需要中断视频传输。
- 传递比当前视频流更高清的图像,需中断当前视频流,然后再传输静态图像,传输完成后再恢复视频的传输。。
- 设置专用的管道抓取高清图像,分主动和被动。主动情况是主机发起静态图像捕获操作,设备响应操作,然后从相应的管道中传输数据,主机读取,当传输完成后,设备以中断状态的方式向主机报告传输完成。被动的情况就是主机检测到硬件触发然后接收图像。数据传输完成后设备将触发器置为正常。当然主机也可以中止图像的传输。
Isochronous video data pipe | Bulk video data pipe | |
---|---|---|
Method 1 | 1 Isochronous (Video) | 1 Bulk (Video) |
Method 2 | 1 Isochronous (Video/Still) | 1 Bulk (Video/Still) |
Method 3 | 1 Isochronous (Video) 1 Bulk (Still) | 1 Bulk (Video)1 Bulk (Still) |
方法1
对于第一种方法,主机收到硬件中断后,直接从当前视频流中截取一张完整的视频帧,无需中断当前的视频流。由于是从连续的视频流中获取的是一张视频帧,故抓取的图像大小与当前视频流的分辨率大小一致。
方法2
方法2用于抓取和方法1不同分辨率的图像,通常方法2抓取的静态图像的分辨率质量要高于视频流的图像帧。使用方法2抓图时,需要中断当前的视频流,然后传输静态图像,待传输完成后再接着传输视频流。由于方法2抓图采用的是和视频流同一端点,故需中断当前视频帧。
使用方法2抓取静态图片时,主机先暂停视频流,然后通过prob和commit进行抓图的协议协商,协商完成后使用S_STILL_IMAGE_TRIGGER_CONTROL请求后开始传输静止图片。
方法3
方法3完全是对方法2的改进。使视频数据流的端点和抓取静止图片的端点相互独立。这样在抓图时就无须中断当前视频流。
方法3的2种示例如下:
主机软件通过使用”Transmit still image via dedicated bulk pipe”来发出一个VS_STILL_IMAGE_TRIGGER_CONTROL的Set请求。在发出请求后,主机将开始从相关VideoStreaming接口的批量静止图像端点接收静止图像。在传输过程中,VS_STILL_IMAGE_TRIGGER_CONTROL控制的bTrigger字段将保持为”Transmit still image via dedicated bulk pipe”。传输完成后,设备将将控制重置为”Normal operation”并通过状态中断端点触发控制更改中断。
设备在检测到硬件触发后启动静止图像传输。当硬件检测到按钮按下时,状态中断端点将发出一个来自相关VideoStreaming接口的中断。如果所选格式描述符的bTriggerUsage字段设置为启动静止图像捕获,设备将把VS_STILL_IMAGE_TRIGGER_CONTROL控制的bTrigger字段设置为”Transmit still image via dedicated bulk pipe”。然后,主机软件将开始接收由设备在接收到中断后捕获的静止图像数据。传输完成后,设备将将bTrigger字段重置为”Normal operation”。主机软件可以通过发出带有”Abort still image transmission”选项的VS_STILL_IMAGE_TRIGGER_CONTROL请求来中止数据传输。无论哪种情况,设备都将通过状态中断端点触发控制更改中断。