RK3568平台 安卓hal3适配usb camera

一.RK安卓hal3 camera框架

Camera hal3 在 android 框架中所处的位置如上图, 对上,主要实现 Framework 一整套 API 接口,响应其 控制命令,返回数据与控制参数结果。 对下, 主要是通 V4l2 框架实现与 kernel 的交互。3a 控制则是通 control loop 接口与 camera_engine_isp 交互。 另外,其中一些组件或功能的实现也会调用到其他一些第三方 库, 如 cameraBuffer 相关,会调用到 Galloc 相关库, jpeg 编码则会调用到 Hwjpeg 相关库。

二.Camera hal3 与 Frame work 交互时序 

三.usbcamera调试

首先硬件给usb供电,供电后插上usbcamera可以看到新生成的pid vid。

ls /dev/video*

新生成了video1 video2.

media-ctl -d /dev/media0 -p
1|console:/ # media-ctl -d /dev/media0 -p
Opening media device /dev/media0
Enumerating entities
Found 4 entities
Enumerating pads and links
Media controller API version 0.0.189Media device information
------------------------
driver          uvcvideo
model           USB2.0 PC CAMERA: USB2.0 PC CAM
serial
bus info        usb-fc880000.usb-1.3
hw revision     0x100
driver version  0.0.189Device topology
- entity 1: USB2.0 PC CAMERA: USB2.0 PC CAM (1 pad, 1 link)type Node subtype V4Ldevice node name /dev/video1pad0: Sink<- "Processing 2":1 [ENABLED,IMMUTABLE]- entity 4: USB2.0 PC CAMERA: USB2.0 PC CAM (0 pad, 0 link)type Node subtype V4Ldevice node name /dev/video2- entity 8: Processing 2 (2 pads, 2 links)type V4L2 subdev subtype Unknownpad0: Sink
v4l2_subdev_open: Failed to open subdev device node<- "Input 1":0 [ENABLED,IMMUTABLE]pad1: Source
v4l2_subdev_open: Failed to open subdev device node-> "USB2.0 PC CAMERA: USB2.0 PC CAM":0 [ENABLED,IMMUTABLE]- entity 11: Input 1 (1 pad, 1 link)type V4L2 subdev subtype Sensorpad0: Source
v4l2_subdev_open: Failed to open subdev device node-> "Processing 2":0 [ENABLED,IMMUTABLE]

 查看拓扑图,生成新的video1 video2.

