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.189

Media 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.189

Device topology
- entity 1: USB2.0 PC CAMERA: USB2.0 PC CAM (1 pad, 1 link)
            type Node subtype V4L
            device node name /dev/video1
        pad0: Sink
                <- "Processing 2":1 [ENABLED,IMMUTABLE]

- entity 4: USB2.0 PC CAMERA: USB2.0 PC CAM (0 pad, 0 link)
            type Node subtype V4L
            device node name /dev/video2

- entity 8: Processing 2 (2 pads, 2 links)
            type V4L2 subdev subtype Unknown
        pad0: 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 Sensor
        pad0: 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: 1
    Device 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: 100
  Conflicting devices: None
  API1 info:
    Has a flash unit: false
    Facing: Front
    Orientation: 0
  API2 camera characteristics:
    Dumping camera metadata array: 55 / 55 entries, 2048 / 2048 bytes of extra data.
      Version: 1, Flags: 00000000
      android.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      : uvcvideo
        Card type        : USB2.0 PC CAMERA: USB2.0 PC CAM
        Bus info         : usb-fc880000.usb-1.3
        Driver version   : 5.10.189
        Capabilities     : 0x84a00001
                Video Capture
                Metadata Capture
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps      : 0x04200001
                Video Capture
                Streaming
                Extended Pix Format
Media Driver Info:
        Driver name      : uvcvideo
        Model            : USB2.0 PC CAMERA: USB2.0 PC CAM
        Serial           :
        Bus info         : usb-fc880000.usb-1.3
        Media version    : 5.10.189
        Hardware revision: 0x00000100 (256)
        Driver version   : 5.10.189
Interface Info:
        ID               : 0x03000002
        Type             : V4L Video
Entity Info:
        ID               : 0x00000001 (1)
        Name             : USB2.0 PC CAMERA: USB2.0 PC CAM
        Function         : V4L2 I/O
        Pad 0x01000007   : Sink
          Link 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/480
        Pixel Format      : 'YUYV'
        Field             : None
        Bytes per Line    : 1280
        Size Image        : 614400
        Colorspace        : Default
        Transfer 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 480
        Default     : Left 0, Top 0, Width 640, Height 480
        Pixel 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     : timeperframe
        Frames per second: 30.000 (30/1)
        Read buffers     : 0
                     brightness 0x00980900 (int)    : min=0 max=255 step=1 default=128 value=128
                       contrast 0x00980901 (int)    : min=0 max=255 step=1 default=135 value=135
                     saturation 0x00980902 (int)    : min=0 max=255 step=1 default=75 value=75
                            hue 0x00980903 (int)    : min=-127 max=127 step=1 default=0 value=0
                          gamma 0x00980910 (int)    : min=1 max=8 step=1 default=4 value=4
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1
                      sharpness 0x0098091b (int)    : min=0 max=15 step=1 default=5 value=5
         backlight_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_FMT
        Index       : 0
        Type        : Video Capture
        Pixel Format: 'YUYV'
        Name        : YUYV 4:2:2
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 176x144
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 160x120
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)

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

四.代码修改点亮usbcamera

待更新。。。。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c语言---操作符(详解)

目录 一、操作符的分类二、算术操作符三、 移位操作符3.1<<左移操作符3.1.1移位规则3.1.2直接上代码以及解释 3.2>> 右移操作符3.2.1移位规则3.2.2画图解释 3.3注意 四、位操作符&#xff1a;&、|、^、~4.1&按位与4.1.1按位与的计算逻辑4.1.2代码4.1.3运行…

山上有路路难行

原乡情浓 - 邓丽君作词 : Chong Nou作曲 : 汤尼山上有路路难行嘞弯弯曲曲一层又一层嘞小哥要去看小妹嘞不怕山高路不平嘞山上石头大又硬嘞歪歪倒倒一层又一层嘞小哥不怕硬石头嘞只怕小妹心肠硬嘞路边椰树高又高嘞风吹椰树一摇又一授嘞小妹爱哥身体壮嘞可爱小妹身妙条嘞香蕉树上…

机器学习——绪论总结

目录 一、引入 二、基本术语 三、假设空间与归纳偏 四、模型选择 一、引入 机器学习&#xff1a;通过计算手段&#xff0c;得出具有能够自我修改、完善能力的模型&#xff0c;利用经验改善系统自身性能。算法使用数据得到模型的过程即称为学习&#xff0c;或训练 流程&…

前端JavaScript篇之对 rest 参数的理解、ES6中模板语法与字符串处理

目录 对 rest 参数的理解ES6中模板语法与字符串处理 对 rest 参数的理解 rest参数是一种在函数定义中使用的特殊语法&#xff0c;它允许函数接受任意数量的参数&#xff0c;并将它们收集到一个数组中。通俗地说&#xff0c;rest参数就像是一个容器&#xff0c;用来存放函数接收…

cnpm : 无法加载文件 C:\Users\xxx\AppData\Roaming\npm\cnpm.ps1

cnpm命令被禁止使用 我已经安装cnpm &#xff0c;但是使用不了&#xff0c;重新安装也没用。 报错如下图&#xff1a; cnpm无法使用报错 解决问题 1、打开系统Windows PowerShell,使用管理员身份运行。 打开Windows PowerShell 2、输入set-ExecutionPolicy RemoteSigned&a…

深度学习:数据驱动的人工智能革命

文章目录 每日一句正能量前言什么是深度学习推动AI发展不同阶段的“三大驱动 ”1、技术驱动&#xff1a;算法和计算力是主要驱动力2、计算力的三驾马车&#xff1a;芯片、超级计算机、云计算3、数据驱动&#xff1a;描绘个性化画像&#xff1b; 后记 每日一句正能量 一般青年的…

