UVCCamera 源码解析

本文将通过UVCCamera源码研究 概述相机传感器数据采集至USB数据传输整个过程 

下载源码配置调试环境

git clone GitHub - saki4510t/UVCCamera: library and sample to access to UVC web camera on non-rooted Android device

注释调原有 ndk-build编译方式 

//tasks.withType(JavaCompile) {
//	compileTask -> compileTask.dependsOn ndkBuild
//}
//
//String getNdkBuildPath() {
//	Properties properties = new Properties()
//	properties.load(project.rootProject.file('local.properties').newDataInputStream())
//	def ndkBuildingDir = properties.getProperty("ndk.dir")
//	def ndkBuildPath = ndkBuildingDir
//	if (Os.isFamily(Os.FAMILY_WINDOWS)) {
//		ndkBuildPath = ndkBuildingDir + '/ndk-build.cmd'
//	} else {
//		ndkBuildPath = ndkBuildingDir + '/ndk-build'
//	}
//	return ndkBuildPath
//}
//
//task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
//	println('executing ndkBuild')
//	def ndkBuildPath = getNdkBuildPath();
//	commandLine ndkBuildPath, '-j8', '-C', file('src/main').absolutePath
//}

//task ndkClean(type: Exec, description: 'clean JNI libraries') {
//	println('executing ndkBuild clean')
//	def ndkBuildPath = getNdkBuildPath();
//	commandLine ndkBuildPath, 'clean', '-C', file('src/main').absolutePath
//}
//
//clean.dependsOn 'ndkClean'

添加

	externalNativeBuild {
		ndkBuild {
			path file('src/main/jni/Android.mk')
		}
	}

以支持 Linked c++ jni代码调试 

整个UVCCamera框架层级

UVC与USB

UVC,全称为:USB video(device) class,是微软与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,目前已成为USB org标准之一。

USB协议中,除了通用的软硬件电气接口规范等,还包含了各种各样的Class协议,用来为不同的功能定义各自的标准接口和具体的总线上的数据交互格式和内容。这些Class协议的数量非常多,最常见的比如支持U盘功能的Mass Storage Class,以及通用的数据交换协议:CDC class。此外还包括Video、Audio Class, Print Class等等。正是由于这些Class协议,大大促进了USB设备的普及,比如说各个厂商生产的U盘都能通过操作系统自带的驱动程序来使用。

所以说UVC仅仅只是USB规范协议中设备类规范的其中一种,是用作USB接口的视频设备的一个统一的数据交换规范。使用 UVC 的好处 USB 在 Video这块也成为一项标准了之后,硬件在各个程序之间彼此运行会更加顺利,而且也省略了驱动程序安装这一环节,操作系统只要是 Windows XP SP2 之后的版本都可以支持 UVC,Linux系统自2.4以后的内核都支持了大量的设备驱动,其中支持UVC设备。

UVC 等时传输中的URB_ISOCH_TRANSFER - USB中文网

UVCCamera中 libusb部分 应该是aosp某平台代码  

android libusb编译方式

 目录结构   同 https://github.com/libusb/libusb 

libusb的核心代码。子目录os是支持的各种平台,从文件名就可以看出来,例如‘windows_winusb.c’。具体的上网查了下,分别是"Linux, OS X, Windows, Windows CE, Android, OpenBSD/NetBSD, Haiku。"

Libusb在Android平台上的环境以及原理_android libusb_hehao13956455的博客-CSDN博客

java源码部分参  UVC camera 抓包分析_江太翁的博客-CSDN博客  

下面主要结合UVC分析相机打开及预览 数据流走向 

打开相机

预览

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值