多协议控制USB相机的实现方法、装置、设备及介质转让专利

申请号 : CN202211637551.X

文献号 : CN116074622B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 姚紫微

申请人 : 珠海视熙科技有限公司

摘要 :

本申请涉及一种多协议控制USB相机的实现方法、装置、设备及介质,其方法包括:在硬件抽象层增设函数定义模块,并在函数定义模块中定义基于第二协议的调用指令包;在相机接口实现类模块中,实例化函数定义模块,以将可调用指令写入指令元数据;在服务层增设协议通信模块,并实例化协议通信模块,以将应用层通过第一协议下发的操作请求写入协议通信模块;协议通信模块解析操作请求,确定与操作请求对应的基于第二协议的可调用指令,并基于确定的可调用指令与USB相机通信,以使USB相机对操作请求做出响应,并将响应结果通过相机设备会话控制模块返回所述应用层。本申请无需进行代码的二次开发,实现了可以多协议共同控制USB相机。

权利要求 :

1.一种多协议控制USB相机的实现方法,所述USB相机的相机控制框架包括依次连接的应用层、服务层和硬件抽象层,所述服务层包含相机设备会话控制模块,所述硬件抽象层包含相机接口实现类模块,且所述USB相机是采用第一协议控制的,其特征在于,所述方法包括:在所述硬件抽象层增设函数定义模块,并在所述函数定义模块中定义基于第二协议的调用指令包,所述调用指令包包含至少一个定制化的可调用指令;

在所述相机接口实现类模块中,实例化所述函数定义模块,以将所述可调用指令写入所述USB相机的指令元数据中;

在所述服务层增设协议通信模块,并在所述相机设备会话控制模块中实例化所述协议通信模块,以将所述应用层通过所述第一协议下发的操作请求写入所述协议通信模块;

所述协议通信模块解析所述操作请求,确定与所述操作请求对应的基于所述第二协议的可调用指令,并基于确定的可调用指令与所述USB相机通信,以使所述USB相机对所述操作请求做出响应,并将响应结果通过所述相机设备会话控制模块返回所述应用层。

2.根据权利要求1所述的方法,其特征在于,所述在所述硬件抽象层增设函数定义模块,并在所述函数定义模块中定义基于第二协议的调用指令包,包括:构建函数定义模块,并将所述函数定义模块写入所述硬件抽象层;

在所述函数定义模块中,构建基于第二协议的定制化的调用指令包;

在所述调用指令包中定义用于实现所述相机控制框架结构体的多个定制函数,以形成可调用指令。

3.根据权利要求1所述的方法,其特征在于,所述在所述相机接口实现类模块中,实例化所述函数定义模块,以将所述调用指令包写入所述USB相机的指令元数据中,包括:在所述相机接口实现类模块中,修改所述调用指令包的get函数,以实例化所述函数定义模块;

调用所述函数定义模块中的所述调用指令包,并将所述调用指令包写入所述相机接口实现类模块中的调用指令组件中;

在所述USB相机启动时,将存储于所述调用指令组件中的调用指令包写入所述相机控制框架的指令元数据中。

4.根据权利要求1所述的方法,其特征在于,所述在所述服务层增设协议通信模块,并在所述相机设备会话控制模块中实例化所述协议通信模块,以将所述应用层通过所述第一协议下发的操作请求写入所述协议通信模块,包括:构建所述协议通信模块,并将所述协议通信模块写入所述服务层;

在所述相机设备会话控制模块,利用初始化函数,初始化所述协议通信模块;

解析所述应用层基于第一协议下发至所述相机设备会话控制模块的操作请求,得到所述操作请求携带的请求元数据;

在所述相机设备会话控制模块的请求处理函数中,将所述请求元数据传入所述协议通信模块,以实现所述协议通信模块的实例化。

5.根据权利要求1所述的方法,其特征在于,所述协议通信模块解析所述操作请求,确定与所述操作请求对应的基于所述第二协议的可调用指令,并基于确定的可调用指令与所述USB相机通信,以使所述USB相机对所述操作请求做出响应,并将响应结果通过所述相机设备会话控制模块返回所述应用层,包括:所述协议通信模块解析所述操作请求,得到所述操作请求中携带的请求元数据,以及包含于所述请求元数据中的请求指令包;

