RK3568 android11 usb摄像头预览分辨率添加多分辨率---解除1080p限制

ops/2024/11/15 0:38:22/
rkdown_views prism-atom-one-dark">rker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

一,描述

UVC(USB Video Class)是一种 USB 设备类标准,允许通过 USB 连接的视频设备(如摄像头、网络摄像头和其他视频捕捉设备)与计算机或其他主机设备进行通信。UVC 使得视频设备的使用变得更加简单和通用,因为它不需要特定的驱动程序,主机操作系统通常可以直接识别和使用这些设备。

UVC 的主要特点

  1. 即插即用:
    UVC 设备可以在连接到主机时自动识别,无需安装额外的驱动程序。这使得用户能够快速方便地使用视频设备。
  2. 跨平台支持:
    UVC 设备通常可以在多种操作系统上工作,包括 Windows、macOS 和 Linux。这种跨平台的兼容性使得 UVC 成为视频设备的标准选择。
  3. 视频格式支持:
    UVC 支持多种视频格式和分辨率,包括 MJPEG、YUY2、H.264 等。设备可以根据主机的能力和应用程序的需求选择合适的格式。
  4. 控制功能:
    UVC 设备通常支持多种控制功能,例如亮度、对比度、饱和度、焦距等。这些控制可以通过 USB 接口进行调整。
  5. 流媒体支持:
    UVC 设备可以用于实时视频流传输,适用于视频会议、直播、监控等应用场景。

二,问题现象

把摄像头接入到PC上,会发现实际支持的最大预览分辨率是:4656x3496,但是Android系统中显示支持的分辨率却没有,最大是1920x1080。缺少的分辨率为什么没有?到哪里去了?

使用 v4l2-ctl 命令行工具来列出连接的 UVC 设备:

1.列出所有视频设备

v4l2-ctl --list-devices

rk3568:/ # v4l2-ctl --list-devices
rkisp-statistics (platform: rkisp):/dev/video12/dev/video13/dev/video21/dev/video22rkcif (platform:rkcif_mipi_lvds):/dev/video0/dev/video1/dev/video2/dev/video3/dev/video4rkisp_mainpath (platform:rkisp-vir0):/dev/video5/dev/video6/dev/video7/dev/video8/dev/video9/dev/video10/dev/video11rkisp_mainpath (platform:rkisp-vir1):/dev/video14/dev/video15/dev/video16/dev/video17/dev/video18/dev/video19/dev/video20HK 16M CAM: HK 16M CAM (usb-xhci-hcd.2.auto-1):/dev/video23/dev/video24

2. 获取特定设备的支持格式

v4l2-ctl --device=/dev/video23 --list-formats

rk3568:/ # v4l2-ctl --device=/dev/video23 --list-formats
ioctl: VIDIOC_ENUM_FMTIndex       : 0Type        : Video CapturePixel Format: 'MJPG' (compressed)Name        : Motion-JPEGIndex       : 1Type        : Video CapturePixel Format: 'YUYV'Name        : YUYV 4:2:2

3. 设备支持分辨率

v4l2-ctl -d /dev/video23 --list-framesizes=YUYV

rk3568:/ # v4l2-ctl -d /dev/video23  --list-framesizes=YUYV
ioctl: VIDIOC_ENUM_FRAMESIZESSize: Discrete 1920x1080Size: Discrete 4656x3496Size: Discrete 4208x3120Size: Discrete 4160x3120Size: Discrete 4000x3000Size: Discrete 3264x2448Size: Discrete 2592x1944Size: Discrete 2320x1744Size: Discrete 2304x1728Size: Discrete 2048x1536Size: Discrete 1600x1200Size: Discrete 1280x960Size: Discrete 1280x720Size: Discrete 1024x768Size: Discrete 800x600Size: Discrete 640x480

三,解决办法

1.关于摄像头部分的源码目录:

#SDK 接口
frameworks/base/core/java/android/hardware/Camera.java
frameworks/base/core/jni/android_hardware_Camera.cpp#上层 Camera 服务
frameworks/av/camera/# HAL层
hardware/rockchip/camera
hardware/interfaces/camera/# 配置文件,对应USB和CSI之类的摄像头配置
# 包含了支持分辨率,闪光灯等等的一些特性。
device/rockchip/common/external_camera_config.xml
hardware/rockchip/camera/etc/camera/

预览的限制主要存在于HAL和framework层。

2.device

源码路径:device/rockchip/common/external_camera_config.xml

FpsList中增加对应缺少的分辨率:

diff --git a/device/rockchip/common/external_camera_config.xml b/device/rockchip/common/external_camera_config.xml
index d377826d4e..ce604a4076 100755
--- a/device/rockchip/common/external_camera_config.xml
+++ b/device/rockchip/common/external_camera_config.xml
@@ -64,6 +64,7 @@<Limit  width="2592" height="1944" fpsBound="15.0" /><Limit  width="2592" height="1944" fpsBound="10.0" /><Limit  width="2592" height="1944" fpsBound="5.0" />
+           <Limit  width="4656" height="3496" fpsBound="30.0" /><!-- image size larger than the last entry will not be supported--></FpsList><!-- orientation -->

3.HAL

源码路径:hardware/interfaces/camera/device/3.4/default/RgaCropScale.cpp

