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.hqwc.cn/news/449683.html

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

相关文章

(十二)springboot实战——SSE服务推送事件案例实现

前言 SSE&#xff08;Server-Sent Events&#xff0c;服务器推送事件&#xff09;是一种基于HTTP协议的服务器推送技术。它允许服务器向客户端发送异步的、无限长的数据流&#xff0c;而无需客户端不断地轮询或发起请求。这种技术可以用来实现实时通信、在线聊天、即时更新等功…

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

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

景联文科技受邀出席全国信标委生物特征识别分委会二届五次全会

全国信息技术标准化技术委员会生物特征识别分技术委员会&#xff08;SAC/TC28/SC37&#xff0c;以下简称“分委会”&#xff09;二届五次全会于2024年1月30日在北京顺利召开&#xff0c;会议由分委员秘书长王文峰主持。 分委会由国家标准化管理委员会批准成立&#xff0c;主要负…

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

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

[ESP32 IDF]web server

目录 通过web server控制LED 核心原理解析 分区表 web server的使用 错误Header fields are too long的解决 通过web server控制LED 通过网页控制LED灯的亮灭&#xff0c;一般的ESP32开发板都可以实现&#xff0c;下面这篇文章是国外开发者提供的一个通过web server控制…

docker安装定制gocd-agent

一、定制gocd-agent FROM gocd/gocd-agent-alpine-3.12:v21.1.0 MAINTAINER xxx "xxx163.com" # 切换到 root 用户 USER root # 安装 expect、jdk、docker RUN apk update && apk add expect && apk add openjdk8 && apk add docker &&…

Leetcode 热门百题斩(第二天)

介绍 针对leetcode的热门一百题&#xff0c;解决大多数实习生面试的基本算法题。通过我自己的思路和多种方法&#xff0c;供大家参考。 1.两数之和&#xff08;题号&#xff1a;1) 方法一 最先想到的就是两个for去遍历匹配。 class Solution {public int[] twoSum(int[]…

基于3DGIS 的5G 基站规划

这个基于3DGIS 5G 基站规划的案例很不错&#xff0c;与大家分享一下。感觉是3DGIS中为数不多的实用案例。但还是没有特别多的突出三维的技术优势&#xff0c;因为这里面很多规划思想其实还是基于面的而不是基于体的&#xff01;好了不多说了&#xff0c;给大家分享这个案例&…

跟着cherno手搓游戏引擎【18】抽象Shader、项目小修改

抽象&#xff1a; Shader.h: #pragma once #include <string>namespace YOTO {class Shader {public:virtual~Shader()default;virtual void Bind()const0;virtual void UnBind()const0;static Shader* Create(const std::string& vertexSrc, const std::string&am…

【秒剪】如何分享视频?

如何分享视频&#xff1f; 经秒剪制作的视频点击【保存】后&#xff0c;选择下方相应按钮即可【发布到朋友圈】、【发布到视频号】和【其他】&#xff0c;直接从秒剪发布到朋友圈支持最长 60s 发布&#xff0c;直接发布到视频号画质也会更清晰。

【BIAI】Lecture10 - Motor System2

Motor System2 专业术语 descending spinal tracts 下行脊髓束 corticospinal tract 锥体束 reticulospinal tract 脊髓脑干束 vestibulospinal tract 脊髓脑干侧脊束 precentral gyrus 前中央回 population coding 群体编码 basal ganglia 基底节 thalamus 丘脑 Posterior pa…

Axure 动态面板初使用-实现简单的tab切换页面效果

使用工具版本 Axure 9 实现的效果 步骤过程 1、打开Axure 9&#xff0c;默认进入一个空白页&#xff0c;首先从元件库拉一个动态面板到页面中&#xff0c;位置肯定是C位咯~ 2、将面板尺寸调整一下&#xff0c;设置成你喜欢的数字&#xff0c;比如我就喜欢800600 3、然后…