确定所述请求指令包是否包含基于所述第二协议的可调用指令,若是,则调用所述指令元数据中对应的第二协议的可调用指令与所述USB相机通信交互,并接收所述USB相机做出的响应结果;否则,则忽略所述操作请求;

将所述响应结果写入所述相机设备会话控制模块,以使所述相机设备会话控制模块将所述响应结果返回所述应用层。

6.根据权利要求5所述的方法,其特征在于,所述调用所述指令元数据中对应的第二协议的可调用指令与所述USB相机通信交互,包括:确定所述请求指令包包含的基于所述第二协议的第一可调用指令;

确定所述指令元数据中的调用指令包中与所述第一可调用指令对应的第二可调用指令;

从所述调用指令包中调用所述第二可调用指令,并发送至所述USB相机,以使所述USB相机做出响应。

7.根据权利要求5所述的方法,其特征在于,所述将响应结果通过所述相机设备会话控制模块返回所述应用层,包括:将所述响应结果写入所述协议通信模块的的结果数据包中;

在所述相机设备会话控制模块的结果获取函数中,调用所述协议通信模块,将所述结果数据包写入所述相机设备会话控制模块的结果获取函数的结果元数据中;

所述相机设备会话控制模块将所述结果元数据返回至所述应用层。

8.一种多协议控制USB相机的实现装置,其特征在于,所述装置用于实现权利要求1 7~中任一项所述的多协议控制USB相机的实现方法;

所述多协议控制USB相机的实现装置包括:

定制单元(510),用于在所述硬件抽象层增设函数定义模块,并在所述函数定义模块中定义基于第二协议的调用指令包,所述调用指令包包含至少一个定制化的可调用指令;

第一实例化单元(520),用于在所述相机接口实现类模块中,实例化所述函数定义模块,以将所述可调用指令写入所述USB相机的指令元数据中;

第二实例化单元(530),用于在所述服务层增设协议通信模块,并在所述相机设备会话控制模块中实例化所述协议通信模块,以将所述应用层通过所述第一协议下发的操作请求写入所述协议通信模块;

处理单元(540),用于所述协议通信模块解析所述操作请求,确定与所述操作请求对应的基于所述第二协议的可调用指令,并基于确定的可调用指令与所述USB相机通信,以使所述USB相机对所述操作请求做出响应,并将响应结果通过所述相机设备会话控制模块返回所述应用层。

9.一种电子设备,包括:

处理器;以及

被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行所述权利要求1 7任一项所述方法。

~

10.一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行所述权利要求1 7任一项所述方法。

~

说明书 :

多协议控制USB相机的实现方法、装置、设备及介质

技术领域

[0001] 本申请涉及相机控制技术领域,具体涉及一种多协议控制USB相机的实现方法、装置、设备及介质。

背景技术

[0002] 目前,Android12上原生系统官方Camera2 API通过UVC协议支持USB相机的基础操作,例如:获取USB相机的分辨率列表、获取USB相机预览数据流。但是如果USB相机的某些操作需要通过其他协议,如HID协议进行控制,则无法通过官方Camera2 API进行调用控制,这种情况下需要APP开发者使用官方USBManager API来进行HID协议控制的开发,即又要使用Camera2API还要再额外使用USBManager API,这给APP开发者造成额外的工作量。

发明内容

