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

【v4l2】在Android SDK中交叉编译v4l2-ctl

为调试Android设备中camera的相关功能,需要引入v4l2-ctl工具。由于厂商提供的Android SDK源码中未集成v4l2-utils(包含v4l2-ctl以及其它组件的工具包),故需要下载v4l2-utils源码,并在Android SDK中交叉编译生成v4l2-ctl可执行文件。本文讲述其过程步骤。

一、下载v4l2-utils源码

https://github.com/gjasny/v4l-utils

二、移植v4l2-ctl到自己的SDK中

# 1. 一般将外部工具包放到Android SDK/external目录下
cd your_android_sdk/external
mkdir v4l-utils
mkdir v4l-utils/utils

# 2. 切换到从github下载的v4l2-utils源码目录
cd v4l-utils
# 切换到stable-1.28分支
git checkout stable-1.28
cp android-config.h your_android_sdk/external/v4l-utils/
cp -r include your_android_sdk/external/v4l-utils/
cp -r utils/common your_android_sdk/external/v4l-utils/utils/
cp -r utils/v4l2-ctl your_android_sdk/external/v4l-utils/utils/

# 3. 移植后的目录结构如下
cd your_android_sdk/external/v4l-utils
tree -L 2
.
├── android-config.h
├── include
│   ├── compiler.h
│   ├── gettext.h
│   ├── linux
│   └── v4l-getsubopt.h
└── utils
    ├── common
    └── v4l2-ctl

5 directories, 4 files


三、修改文件

一共五处修改,如下:

diff --git a/utils/v4l2-ctl/Android.mk b/utils/v4l2-ctl/Android.mk
old mode 100644
new mode 100755
index 3078c62..5987b3d
--- a/utils/v4l2-ctl/Android.mk
+++ b/utils/v4l2-ctl/Android.mk
@@ -6,7 +6,7 @@ LOCAL_MODULE := v4l2-ctl
 LOCAL_MODULE_TAGS := optional
 
 LOCAL_CFLAGS += -DNO_LIBV4L2
-LOCAL_CFLAGS += -Wno-missing-field-initializers
+LOCAL_CFLAGS += -Wno-missing-field-initializers -Wno-unused-parameter
 LOCAL_CFLAGS += -include ../../android-config.h
 LOCAL_C_INCLUDES := \
     $(LOCAL_PATH)/../.. \
@@ -15,13 +15,13 @@ LOCAL_C_INCLUDES := \
     bionic \
     external/stlport/stlport
 
-LOCAL_SHARED_LIBRARIES := libstlport
+#LOCAL_SHARED_LIBRARIES := libstlport
 
 LOCAL_SRC_FILES := \
-    v4l2-ctl.cpp v4l2-ctl.h v4l2-ctl-common.cpp v4l2-ctl-tuner.cpp \
+    v4l2-ctl.cpp v4l2-ctl-common.cpp v4l2-ctl-tuner.cpp \
     v4l2-ctl-io.cpp v4l2-ctl-stds.cpp v4l2-ctl-vidcap.cpp v4l2-ctl-vidout.cpp \
     v4l2-ctl-overlay.cpp v4l2-ctl-vbi.cpp v4l2-ctl-selection.cpp v4l2-ctl-misc.cpp \
     v4l2-ctl-streaming.cpp v4l2-ctl-sdr.cpp v4l2-ctl-edid.cpp v4l2-ctl-modes.cpp \
     v4l2-ctl-meta.cpp v4l2-ctl-subdev.cpp v4l2-info.cpp media-info.cpp \
-    v4l2-tpg-colors.c v4l2-tpg-core.c v4l-stream.c codec-fwht.c
+    v4l2-tpg-colors.c v4l2-tpg-core.c v4l-stream.c codec-fwht.c codec-v4l2-fwht.c
 include $(BUILD_EXECUTABLE)
diff --git a/utils/v4l2-ctl/v4l2-ctl-subdev.cpp b/utils/v4l2-ctl/v4l2-ctl-subdev.cpp
old mode 100644
new mode 100755
index 48b7928..6fc3a6a
--- a/utils/v4l2-ctl/v4l2-ctl-subdev.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-subdev.cpp
@@ -9,7 +9,7 @@ struct mbus_name {
 
 static const struct mbus_name mbus_names[] = {
        { "Fixed", MEDIA_BUS_FMT_FIXED },
-#include "media-bus-format-names.h"
+//#include "media-bus-format-names.h"
        { nullptr, 0 }
 };
 

四、编译

cd your_android_sdk
source ./build/envsetup.sh
lunch <product_name>-<build_variant>
cd your_android_sdk/external/v4l-utils/
mm

编译成功后会提示:

五、push到设备中运行

1. 列出设备的所有控制项

./v4l2-ctl -d /dev/v4l-subdev7 --list-ctrls

2. 查看 link_frequency、pixel_rate 这两个控制项的值:

./v4l2-ctl -d /dev/v4l-subdev7 --get-ctrl link_frequency

./v4l2-ctl -d /dev/v4l-subdev7 --get-ctrl pixel_rate

3. 设置 sensor_on_off 这一控制项的值为1

./v4l2-ctl -d /dev/v4l-subdev7 --set-ctrl sensor_on_off=1

有些ioctl设备不支持,没关系。

参考:android交叉编译v4l2-ctl_android v4l2-ctl-CSDN博客


http://www.kler.cn/a/611141.html

相关文章:

  • 虚幻基础:UI
  • 2-1 基本放大电路
  • HCI 清除 SCP纳管残留信息
  • 深度解析 BPaaS:架构、原则与研发模式探索
  • 前端显示no data(没有数据,一片空白)
  • 怎么简单设计一个文件上传系统?
  • 基于 ffmpeg 实现合并视频
  • 【算法】常见排序算法(插入排序、选择排序、交换排序和归并排序)
  • @JSONField(serialize = false)序列化过程中排除特定字段
  • 文件操作 说明
  • 生成模型速通(Diffusion,VAE,GAN)
  • 基于Spring Boot的供应商管理系统的设计与实现(LW+源码+讲解)
  • LangChain开发(七)自定义输出格式(JSON/XML/YAML)
  • AF3 Rotation类的map_tensor_fn 方法解读
  • 蓝桥杯 残缺的数字
  • Linux <(...) 进程替换
  • Photoshop 2025安装包下载及Photoshop 2025详细图文安装教程
  • 2025Java面试TOP1000问:源码级解答+避坑指南+性能优化
  • 在线文档导出为word/pdf/png
  • springBoot中雪花算术法