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框架层级

UVCCamera 源码解析_第1张图片

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编译方式

UVCCamera 源码解析_第2张图片

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

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

UVCCamera 源码解析_第3张图片UVCCamera 源码解析_第4张图片

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

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

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

打开相机

UVCCamera 源码解析_第5张图片

 

预览

UVCCamera 源码解析_第6张图片

 

UVCCamera 源码解析_第7张图片

 

UVCCamera 源码解析_第8张图片

 

 

你可能感兴趣的:(android)