[0003] 本申请实施例针对上述情况,提出了一种多协议控制USB相机的实现方法、装置、设备及介质,以克服或者部分克服现有技术的不足。
[0004] 第一方面,本申请实施例提供了一种多协议控制USB相机的实现方法,所述USB相机的相机控制框架包括依次连接的应用层、服务层和硬件抽象层,所述服务层包含相机设备会话控制模块,所述硬件抽象层包含相机接口实现类模块,且所述USB相机是采用第一协议控制的,所述方法包括:
[0005] 在所述硬件抽象层增设函数定义模块,并在所述函数定义模块中定义基于第二协议的调用指令包,所述调用指令包包含至少一个定制化的可调用指令;
[0006] 在所述相机接口实现类模块中,实例化所述函数定义模块,以将所述可调用指令写入所述相机控制框架的指令元数据;
[0007] 在所述服务层增设协议通信模块,并在所述相机设备会话控制模块中实例化所述协议通信模块,以将所述应用层通过所述第一协议下发的操作请求写入所述协议通信模块;
[0008] 所述协议通信模块解析所述操作请求,确定与所述操作请求对应的基于所述第二协议的可调用指令,并基于确定的可调用指令与所述USB相机通信,以使所述USB相机对所述操作请求做出响应,并将响应结果通过所述相机设备会话控制模块返回所述应用层。
[0009] 第二方面,本申请实施例还提供了一种多协议控制USB相机的实现装置,其特征在于,所述装置用于实现前述的多协议控制USB相机的实现方法。
[0010] 第三方面,本申请实施例还提供了一种电子设备,包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行上述任一的方法。
[0011] 第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行上述任一的方法。
[0012] 本申请实施例采用的方法至少能够达到以下有益效果:
[0013] 本申请在现有USB架构的基础上,在硬件抽象层增设函数定义模块,以及在服务层增设协议通信模块,首先在函数定义模块中定义基于第二协议的定制化的可调用指令,并通过在相机接口实现类模块中,实例化函数定义模块,将可调用指令写入相机控制框架的元数据,使得这些可调用指令可供服务层的调用;当相机的应用层向服务层发放数据获取等操作请求时,可以在服务层的相机设备会话控制模块中实例化协议通信模块,从而将应用层下发的操作请求写入该协议通信模块,协议通信模块根据该操作请求,与第二协议通信,以使USB相机对所操作请求做出响应,并将响应结果通过写入相机设备会话控制模块并返回至相机的应用层,从而实现通过第二协议支持USB相机的基础操作等。本申请巧妙的利用了USB相机的相机控制框架的元数据可定制的属性,通过对服务层和硬件抽象层进行简单改造和定制,在不对USB硬件进行改造、只需对代码底层框架进行简单的改造的情况下,实现了可以通过第一协议和第二协议共同控制USB相机的目的,无需进行代码的二次开发,极大程度上节约了相机控制的代码开发成本,提高了开发效率。

附图说明

[0014] 此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0015] 图1示出了根据现有技术的一种USB相机的相机控制框架的结构示意图;
[0016] 图2示出了根据本申请的一个实施例的多协议控制USB相机的实现方法的流程示意图;
[0017] 图3示出了根据本申请的一个实施例的USB相机的相机控制框架的结构示意图;
[0018] 图4‑a示出了根据本申请的另一个实施例的多协议控制USB相机的实现方法的流程示意图;
[0019] 图4‑b示出了根据本申请的又一个实施例的多协议控制USB相机的实现方法的流程示意图;
[0020] 图5示出了根据本申请的一个实施例的多协议控制USB相机的实现装置的结构示意图;
[0021] 图6为本申请实施例中一种电子设备的结构示意图。

具体实施方式