dumpsys media.camera
onsole:/ # dumpsys media.camera== Service global info: ==Number of camera devices: 1
Number of normal camera devices: 1
Number of public camera devices visible to API1: 1Device 0 maps to "101"
Active Camera Clients:
[]
Allowed user IDs: 0== Camera service events log (most recent at top): ==02-01 18:52:22 : ADD device 101, reason: (Device added)02-01 18:50:29 : REMOVE device 101, reason: (Device status changed from 1 to 0)02-01 18:08:37 : DISCONNECT device 101 client for package com.android.camera2 (PID 6195)02-01 18:08:37 : CONNECT device 101 client for package com.android.camera2 (PID 6195)02-01 18:06:25 : ADD device 101, reason: (Device added)02-01 18:06:16 : REMOVE device 101, reason: (Device status changed from 1 to 0)02-01 18:03:23 : ADD device 101, reason: (Device added)02-01 18:01:26 : REMOVE device 101, reason: (Device status changed from 1 to 0)02-01 18:00:53 : DISCONNECT device 101 client for package com.android.camera2 (PID 4701)02-01 18:00:53 : CONNECT device 101 client for package com.android.camera2 (PID 4701)02-01 18:00:34 : DISCONNECT device 101 client for package com.android.camera2 (PID 3004)02-01 18:00:34 : CONNECT device 101 client for package com.android.camera2 (PID 3004)02-01 18:00:29 : DISCONNECT device 101 client for package com.android.camera2 (PID 3004)02-01 18:00:29 : CONNECT device 101 client for package com.android.camera2 (PID 3004)02-01 18:00:04 : ADD device 101, reason: (Device added)02-01 18:00:01 : USER_SWITCH previous allowed user IDs: <None>, current allowed user IDs: 0== Camera device 101 dynamic info: ==Device 101 is closed, no client instance
== Camera Provider HAL external/0-0 (v2.5, remote) static info: 1 devices: ==
== Camera HAL device device@3.4/external/101 (v3.4) static information: ==Resource cost: 100Conflicting devices: NoneAPI1 info:Has a flash unit: falseFacing: FrontOrientation: 0API2 camera characteristics:Dumping camera metadata array: 55 / 55 entries, 2048 / 2048 bytes of extra data.Version: 1, Flags: 00000000android.info.supportedHardwareLevel (150000): byte[1][EXTERNAL ]android.colorCorrection.availableAberrationModes (00004): byte[1][0 ]android.control.aeAvailableAntibandingModes (10012): byte[1][3 ]android.control.maxRegions (1001c): int32[3][0 0 0 ]android.control.availableVideoStabilizationModes (1001a): byte[1][0 ]android.control.awbAvailableModes (1001b): byte[1][1 ]android.control.aeAvailableModes (10013): byte[1][1 ]android.control.availableEffects (10018): byte[1][0 ]android.control.availableModes (10026): byte[2][0 1 ]android.edge.availableEdgeModes (30002): byte[1][0 ]android.flash.info.available (50000): byte[1][FALSE ]android.hotPixel.availableHotPixelModes (60001): byte[1][0 ]android.jpeg.availableThumbnailSizes (70007): int32[14][0 0 176 144 ][240 144 256 144 ][240 160 256 154 ][240 180 ]android.jpeg.maxSize (70008): int32[1][3145728 ]android.lens.info.focusDistanceCalibration (90007): byte[1][UNCALIBRATED ]android.lens.info.availableOpticalStabilization (90003): byte[1][0 ]android.lens.facing (80005): byte[1][FRONT ]android.noiseReduction.availableNoiseReductionModes (a0002): byte[1][0 ]android.noiseReduction.mode (a0000): byte[1][OFF ]android.request.partialResultCount (c000b): int32[1][1 ]android.request.pipelineMaxDepth (c000a): byte[1][4 ]android.request.maxNumOutputStreams (c0006): int32[3][0 2 1 ]android.request.maxNumInputStreams (c0008): int32[1][0 ]android.scaler.availableMaxDigitalZoom (d0004): float[1][4.00000000 ]android.scaler.croppingType (d000d): byte[1][CENTER_ONLY ]android.sensor.availableTestPatternModes (e0019): int32[2][0 1 ]android.sensor.info.timestampSource (f0008): byte[1][UNKNOWN ]android.sensor.orientation (e000e): int32[1][0 ]android.shading.availableModes (100002): byte[1][0 ]android.statistics.info.availableFaceDetectModes (120000): byte[1][0 ]android.statistics.info.maxFaceCount (120002): int32[1][0 ]android.statistics.info.availableHotPixelMapModes (120006): byte[1][0 ]android.statistics.info.availableLensShadingMapModes (120007): byte[1][0 ]android.sync.maxLatency (170001): int32[1][UNKNOWN ]android.request.availableRequestKeys (c000d): int32[28][3 65536 65537 65538 ][65539 65542 65541 65543 ][65545 65546 65547 65549 ][65550 65551 65552 65553 ][262146 458755 458756 458757 ][458758 524292 655360 851968 ][917528 1114112 1114115 65583 ]android.request.availableResultKeys (c000e): int32[35][3 65536 65537 65538 ][65539 65542 65567 65541 ][65543 65568 65545 65546 ][65547 65570 65549 65550 ][65551 65552 65553 262146 ][262149 458755 458756 458757 ][458758 524292 655360 786441 ][851968 917520 1114112 1114115 ][1114128 1114126 65583 ]android.request.availableCharacteristicsKeys (c000f): int32[43][4 65554 65555 65556 ][65557 65558 65572 65559 ][65560 65574 65561 65562 ][65563 65573 65564 327680 ][1376256 458759 524293 589827 ][589831 655362 786444 786440 ][786438 786443 786442 851972 ][851978 851981 983040 983044 ][983046 983050 983048 917518 ][1048578 1179648 1179654 1179655 ][1179650 1507329 65582 ]android.control.aeCompensationRange (10015): int32[2][0 0 ]android.control.aeCompensationStep (10016): rational[1][(0 / 1) ]android.control.afAvailableModes (10017): byte[2][1 0 ]android.control.availableSceneModes (10019): byte[1][0 ]android.control.aeLockAvailable (10024): byte[1][FALSE ]android.control.awbLockAvailable (10025): byte[1][FALSE ]android.scaler.availableStreamConfigurations (d000a): int32[72][33 160 120 OUTPUT ][35 160 120 OUTPUT ][34 160 120 OUTPUT ][33 176 144 OUTPUT ][35 176 144 OUTPUT ][34 176 144 OUTPUT ][33 320 240 OUTPUT ][35 320 240 OUTPUT ][34 320 240 OUTPUT ][33 352 288 OUTPUT ][35 352 288 OUTPUT ][34 352 288 OUTPUT ][33 640 480 OUTPUT ][35 640 480 OUTPUT ][34 640 480 OUTPUT ][33 800 600 OUTPUT ][35 800 600 OUTPUT ][34 800 600 OUTPUT ]android.scaler.availableMinFrameDurations (d000b): int64[72][33 160 ][120 33333333 ][35 160 ][120 33333333 ][34 160 ][120 33333333 ][33 176 ][144 33333333 ][35 176 ][144 33333333 ][34 176 ][144 33333333 ][33 320 ][240 33333333 ][35 320 ][240 33333333 ][34 320 ][240 33333333 ][33 352 ][288 33333333 ][35 352 ][288 33333333 ][34 352 ][288 33333333 ][33 640 ][480 33333333 ][35 640 ][480 33333333 ][34 640 ][480 33333333 ][33 800 ][600 33333333 ][35 800 ][600 33333333 ][34 800 ][600 33333333 ]android.scaler.availableStallDurations (d000c): int64[72][33 160 ][120 1000000000 ][35 160 ][120 0 ][34 160 ][120 0 ][33 176 ][144 1000000000 ][35 176 ][144 0 ][34 176 ][144 0 ][33 320 ][240 1000000000 ]