diff --git a/hardware/interfaces/camera/device/3.4/default/RgaCropScale.cpp b/hardware/interfaces/camera/device/3.4/default/RgaCropScale.cpp
index 55a2c3d08d..d3eb278093 100644
--- a/hardware/interfaces/camera/device/3.4/default/RgaCropScale.cpp
+++ b/hardware/interfaces/camera/device/3.4/default/RgaCropScale.cpp
@@ -21,21 +21,21 @@
namespace android {
namespace camera2 {
-#if (defined(TARGET_RK32) || defined(TARGET_RK3368))
+//#if (defined(TARGET_RK32) || defined(TARGET_RK3368))
#define RGA_VER (2.0)
#define RGA_ACTIVE_W (4096)
#define RGA_VIRTUAL_W (4096)
#define RGA_ACTIVE_H (4096)
#define RGA_VIRTUAL_H (4096)
-#else
-#define RGA_VER (1.0)
-#define RGA_ACTIVE_W (2048)
-#define RGA_VIRTUAL_W (4096)
-#define RGA_ACTIVE_H (2048)
-#define RGA_VIRTUAL_H (2048)
+//#else
+//#define RGA_VER (1.0)
+//#define RGA_ACTIVE_W (2048)
+//#define RGA_VIRTUAL_W (4096)
+//#define RGA_ACTIVE_H (2048)
+//#define RGA_VIRTUAL_H (2048)
-#endif
+//#endif
int RgaCropScale::CropScaleNV12Or21(struct Params* in, struct Params* out)

rks_175">4.frameworks

源码路径:frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.h
上层接口解除1080P的限制。

diff --git a/frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.h b/frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.h
index 3a709c9791..163d060b81 100644
--- a/frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.h
+++ b/frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.h
@@ -199,11 +199,11 @@ struct Parameters {// Max preview size allowed// This is set to a 1:1 value to allow for any aspect ratio that has// a max long side of 1920 pixels
-    static const unsigned int MAX_PREVIEW_WIDTH = 1920;
-    static const unsigned int MAX_PREVIEW_HEIGHT = 1920;
+    static const unsigned int MAX_PREVIEW_WIDTH = 4656;
+    static const unsigned int MAX_PREVIEW_HEIGHT = 3496;// Initial max preview/recording size bound
-    static const int MAX_INITIAL_PREVIEW_WIDTH = 1920;
-    static const int MAX_INITIAL_PREVIEW_HEIGHT = 1080;
+    static const int MAX_INITIAL_PREVIEW_WIDTH = 4656;
+    static const int MAX_INITIAL_PREVIEW_HEIGHT = 3496;// Aspect ratio tolerancestatic const CONSTEXPR float ASPECT_RATIO_TOLERANCE = 0.001;// Threshold for slow jpeg mode

至此,系统相机—设置—分辨率与画质,就可以看到对应的最大的分辨率;


http://www.ppmy.cn/ops/110542.html

相关文章

解读 Redis 底层密码:命令执行流程与高效性之源

解读 Redis 底层密码:命令执行流程与高效性之源 一、引言 Redis 作为一款高性能的内存数据库,其底层的命令执行流程和高效性的实现机制一直是开发者们关注的焦点。深入理解 Redis 的命令执行流程,有助于我们更好地使用 Redis,并在实际应用中进行优化和调优。 二、Redis …

MVC设计模式与delegate,tablview,Appdelegate,SceneDelegate

一、MVC MVC就是Model&#xff08;模型&#xff09;、View&#xff08;视图&#xff09;、Controller&#xff08;控制器&#xff09; 例如上面的 excel表&#xff0c; 数据、数据结构就是模型Model 根据数据形成的直观的、用户能直接看见的柱形图是视图View 数据构成的表格…

vue3常见的bug 修复bug

Vue 3 作为 Vue.js 的最新版本&#xff0c;在性能、开发体验以及代码可维护性等方面带来了显著的提升。然而&#xff0c;就像任何软件框架一样&#xff0c;Vue 3 在使用过程中也可能遇到一些典型的bug或问题。以下是一些可能遇到的典型问题&#xff1a; 响应式系统相关的问题&…

C++类和对象(中)

类的6个默认成员函数 在类中如果用户没有显示实现6个默认成员函数&#xff0c;编译器就会自动生成默认成员函数。 1.构造函数 构造函数是一个特殊的成员函数&#xff0c;名字与类名相同,创建类类型对象时由编译器自动调用&#xff0c;以保证每个数据成员都有 一个合适的初始…

在 Spring Boot 中使用 Spring Security + JWT + MySQL 实现基于 Token 的身份认证

文章目录 在 Spring Boot 中使用 Spring Security JWT MySQL 实现基于 Token 的身份认证一、引言二、环境搭建1、第一步&#xff1a;引入依赖2、第二步&#xff1a;配置MySQL数据库 三、实现身份认证三、实现身份认证1、定义实体和数据访问层1.1、实体类定义1.2、数据访问层 …

为什么np.arrange(0.97,3.0,0.01)最后一个值是3.0018,大于3

在 NumPy 中&#xff0c;np.arange 函数用于创建一个等差数列。它的参数分别是起始值、终止值和步长。当你使用 np.arange(0.97, 3.0, 0.01) 时&#xff0c;你期望得到的是从 0.97 开始&#xff0c;每次增加 0.01&#xff0c;直到接近但不包括 3.0 的数列。 然而&#xff0c;由…

力扣刷题之2576.求出最多标记下标

题干描述 给你一个下标从 0 开始的整数数组 nums 。 一开始&#xff0c;所有下标都没有被标记。你可以执行以下操作任意次&#xff1a; 选择两个 互不相同且未标记 的下标 i 和 j &#xff0c;满足 2 * nums[i] < nums[j] &#xff0c;标记下标 i 和 j 。 请你执行上述操…

MySQL——数据类型(二)

目录 一、日期与时间类型 1.1 date 1.2 datetime 1.3 timestamp 二、枚举和联合 2.1 enum 2.2 set 2.2.1 set 的插入 2.2.2 set 的查找 思维导图可以参考如下链接&#xff1a; 数据类型.xmind 夜夜亮晶晶/MySQL - Gitee.com 一、日期与时间类型 1.1 date 日期 yyy…