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;

}

相关推荐
冬奇Lab8 小时前
Android 开发要变天了:Google 专为 Agent 重建工具链,Token 减少 70%、速度提升 3 倍
android·人工智能·ai编程
liuyukuan9 小时前
如何在win11上打开 WSL2(Windows 的 Linux 子系统)?
linux·windows
寺中人9 小时前
Windows系统的动态磁盘卷
windows·系统·教程
忧郁的蛋~9 小时前
基于.NET的Windows窗体编程之WinForms数据表格
windows·.net
imuliuliang11 小时前
存储过程(SQL)
android·数据库·sql
AgCl2313 小时前
MYSQL-6-函数与约束-3/17
android·数据库·mysql
鼹鼠SDN13 小时前
手机访问家里局域网共享文件?MoleSDN 叶子路由一步融入家庭内网
windows·智能手机·远程控制
Han.miracle13 小时前
Redis 全套笔记:基础 API + 三大架构 + 缓存三大问题
java·windows·redis
zzb158013 小时前
Fragment 生命周期深度图解:从 onAttach 到 onDetach 完整流程(面试必备)
android·java·面试·安卓
众少成多积小致巨13 小时前
Android 源码查看笔记
android·源码