dump出来可以看到生成新的cameraid。

Number of camera devices: 1

Number of normal camera devices: 1

v4l2-ctl -d /dev/video1 --all

 查看video1信息

130|console:/ # v4l2-ctl -d /dev/video1 --all
Driver Info:Driver name      : uvcvideoCard type        : USB2.0 PC CAMERA: USB2.0 PC CAMBus info         : usb-fc880000.usb-1.3Driver version   : 5.10.189Capabilities     : 0x84a00001Video CaptureMetadata CaptureStreamingExtended Pix FormatDevice CapabilitiesDevice Caps      : 0x04200001Video CaptureStreamingExtended Pix Format
Media Driver Info:Driver name      : uvcvideoModel            : USB2.0 PC CAMERA: USB2.0 PC CAMSerial           :Bus info         : usb-fc880000.usb-1.3Media version    : 5.10.189Hardware revision: 0x00000100 (256)Driver version   : 5.10.189
Interface Info:ID               : 0x03000002Type             : V4L Video
Entity Info:ID               : 0x00000001 (1)Name             : USB2.0 PC CAMERA: USB2.0 PC CAMFunction         : V4L2 I/OPad 0x01000007   : SinkLink 0x0200000d: from remote pad 0x100000a of entity 'Processing 2': Data, Enabled, Immutable
Priority: 2
Video input : 0 (Input 1: ok)
Format Video Capture:Width/Height      : 640/480Pixel Format      : 'YUYV'Field             : NoneBytes per Line    : 1280Size Image        : 614400Colorspace        : DefaultTransfer Function : Default (maps to Rec. 709)YCbCr/HSV Encoding: Default (maps to ITU-R 601)Quantization      : Default (maps to Limited Range)Flags             :
Crop Capability Video Capture:Bounds      : Left 0, Top 0, Width 640, Height 480Default     : Left 0, Top 0, Width 640, Height 480Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 640, Height 480, Flags:
Selection: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags:
Streaming Parameters Video Capture:Capabilities     : timeperframeFrames per second: 30.000 (30/1)Read buffers     : 0brightness 0x00980900 (int)    : min=0 max=255 step=1 default=128 value=128contrast 0x00980901 (int)    : min=0 max=255 step=1 default=135 value=135saturation 0x00980902 (int)    : min=0 max=255 step=1 default=75 value=75hue 0x00980903 (int)    : min=-127 max=127 step=1 default=0 value=0gamma 0x00980910 (int)    : min=1 max=8 step=1 default=4 value=4power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1sharpness 0x0098091b (int)    : min=0 max=15 step=1 default=5 value=5backlight_compensation 0x0098091c (int)    : min=1 max=5 step=1 default=1 value=1
v4l2-ctl -d /dev/video1 --list-formats-ext

