QAVF Camera共享框架架构

QAVF Camera共享框架架构

camera-sharing框架提供了一个虚拟设备(vdev),通过该vdev guest应用程序可以访问host端的Camera。该框架使用其他QNX产品的组件与Camera进行交互来显示Camera预览。

假设您已经熟悉以下文档中所介绍的概念:

virtio-video-camera vdev基于VirtIO-Video规范的3.0版草案,这是对现有VirtIO 1.1规范的提议修正。

Camera共享

host管理所有guests与Camera硬件之间的交互:

  • hypervisor host包含与Camera硬件配合使用的Sensor Framework组件。其中包括Camera library,为使用连接到host的Camera提供接口。有关此库如何使用其他组件管理Camera并显示其视频的详细信息,请参阅下文。
  • 要想让guest与host共享Camera,托管guest的虚拟机(即qvm进程)必须包含Camera vdev(virtio-video-camera)。
  • 为了与vdev进行交互,每个guest都独立运行符合VirtIO-Video消息标准的Camera驱动程序。该驱动程序作为动态库运行,并由虚拟机加载。
  • 为了彼此通信(命令和控制),Camera驱动程序和vdev使用virtqueues,这是VirtIO设备上进行数据传输的标准机制。请注意,Camera数据帧的是通过共享内存方式实现的。
  • 在Android guests中,应用程序可能使用EVS(Extended View System)框架来访问和使用Camera。VirtIO-Video摄像头驱动程序将发送给EVS的命令转发给vdev进行处理。

下图说明了guests与host系统上的Camera硬件之间的交互。此交互由virtio-video-camera vdevCamera library和host上的Sensor Service以及Screen进行管理。

QAVF Camera共享框架架构

camera-sharing框架需要其他QNX产品的额外服务来进行操作。host上需要Camera library和Sensor service,以便vdev后端可以与硬件进行交互。这两个组件必须包含在host image中,这意味着您的开发系统上必须安装Sensor Framework;有关更多信息,请参阅发布说明。host上还需要屏幕图形子系统(Screen Graphics Subsystem),以便Sensor Service可以在显示器上渲染Camera数据。默认情况下,Screen包含在hypervisor host image中。

有关QNX Hypervisor中设备共享的更多信息,请参阅QNX Hypervisor用户指南中“Understanding QNX Virtual Environments”章节中关于“Devices”的部分。

Camera虚拟化

当guest应用程序调用Camera API时,这些调用将转发到host上的Camera library进行处理。我们称之为Camera虚拟化,由以下组件支持:

  • virtio-video-camera vdev

    virtio-video-camera vdev是一种para-virtualized设备,它使来自guest的Camera请求能够在host上执行。该vdev在Hypervisor虚拟机中运行,但不会模拟硬件摄像头。相反,它将guest驱动程序接收到的Camera API调用转发到host上的Camera libray上,并返回调用结果给guest。

  • Camera library

    Camera library(libcamapi.so)为应用程序提供了访问连接到host硬件的Camera的接口。该接口支持启动和关闭Camera、缩放、对焦等功能。Camera库使用Sensor Service来执行这些操作。

  • Sensor service

    Sensor service直接与Camera硬件进行交互。您必须在Sensor配置文件中配置想要guest应用程序使用的camera。该服务还与Screen交互以显示Camera预览。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程