当前位置: 首页 > news >正文

Rk3568平台通过Jni读取摄像头当前状态值实践案例

本文要点:

可以通过native方式读取当前摄像头状态

示例,读取摄像头的亮度

目录

获取摄像头设备地址

增加native方法

头文件增加方法

增加native方法

可操作硬件指令示例


获取摄像头设备地址

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

增加native方法

//device = "/dev/video14"

public native int getVideoBrightness(String device);

头文件增加方法

JNIEXPORT jint JNICALL Java_com_a_b_getVideoBrightness(JNIEnv *env, jobject thiz, jstring dev_name);

增加native方法

JNIEXPORT jint JNICALL

Java_com_media_rtsp_HsRtspServer_getVideoBrightness(JNIEnv *env, jobject thiz, jstring dev_name) {

    //定义v4l2 control 用于读取设备硬件信息

    struct v4l2_control ctrl;

    int fd = 0;

    //device 的String name 转为jni可识别的格式

    const char *dev_path = env->GetStringUTFChars(dev_name, nullptr);

    if (dev_path == nullptr) {

        LOGE("dev_name is nulllptr!");

        return 0x00;

    }

    //打开设备,只读

    if ((fd = open(dev_path, O_RDONLY)) < 0x00) {

        LOGE("open error :%s", strerror(errno));

        return 0x00;

    }

    //制定操作为查询亮度

    ctrl.id = V4L2_CID_BRIGHTNESS;

    /**

     * VIDIOC_G_CTRL  该命令用于读取视频设备的某个控制项(Control)的当前值。例如:

        亮度(Brightness)

        对比度(Contrast)

        饱和度(Saturation)

        曝光(Exposure)

        白平衡(White Balance)

        其他设备支持的参数。

     *

     *

     */

    ioctl(fd, VIDIOC_G_CTRL, &ctrl); //fd为/dev/video0的文件句柄

    LOGI("Audio Brightness : %d\n", ctrl.value);

    env->ReleaseStringUTFChars(dev_name, dev_path);

    close(fd);

    //返回摄像头亮度

    return ctrl.value;

}

返回结果示例:5

可操作硬件指令示例

#define V4L2_CID_BRIGHTNESS (V4L2_CID_BASE + 0) // 相机亮度

#define V4L2_CID_CONTRAST (V4L2_CID_BASE + 1) // 相机对比度

#define V4L2_CID_SATURATION (V4L2_CID_BASE + 2) // 相机饱和度

#define V4L2_CID_HUE (V4L2_CID_BASE + 3) // 相机色相

#define V4L2_CID_AUDIO_VOLUME (V4L2_CID_BASE + 5)

#define V4L2_CID_AUDIO_BALANCE (V4L2_CID_BASE + 6)

#define V4L2_CID_AUDIO_BASS (V4L2_CID_BASE + 7)

#define V4L2_CID_AUDIO_TREBLE (V4L2_CID_BASE + 8)

#define V4L2_CID_AUDIO_MUTE (V4L2_CID_BASE + 9)

#define V4L2_CID_AUDIO_LOUDNESS (V4L2_CID_BASE + 10)

#define V4L2_CID_BLACK_LEVEL (V4L2_CID_BASE + 11)

#define V4L2_CID_AUTO_WHITE_BALANCE (V4L2_CID_BASE + 12) // 白平衡

#define V4L2_CID_DO_WHITE_BALANCE (V4L2_CID_BASE + 13)

#define V4L2_CID_RED_BALANCE (V4L2_CID_BASE + 14)

#define V4L2_CID_BLUE_BALANCE (V4L2_CID_BASE + 15)

#define V4L2_CID_GAMMA (V4L2_CID_BASE + 16) 

#define V4L2_CID_WHITENESS (V4L2_CID_GAMMA)

#define V4L2_CID_EXPOSURE (V4L2_CID_BASE + 17)

#define V4L2_CID_AUTOGAIN (V4L2_CID_BASE + 18)

#define V4L2_CID_GAIN (V4L2_CID_BASE + 19)

#define V4L2_CID_HFLIP (V4L2_CID_BASE + 20)

#define V4L2_CID_VFLIP (V4L2_CID_BASE + 21)

#define V4L2_CID_POWER_LINE_FREQUENCY (V4L2_CID_BASE + 24)

相关文章:

  • 【一览表】病理图像处理流程
  • Linux:进程的创建进程的终止
  • ShenNiusModularity项目源码学习(21:ShenNius.Admin.Mvc项目分析-6)
  • 12N60-ASEMI无人机专用功率器件12N60
  • 【多智能体系统组织方式解析】五大架构赋能智能协作
  • 【办公类-89-02】20250424会议记录模版WORD自动添加空格补全下划线
  • Java 调用webservice接口输出xml自动转义
  • std::unorderd_map 简介
  • NestJS——使用TypeORM操作数据库、增删改查、关联查询、QueryBuilder
  • 黑马 redis面试篇笔记
  • ROS-真机向虚拟机器人映射
  • zip是 Python 中 `zip` 函数的一个用法
  • PageView 内嵌套 TabBarView 的滑动冲突
  • 【C++指南】位运算知识详解
  • 利用软件I2C驱动OLED,点亮、熄灭OLED屏幕以及获取当前OLED屏幕开启状态
  • 【蓝桥杯】水质检测
  • 基于大语言模型的AI智能体开发:构建具备工具使用能力的智能助手
  • 一行命令打开iOS模拟器
  • [C] 第6章 C51函数
  • Spring Boot单元测试实战指南:从零到高效测试
  • 神二十发射取得圆满成功
  • 三亚亚龙湾3.4公里岸线近岸海域使用权挂牌出让,起始价近九千万
  • 商务部召开外资企业圆桌会
  • 温氏股份一季度归母净利润20.01亿元,同比扭亏为盈
  • 呈现“民族脊梁型爱国学府”曲折辉煌的办学历程,这个展览开幕
  • 正荣地产旗下“H20正荣2”债未能于宽限期内支付分期偿付款,尚未就新兑付方案达成一致