查看video1支持的格式和分辨率

console:/ # v4l2-ctl -d /dev/video1 --list-formats-ext
ioctl: VIDIOC_ENUM_FMTIndex       : 0Type        : Video CapturePixel Format: 'YUYV'Name        : YUYV 4:2:2Size: Discrete 640x480Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.067s (15.000 fps)Size: Discrete 352x288Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.067s (15.000 fps)Size: Discrete 320x240Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.067s (15.000 fps)Size: Discrete 176x144Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.067s (15.000 fps)Size: Discrete 160x120Interval: Discrete 0.033s (30.000 fps)Interval: Discrete 0.067s (15.000 fps)

分析:此时打开usbcamera的画面是黑屏,查看hal3 camera框架里面适配的分辨率和视频格式是否支持yuvv,最大的分辨率为640*480.

四.代码修改点亮usbcamera

待更新。。。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gitlab 关闭Lets Encrypt证书续签

编辑 /etc/gitlab/gitlab.rb # letsencrypt[enable] nil 并更改 letsencrypt[enable] false重新加载配置 重启gitlab生效 gitlab-ctl reconfigure配置成自己的证书 external_url http://gitlab.example.com开启以下3向即可 nginx[redirect_http_to_https] true nginx[ssl_…

linux 下mongodb7版本怎么连?

概述&#xff1a;linux下的mongodb7版本默认是没有安装客户端的&#xff0c;需要下载shell客户端才能连&#xff0c;下载之后解压&#xff0c;不需要编译&#xff0c;进入bin目录就能自己运行&#xff0c;。 安装&#xff1a; linux 下mongodb7版本没有安装客户端需要当地下载…

Java:你还在想着考虑使用 tess4j 做文字识别吗?给你看看我的一点实践

需求&#xff1a;删除带有图片水印的图片 语言也设置为中文了&#xff0c;最后给我识别的文字是这样的 | AT V ! w{)" . ) ,/ R Ko 87 ’ 我能理解&#xff0c;毕竟图片很大张&#xff0c;不过不用担心&#xff0c;因为这个水印很有规律&#xff0c;就在右下方裁剪出宽 1…

基于单片机的智能燃气灶控制系统设计

摘要&#xff1a;针对传统燃气灶存在不能防干烧、不能进行温度检测、不能进行火力自动调节等问题&#xff0c;设计了一种基于单片机控制的智能燃气灶&#xff0c;它通过单片机进行控制&#xff0c;由开关模块、测温模块、语音播报模块、火力控制模块和防空烧模块五个模块组成&a…

SpringBoot整理-微服务

Spring Boot 在构建微服务架构的应用中发挥着关键作用。微服务是一种将大型复杂应用拆分为更小、更容易管理和维护的服务的架构风格。每个服务通常围绕特定的业务功能构建,并且可以独立部署、扩展和更新。Spring Boot 提供了一系列特性和工具,使得创建和维护这些独立服务变得…

Vue - 面试题持续更新

1.Vue路由模式 总共有Hash和History两种模式 Hash模式&#xff1a;在浏览器里面的符号 “#”&#xff0c;以及"#"后面的字符称之为Hash&#xff0c;用window.location.hash读取。 Hash模式的特点&#xff1a;hash是和浏览器对话的&#xff0c;和服务器没有关系&…

设计模式第三天|建造者模式 4. 自行车加工 原型模式 5. 矩形原型

目录 【设计模式专题之建造者模式】4. 自行车加工【设计模式专题之原型模式】5. 矩形原型 【设计模式专题之建造者模式】4. 自行车加工 文章链接&#xff1a;卡码网设计模式 题目链接&#xff1a;4. 自行车加工 注意重载<<函数的写法和使用方式&#xff0c;使用时与其它重…

从汇编层面理解C++ this指针

在c中&#xff0c;调用对象的非静态成员函数过程中&#xff0c;编译器会自动添加this指针作为第一个参数。我们从汇编层面看看this指针是如何传进来的。 使用如下简单的程序来演示&#xff1a; class A { private:int a[100];int b; public:void SetB(int b){ this->b b;…

