RK3568平台 安卓hal3适配usb camera_rk camera hal3(1)

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
## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/f1b39aa7dc863291b183d1500ecf0184.png)

![img](https://img-blog.csdnimg.cn/img_convert/e23fd8f0535a1af34d6d86699cd37539.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/06db261f0cd67d2239fb5d8a99fe5526.png)

 ![img](https://img-blog.csdnimg.cn/img_convert/54c6d99214279f1a19e4a28ef693f70b.png)

![img](https://img-blog.csdnimg.cn/img_convert/5ed5f5f2fff3881f3a2ec15e4d175b6d.png)

![img](https://img-blog.csdnimg.cn/img_convert/d6618903d9d03be43406ea1a1b84d6c7.png)

![](https://img-blog.csdnimg.cn/img_convert/472be8e71cf705988b1c0718029cd336.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


图片转存中...(img-IHIBxvyO-1715596296429)]

[外链图片转存中...(img-A1QkLCvy-1715596296430)]

[外链图片转存中...(img-gdMR1iZv-1715596296430)]

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值