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;

}

相关推荐
婵鸣空啼3 小时前
GD图像处理与SESSiON
android
sunly_4 小时前
Flutter:导航固定背景图,滚动时导航颜色渐变
android·javascript·flutter
nenchoumi31194 小时前
AirSim/Cosys-AirSim 游戏开发(一)XBox 手柄 Windows + python 连接与读取
windows·python·xbox
用户2018792831674 小时前
简单了解android.permission.MEDIA_CONTENT_CONTROL权限
android
_一条咸鱼_4 小时前
Android Runtime类卸载条件与资源回收策略(29)
android·面试·android jetpack
顾林海4 小时前
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
android·面试·性能优化
砖厂小工4 小时前
Now In Android 精讲 8 - Gradle build-logic 现代构建逻辑组织方式
android
玲小珑5 小时前
Auto.js 入门指南(八)高级控件与 UI 自动化
android·前端
harry235day5 小时前
Compose 带动画的待办清单列表页
android·android jetpack
vocal5 小时前
我的安卓第一课:四大组件之一Activity及其组件RecyclerView
android