设计模式通用解释及Java代码用例整理

文章目录 23种设计模式单例模式&#xff08;Singleton Pattern&#xff09;工厂模式&#xff08;Factory Pattern&#xff09;抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;建造者模式&#xff08;Builder Pattern&#xff09;原型模式&#xff08;Prototype …

Python与Go中详细的异常处理机制|面试题

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

django+flask+python高校教材管理系统47nia

本.4论文结构 绪论&#xff1a;剖析项目可行性&#xff0c;表明研究方向。 开发技术&#xff1a;系统关键运用了Python技术性、Django框架、B/S架构和myspl数据库查询&#xff0c;并进行了详细介绍[6]。 系统分析&#xff1a;包含系统的总体构造&#xff0c;用例图和结构图。 系…

故障诊断 | 一文解决,CNN-LSTM卷积神经网络-长短期记忆神经网络组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,CNN-LSTM卷积神经网络-长短期记忆神经网络组合模型的故障诊断(Matlab) 模型描述 CNN-LSTM模型是一种结合了卷积神经网络(Convolutional Neural Network)和长短期记忆神经网络(Long Short-Term Memory)的组合模型,常用于数据故障…

SpringBoot使用Kafka详解含完整代码

1. 前言 随着大数据和实时处理需求的增长&#xff0c;Kafka作为一种分布式流处理平台&#xff0c;与Spring Boot的集成变得尤为重要。本文将详细探讨如何在Spring Boot应用程序中设置和使用Kafka&#xff0c;从基础概念到高级特性&#xff0c;通过实际代码示例帮助读者深入理解…

大语言模型的未来进化路径及其影响

随着人工智能技术的飞速发展&#xff0c;大语言模型已成为智能时代的重要标志之一。从早期基于规则和统计学习的语言模型&#xff0c;到如今基于深度学习框架下的Transformer架构&#xff0c;如GPT系列、BERT等&#xff0c;大语言模型已经在自然语言处理领域取得了前所未有的突…

uniapp中封装一个svg转base64的组件

uniapp中由于不支持svg--》base64&#xff0c;同时无法使用h5中atob&#xff0c;这里我们采用js-base64插件实现这样一个组件&#xff0c;只要传人svg的代码即可在uniapp中转为base64&#xff0c;同时支持自定义参数&#xff0c;比如宽度&#xff0c;高度,等 1 安装 npm inst…

《动手学深度学习(PyTorch版)》笔记6.3

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

Python实现PDF到HTML的转换

PDF文件是共享和分发文档的常用选择&#xff0c;但提取和再利用PDF文件中的内容可能会非常麻烦。而利用Python将PDF文件转换为HTML是解决此问题的理想方案之一&#xff0c;这样做可以增强文档可访问性&#xff0c;使文档可搜索&#xff0c;同时增强文档在不同场景中的实用性。此…

【FPGA原型验证】附录基础知识:FPGA/CPLD基本结构与实现原理

聚焦Xilinx ISE 介绍Xilinx公司及其产品的基本情况,并在此基础上描述了CPLD和FPGA的内部结构及基本原理。 1.1 Xilinx公司及其产品介绍 总部设在加利福尼亚圣何塞市(San Jose)的Xilinx是全球领先的可编程逻辑解决方案的供应商,图1-1为公司标志。 Xilinx公司的业务是研发…

后端——go系统学习笔记(不断更新中......)

数组 固定大小 初始化 arr1 : [3]int{1, 2, 3} arr2 : [...]int{1, 2, 3} var arr3 []int var arr4 [4]int切片 长度是动态的 初始化 arr[0:3] slice : []int{1,2,3} slice : make([]int, 10)len和cap len是获取切片、数组、字符串的长度——元素的个数cap是获取切片的容量—…

Android PMS——ADB命令安装流程(七)

前面的文章我们介绍了系统应用解析流程和通过 PackageInstaller.apk安装应用程序的相关流程,这一篇我们来分析使用 ADB 命令来实现 APK 安装流程。 一、ADB安装命令 ADB命令使用 adb install [选项] [APK绝对路径] 常见选项如下: -r:覆盖安装,保存原有数据; -t:…