K510 V4L2 Developer's Guide
文档版本:V1.0.0
发布日期:2022-03-09
免责声明 您购买的产品、服务或特性等应受北京嘉楠捷思信息技术有限公司(“本公司”,下同)商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,本公司不对本文档的任何陈述、信息、内容的准确性、可靠性、完整性、营销型、特定目的性和非侵略性提供任何明示或默示的声明或保证。除非另有约定,本文档仅作为使用指导的参考。 由于产品版本升级或其他原因,本文档内容将可能在未经任何通知的情况下,不定期进行更新或修改。
商标声明
“”、“Canaan”图标、嘉楠和嘉楠其他商标均为北京嘉楠捷思信息技术有限公司的商标。本文档可能提及的其他所有商标或注册商标,由各自的所有人拥有。
版权所有©2022北京嘉楠捷思信息技术有限公司 本文档仅适用K510平台开发设计,非经本公司书面许可,任何单位和个人不得以任何形式对本文档的部分或全部内容传播。
北京嘉楠捷思信息技术有限公司 网址:canaan-creative.com 商务垂询:[email protected]
# 前言 **文档目的** 本文档为K510 V4L2 应用实例的说明文档。读者对象
本文档(本指南)主要适用的人员:
- 软件开发人员
- 技术支持人员
修订记录 修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有版本的更新内容。
版本号 | 修改者 | 修订日期 | 修订说明 |
---|---|---|---|
V1.0.0 | 系统软件组 | 2022-03-09 | SDK V1.5发布 |
v1.0.1 | 朱大雷 | 2022-03-11 | SDK V1.5发布 |
[TOC]
#include “media_ctl.h”
struct video_info {
unsigned int video_used;
char *video_name[4];
unsigned int enable[4];
unsigned int video_width[4];
unsigned int video_height[4];
unsigned int video_out_format[4];
};
int mediactl_init(char *video_cfg_file,struct video_info *dev_info);
初始化media。
参数:
[in] video_cfg_file: video的配置文件,这个文件的内容只需关心下面解释的内容,具体解释如下。
sensor0_name:只在V4L2驱动中设置的sensor驱动名字。
sensor0_cfg_file:sensor对应的isp参数配置文件名字,如imx219_0.conf。
sensor0_total_width:sensor输出的水平方向的总像素,用来产生VSYNC信号,如3476
sensor0_total_height:sensor输出的总行数,用来产生HSYNC信号,如1166
sensor0_active_width:sensor输出的水平方向的有效像素,如1920,
sensor0_active_height:sensor输出的有效行数,如1080
video2_used:1 -- 使能,0 -- 没有使用。
video2_width:video输出的宽度,如1920。
video2_height:video输出的高度,如1080。
video2_out_format:1--指YUV420,NV21。
video3_used:1 -- 使能,0 -- 没有使用。
video3_width:video输出的宽度,如1080。
video3_height:video输出的高度,如720。
video3_out_format:1--指YUV420,NV21。
video4_used:1 -- 使能,0 -- 没有使用。
video4_width:video输出的宽度,如640。
video4_height:video输出的高度,如480。
video4_out_format:1--指YUV420,NV21。
video5_used:1 -- 使能,0 -- 没有使用。
video5_width:video输出的宽度,如320。
video5_height":video存储的高度,如320。
video5_height_r:video输出的高度,如240。
video5_out_format:0--指分离RGB,1--指ARGB。
sensor1_name:只在V4L2驱动中设置的sensor驱动名字。
sensor1_cfg_file:sensor对应的isp参数配置文件名字,如imx219_0.conf。
sensor1_total_width:sensor输出的水平方向的总像素,用来产生VSYNC信号,如3476
sensor1_total_height:sensor输出的总行数,用来产生HSYNC信号,如1166
sensor1_active_width:sensor输出的水平方向的有效像素,如1920,
sensor1_active_height:sensor输出的有效行数,如1080
video6_used:1 -- 使能,0 -- 没有使用。
video6_width:video输出的宽度,如1920。
video6_height:video输出的高度,如1080。
video6_out_format:1--指YUV420,NV21。
video7_used:1 -- 使能,0 -- 没有使用。
video7_width:video输出的宽度,如1080。
video7_height:video输出的高度,如720.
video7_out_format:1--指YUV420,NV21。
video8_used:1 -- 使能,0 -- 没有使用。
video8_width:video输出的宽度,如640。
video8_height:video输出的高度,如480。
video8_out_format:1--指YUV420,NV21。
video9_used:1 -- 使能,0 -- 没有使用。
video9_width:video输出的宽度,如320。
video9_height:video存储的宽度,如320。
video9_height_r:video输出的高度,如240。
video9_out_format:0--指分离RGB,1--指ARGB。
[out] dev_info: mediactl_lib返回从video的配置文件得到的video信息,具体的解释如下。
video_used:这里是指ISP的pipeline,如果使用就会返回1,否则0。K510支持ISP_F2K/ISP_R2K这两个pipeline,每个pipeline最多支持4个video输出。
video_name[4]:返回的video的名字。f2k的四个video是video2/video3/video4/video5;r2k的四个video是 video6/video7/video8/video9
enable[4]:返回的每个video是否使能,1 -- 使能,0 -- 没有使用。
video_width[4]:返回的每个video的宽度。
video_height[4]:返回的每个video的高度。
video_out_format[4]:返回的每个video的输出图像格式,具体见《video的配置文件》的解释。
具体使用方法如下:
char *video_cfg_file = "video_cfg";
struct video_info dev_info[2]
mediactl_init(video_cfg_file,&dev_info)
0 成功, -1 失败.
关闭media设备及释放申请的share memory内存。
参数:
无
enum isp_pipeline_e {
ISP_F2K_PIPELINE,
ISP_R2K_PIPELINE,
ISP_TOF_PIPELINE
};
int mediactl_set_ae(enum isp_pipeline_e pipeline);
配置sensor的AE值
参数:
ISP_F2K_PIPELINE:配置f2k pipeline的AE。
ISP_R2K_PIPELINE:配置r2k pipeline的AE。
ISP_TOF_PIPELINE:没有使用。
enum isp_modules {
ISP_TPG,
ISP_BLC,
ISP_LSC,
ISP_AE,
ISP_AWB,
ISP_AWB_D65,
ISP_AWB_CCM,
ISP_WDR,
ISP_RGB_GAMMA,
ISP_YUV_GAMMA,
ISP_ADA,
ISP_ADA_SBZ,
ISP_ADA_CCR,
ISP_RGBIR,
ISP_RAW_2DNR,
ISP_YUV_Y_2DNR,
ISP_YUV_UV_2DNR,
ISP_3DNR,
ISP_LTM,
ISP_SHARP,
ISP_CC,
ISP_CTRST,
ISP_LUMA,
ISP_SATURATION,
ISP_LDC,
ISP_AF,
};
unsigned int mediactl_get_isp_modules(enum isp_pipeline_e pipeline,enum isp_modules module);
获取ISP的各模块的使能状态。
参数:
isp_pipeline_e:具体见mediactl_set_ae中的解释。
isp_modules:
ISP_TPG -- Test Pattern Control模块
ISP_BLC -- Black Level Correction模块
ISP_LSC -- Lens Shading Correction模块
ISP_AE -- AUTO Exposure Gain模块
ISP_AWB -- AUTO white balance模块
ISP_AWB_D65 -- AUTO white balance d65模块
ISP_AWB_CCM -- AUTO white balance ccm模块
ISP_WDR -- wide dynamic range模块
ISP_RGB_GAMMA -- rgb gamma模块
ISP_YUV_GAMMA -- yuv gamma模块
ISP_ADA -- Adaptive dynamic range adjust模块
ISP_ADA_SBZ -- Image stabilization模块
ISP_ADA_CCR -- Color correction模块
ISP_RGBIR -- rgbir rectify模块
ISP_RAW_2DNR -- raw域2D降噪模块
ISP_YUV_Y_2DNR -- yuv域2D Y方向降噪模块
ISP_YUV_UV_2DNR -- yuv域2D uv方向降噪模块
ISP_3DNR -- yuv域3D降噪模块
ISP_LTM -- local tone mapping模块
ISP_SHARP -- sharpness模块
ISP_CC -- color correction模块
ISP_CTRST -- contrast adjust模块
ISP_LUMA -- luma adjust模块
ISP_SATURATION -- saturation adjust 模块
ISP_LDC -- lens Distortion Correction模块
ISP_AF -- ATUO FOCUS模块
0 -- 模块没有使能 1 -- 模块使能
修改k510_crb_lp3_v1_2.dts 文件,将
#include "k510_common/camera-imx219x2.dtsi" 替换成
#include "k510_common/camera-imx385.dtsi", 如下图所示
cd k510_buildroot/k510_crb_lp3_v1_2_defconfig
make linux-menuconfig
进入配置界面后,进入下边路径:
Device Drivers --->
Multimedia support --->
Sensors used on soc_camera driver --->
进入目录后,将Sony IMX385 sensor support 选上,两个219 的不选上,如下如:
cd k510_buildroot/k510_crb_lp3_v1_2_defconfig
make linux-rebuild
make riscv-pk-k510-dirclean
make riscv-pk-k510
make
程序放在/app/mediactl_lib
目录下:
v4l2_drm.out
:v4l2和drm联动case,添加了-f 修改输入配置文件的名字, -e 打开isp ae 功能。可以使用-h 查看帮助。
运行v4l2_drm.out
- -e:0 关闭所有ae,1打开 f-2k ae,2打开r-2k ae,3打开所有ae。默认情况下可以不指定-e 就是关闭所有ae。
- 该demo 需要video配置文件及对应的sensor配置文件在当前目录下。
- 该demo通过更改配置文件,可以演示单双摄。
- 该demo演示单摄全屏:./v4l2_drm.out -e 1 -f video_drm_1080x1920.conf
- 该demo演示双摄:./v4l2_drm.out -f video_drm_1920x1080.conf
- 该demo必须保证video_drm_1920x1080.conf,imx219_0.conf及imx219_1.conf三个配置文件存在
- imx385 demo:./v4l2_drm.out -e 1 -f imx385_video_1920x1080.conf
翻译免责声明
为方便客户,Canaan 使用 AI 翻译程序将文本翻译为多种语言,它可能包含错误。我们不保证提供的译文的准确性、可靠性或时效性。对于因依赖已翻译信息的准确性或可靠性而造成的任何损失或损害,Canaan 概不负责。如果不同语言翻译之间存在内容差异,以简体中文版本为准。
如果您要报告翻译错误或不准确的问题,欢迎通过邮件与我们联系。