Java数组的遍历

目录 数组的遍历使用for循环遍历数组使用for-each循环遍历数组使用while循环和迭代器遍历数组使用Java 8的流API遍历数组 数组遍历的应用求数组中的最大值查询数组中指定位置的元素将查指定元素对应的索引的功能提取为方法添加数组元素删除数组元素 数组的遍历 Java数组的遍历…

Day17、18、19学习记录

#c语言知识 内存管理 1.作用域 &#xff08;1&#xff09;代码块作用域&#xff08;代码块是{}之间的一段代码&#xff09; &#xff08;2&#xff09;函数作用域 &#xff08;3&#xff09;文件作用域 2.局部变量&#xff08;自动变量auto&#xff09;&#xff1a; 在函…

Matlab plot绘图的 title 语法

x 0:1:10; >> y x.^2 -10*x15; >> plot(x,y) >> title(x_y, interpreter, none) title 里面的 x_y , y不会被当作下标。

软件工程(最简式总结)

目录 第一章:概述 1.软件危机的表现原因 2.常见的软件开发方法包括&#xff1a; 3.软件工程基本原则 4.软件工程三要素 5.设计模式的分类 6.针对变换型数据流设计步骤 7.针对事务型数据流设计步骤 第二章&#xff1a;软件过程 1.软件生命周期 2.软件过程模型 &…

数据结构篇-05:哈希表解决字母异位词分组

本文对应力扣高频100 ——49、字母异位词分组 哈希表最大的特点就是它可以把搜索元素的时间复杂度降到O(1)。这一题就是要我们找到 “字母异位词” 并把它们放在一起。 “字母异位词”就是同一个单词中字母的不同组合形式。判断“字母异位词”有两个视角&#xff1a;1、所含字…

《计算机网络简易速速上手小册》第1章:计算机网络技术基础(2024 最新版)

文章目录 1.1 OSI 模型简介 - 深入探究1.1.1 基础知识1.1.2 重点案例&#xff1a;构建简易 HTTP 服务器1.1.3 拓展案例1&#xff1a;网络层数据包捕获1.1.4 拓展案例2&#xff1a;传输层 TCP 连接 1.2 TCP/IP 协议栈 - 深入探究1.2.1 基础知识1.2.2 重点案例&#xff1a;使用 P…

2.3作业 编写一个shell 脚本,判断输入的是否是数字

#!/bin/bashvar$1 len${#var} j0 for(($j;$j<$len;((j)))) doif [ ${var:$j:1} -eq 0 ]then echo "第$j位数字是0"elif [ ${var:$j:1 } -eq 1 ]then echo "第$j位数字是1"elif [ ${var:$j:1} -eq 2 ]then echo "第$j位数字是2"elif [ ${var:$…

【Linux】理解系统中一个被打开的文件

文件系统 前言一、C语言文件接口二、系统文件接口三、文件描述符四、struct file 对象五、stdin、stdout、stderr六、文件描述符的分配规则七、重定向1. 重定向的原理2. dup23. 重谈 stderr 八、缓冲区1. 缓冲区基础2. 深入理解缓冲区3. 用户缓冲区和内核缓冲区4. FILE 前言 首…

题目: 有1234个数字, 组成多个互不相同且无重复数字的三位数? 都是多少?

lua脚本如下 最原始的解题方法 local str{} local i, j, k0, 0, 0 for i1, 4 do for j1, 4 do for k1, 4 do if i~j and i~k and j~k then str[#str1]i..j..k end end end end print("组成的数有"..#str) print(table.unpack(str)) 运行的结果如下 组成的数有24 1…

【DDD】学习笔记-代码模型的架构决策

代码模型属于软件架构的一部分&#xff0c;它是设计模型的进化与实现&#xff0c;体现出了代码模块&#xff08;包&#xff09;的结构层次。在架构视图中&#xff0c;代码模型甚至会作为其中的一个视图&#xff0c;通过它来展现模块的划分&#xff0c;并定义运行时实体与执行视…

跨平台开发:浅析uni-app及其他主流APP开发方式

随着智能手机的普及&#xff0c;移动应用程序&#xff08;APP&#xff09;的需求不断增长。开发一款优秀的APP&#xff0c;不仅需要考虑功能和用户体验&#xff0c;还需要选择一种适合的开发方式。随着技术的发展&#xff0c;目前有多种主流的APP开发方式可供选择&#xff0c;其…

【HTML 基础】框架 iframe 标签

文章目录 1. 基本用法2. 设置框架样式3. frameborder 和 scrolling 属性4. 在框架中显示其他内容5. 响应式框架6. 注意事项结语 在 Web 开发中&#xff0c;有时候我们需要在页面中嵌套其他网页或内容&#xff0c;这时候就可以使用 HTML 的框架标签之一<iframe>。<ifra…

20240202在WIN10下使用fast whisper缺少cudnn_ops_infer64_8.dll

20240202在WIN10下使用fast whisper缺少cudnn_ops_infer64_8.dll 2024/2/2 10:48 https://blog.csdn.net/feinifi/article/details/132548556 Could not locate cudnn_ops_infer64_8.dll. Please make sure it is in your library path!解决办法 安装cuDNN c:\faster-whisper-…

【MybatisPlus篇】查询条件设置(范围匹配 | 模糊匹配 | 空判定 | 包含性判定 | 分组 | 排序)

文章目录 &#x1f384;环境准备⭐导入依赖⭐写入User类⭐配置启动类⭐创建UserDao 的 MyBatis Mapper 接口&#xff0c;用于定义数据库访问操作⭐创建配置文件&#x1f6f8;创建测试类MpATest.java &#x1f354;范围查询⭐eq⭐between⭐gt &#x1f354;模糊匹配⭐like &…