RK3588平台用v4l工具调试USB摄像头实践(亮度,饱和度,对比度,色相等)

目录

前言:v4l-utils简介

一:查找当前的摄像头设备

二:查看当前摄像头支持的v4l2-ctl调试参数

三根据提示设置对应参数,在提示范围内设置

四:常用调试命令

五:应用内执行命令方法


前言: v4l-utils 简介

v4l-utils工具是由Linuxtv维护的一个V4L2开发套件,它提供一系列V4L2及media framework相关的工具,用来配置V4L2子设备的属性,测试V4L2设备,并提供如libv4l2.so开发库等等。

本章主要介绍v4l-utils中的两个命令行工具:media-ctl和v4l2-ctl。

  • media-ctl:用以查看、配置拓扑结构;
  • v4l2-ctl:用以配置v4l2 controls,可抓帧,设置vin、isp、sensor参数。

在 Rockchip 发布的 Linux SDK 中,默认已集成了 v4l-utils 包。

一:查找当前的摄像头设备

grep '' /sys/class/video4linux/video*/name

红框代表是外接的USB摄像头

二:查看当前摄像头支持的v4l2-ctl调试参数

v4l2-ctl -d /dev/video21 --list-ctrls

三根据提示设置对应参数,在提示范围内设置

亮度

v4l2-ctl -d /dev/video21 --set-ctrl 'brightness=64'

效果如下:

四:常用调试命令

亮度

v4l2-ctl -d /dev/video21 --set-ctrl 'brightness=64'

饱和度

v4l2-ctl -d /dev/video21 --set-ctrl 'saturation=100'

对比度

v4l2-ctl -d /dev/video21 --set-ctrl 'contrast=95'

锐度

v4l2-ctl -d /dev/video21 --set-ctrl 'sharpness=7'

五:应用内执行命令方法

Path = "/dev/video21"

public static boolean upgradeRootPermission(String path) {

Process process = null;

DataOutputStream os = null;

try {

String cmd = "chmod 777 " + path;

process = Runtime.getRuntime().exec("su"); //切换到root帐号

os = new DataOutputStream(process.getOutputStream());

os.writeBytes(cmd + "\n");

os.writeBytes("exit\n");

os.flush();

process.waitFor();

} catch (Exception e) {

} finally {

try {

if (os != null) {

os.close();

}

process.destroy();

} catch (Exception e) {

}

}

try {

if (process == null) {

return false;

}

return process.waitFor() == 0;

} catch (InterruptedException e) {

e.printStackTrace();

}

return false;

}

Cmd示例:v4l2-ctl -d /dev/video21 --set-ctrl 'brightness=64'

public static boolean exeCmdForSu(String command) {

Log.d("exeCmdForSu", "command = " + command);

boolean result = false;

DataOutputStream dataOutputStream = null;

BufferedReader errorStream = null;

try {

Process process = Runtime.getRuntime().exec("su");

dataOutputStream = new DataOutputStream(process.getOutputStream());

String s = command + "\n";

dataOutputStream.write(s.getBytes(Charset.forName("utf-8")));

dataOutputStream.flush();

dataOutputStream.writeBytes("exit\n");

dataOutputStream.flush();

process.waitFor();

errorStream = new BufferedReader(new InputStreamReader(process.getErrorStream()));

String msg;

String line;

for (msg = ""; (line = errorStream.readLine()) != null; msg = msg + line) {

}

Log.d("exeCmdForSu", "exeCmdForSu msg is " + msg);

if (!msg.contains("Failure")) {

result = true;

}

} catch (Exception var16) {

Exception e = var16;

Log.e("exeCmdForSu", e.getMessage(), e);

} finally {

try {

if (dataOutputStream != null) {

dataOutputStream.close();

}

if (errorStream != null) {

errorStream.close();

}

} catch (IOException var15) {

IOException e = var15;

Log.e("exeCmdForSu", e.getMessage(), e);

}

}

return result;

}

相关推荐
JMchen1232 小时前
【Android 性能优化实战 60 讲】04 Memory Profiler 高阶玩法:深剖堆内存原理,实战定位 Kotlin 闭包隐式泄漏
android·性能优化·kotlin·实战·源码分析·内存泄漏·memory profiler
Android-Flutter2 小时前
Java线程池 - 内部线程管理机制详解
android
开开心心就好2 小时前
手机悬屏翻译工具外语游戏漫画APP全覆盖
android·前端·javascript·python·游戏·pdf·html
您^_^2 小时前
DeepSeek-Harness 升级排障完全指南:三类本地残留逐个拆解
人工智能·windows·个人开发·deepseekharness·deepseekv4pro
恋猫de小郭2 小时前
AI 时代,也许你的 Flutter 需要一套 Dartastic OpenTelemetry 监控
android·前端·flutter
MSTcheng.2 小时前
【Linux】Linux学习第三弹——Linux基本指令2
linux·windows·学习·ubuntu·操作系统
Kapaseker3 小时前
我为什么喜欢 Compose ?
android·kotlin
JMchen1233 小时前
【Android 性能优化实战 60 讲】03 Perfetto 现代分析利器:SQL 查询 Trace 数据,微秒级定位函数 CPU 耗时
android·sql·性能优化·实战·源码分析·perfetto·启动优化
开开心心就好3 小时前
手机精确倒计时工具悬浮窗口秒数实时显示
android·前端·javascript·jupyter·智能手机·pdf·html
墨狂之逸才3 小时前
一次 Android 工位机黑屏卡死排查:根因不是 App,而是 scrcpy 与 Rockchip 编码器的 DMA-BUF 泄漏
android·android studio