[0022] 为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0023] 以下结合附图,详细说明本申请各实施例提供的技术方案。
[0024] 目前,Android12上原生系统官方Camera2 API通过UVC协议支持USB相机的基础操作,例如:获取USB相机的分辨率列表、获取USB相机预览数据流。但是如果USB相机的某些操作需要通过HID协议进行控制而不是通过UVC协议进行控制,则无法通过官方Camera2 API进行调用控制,需要APP开发者使用官方USBManagerAPI来进行HID协议的控制,这会给APP开发者造成额外的工作量,即又要使用Camera2 API还要再额外使用USBManager API。
[0025] 对此,本申请提供了一种多协议控制USB相机的实现方法,可以实现对现有的USB相机多协议的控制,图1示出了根据现有技术的一种USB相机的相机控制框架的结构示意图,从图1可以看出,USB相机的相机控制框架100包括依次连接:应用层(camera)110、服务层(camera service)120以及硬件抽象层(camera hardware interface)130,从业务逻辑上,应用层110可以理解为上层即APP层,硬件抽象层130可以理解为底层。在服务层120设有相机设备会话控制模块121(ExternalCameraDeviceSession),所述硬件抽象层130包含相机接口实现类模块131(ExternalCameraProviderImpl)。且图1示出的USB相机是基于第一协议,如UVC协议控制的。
[0026] 本申请在图1示出的相机控制框架100上做了巧妙的调整,图2示出了根据本申请的一个实施例的多协议控制USB相机的实现方法的流程示意图,从图2可以看出,本申请至少包括步骤S210~步骤D220:
[0027] 步骤S210:在所述硬件抽象层增设函数定义模块,并在所述函数定义模块中定义基于第二协议的调用指令包,所述调用指令包包含至少一个定制化的可调用指令。
[0028] 本申请的主要构思在于,利用相机的相机控制框架,如Android Camera2API中的元数据(Metadata)可定制的属性,达到通过HID协议控制相机的效果,本申请的下述实施例均以相机控制框架为Android Camera2 API、第一协议为UVC协议、第二协议为HID协议进行说明。
[0029] 首先,在硬件抽象层(camera hardware interface)增设函数定义模块,请参考图3,图3示出了根据本申请的一个实施例的USB相机的相机控制框架的结构示意图,具体的,请同时参考图1和图3,相对于图1,图3示出的相机控制框架200,在所述硬件抽象层增设函数定义模块,以及在服务层增设协议通信模块。从图3可以看出,相机控制框架200包括依次连接的应用层(camera)210、服务层(camera service)220以及硬件抽象层(camera hardware  interface)230,在服务层220设有相机设备会话控制模块221(ExternalCameraDeviceSession),硬件抽象层230包含相机接口实现类模块231(ExternalCameraProviderImpl);在本申请中,在硬件抽象层230增设函数定义模块232,由于函数定义模块232与相机接口实现类模块231均为虚拟模块,图3示出的结构只是为了示例性说明,函数定义模块232与相机接口实现类模块231的代码开发体现形式可以相互独立的,也可以是相互嵌套的,对此本申请不作限定,从逻辑上,相机接口实现类模块231与函数定义模块232是可以交互的,相机接口实现类模块231可以调用函数定义模块232的相关函数和功能。
[0030] 在函数定义模块232内,可以增加定制化的基于第二协议(如HID协议)调用指令包Vendortag,在Vendortag中,包含若干个定制化的可调用指令,这些指令可供后续调用。需要说明的是,调用指令包Vendortag可以以“包”的形式呈现,也可以不是以“包”的形式呈现,其可以为任何一个合理的数据形式。
[0031] 具体的,在本申请的一些实施例中,所述在所述硬件抽象层增设函数定义模块,并在所述函数定义模块中定义基于第二协议的至少一个定制化的可调用指令,包括:构建函数定义模块,并将所述函数定义模块写入所述硬件抽象层;在所述函数定义模块中,构建基于第二协议的定制化的调用指令包;在所述调用指令包中定义用于实现所述相机控制框架结构体的多个定制函数,以形成至少一个可调用指令。
[0032] 首先构建函数定义模块,然后将函数定义模块232写入硬件抽象层230中,然后在函数定义模块232中,增加基于HID协议的调用指令包Vendortag,并在函数定义模块232的调用指令包Vendortag中,进行Android官方结构体多个函数的个性化配置,来达到定制调用指令包Vendortag中的效果,也就是说调用指令包Vendortag包括一个或者多个可调用指令,其中,上述的多个函数具体可以为Android官方结构体vendor_tag_ops_t中的get_tag_count、get_all_tags、get_section_name、get_tag_name、get_tag_type的五个函数。
[0033] 步骤S220:在所述相机接口实现类模块中,实例化所述函数定义模块,以将所述调用指令包写入所述相机控制框架的元数据。
[0034] 在对可调用指令进行定制后,这些指令还不能被调用,需要将其写入Android Camera2 API中的Metadata中,方可被后续调用,通过将函数定义模块进行实例化,即可实现将Vendortag写入Android Camera2 API中的Metadata中。
[0035] 具体的,实例化函数定义模块的过程可参考下述过程,在一些实施例中,在所述相机接口实现类模块中,实例化所述函数定义模块,以将所述调用指令包写入所述相机控制框架的元数据,包括:在所述相机接口实现类模块中,修改所述调用指令包的get函数,以实例化所述函数定义模块;调用所述函数定义模块中的所述调用指令包,并将所述调用指令包写入所述相机接口实现类模块中的调用指令组件中;在所述USB相机启动时,将存储于所述所述相机接口实现类模块中的调用指令包写入所述相机控制框架的元数据中。
[0036] 在相机接口实现类模块231中,修改调用指令包的get函数(getVendorTags函数),实例化函数定义模块232;并调用函数定义模块232中定制的调用指令包Vendortag,将定制好的Vendortag写入相机接口实现类模块231中的调用指令组件(mVendorTagSections),这样就能借用Android系统的开机流程,开机时会将相机接口实现类模块231中调用指令组件里的定制的调用指令包Vendortag写入元数据Metadata类里面,这样在应用层,就能获取到函数定义模块232中定制的Vendortag。
[0037] 步骤S230:在所述服务层增设协议通信模块,并在所述相机设备会话控制模块中实例化所述协议通信模块,以将所述应用层通过所述第一协议下发的操作请求写入所述协议通信模块。
[0038] 另一方面,在服务层220增设协议通信模块222,具体的,可先构建所述协议通信模块222,并将协议通信模块写入服务层220,请参考图3,相机设备会话控制模块221和协议通信模块222均为虚拟模块,图3示出的结构只是为了示例性说明,相机设备会话控制模块221和协议通信模块222的代码开发体现形式可以相互独立的,也可以是相互嵌套的,对此本申请不作限定,从逻辑上,相机设备会话控制模块221与协议通信模块222是可以交互的,相机设备会话控制模块221可以调用协议通信模块222的相关函数和功能。
[0039] 通过协议通信模块222,可实现USB协议与HID协议进行通信,并定义出HID协议的控制接口,在控制接口内进行HID协议的数据传输与接受。
[0040] 当应用层210有需求时,如获取USB相机的分辨率列表、获取USB相机预览数据流等,将操作请求下发至服务层220,具体下发到服务层220的相机设备会话控制模块221中,在相机设备会话控制模块221通过实例化协议通信模块222,可将应用层210下发的操作请求写入通信模块222中。
[0041] 需要说明的是,操作请求的下发仍然是基于原有的数据流向进行的,应用层210仍然是基于第一协议向服务层220下发操作请求的。
[0042] 具体的,所述相机设备会话控制模块中实例化所述协议通信模块,以将所述应用层通过所述第一协议下发的操作请求写入所述协议通信模块,包括:在所述相机设备会话控制模块,利用初始化函数,初始化所述协议通信模块;解析所述应用层基于第一协议下发至所述相机设备会话控制模块的操作请求,得到所述操作请求携带的请求元数据;在所述相机设备会话控制模块的请求处理函数中,将所述请求元数据传入所述协议通信模块,以实现所述协议通信模块的实例化。
[0043] 对于通信模块222的实例化,可以在相机设备会话控制模块221中,采用初始化函数(initialize函数)对通信模块222进行初始化,然后解析应用层210下发的操作请求,在操作请求中携带有请求元数据,其中,请求元数据包含了该操作请求所需的各种指令,然后可以在相机设备会话控制模块221的请求处理函数(processCaptureResult)中,将解析得到的请求元数据传入协议通信模块222中。
[0044] 步骤S240:所述协议通信模块解析所述操作请求,确定与所述操作请求对应的基于所述第二协议的可调用指令,并基于确定的可调用指令与所述USB相机通信,以使所述USB相机对所述操作请求做出响应,并将响应结果通过所述相机设备会话控制模块返回所述应用层。
[0045] 最后,协议通信模块222解析被写入其中的操作请求中,若确定操作请求请求了调用指令包中包含的基于第二协议的可调用指令,则协议通信模块222调用对应的可调用指令与USB相机交互,以使USB相机做出响应,接收USB相机反馈的响应结果,并将响应结果写入相机设备会话控制模块,通过相机设备会话控制模块返回应用层。
[0046] 具体的,所述协议通信模块222解析所述操作请求,确定与所述操作请求对应的基于所述第二协议的可调用指令,并基于确定的可调用指令与所述USB相机通信,以使所述USB相机对所述操作请求做出响应,并将响应结果通过所述相机设备会话控制模块返回所述应用层,包括:所述协议通信模块解析所述操作请求,得到所述操作请求中携带的请求元数据,以及包含于所述请求元数据中的请求指令包;确定所述请求指令包是否包含了基于所述第二协议的可调用指令,若是,则调用所述指令元数据中对应的第二协议的可调用指令与所述USB相机通信交互,并接收所述USB相机做出的响应结果;否则,则忽略所述操作请求;将所述响应结果写入所述相机设备会话控制模块,以使所述相机设备会话控制模块将所述响应结果返回所述应用层。
[0047] 操作请求中携带的数据通常也是元数据Metadata的形式,这里记为请求元数据,在请求元数据中包含了Vendortag形式的请求指令包,对请求指令包进行解析,可以得到操作请求都请求了哪些指令,请求指令包包含的指令可以为基于第一协议的调用指令和/或基于第二协议的调用指令,也就是说,操作请求可能只请求了基于第一协议的调用指令、也可能只请求了基于第二协议的调用指令,也可能同时请求了基于第一协议的调用指令和基于第二协议的调用指令,对于操作请求只请求了基于第一协议的调用指令的情况,也就是确定出请求指令包未请求基于所述第二协议的调用指令,此时可直接忽略本次的操作请求不作任何处理;对于操作请求只请求了基于第二协议的调用指令的情况,则可以根据上述本申请中涉及的流程进行处理;若操作请求同时请求了基于第一协议的调用指令和基于第二协议的调用指令的情况,可以将于第一协议的调用指令和基于第二协议的调用指令分开处理,对于基于第一协议的调用指令按照原有的流程进行处理,对于基于第二协议的调用指令则进入本申请的流程,最后可以将二者的结果合并返回至服务层。
[0048] 以下对基于第二协议的调用指令的处理进行说明,协议通信模块222对请求指令包进行解析,判断应用层210下发的操作请求中的请求指令包是否请求了基于所述第二协议的可调用指令,若是,则调用USB相机的指令元数据中已经定制好的基于第二协议的可调用指令,并基于该可调用指令与USB相机进行通信交互。
[0049] 具体的,所述调用所述指令元数据中对应的第二协议的可调用指令与所述USB相机通信交互,包括:确定所述请求指令包包含的基于所述第二协议的第一可调用指令;确定所述指令元数据中的调用指令包中与所述第一可调用指令对应的第二可调用指令;从所述调用指令包中调用所述第二可调用指令,并发送至所述USB相机,以使所述USB相机做出响应。
[0050] 基于指令请求包中的第一调用指令到指令元数据的调用指令包中进行匹配,确定出调用指令包中与第一调用指令对应的第二可调用指令,然后从调用指令包中调用匹配到的第二可调用指令,然后将第二可调用指令发送至USB相机,以使USB相机做出响应;接收USB相机做出的响应结果,如该响应结果为相机分辨率等。
[0051] 协议通信模块222在获取到响应结果后,不能直接反馈给应用层,而是需要通过相机设备会话控制模块221返回应用层210。具体的,在本申请的一些实施例中,所述将响应结果通过所述相机设备会话控制模块返回所述应用层,包括:将所述响应结果写入所述协议通信模块的的结果数据包中;在所述相机设备会话控制模块的结果获取函数中,调用所述协议通信模块,将所述结果数据包写入所述相机设备会话控制模块的结果获取函数的结果元数据中;所述相机设备会话控制模块将所述结果元数据返回至所述应用层。
[0052] 也就是说,协议通信模块222首先将响应结果写入自身的Vendortag形式的结果数据包中,然后在相机设备会话控制模块221的结果获取函数(processCaptureResult函数)中,调用协议通信模块222的结果数据包,即可将结果数据包写入相机设备会话控制模块221的结果获取函数(processCaptureResult函数)中的以Medatadata形式呈现的结果元数据中,并进一步的通过回调,将结果数据包返回至应用层210,这样应用层210就能通过Android Camera2 API中的方法获取到协议通信模块222与第二协议进行通信的结果。
[0053] 由如1所述的方法可以看出,本申请在现有USB架构的基础上,在硬件抽象层增设函数定义模块,以及在服务层增设协议通信模块,首先在函数定义模块中定义基于第二协议的定制化的可调用指令,并通过在相机接口实现类模块中,实例化函数定义模块,将可调用指令写入相机控制框架的元数据,使得这些可调用指令可供服务层的调用;当相机的应用层向服务层发放数据获取等操作请求时,可以在服务层的相机设备会话控制模块中实例化协议通信模块,从而将应用层下发的操作请求写入该协议通信模块,协议通信模块根据该操作请求,与第二协议通信,以使USB相机对所操作请求做出响应,并将响应结果通过写入相机设备会话控制模块并返回至相机的应用层,从而实现通过第二协议支持USB相机的基础操作等。本申请巧妙的利用了USB相机的相机控制框架的元数据可定制的属性,通过对服务层和硬件抽象层进行简单改造和定制,在不对USB硬件进行改造、只需对代码底层框架进行简单的改造的情况下,实现了可以通过第一协议和第二协议共同控制USB相机的目的,无需进行代码的二次开发,极大程度上节约了相机控制的代码开发成本,提高了开发效率。
[0054] 图4‑a示出了根据本申请的另一个实施例的多协议控制USB相机的实现方法的流程示意图,图4‑b示出了根据本申请的又一个实施例的多协议控制USB相机的实现方法的流程示意图,多协议控制USB相机的实现方法主要包括两部分,其一是多协议控制USB相机的准备工作,即图4‑a示出的部分;其二是对操作请求的处理,即图4‑b示出的部分,以下对两部分分别进行说明:
[0055] 请参考图4‑a,在Android系统开机时,启动硬件抽象层的相机接口实现类模块ExternalCameraProviderImpl,然后再初始化函数定义模块,并在函数定义模块中添加自定义Ventortag,通过对函数定义模块实例化,将自定义Ventortag写入USB相机的指令元数据CameraMetadata中,在自定义Ventortag包含多个可调用的HID指令。至此准备工作完毕。
[0056] 请参考图4‑b,相机APP首先建立一个对话Session,具体的,利用Camera2API获取前述的自定义Ventortag,然后创建Session,然后启动服务层的相机设备会话控制模块ExternalCameraDeviceSession,然后初始化协议通信模块,若初始化成功,则Session建立成功。
[0057] Session建立成功后正式进入对操作请求的处理阶段,相机APP利用Camera2 API向服务层下发CaptureRequest。
[0058] 服务层的相机设备会话控制模块ExternalCameraDeviceSession将CaptureRequest写入processCaptureRequest函数中,并通过实例化协议通信模块,将CaptureRequest写入协议通信模块中。
[0059] 协议通信模块解析CaptureRequest,确定其中涉及的HID指令,从指令元数据CameraMetadata调用对应的HID指令,下发HID通信,使得USB相机响应指令。
[0060] 获取USB相机的响应结果,将该响应结果更新在相机设备会话控制模块ExternalCameraDeviceSession的processCaptureRequest函数中。
[0061] 通过Camera2 API的结果回调函数,将响应结果返回至相机APP中。
[0062] 图5示出了根据本申请的一个实施例的多协议控制USB相机的实现装置的结构示意图,从图5可以看出,多协议控制USB相机的实现装置500包括:
[0063] 定制单元510,用于在所述硬件抽象层增设函数定义模块,并在所述函数定义模块中定义基于第二协议的调用指令包,所述调用指令包包含至少一个定制化的可调用指令;
[0064] 第一实例化单元520,用于在所述相机接口实现类模块中,实例化所述函数定义模块,以将所述可调用指令写入所述USB相机的指令元数据中;
[0065] 第二实例化单元530,用于在所述服务层增设协议通信模块,并在所述相机设备会话控制模块中实例化所述协议通信模块,以将所述应用层通过所述第一协议下发的操作请求写入所述协议通信模块;
[0066] 处理单元540,用于所述协议通信模块解析所述操作请求,确定与所述操作请求对应的基于所述第二协议的可调用指令,并基于确定的可调用指令与所述USB相机通信,以使所述USB相机对所述操作请求做出响应,并将响应结果通过所述相机设备会话控制模块返回所述应用层。
[0067] 在本申请的一些实施例中,在上述装置中,定制单元510,用于构建函数定义模块,并将所述函数定义模块写入所述硬件抽象层;在所述函数定义模块中,构建基于第二协议的定制化的调用指令包;在所述调用指令包中定义用于实现所述相机控制框架结构体的多个定制函数,以形成可调用指令。
[0068] 在本申请的一些实施例中,在上述装置中,第一实例化单元520,用于在所述相机接口实现类模块中,修改所述调用指令包的get函数,以实例化所述函数定义模块;调用所述函数定义模块中的所述调用指令包,并将所述调用指令包写入所述相机接口实现类模块中的调用指令组件中;在所述USB相机启动时,将存储于所述所述调用指令组件中的调用指令包写入所述相机控制框架的指令元数据中。
[0069] 在本申请的一些实施例中,在上述装置中,第二实例化单元530,用于构建所述协议通信模块,并将所述协议通信模块写入所述服务层;在所述相机设备会话控制模块,利用初始化函数,初始化所述协议通信模块;解析所述应用层基于第一协议下发至所述相机设备会话控制模块的操作请求,得到所述操作请求携带的请求元数据;在所述相机设备会话控制模块的请求处理函数中,将所述请求元数据传入所述协议通信模块,以实现所述协议通信模块的实例化。
[0070] 在本申请的一些实施例中,在上述装置中,处理单元540,用于所述协议通信模块解析所述操作请求,得到所述操作请求中携带的请求元数据,以及包含于所述请求元数据中的请求指令包;确定所述请求指令包是否包含基于所述第二协议的可调用指令,若是,则调用所述指令元数据中对应的第二协议的可调用指令与所述USB相机通信交互,并接收所述USB相机做出的响应结果;否则,则忽略所述操作请求;将所述响应结果写入所述相机设备会话控制模块,以使所述相机设备会话控制模块将所述响应结果返回所述应用层。
[0071] 在本申请的一些实施例中,在上述装置中,处理单元540,用于确定所述请求指令包包含的基于所述第二协议的第一可调用指令;确定所述指令元数据中的调用指令包中与所述第一可调用指令对应的第二可调用指令;从所述调用指令包中调用所述第二可调用指令,并发送至所述USB相机,以使所述USB相机做出响应。
[0072] 在本申请的一些实施例中,在上述装置中,处理单元540,用于将所述响应结果写入所述协议通信模块的的结果数据包中;在所述相机设备会话控制模块的结果获取函数中,调用所述协议通信模块,将所述结果数据包写入所述相机设备会话控制模块的结果获取函数的结果元数据中;所述相机设备会话控制模块将所述结果元数据返回至所述应用层。
[0073] 需要说明的是,上述的多协议控制USB相机的实现装置可一一实现前述的多协议控制USB相机的实现方法,这里不再一一赘述。
[0074] 图6是本申请的一个实施例电子设备的结构示意图。请参考图6,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random‑Access Memory,RAM),也可能还包括非易失性存储器(non‑volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
[0075] 处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(Extended Industry Standard Architecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0076] 存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
[0077] 处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成多协议控制USB相机的实现装置。处理器,执行存储器所存放的程序,并具体用于执行前述方法。
[0078] 上述如本申请图5所示实施例揭示的多协议控制USB相机的实现装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的配置信息,结合其硬件完成上述方法的步骤。
[0079] 该电子设备还可执行图5中多协议控制USB相机的实现装置执行的方法,并实现多协议控制USB相机的实现装置在图5所示实施例的功能,本申请实施例在此不再赘述。
[0080] 本申请实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的电子设备执行时,能够使该电子设备执行图5所示实施例中多协议控制USB相机的实现装置执行的方法,并具体用于执行前述方法。
[0081] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品的形式。
[0082] 本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0083] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0084] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0085] 在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
[0086] 内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
[0087] 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现配置信息存储。配置信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD‑ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的配置信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0088] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的同一要素。
[0089] 本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品的形式。
[0090] 以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。