Skip to content

Latest commit

 

History

History
323 lines (257 loc) · 11.3 KB

K510_V4l2_Developer_Guides.md

File metadata and controls

323 lines (257 loc) · 11.3 KB

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]

1 V4L2 mediactl库

1.1 头文件说明

#include “media_ctl.h”

1.2 API 函数说明

◆ mediactl_init

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 失败.

◆ mediactl_exit

关闭media设备及释放申请的share memory内存。

参数

参数:
无

◆ mediactl_set_ae

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:没有使用。

◆ mediactl_get_isp_modules

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 -- 模块使能 

2 配置imx385 sensor

2.1 修改 设备树

修改k510_crb_lp3_v1_2.dts 文件,将
#include "k510_common/camera-imx219x2.dtsi" 替换成 
#include "k510_common/camera-imx385.dtsi", 如下图所示

ouput.yuv

2.2 修改内核

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 的不选上,如下如: ouput.yuv

2.3 重新编译镜像

cd k510_buildroot/k510_crb_lp3_v1_2_defconfig
make linux-rebuild
make riscv-pk-k510-dirclean
make riscv-pk-k510
make 

3 Demo应用

3.1 v4l2_drm

程序放在/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 概不负责。如果不同语言翻译之间存在内容差异,以简体中文版本为准。

如果您要报告翻译错误或不准确的问题,欢迎通过邮件与我们联系。